program project1;

{$mode objfpc}{$H+}

uses
  Classes, sqldb, sqlite3conn, sqlite3;

var
  Query: TSQLQuery;
  Connection: TSQLite3Connection;
  Transaction: TSQLTransaction;

procedure TraceSQL(user: pointer; s: pchar) cdecl;
begin
  WriteLn(S);
end;

begin
  Connection := TSQLite3Connection.Create(nil);
  Transaction := TSQLTransaction.Create(Connection);
  Connection.Transaction := Transaction;
  Connection.DatabaseName := 'test.db';
  Connection.Connected := True;
  Connection.ExecuteDirect('Create Table If Not Exists Test (Id Integer Primary Key, Name VarChar)');
  Connection.ExecuteDirect('Delete From Test');
  Connection.ExecuteDirect('Insert Into Test (Id, Name) Values (1, ''xxx'')');
  Connection.ExecuteDirect('Insert Into Test (Id, Name) Values (2, ''xxx'')');
  Connection.ExecuteDirect('Insert Into Test (Id, Name) Values (3, ''xxx'')');
  Query := TSQLQuery.Create(Connection);
  Query.DataBase := Connection;
  sqlite3_trace(Connection.Handle, @TraceSQL, nil);
  Query.Close;
  Query.SQL.Text := 'Select * from Test where Id in (1,3)';
  Query.Open;
  WriteLn('Without Param - RecCount: ', Query.RecordCount);

  Query.Close;
  Query.SQL.Text := 'Select * from Test where Id in (:idlist)';
  Query.ParamByName('idlist').AsString := '1,3';
  Query.Open;
  WriteLn('With Param - RecCount: ', Query.RecordCount);

  Connection.Destroy;
end.

