with Ada.Finalization; with Interfaces.c; use Interfaces.c; package Sqlite is type Statement is tagged private; type Statement_Status is ( Row, Done, Busy ); procedure Close (Stmt : in out Statement); function Step (Stmt : in out Statement) return Statement_Status; function Column (Stmt : in out Statement; Col : Int) return Int; function Column (Stmt : in out Statement; Col : Int) return String; type Database_Open is ( ReadOnly, ReadWrite ); type Database_Mutex is ( Disabled, No_Mutex, Full_Mutex ); type Database_Cache is ( Disabled, Shared_Cache, Private_Cache ); type Database is tagged private; procedure Open (Db : in out Database; Filename : String); procedure Open ( Db : in out Database; Filename : String; RW : Database_Open; Create : Boolean; Filename_URI : Boolean := False; Open_In_Memory : Boolean := False; Mutex : Database_Mutex := Disabled; Cache : Database_Cache := Disabled; Expres_Code : Boolean := False; No_Follow : Boolean := False); function Prepare ( Db : in out Database'Class; SQL_Statement : String ) return Statement; procedure Close (Db : in out Database); private type Statement_Record_Int is null record; type Statement_Int is access all Statement_Record_Int; type Statement is tagged record Internal : Statement_Int := null; end record; type Database_Record_Int is null record; type Database_Int is access all Database_Record_Int; type Database_Version is (v1, v2); type Database is tagged record Internal : Database_Int; Version : Database_Version; end record; type Bit_10 is mod 2**10 with Size => 10; type Database_Int_Flags is record Open_ReadOnly : Boolean := False; Open_ReadWrite : Boolean := False; Open_Create : Boolean := False; Open_DeleteOnClose : Boolean := False; Open_Exclusive : Boolean := False; Open_AutoProxy : Boolean := False; Open_URI : Boolean := False; Open_Memory : Boolean := False; Open_Main_DB : Boolean := False; Open_Temp_DB : Boolean := False; Open_Transient_DB : Boolean := False; Open_Main_Journal : Boolean := False; Open_Temp_Journal : Boolean := False; Open_Sub_Journal : Boolean := False; Open_Super_Journal : Boolean := False; Open_NoMutex : Boolean := False; Open_FullMutex : Boolean := False; Open_SharedCache : Boolean := False; Open_PrivateCache : Boolean := False; Open_WAL : Boolean := False; Open_NoFollow : Boolean := False; Open_ExpresCode : Boolean := False; Reserved : Bit_10 := 0; end record with Size => 32; for Database_Int_Flags use record Open_ReadOnly at 0 range 0 .. 0; Open_ReadWrite at 0 range 1 .. 1; Open_Create at 0 range 2 .. 2; Open_DeleteOnClose at 0 range 3 .. 3; Open_Exclusive at 0 range 4 .. 4; Open_AutoProxy at 0 range 5 .. 5; Open_URI at 0 range 6 .. 6; Open_Memory at 0 range 7 .. 7; Open_Main_DB at 0 range 8 .. 8; Open_Temp_DB at 0 range 9 .. 9; Open_Transient_DB at 0 range 10 .. 10; Open_Main_Journal at 0 range 11 .. 11; Open_Temp_Journal at 0 range 12 .. 12; Open_Sub_Journal at 0 range 13 .. 13; Open_Super_Journal at 0 range 14 .. 14; Open_NoMutex at 0 range 15 .. 15; Open_FullMutex at 0 range 16 .. 16; Open_SharedCache at 0 range 17 .. 17; Open_PrivateCache at 0 range 18 .. 18; Open_WAL at 0 range 19 .. 19; Open_NoFollow at 0 range 20 .. 20; Open_ExpresCode at 0 range 21 .. 21; Reserved at 0 range 22 .. 31; end record; type Error_Codes is ( SQLITE_OK, SQLITE_ERROR, SQLITE_INTERNAL, SQLITE_PERM, SQLITE_ABORT, SQLITE_BUSY, SQLITE_LOCKED, SQLITE_NOMEM, SQLITE_READONLY, SQLITE_INTERRUPT, SQLITE_IOERR, SQLITE_CORRUPT, SQLITE_NOTFOUND, SQLITE_FULL, SQLITE_CANTOPEN, SQLITE_PROTOCOL, SQLITE_EMPTY, SQLITE_SCHEMA, SQLITE_TOOBIG, SQLITE_CONSTRAINT, SQLITE_MISMATCH, SQLITE_MISUSE, SQLITE_NOLFS, SQLITE_AUTH, SQLITE_FORMAT, SQLITE_RANGE, SQLITE_NOTADB, SQLITE_NOTICE, SQLITE_WARNING, SQLITE_ROW, SQLITE_DONE, SQLITE_OK_LOAD_PERMANENTLY, SQLITE_ERROR_MISSING_COLLSEQ, SQLITE_BUSY_RECOVERY, SQLITE_LOCKED_SHAREDCACHE, SQLITE_READONLY_RECOVERY, SQLITE_IOERR_READ, SQLITE_CORRUPT_VTAB, SQLITE_CANTOPEN_NOTEMPDIR, SQLITE_CONSTRAINT_CHECK, SQLITE_AUTH_USER, SQLITE_NOTICE_RECOVER_WAL, SQLITE_WARNING_AUTOINDEX, SQLITE_ERROR_ENTRY, SQLITE_ABORT_ROLLBACK, SQLITE_BUSY_SNAPSHOT, SQLITE_LOCKED_VTAB, SQLITE_READONLY_CANTLOCK, SQLITE_IOERR_SHORT_READ, SQLITE_CORRUPT_SEQUENCE, SQLITE_CANTOPEN_ISDIR, SQLITE_CONSTRAINT_COMMITHOOK, SQLITE_NOTICE_RECOVER_ROLLBACK, SQLITE_ERROR_SNAPSHOT, SQLITE_BUSY_TIMEOUT, SQLITE_READONLY_ROLLBACK, SQLITE_IOERR_WRITE, SQLITE_CORRUPT_INDEX, SQLITE_CANTOPEN_FULLPATH, SQLITE_CONSTRAINT_FOREIGNKEY, SQLITE_READONLY_DBMOVED, SQLITE_IOERR_FSYNC, SQLITE_CANTOPEN_CONVPATH, SQLITE_CONSTRAINT_FUNCTION, SQLITE_READONLY_CANTINIT, SQLITE_IOERR_DIR_FSYNC, SQLITE_CANTOPEN_DIRTYWAL, SQLITE_CONSTRAINT_NOTNULL, SQLITE_READONLY_DIRECTORY, SQLITE_IOERR_TRUNCATE, SQLITE_CANTOPEN_SYMLINK, SQLITE_CONSTRAINT_PRIMARYKEY, SQLITE_IOERR_FSTAT, SQLITE_CONSTRAINT_TRIGGER, SQLITE_IOERR_UNLOCK, SQLITE_CONSTRAINT_UNIQUE, SQLITE_IOERR_RDLOCK, SQLITE_CONSTRAINT_VTAB, SQLITE_IOERR_DELETE, SQLITE_CONSTRAINT_ROWID, SQLITE_IOERR_BLOCKED, SQLITE_CONSTRAINT_PINNED, SQLITE_IOERR_NOMEM, SQLITE_CONSTRAINT_DATATYPE, SQLITE_IOERR_ACCESS, SQLITE_IOERR_CHECKRESERVEDLOCK, SQLITE_IOERR_LOCK, SQLITE_IOERR_CLOSE, SQLITE_IOERR_DIR_CLOSE, SQLITE_IOERR_SHMOPEN, SQLITE_IOERR_SHMSIZE, SQLITE_IOERR_SHMLOCK, SQLITE_IOERR_SHMMAP, SQLITE_IOERR_SEEK, SQLITE_IOERR_DELETE_NOENT, SQLITE_IOERR_MMAP, SQLITE_IOERR_GETTEMPPATH, SQLITE_IOERR_CONVPATH, SQLITE_IOERR_VNODE, SQLITE_IOERR_AUTH, SQLITE_IOERR_BEGIN_ATOMIC, SQLITE_IOERR_COMMIT_ATOMIC, SQLITE_IOERR_ROLLBACK_ATOMIC, SQLITE_IOERR_DATA, SQLITE_IOERR_CORRUPTFS) with Convention => C, Size => 32; for Error_Codes use ( SQLITE_OK => 0, SQLITE_ERROR => 1, SQLITE_INTERNAL => 2, SQLITE_PERM => 3, SQLITE_ABORT => 4, SQLITE_BUSY => 5, SQLITE_LOCKED => 6, SQLITE_NOMEM => 7, SQLITE_READONLY => 8, SQLITE_INTERRUPT => 9, SQLITE_IOERR => 10, SQLITE_CORRUPT => 11, SQLITE_NOTFOUND => 12, SQLITE_FULL => 13, SQLITE_CANTOPEN => 14, SQLITE_PROTOCOL => 15, SQLITE_EMPTY => 16, SQLITE_SCHEMA => 17, SQLITE_TOOBIG => 18, SQLITE_CONSTRAINT => 19, SQLITE_MISMATCH => 20, SQLITE_MISUSE => 21, SQLITE_NOLFS => 22, SQLITE_AUTH => 23, SQLITE_FORMAT => 24, SQLITE_RANGE => 25, SQLITE_NOTADB => 26, SQLITE_NOTICE => 27, SQLITE_WARNING => 28, SQLITE_ROW => 100, SQLITE_DONE => 101, SQLITE_OK_LOAD_PERMANENTLY => 256, SQLITE_ERROR_MISSING_COLLSEQ => 257, SQLITE_BUSY_RECOVERY => 261, SQLITE_LOCKED_SHAREDCACHE => 262, SQLITE_READONLY_RECOVERY => 264, SQLITE_IOERR_READ => 266, SQLITE_CORRUPT_VTAB => 267, SQLITE_CANTOPEN_NOTEMPDIR => 270, SQLITE_CONSTRAINT_CHECK => 275, SQLITE_AUTH_USER => 279, SQLITE_NOTICE_RECOVER_WAL => 283, SQLITE_WARNING_AUTOINDEX => 284, SQLITE_ERROR_ENTRY => 513, SQLITE_ABORT_ROLLBACK => 516, SQLITE_BUSY_SNAPSHOT => 517, SQLITE_LOCKED_VTAB => 518, SQLITE_READONLY_CANTLOCK => 520, SQLITE_IOERR_SHORT_READ => 522, SQLITE_CORRUPT_SEQUENCE => 523, SQLITE_CANTOPEN_ISDIR => 526, SQLITE_CONSTRAINT_COMMITHOOK => 531, SQLITE_NOTICE_RECOVER_ROLLBACK => 539, SQLITE_ERROR_SNAPSHOT => 769, SQLITE_BUSY_TIMEOUT => 773, SQLITE_READONLY_ROLLBACK => 776, SQLITE_IOERR_WRITE => 778, SQLITE_CORRUPT_INDEX => 779, SQLITE_CANTOPEN_FULLPATH => 782, SQLITE_CONSTRAINT_FOREIGNKEY => 787, SQLITE_READONLY_DBMOVED => 1032, SQLITE_IOERR_FSYNC => 1034, SQLITE_CANTOPEN_CONVPATH => 1038, SQLITE_CONSTRAINT_FUNCTION => 1043, SQLITE_READONLY_CANTINIT => 1288, SQLITE_IOERR_DIR_FSYNC => 1290, SQLITE_CANTOPEN_DIRTYWAL => 1294, SQLITE_CONSTRAINT_NOTNULL => 1299, SQLITE_READONLY_DIRECTORY => 1544, SQLITE_IOERR_TRUNCATE => 1546, SQLITE_CANTOPEN_SYMLINK => 1550, SQLITE_CONSTRAINT_PRIMARYKEY => 1555, SQLITE_IOERR_FSTAT => 1802, SQLITE_CONSTRAINT_TRIGGER => 1811, SQLITE_IOERR_UNLOCK => 2058, SQLITE_CONSTRAINT_UNIQUE => 2067, SQLITE_IOERR_RDLOCK => 2314, SQLITE_CONSTRAINT_VTAB => 2323, SQLITE_IOERR_DELETE => 2570, SQLITE_CONSTRAINT_ROWID => 2579, SQLITE_IOERR_BLOCKED => 2826, SQLITE_CONSTRAINT_PINNED => 2835, SQLITE_IOERR_NOMEM => 3082, SQLITE_CONSTRAINT_DATATYPE => 3091, SQLITE_IOERR_ACCESS => 3338, SQLITE_IOERR_CHECKRESERVEDLOCK => 3594, SQLITE_IOERR_LOCK => 3850, SQLITE_IOERR_CLOSE => 4106, SQLITE_IOERR_DIR_CLOSE => 4362, SQLITE_IOERR_SHMOPEN => 4618, SQLITE_IOERR_SHMSIZE => 4874, SQLITE_IOERR_SHMLOCK => 5130, SQLITE_IOERR_SHMMAP => 5386, SQLITE_IOERR_SEEK => 5642, SQLITE_IOERR_DELETE_NOENT => 5898, SQLITE_IOERR_MMAP => 6154, SQLITE_IOERR_GETTEMPPATH => 6410, SQLITE_IOERR_CONVPATH => 6666, SQLITE_IOERR_VNODE => 6922, SQLITE_IOERR_AUTH => 7178, SQLITE_IOERR_BEGIN_ATOMIC => 7434, SQLITE_IOERR_COMMIT_ATOMIC => 7690, SQLITE_IOERR_ROLLBACK_ATOMIC => 7946, SQLITE_IOERR_DATA => 8202, SQLITE_IOERR_CORRUPTFS => 8458 ); end Sqlite;