summaryrefslogtreecommitdiff
path: root/src/sqlite3.ads
diff options
context:
space:
mode:
Diffstat (limited to 'src/sqlite3.ads')
-rw-r--r--src/sqlite3.ads148
1 files changed, 148 insertions, 0 deletions
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;
+
+