From 39da07a2cb584866efff18b0265f02991a31bd2b Mon Sep 17 00:00:00 2001 From: Folkert Kevelam Date: Sat, 26 Jul 2025 22:38:24 +0200 Subject: [PATCH] Add sqlite error codes --- Source/Spec/sqlite.ads | 249 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 245 insertions(+), 4 deletions(-) diff --git a/Source/Spec/sqlite.ads b/Source/Spec/sqlite.ads index 1c143fa..5ee724c 100644 --- a/Source/Spec/sqlite.ads +++ b/Source/Spec/sqlite.ads @@ -1,7 +1,23 @@ 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 @@ -34,25 +50,34 @@ package Sqlite is 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 new Ada.Finalization.Controlled with + type Database is tagged record Internal : Database_Int; Version : Database_Version; end record; - overriding - procedure Finalize (Db : in out Database); - type Bit_10 is mod 2**10 with Size => 10; @@ -111,4 +136,220 @@ private 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;