121 lines
2.7 KiB
Ada
121 lines
2.7 KiB
Ada
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;
|