[21] | 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.
|
---|