1 | unit SQLite3; |
---|
2 | |
---|
3 | { |
---|
4 | Simplified interface for SQLite. |
---|
5 | Updated for Sqlite 3 by Tim Anderson (tim@itwriting.com) |
---|
6 | Note: NOT COMPLETE for version 3, just minimal functionality |
---|
7 | Adapted from file created by Pablo Pissanetzky (pablo@myhtpc.net) |
---|
8 | which was based on SQLite.pas by Ben Hochstrasser (bhoc@surfeu.ch) |
---|
9 | } |
---|
10 | |
---|
11 | interface |
---|
12 | |
---|
13 | const |
---|
14 | // Return values for sqlite3_exec() and sqlite3_step() |
---|
15 | |
---|
16 | SQLITE_OK = 0; // Successful result |
---|
17 | SQLITE_ERROR = 1; // SQL error or missing database |
---|
18 | SQLITE_INTERNAL = 2; // An internal logic error in SQLite |
---|
19 | SQLITE_PERM = 3 ; // Access permission denied |
---|
20 | SQLITE_ABORT = 4; // Callback routine requested an abort |
---|
21 | SQLITE_BUSY = 5; // The database file is locked |
---|
22 | SQLITE_LOCKED = 6; // A table in the database is locked |
---|
23 | SQLITE_NOMEM = 7; // A malloc() failed |
---|
24 | SQLITE_READONLY = 8; // Attempt to write a readonly database |
---|
25 | SQLITE_INTERRUPT = 9; // Operation terminated by sqlite3_interrupt() |
---|
26 | SQLITE_IOERR = 10; // Some kind of disk I/O error occurred |
---|
27 | SQLITE_CORRUPT = 11; // The database disk image is malformed |
---|
28 | SQLITE_NOTFOUND = 12; // (Internal Only) Table or record not found |
---|
29 | SQLITE_FULL = 13; // Insertion failed because database is full |
---|
30 | SQLITE_CANTOPEN = 14; // Unable to open the database file |
---|
31 | SQLITE_PROTOCOL = 15; // Database lock protocol error |
---|
32 | SQLITE_EMPTY = 16; // Database is empty |
---|
33 | SQLITE_SCHEMA = 17; // The database schema changed |
---|
34 | SQLITE_TOOBIG = 18; // Too much data for one row of a table |
---|
35 | SQLITE_CONSTRAINT = 19; // Abort due to contraint violation |
---|
36 | SQLITE_MISMATCH = 20; // Data type mismatch |
---|
37 | SQLITE_MISUSE = 21; // Library used incorrectly |
---|
38 | SQLITE_NOLFS = 22; // Uses OS features not supported on host |
---|
39 | SQLITE_AUTH = 23; // Authorization denied |
---|
40 | SQLITE_FORMAT = 24; // Auxiliary database format error |
---|
41 | SQLITE_RANGE = 25; // 2nd parameter to sqlite3_bind out of range |
---|
42 | SQLITE_NOTADB = 26; // File opened that is not a database file |
---|
43 | SQLITE_ROW = 100; // sqlite3_step() has another row ready |
---|
44 | SQLITE_DONE = 101; // sqlite3_step() has finished executing |
---|
45 | |
---|
46 | SQLITE_INTEGER = 1; |
---|
47 | SQLITE_FLOAT = 2; |
---|
48 | SQLITE_TEXT = 3; |
---|
49 | SQLITE_BLOB = 4; |
---|
50 | SQLITE_NULL = 5; |
---|
51 | |
---|
52 | type |
---|
53 | TSQLiteDB = Pointer; |
---|
54 | TSQLiteResult = ^PChar; |
---|
55 | TSQLiteStmt = Pointer; |
---|
56 | |
---|
57 | function SQLite3_Open (dbname: PChar; var db: TSqliteDB): integer; cdecl; external 'sqlite3.dll' name 'sqlite3_open'; |
---|
58 | function SQLite3_Close (db: TSQLiteDB): integer; cdecl; external 'sqlite3.dll' name 'sqlite3_close'; |
---|
59 | function SQLite3_Exec (db: TSQLiteDB; SQLStatement: PChar; CallbackPtr: Pointer; Sender: TObject; var ErrMsg: PChar): integer; cdecl; external 'sqlite3.dll' name 'sqlite3_exec'; |
---|
60 | function SQLite3_Version (): PChar; cdecl; external 'sqlite3.dll' name 'sqlite3_libversion'; |
---|
61 | function SQLite3_ErrMsg (db: TSQLiteDB): PChar; cdecl; external 'sqlite3.dll' name 'sqlite3_errmsg'; |
---|
62 | function SQLite3_ErrCode (db: TSQLiteDB): integer; cdecl; external 'sqlite3.dll' name 'sqlite3_errcode'; |
---|
63 | procedure SQlite3_Free (P: PChar); cdecl; external 'sqlite3.dll' name 'sqlite3_free'; |
---|
64 | function SQLite3_GetTable (db: TSQLiteDB; SQLStatement: PChar; var ResultPtr: TSQLiteResult; var RowCount: Cardinal; var ColCount: Cardinal; var ErrMsg: PChar): integer; cdecl; external 'sqlite3.dll' name 'sqlite3_get_table'; |
---|
65 | procedure SQLite3_FreeTable (Table:TSQLiteResult ); cdecl; external 'sqlite3.dll' name 'sqlite3_free_table'; |
---|
66 | function SQLite3_Complete (P: PChar): boolean; cdecl; external 'sqlite3.dll' name 'sqlite3_complete'; |
---|
67 | function SQLite3_LastInsertRowID(db: TSQLiteDB): int64; cdecl; external 'sqlite3.dll' name 'sqlite3_last_insert_rowid'; |
---|
68 | procedure SQLite3_Interrupt (db: TSQLiteDB); cdecl; external 'sqlite3.dll' name 'sqlite3_interrupt'; |
---|
69 | procedure SQLite3_BusyHandler (db: TSQLiteDB; CallbackPtr: Pointer; Sender: TObject); cdecl; external 'sqlite3.dll' name'sqlite3_busy_handler' ; |
---|
70 | procedure SQLite3_BusyTimeout (db: TSQLiteDB; TimeOut: integer); cdecl; external 'sqlite3.dll' name 'sqlite3_busy_timeout'; |
---|
71 | function SQLite3_Changes (db: TSQLiteDB): integer; cdecl; external 'sqlite3.dll' name 'sqlite3_changes'; |
---|
72 | function SQLite3_TotalChanges (db: TSQLiteDB): integer; cdecl; external 'sqlite3.dll' name 'sqlite3_total_changes'; |
---|
73 | function SQLite3_Prepare (db: TSQLiteDB; SQLStatement: PChar; nBytes: integer; var hStmt: TSqliteStmt; var pzTail: PChar): integer; cdecl; external 'sqlite3.dll' name 'sqlite3_prepare'; |
---|
74 | function SQLite3_ColumnCount (hStmt: TSqliteStmt): integer; cdecl; external 'sqlite3.dll' name 'sqlite3_column_count'; |
---|
75 | function Sqlite3_ColumnName (hStmt: TSqliteStmt; ColNum: integer): pchar; cdecl; external 'sqlite3.dll' name 'sqlite3_column_name'; |
---|
76 | function Sqlite3_ColumnDeclType (hStmt: TSqliteStmt; ColNum: integer): pchar; cdecl; external 'sqlite3.dll' name 'sqlite3_column_decltype'; |
---|
77 | function Sqlite3_Step (hStmt: TSqliteStmt): integer; cdecl; external 'sqlite3.dll' name 'sqlite3_step'; |
---|
78 | function SQLite3_DataCount (hStmt: TSqliteStmt): integer; cdecl; external 'sqlite3.dll' name 'sqlite3_data_count'; |
---|
79 | |
---|
80 | function Sqlite3_ColumnBlob (hStmt: TSqliteStmt; ColNum: integer):pointer; cdecl; external 'sqlite3.dll' name 'sqlite3_column_blob'; |
---|
81 | function Sqlite3_ColumnBytes (hStmt: TSqliteStmt; ColNum: integer): integer; cdecl; external 'sqlite3.dll' name 'sqlite3_column_bytes'; |
---|
82 | function Sqlite3_ColumnDouble (hStmt: TSqliteStmt; ColNum: integer): double; cdecl; external 'sqlite3.dll' name 'sqlite3_column_double'; |
---|
83 | function Sqlite3_ColumnInt (hStmt: TSqliteStmt; ColNum: integer): integer; cdecl; external 'sqlite3.dll' name 'sqlite3_column_int'; |
---|
84 | function Sqlite3_ColumnText (hStmt: TSqliteStmt; ColNum: integer): pchar; cdecl; external 'sqlite3.dll' name 'sqlite3_column_text'; |
---|
85 | function Sqlite3_ColumnType (hStmt: TSqliteStmt; ColNum: integer): integer; cdecl; external 'sqlite3.dll' name 'sqlite3_column_type'; |
---|
86 | // function Sqlite3_ColumnInt64 (hStmt: TSqliteStmt; ColNum: integer): SqliteInt64; cdecl; external 'sqlite3.dll' name 'sqlite3_column_int64'; |
---|
87 | function SQLite3_Finalize (hStmt: TSqliteStmt): integer; cdecl; external 'sqlite3.dll' name 'sqlite3_finalize'; |
---|
88 | function SQLite3_Reset (hStmt: TSqliteStmt): integer; cdecl; external 'sqlite3.dll' name 'sqlite3_reset'; |
---|
89 | |
---|
90 | // |
---|
91 | // In the SQL strings input to sqlite3_prepare() and sqlite3_prepare16(), |
---|
92 | // one or more literals can be replace by a wildcard "?" or ":N:" where |
---|
93 | // N is an integer. These value of these wildcard literals can be set |
---|
94 | // using the routines listed below. |
---|
95 | // |
---|
96 | // In every case, the first parameter is a pointer to the sqlite3_stmt |
---|
97 | // structure returned from sqlite3_prepare(). The second parameter is the |
---|
98 | // index of the wildcard. The first "?" has an index of 1. ":N:" wildcards |
---|
99 | // use the index N. |
---|
100 | // |
---|
101 | // The fifth parameter to sqlite3_bind_blob(), sqlite3_bind_text(), and |
---|
102 | //sqlite3_bind_text16() is a destructor used to dispose of the BLOB or |
---|
103 | //text after SQLite has finished with it. If the fifth argument is the |
---|
104 | // special value SQLITE_STATIC, then the library assumes that the information |
---|
105 | // is in static, unmanaged space and does not need to be freed. If the |
---|
106 | // fifth argument has the value SQLITE_TRANSIENT, then SQLite makes its |
---|
107 | // own private copy of the data. |
---|
108 | // |
---|
109 | // The sqlite3_bind_* routine must be called before sqlite3_step() after |
---|
110 | // an sqlite3_prepare() or sqlite3_reset(). Unbound wildcards are interpreted |
---|
111 | // as NULL. |
---|
112 | // |
---|
113 | |
---|
114 | function SQLite3_BindBlob(hStmt: TSqliteStmt; ParamNum: integer; |
---|
115 | ptrData: pointer; numBytes: integer; ptrDestructor: pointer): integer; |
---|
116 | cdecl; external 'sqlite3.dll' name 'sqlite3_bind_blob'; |
---|
117 | |
---|
118 | implementation |
---|
119 | |
---|
120 | end. |
---|