From 3ddfc80f519cfe5910ba36ea48f1767af9fef75e Mon Sep 17 00:00:00 2001 From: Jedidiah Barber Date: Tue, 2 Nov 2021 23:32:45 +1300 Subject: Models are queried --- src/sqlite3.ads | 148 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 src/sqlite3.ads (limited to 'src/sqlite3.ads') diff --git a/src/sqlite3.ads b/src/sqlite3.ads new file mode 100644 index 0000000..667fdd6 --- /dev/null +++ b/src/sqlite3.ads @@ -0,0 +1,148 @@ + + +with + + Ada.Strings.Unbounded, + System, + Interfaces.C; + + +package SQLite3 is + + + type SQLite3_DB is private; + type SQLite3_Statement is private; + + type Open_Flag is mod 2**32; + type Prepare_Flag is mod 2**32; + type Status_Code is new Long_Integer; + + subtype SQL_Parameter_Index is Integer range 1 .. Integer'Last; + subtype SQL_Column_Index is Integer; + type Int is new Interfaces.C.int; + + + OPEN_READONLY : constant Open_Flag := 1; + OPEN_READWRITE : constant Open_Flag := 2; + OPEN_CREATE : constant Open_Flag := 4; + OPEN_DELETEONCLOSE : constant Open_Flag := 8; + OPEN_EXCLUSIVE : constant Open_Flag := 16; + OPEN_AUTOPROXY : constant Open_Flag := 32; + OPEN_URI : constant Open_Flag := 64; + OPEN_MEMORY : constant Open_Flag := 128; + OPEN_MAIN_DB : constant Open_Flag := 256; + OPEN_TEMP_DB : constant Open_Flag := 512; + OPEN_TRANSIENT_DB : constant Open_Flag := 1024; + OPEN_MAIN_JOURNAL : constant Open_Flag := 2048; + OPEN_TEMP_JOURNAL : constant Open_Flag := 4096; + OPEN_SUBJOURNAL : constant Open_Flag := 8192; + OPEN_SUPER_JOURNAL : constant Open_Flag := 16384; + OPEN_NOMUTEX : constant Open_Flag := 32768; + OPEN_FULLMUTEX : constant Open_Flag := 65536; + OPEN_SHAREDCACHE : constant Open_Flag := 131072; + OPEN_PRIVATECACHE : constant Open_Flag := 262144; + OPEN_WAL : constant Open_Flag := 524288; + OPEN_NOFOLLOW : constant Open_Flag := 16777216; + + PREPARE_PERSISTENT : constant Prepare_Flag := 1; + PREPARE_NORMALIZE : constant Prepare_Flag := 2; + PREPARE_NO_VTAB : constant Prepare_Flag := 4; + + SQLITE_OK : constant Status_Code := 0; + SQLITE_ROW : constant Status_Code := 100; + SQLITE_DONE : constant Status_Code := 101; + + SQLITE_TRANSIENT : constant := -1; + + + procedure Open + (Filename : in String; + Handle : out SQLite3_DB); + + procedure Open + (Filename : in String; + Handle : out SQLite3_DB; + Flags : in Open_Flag); + + procedure Close + (Handle : in out SQLite3_DB); + + procedure Prepare + (Handle : in SQLite3_DB; + SQL : in String; + SQL_Handle : out SQLite3_Statement); + + procedure Prepare + (Handle : in SQLite3_DB; + SQL : in String; + Flags : in Prepare_Flag; + SQL_Handle : out SQLite3_Statement); + + procedure Step + (SQL_Handle : in SQLite3_Statement; + Status : out Status_Code); + + procedure Finish + (SQL_Handle : in SQLite3_Statement); + + procedure Reset + (SQL_Handle : in SQLite3_Statement); + + procedure Bind + (SQL_Handle : in SQLite3_Statement; + Index : in SQL_Parameter_Index; + Value : in Integer); + + procedure Bind + (SQL_Handle : in SQLite3_Statement; + Index : in SQL_Parameter_Index; + Value : in Long_Integer); + + procedure Bind + (SQL_Handle : in SQLite3_Statement; + Index : in SQL_Parameter_Index; + Value : in Ada.Strings.Unbounded.Unbounded_String); + + procedure Column + (SQL_Handle : in SQLite3_Statement; + Index : in SQL_Column_Index; + Value : out Int); + + procedure Column + (SQL_Handle : in SQLite3_Statement; + Index : in SQL_Column_Index; + Value : out Ada.Strings.Unbounded.Unbounded_String); + + +private + + + -- There are actually many more errors than this + SQLITE_ERROR : constant Status_Code := 1; + + function Error_Message + (Handle : in SQLite3_DB) + return String; + + function Error_String + (Status : in Status_Code) + return String; + + + type DB_Private is null record; + type DB_Private_Access is access all DB_Private; + + type SQLite3_DB is record + Ptr : aliased DB_Private_Access; + end record; + + type Statement_Private is null record; + type Statement_Private_Access is access all Statement_Private; + type SQLite3_Statement is record + Ptr : aliased Statement_Private_Access; + end record; + + +end SQLite3; + + -- cgit