-
Notifications
You must be signed in to change notification settings - Fork 5
TSQLite3Query
TSQLite3Query class encapsulates the SQLite3 query.
uses
sqlite3.query;
type
TSQLite3Query = class
A new database query can be created by call its constructor.
constructor Create (AErrorsStack : PSQL3LiteErrorsStack; ADBHandle :
ppsqlite3; AQuery : String; AFlags : TPrepareFlags);
AErrorsStack
is a pointer to SQLite3ErrorsStack class.
ADBHandle
is a pointer to SQLite3 database handle.
AFlags
is a additional database prepare flags.
uses
libpassqlite, sqlite3.errors_stack, sqlite3.connection, sqlite3.query;
var
errors : TSQLite3ErrorsStack;
handle : psqlite3;
connection : TSQLite3DatabaseConnection;
query : TSQLite3Query;
begin
errors := TSQLite3ErrorsStack.Create;
connection := TSQLite3DatabaseConnection.Create(@errors, @handle, 'database',
[SQLITE_OPEN_CREATE, SQLITE_OPEN_READWRITE]);
query := TSQLite3Query.Create(@errors, @handle, 'SELECT * FROM sqlite_master;',
[SQLITE_PREPARE_NORMALIZE]);
FreeAndNil(query);
FreeAndNil(connection);
FreeAndNil(errors);
end;
Option that is used for special purposes.
TPrepareFlags = set of TPrepareFlag;
TPrepareFlag = (
The SQLITE_PREPARE_PERSISTENT flag is a hint to the query planner that the prepared statement will be retained for a long time and probably reused many times.
SQLITE_PREPARE_PERSISTENT,
The SQLITE_PREPARE_NORMALIZE flag is a no-op. This flag used to be required for any prepared statement that wanted to use the sqlite3_normalized_sql() interface. However, the sqlite3_normalized_sql() interface is now available to all prepared statements, regardless of whether or not they use this flag.
SQLITE_PREPARE_NORMALIZE,
The SQLITE_PREPARE_NO_VTAB flag causes the SQL compiler to return an error (error code SQLITE_ERROR) if the statement uses any virtual tables.
SQLITE_PREPARE_NO_VTAB
);
Binding values to prepared query.
function Bind(AIndex : Integer) : TSQLite3Query;
function Bind(AIndex : Integer; AValue : Double) : TSQLite3Query;
function Bind(AIndex : Integer; AValue : Integer) : TSQLite3Query;
function Bind(AIndex : Integer; AValue : Int64) : TSQLite3Query;
function Bind(AIndex : Integer; AValue : String) : TSQLite3Query;
function BindBlob(AIndex : Integer; AValue : Pointer; ASize : Int64) :
TSQLite3Query;
function BindBlobZero(AIndex : Integer; ASize : Int64) : TSQLite3Query;
uses
libpassqlite, sqlite3.errors_stack, sqlite3.connection, sqlite3.query;
var
errors : TSQLite3ErrorsStack;
handle : psqlite3;
connection : TSQLite3DatabaseConnection;
query : TSQLite3Query;
begin
errors := TSQLite3ErrorsStack.Create;
connection := TSQLite3DatabaseConnection.Create(@errors, @handle, 'database',
[SQLITE_OPEN_CREATE, SQLITE_OPEN_READWRITE]);
query := TSQLite3Query.Create(@errors, @handle,
'INSERT INTO table_name (value) VALUES (?);', [SQLITE_PREPARE_NORMALIZE]);
query.Bind(0, 'string value');
FreeAndNil(query);
FreeAndNil(connection);
FreeAndNil(errors);
end;
Reset all bindings on a prepared query.
procedure ClearBindings;
uses
libpassqlite, sqlite3.errors_stack, sqlite3.connection, sqlite3.query;
var
errors : TSQLite3ErrorsStack;
handle : psqlite3;
connection : TSQLite3DatabaseConnection;
query : TSQLite3Query;
begin
errors := TSQLite3ErrorsStack.Create;
connection := TSQLite3DatabaseConnection.Create(@errors, @handle, 'database',
[SQLITE_OPEN_CREATE, SQLITE_OPEN_READWRITE]);
query := TSQLite3Query.Create(@errors, @handle,
'INSERT INTO table_name (value) VALUES (?);', [SQLITE_PREPARE_NORMALIZE]);
query.ClearBindings;
FreeAndNil(query);
FreeAndNil(connection);
FreeAndNil(errors);
end;
Run the SQL query.
function Run : TSQLite3Result;
Method return TSQLite3Result object.
uses
libpassqlite, sqlite3.errors_stack, sqlite3.connection, sqlite3.query,
sqlite3.result;
var
errors : TSQLite3ErrorsStack;
handle : psqlite3;
connection : TSQLite3DatabaseConnection;
query : TSQLite3Query;
result : TSQLite3Result;
begin
errors := TSQLite3ErrorsStack.Create;
connection := TSQLite3DatabaseConnection.Create(@errors, @handle, 'database',
[SQLITE_OPEN_CREATE, SQLITE_OPEN_READWRITE]);
query := TSQLite3Query.Create(@errors, @handle, 'SELECT * FROM sqlite_master;',
[SQLITE_PREPARE_NORMALIZE]);
result := query.Run;
FreeAndNil(query);
FreeAndNil(connection);
FreeAndNil(errors);
end;
Reset a prepared query. Reset a prepared query object back to its initial state, ready to be re-executed.
procedure Reset;
uses
libpassqlite, sqlite3.errors_stack, sqlite3.connection, sqlite3.query;
var
errors : TSQLite3ErrorsStack;
handle : psqlite3;
connection : TSQLite3DatabaseConnection;
query : TSQLite3Query;
begin
errors := TSQLite3ErrorsStack.Create;
connection := TSQLite3DatabaseConnection.Create(@errors, @handle, 'database',
[SQLITE_OPEN_CREATE, SQLITE_OPEN_READWRITE]);
query := TSQLite3Query.Create(@errors, @handle, 'SELECT * FROM sqlite_master;',
[SQLITE_PREPARE_NORMALIZE]);
query.Reset;
FreeAndNil(query);
FreeAndNil(connection);
FreeAndNil(errors);
end;