with Ada.Text_IO; use Ada.Text_IO; with Interfaces.C; use Interfaces.C; with Interfaces.C.Strings; use Interfaces.C.Strings; with Ada.Unchecked_Conversion; package body Sqlite is procedure Finalize (Db : in out Database) is function sqlite3_close (Db : in out Database_Int) return Int with Import, Convention => C; function sqlite3_close_v2 (Db : in out Database_Int) return Int with Import, Convention => C; Error : int := 0; begin if Db.Version = v1 then Error := sqlite3_close (Db.Internal); else Error := sqlite3_close_v2 (Db.Internal); end if; end Finalize; procedure Open (Db : in out Database; Filename : String) is function sqlite3_open ( Filename : Chars_Ptr; ppDb : out Database_Int) return Int with Import, Convention => C; Error : Int; begin Error := sqlite3_open (New_String (Filename), Db.Internal); Db.Version := v1; end Open; 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) is function sqlite3_open_v2 ( Filename : Chars_Ptr; ppDb : out Database_Int; Flags : Int; zVfs : Chars_Ptr) return Int with Import, Convention => C; function Convert is new Ada.Unchecked_Conversion ( Source => Database_Int_Flags, Target => Int); Flags : Database_Int_Flags; Error : Int; begin case RW is when ReadOnly => Flags.Open_ReadOnly := True; when ReadWrite => Flags.Open_ReadWrite := True; end case; Flags.Open_Create := Create; Flags.Open_URI := Filename_URI; FLags.Open_Memory := Open_In_Memory; case Mutex is when Disabled => null; when No_Mutex => Flags.Open_NoMutex := True; when Full_Mutex => Flags.Open_FullMutex := True; end case; case Cache is when Disabled => null; when Shared_Cache => Flags.Open_SharedCache := True; when Private_Cache => Flags.Open_PrivateCache := True; end case; Put_Line (Convert (Flags)'Image); Error := sqlite3_open_v2 ( New_String (Filename), Db.Internal, Convert (Flags), Null_Ptr); Db.Version := v2; end Open; procedure Close (Db : in out Database) is begin Db.Finalize; end Close; end Sqlite;