program TestOleDB;

{$INCLUDE Synopse.inc}

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Classes,
  SynCommons,
  SynLog,
{$ifndef DELPHI5OROLDER}
  mORMot,
{$endif}
  SynDB,
  SynDBOracle,
  SynOleDB;

var Props: TOleDBConnectionProperties;

procedure TestISQLDBRowsColumns;
var I: ISQLDBRows;
begin
  SynDBLog.Enter;
  I := Props.Execute('select * from Sales.Customer where AccountNumber like ?',['AW000001%']);
  while I.Step do
    assert(Copy(I['AccountNumber'],1,8)='AW000001');
end;

{$ifndef DELPHI5OROLDER}
procedure TestISQLDBRowsVariant;
var Customer: Variant;
begin
  SynDBLog.Enter;
  with Props.Execute('select * from Sales.Customer where AccountNumber like ?',
    ['AW000001%'],@Customer) do
    while Step do
      assert(Copy(Customer.AccountNumber,1,8)='AW000001');
end;
{$endif}

var Conn: TSQLDBConnection;
    Query: TSQLDBStatement;
    F: TFileStream;
begin
{$ifndef DELPHI5OROLDER}
  SynDBLog := TSQLLog;
{$endif}
  with SynDBLog.Family do begin
    Level := LOG_VERBOSE;
    AutoFlushTimeOut := 10;
    HighResolutionTimeStamp := true;
  end;
  Props := TOleDBMSSQLConnectionProperties.Create('.\SQLEXPRESS','AdventureWorks2008R2','','');
  try
    //Props.ConnectionStringDialogExecute;
    Conn := Props.NewConnection;
    try
      Conn.Connect; // optional
      Query := Conn.NewStatement;
      try
        Query.Execute('select * from Sales.Customer where AccountNumber like ?',true,['AW000001%']);
        F := TFileStream.Create(ChangeFileExt(ExeVersion.ProgramFileName,'.json'),fmCreate);
        try
          Query.FetchAllToJSON(F,false);
        finally
          F.Free;
        end;
      finally
        Query.Free;
      end;
      // Writeln(#13#10'Press [Enter]'); readln;
    finally
      Conn.Free;
    end;
    Props.ThreadSafeConnection.Connect; // don't benchmark ISQLDBRows connection
    TestISQLDBRowsColumns;
{$ifndef DELPHI5OROLDER}
    TestISQLDBRowsVariant;
{$endif}
  finally
    Props.Free;
  end;
end.
