Files
HeidiSQL/source/dbstructures.sqlite.pas

355 lines
14 KiB
ObjectPascal

unit dbstructures.sqlite;
interface
uses
dbstructures;
const
{ SQLite Result Codes
result code definitions
Many SQLite functions return an integer result code from the set shown
here in order to indicate success or failure.
New error codes may be added in future versions of SQLite.
See also: [extended result code definitions]
}
SQLITE_OK = 0; // Successful result
// beginning-of-error-codes
SQLITE_ERROR = 1; // Generic error
SQLITE_INTERNAL = 2; // Internal logic error in SQLite
SQLITE_PERM = 3; // Access permission denied
SQLITE_ABORT = 4; // Callback routine requested an abort
SQLITE_BUSY = 5; // The database file is locked
SQLITE_LOCKED = 6; // A table in the database is locked
SQLITE_NOMEM = 7; // A malloc() failed
SQLITE_READONLY = 8; // Attempt to write a readonly database
SQLITE_INTERRUPT = 9; // Operation terminated by sqlite3_interrupt()*/
SQLITE_IOERR = 10; // Some kind of disk I/O error occurred
SQLITE_CORRUPT = 11; // The database disk image is malformed
SQLITE_NOTFOUND = 12; // Unknown opcode in sqlite3_file_control()
SQLITE_FULL = 13; // Insertion failed because database is full
SQLITE_CANTOPEN = 14; // Unable to open the database file
SQLITE_PROTOCOL = 15; // Database lock protocol error
SQLITE_EMPTY = 16; // Internal use only
SQLITE_SCHEMA = 17; // The database schema changed
SQLITE_TOOBIG = 18; // String or BLOB exceeds size limit
SQLITE_CONSTRAINT = 19; // Abort due to constraint violation
SQLITE_MISMATCH = 20; // Data type mismatch
SQLITE_MISUSE = 21; // Library used incorrectly
SQLITE_NOLFS = 22; // Uses OS features not supported on host
SQLITE_AUTH = 23; // Authorization denied
SQLITE_FORMAT = 24; // Not used
SQLITE_RANGE = 25; // 2nd parameter to sqlite3_bind out of range
SQLITE_NOTADB = 26; // File opened that is not a database file
SQLITE_NOTICE = 27; // Notifications from sqlite3_log()
SQLITE_WARNING = 28; // Warnings from sqlite3_log()
SQLITE_ROW = 100; // sqlite3_step() has another row ready
SQLITE_DONE = 101; // sqlite3_step() has finished executing
{ SQLite Flags
These constants define various flags that can be passed into
"prepFlags" parameter of the [sqlite3_prepare_v3()] and
[sqlite3_prepare16_v3()] interfaces.
New flags may be added in future releases of SQLite.
}
SQLITE_PREPARE_PERSISTENT = $01; // prepared statement will be retained for a long time and probably reused many times
SQLITE_PREPARE_NORMALIZE = $02; // no-op
SQLITE_PREPARE_NO_VTAB = $04; // return an error (error code SQLITE_ERROR) if the statement uses any virtual tables
{ SQLite Fundamental Datatypes
Every value in SQLite has one of five fundamental datatypes:
64-bit signed integer
64-bit IEEE floating point number
string
BLOB
NULL
}
SQLITE_INTEGER = 1;
SQLITE_FLOAT = 2;
SQLITE_BLOB = 4;
SQLITE_NULL = 5;
SQLITE_TEXT = 3;
SQLITE3_TEXT = 3;
{ CAPI3REF: Database Connection Configuration Options
These constants are the available integer configuration options that
can be passed as the second argument to the [sqlite3_db_config()] interface.
}
SQLITE_DBCONFIG_MAINDBNAME = 1000; // const char*
SQLITE_DBCONFIG_LOOKASIDE = 1001; // void* int int
SQLITE_DBCONFIG_ENABLE_FKEY = 1002; // int int*
SQLITE_DBCONFIG_ENABLE_TRIGGER = 1003; // int int*
SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER = 1004; // int int*
SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION = 1005; // int int*
SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE = 1006; // int int*
SQLITE_DBCONFIG_ENABLE_QPSG = 1007; // int int*
SQLITE_DBCONFIG_TRIGGER_EQP = 1008; // int int*
SQLITE_DBCONFIG_RESET_DATABASE = 1009; // int int*
SQLITE_DBCONFIG_DEFENSIVE = 1010; // int int*
SQLITE_DBCONFIG_WRITABLE_SCHEMA = 1011; // int int*
SQLITE_DBCONFIG_LEGACY_ALTER_TABLE = 1012; // int int*
SQLITE_DBCONFIG_DQS_DML = 1013; // int int*
SQLITE_DBCONFIG_DQS_DDL = 1014; // int int*
SQLITE_DBCONFIG_ENABLE_VIEW = 1015; // int int*
SQLITE_DBCONFIG_MAX = 1015; // Largest DBCONFIG
type
Psqlite3 = Pointer;
Psqlite3_stmt = Pointer;
TSQLiteCollationNeededCallback = procedure(userData: Pointer; ppDb:Psqlite3; eTextRep: Integer; zName: PAnsiChar); cdecl;
TSQLiteCollation = function(userData: Pointer; lenA: Integer; strA: PAnsiChar; lenB: Integer; strB: PAnsiChar): Integer; cdecl;
TSQLiteLib = class(TDbLib)
sqlite3_open: function(const filename: PAnsiChar; var ppDb: Psqlite3): Integer; cdecl;
sqlite3_libversion: function(): PAnsiChar; cdecl;
sqlite3_close: function(ppDb: Psqlite3): Integer; cdecl;
sqlite3_db_config: function (ppDb: Psqlite3; op: Integer): Integer; cdecl varargs;
sqlite3_enable_load_extension: function(ppDb: Psqlite3; onoff: Integer): Integer; cdecl;
sqlite3_errmsg: function(ppDb: Psqlite3): PAnsiChar; cdecl;
sqlite3_errcode: function(ppDb: Psqlite3): Integer; cdecl;
sqlite3_prepare_v2: function(ppDb: Psqlite3; zSql: PAnsiChar; nByte: Integer; var ppStmt: Psqlite3_stmt; var pzTail: PAnsiChar): Integer; cdecl;
sqlite3_prepare_v3: function(ppDb: Psqlite3; zSql: PAnsiChar; nByte: Integer; prepFlags: Cardinal; var ppStmt: Psqlite3_stmt; var pzTail: PAnsiChar): Integer; cdecl;
sqlite3_exec: function(ppDb: Psqlite3; sql: PAnsiChar; callback: Integer; callvack_arg: Pointer; errmsg: PAnsiChar): Integer; cdecl;
sqlite3_finalize: function(pStmt: Psqlite3_stmt): Integer; cdecl;
sqlite3_step: function(pStmt: Psqlite3_stmt): Integer; cdecl;
sqlite3_reset: function(pStmt: Psqlite3_stmt): Integer; cdecl;
sqlite3_total_changes: function(ppDb: Psqlite3): Integer; cdecl;
sqlite3_column_text: function(pStmt: Psqlite3_stmt; iCol: Integer): PAnsiChar; cdecl;
sqlite3_column_count: function(pStmt: Psqlite3_stmt): Integer; cdecl;
sqlite3_column_name: function(pStmt: Psqlite3_stmt; N: Integer): PAnsiChar; cdecl;
sqlite3_column_decltype: function(pStmt: Psqlite3_stmt; N: Integer): PAnsiChar; cdecl;
sqlite3_column_database_name: function(pStmt: Psqlite3_stmt; N: Integer): PAnsiChar; cdecl;
sqlite3_column_table_name: function(pStmt: Psqlite3_stmt; N: Integer): PAnsiChar; cdecl;
sqlite3_column_origin_name: function(pStmt: Psqlite3_stmt; N: Integer): PAnsiChar; cdecl;
sqlite3_column_type: function(pStmt: Psqlite3_stmt; iCol: Integer): Integer; cdecl;
sqlite3_next_stmt: function(ppDb: Psqlite3; pStmt: Psqlite3_stmt): Psqlite3_stmt; cdecl;
sqlite3_table_column_metadata: function(ppDb: Psqlite3;
zDbName, zTableName, zColumnName: PAnsiChar;
var pzDataType, pzCollSeq: PAnsiChar; var pNotNull, pPrimaryKey, pAutoinc: Integer
): Integer; cdecl;
sqlite3_collation_needed: function(ppDb: Psqlite3; userData: Pointer; Func: TSQLiteCollationNeededCallback): Integer; cdecl;
sqlite3_create_collation: function(ppDb: Psqlite3; const zName: PAnsiChar; eTextRep: Integer; pArg: Pointer; xCompare: TSQLiteCollation): Integer; cdecl;
protected
procedure AssignProcedures; override;
end;
var
SQLiteDatatypes: Array[0..15] of TDBDatatype =
(
(
Index: dbdtUnknown;
Name: 'UNKNOWN';
Description: 'Unknown data type';
HasLength: False;
RequiresLength: False;
HasBinary: False;
HasDefault: False;
LoadPart: False;
Category: dtcOther;
),
(
Index: dbdtTinyint;
Name: 'TINYINT';
Names: 'INT2|BOOLEAN|BOOL';
HasLength: False;
RequiresLength: False;
HasBinary: False;
HasDefault: False;
LoadPart: False;
Category: dtcInteger;
),
(
Index: dbdtInt;
Name: 'INTEGER';
Names: 'INT|MEDIUMINT|INT8';
HasLength: False;
RequiresLength: False;
HasBinary: False;
HasDefault: True;
LoadPart: False;
Category: dtcInteger;
),
(
Index: dbdtUint;
Name: 'UINT';
Names: 'UINT';
HasLength: False;
RequiresLength: False;
HasBinary: False;
HasDefault: True;
LoadPart: False;
Category: dtcInteger;
),
(
Index: dbdtBigint;
Name: 'BIGINT';
Names: 'UNSIGNED BIG INT';
HasLength: False;
RequiresLength: False;
HasBinary: False;
HasDefault: True;
LoadPart: False;
Category: dtcInteger;
),
(
Index: dbdtChar;
Name: 'CHAR';
Names: 'CHARACTER|CHAR|NCHAR|NATIVE CHARACTER';
HasLength: True;
RequiresLength: True;
HasBinary: False;
HasDefault: True;
LoadPart: True;
DefLengthSet: '50';
Category: dtcText;
),
(
Index: dbdtVarchar;
Name: 'VARCHAR';
Names: 'VARCHAR|VARYING CHARACTER|NVARCHAR|CHARACTER|CHAR|NCHAR|NATIVE CHARACTER';
HasLength: True;
RequiresLength: True;
HasBinary: False;
HasDefault: True;
LoadPart: True;
DefLengthSet: '50';
Category: dtcText;
),
(
Index: dbdtText;
Name: 'TEXT';
Names: 'CLOB';
HasLength: False;
RequiresLength: False;
HasBinary: False;
HasDefault: True;
LoadPart: True;
Category: dtcText;
),
(
Index: dbdtUniqueidentifier;
Name: 'UNIQUEIDENTIFIER';
HasLength: False;
RequiresLength: False;
HasBinary: False;
HasDefault: True;
LoadPart: False;
Category: dtcBinary;
),
(
Index: dbdtBlob;
Name: 'BLOB';
HasLength: False;
RequiresLength: False;
HasBinary: False;
HasDefault: False;
LoadPart: True;
Category: dtcBinary;
),
(
Index: dbdtReal;
Name: 'REAL';
Names: 'REAL|NUMERIC|DOUBLE|DOUBLE PRECISION|FLOAT|DECIMAL';
HasLength: False;
RequiresLength: False;
HasBinary: False;
HasDefault: True;
LoadPart: False;
Category: dtcReal;
),
(
Index: dbdtDate;
Name: 'DATE';
HasLength: False;
RequiresLength: False;
HasBinary: False;
HasDefault: True;
LoadPart: False;
Category: dtcTemporal;
),
(
Index: dbdtTime;
Name: 'TIME';
HasLength: False;
RequiresLength: False;
HasBinary: False;
HasDefault: True;
LoadPart: False;
Category: dtcTemporal;
),
(
Index: dbdtDatetime;
Name: 'DATETIME';
HasLength: False;
RequiresLength: False;
HasBinary: False;
HasDefault: True;
LoadPart: False;
Category: dtcTemporal;
),
(
Index: dbdtEnum;
Name: 'ENUM';
HasLength: True;
RequiresLength: True;
HasBinary: False;
HasDefault: True;
LoadPart: False;
DefLengthSet: '''Y'',''N''';
Category: dtcOther;
),
(
Index: dbdtSet;
Name: 'SET';
HasLength: True;
RequiresLength: True;
HasBinary: False;
HasDefault: True;
LoadPart: False;
DefLengthSet: '''Value A'',''Value B''';
Category: dtcOther;
)
);
implementation
procedure TSQLiteLib.AssignProcedures;
begin
AssignProc(@sqlite3_open, 'sqlite3_open');
AssignProc(@sqlite3_libversion, 'sqlite3_libversion');
AssignProc(@sqlite3_close, 'sqlite3_close');
AssignProc(@sqlite3_db_config, 'sqlite3_db_config');
AssignProc(@sqlite3_enable_load_extension, 'sqlite3_enable_load_extension');
AssignProc(@sqlite3_errmsg, 'sqlite3_errmsg');
AssignProc(@sqlite3_errcode, 'sqlite3_errcode');
AssignProc(@sqlite3_prepare_v2, 'sqlite3_prepare_v2');
AssignProc(@sqlite3_prepare_v3, 'sqlite3_prepare_v3');
AssignProc(@sqlite3_exec, 'sqlite3_exec');
AssignProc(@sqlite3_finalize, 'sqlite3_finalize');
AssignProc(@sqlite3_step, 'sqlite3_step');
AssignProc(@sqlite3_reset, 'sqlite3_reset');
AssignProc(@sqlite3_total_changes, 'sqlite3_total_changes');
AssignProc(@sqlite3_column_text, 'sqlite3_column_text');
AssignProc(@sqlite3_column_count, 'sqlite3_column_count');
AssignProc(@sqlite3_column_name, 'sqlite3_column_name');
AssignProc(@sqlite3_column_decltype, 'sqlite3_column_decltype');
AssignProc(@sqlite3_column_database_name, 'sqlite3_column_database_name');
AssignProc(@sqlite3_column_table_name, 'sqlite3_column_table_name');
AssignProc(@sqlite3_column_origin_name, 'sqlite3_column_origin_name');
AssignProc(@sqlite3_column_type, 'sqlite3_column_type');
AssignProc(@sqlite3_next_stmt, 'sqlite3_next_stmt');
AssignProc(@sqlite3_table_column_metadata, 'sqlite3_table_column_metadata');
AssignProc(@sqlite3_collation_needed, 'sqlite3_collation_needed');
AssignProc(@sqlite3_create_collation, 'sqlite3_create_collation');
end;
end.