fpc/packages/fcl-db/tests/testbasics.pas
peter 5b8dd4c004 * move fcl sources to separate packages
git-svn-id: trunk@6655 -
2007-02-25 21:02:26 +00:00

145 lines
5.4 KiB
ObjectPascal

unit TestBasics;
{$IFDEF FPC}
{$mode objfpc}{$H+}
{$ENDIF}
interface
uses
fpcunit, testutils, testregistry, testdecorator,
Classes, SysUtils;
type
{ TTestBasics }
TTestBasics = class(TTestCase)
private
protected
published
procedure TestParseSQL;
procedure TestInitFielddefsFromFields;
end;
implementation
uses db, toolsunit;
Type HackedDataset = class(TDataset);
{ TTestBasics }
procedure TTestBasics.TestParseSQL;
var Params : TParams;
ReplStr : string;
pb : TParamBinding;
begin
Params := TParams.Create;
AssertEquals( 'select * from table where id = $1',
params.ParseSQL('select * from table where id = :id',true,True,True,psPostgreSQL));
AssertEquals( 'select * from table where id = $1',
params.ParseSQL('select * from table where id = :id',false,True,True,psPostgreSQL));
AssertEquals( 'update test set 1=$1 2=$2 3=$3 4=$4 5=$5 6=$6 7=$7 8=$8 9=$9 where (id = $2)',
params.ParseSQL('update test set 1=:1 2=:2 3=:par3 4=:par4 5=:par5 6=:par6 7=:par7 8=:par8 9=:par9 where (id = :2)',true,True,True,psPostgreSQL));
AssertEquals( 'update test set 1=$1 2=$2 3=$3 4=$4 5=$5 6=$6 7=$7 8=$8 9=$9 where (id = $3) and (test=''$test'')',
params.ParseSQL('update test set 1=:1 2=:2 3=:par3 4=:par4 5=:par5 6=:par6 7=:par7 8=:par8 9=:par9 where (id = :par3) and (test=''$test'')',true,true,true,psPostgreSQL));
AssertEquals( 'update test set 1=$1 2=$2 3=$3 4=$4 5=$5 6=$6 7=$7 8=$8 9=$9 10=$10 11=$11 12=$5 where (id = $3) and (test=''$test'')',
params.ParseSQL('update test set 1=:1 2=:2 3=:par3 4=:par4 5=:par5 6=:par6 7=:par7 8=:par8 9=:par9 10=:par10 11=:11 12=:par5 where (id = :par3) and (test=''$test'')',true,true,true,psPostgreSQL));
AssertEquals( 'select * from table where id = $1',
params.ParseSQL('select * from table where id = :id',true,true,false,psSimulated,pb,ReplStr));
AssertEquals('$',ReplStr);
AssertEquals( 'update test set 1=$1 2=$2 3=$3 4=$4 5=$5 6=$6 7=$7 8=$8 9=$9 where (id = $2)',
params.ParseSQL('update test set 1=:1 2=:2 3=:par3 4=:par4 5=:par5 6=:par6 7=:par7 8=:par8 9=:par9 where (id = :2)',true,true,false,psSimulated,pb,ReplStr));
AssertEquals('$',ReplStr);
AssertEquals( 'update test set 1=$$1 2=$$2 3=$$3 4=$$4 5=$$5 6=$$6 7=$$7 8=$$8 9=$$9 where (id = $$3) and (test=''$test'')',
params.ParseSQL('update test set 1=:1 2=:2 3=:par3 4=:par4 5=:par5 6=:par6 7=:par7 8=:par8 9=:par9 where (id = :par3) and (test=''$test'')',true,true,false,psSimulated,pb,ReplStr));
AssertEquals('$$',ReplStr);
AssertEquals( 'update test set 1=$$1 2=$$2 3=$$3 4=$$4 5=$$5 6=$$6 7=$$7 8=$$8 9=$$9 10=$$10 11=$$11 12=$$5 where (id = $$3) and (test=''$test'')',
params.ParseSQL('update test set 1=:1 2=:2 3=:par3 4=:par4 5=:par5 6=:par6 7=:par7 8=:par8 9=:par9 10=:par10 11=:11 12=:par5 where (id = :par3) and (test=''$test'')',true,True,True,psSimulated));
AssertEquals('$$',ReplStr);
AssertEquals( 'update test set 1=$$$1 2=$$$2 3=$$$3 4=$$$4 5=$$$5 6=$$$6 7=$$$7 8=$$$8 9=$$$9 10=$$$10 11=$$$11 12=$$$5 where (id$$ = $$$3) and (test$=''$test'')',
params.ParseSQL('update test set 1=:1 2=:2 3=:par3 4=:par4 5=:par5 6=:par6 7=:par7 8=:par8 9=:par9 10=:par10 11=:11 12=:par5 where (id$$ = :par3) and (test$=''$test'')',true,true,False,psSimulated,pb,ReplStr));
AssertEquals('$$$',ReplStr);
AssertEquals( 'select * from table where id = ?',
params.ParseSQL('select * from table where id = :id',true,true,true,psInterbase));
// Test escape-sequences:
AssertEquals( 'select * from table where ''id '''' = :id''',
params.ParseSQL('select * from table where ''id '''' = :id''',true,False,True,psPostgreSQL));
AssertEquals( 'select * from table where "id "" = :id"',
params.ParseSQL('select * from table where "id "" = :id"',true,False,True,psPostgreSQL));
AssertEquals( 'select * from table where "id \" = :id"',
params.ParseSQL('select * from table where "id \" = :id"',true,True,False,psPostgreSQL));
AssertEquals( 'select * from table where "id \" = $1',
params.ParseSQL('select * from table where "id \" = :id',true,False,False,psPostgreSQL));
AssertEquals( 'select * from table where "id = :id\',
params.ParseSQL('select * from table where "id = :id\',true,True,True,psInterbase));
Params.Free;
end;
procedure TTestBasics.TestInitFielddefsFromFields;
var ds : TDataset;
F1,F2,F3 : Tfield;
Procedure CompareFieldAndFieldDef(Fld: TField; FldDef : TFieldDef);
begin
AssertEquals(Fld.FieldName,FldDef.Name);
AssertEquals(Fld.Size,FldDef.Size);
AssertEquals(Fld.Required,FldDef.Required);
AssertTrue(Fld.DataType=FldDef.DataType);
end;
begin
ds := TDataset.Create(nil);
F1:=TStringField.Create(ds);
F1.Size := 10;
F1.Name := 'StringFld';
F1.FieldName := 'FStringFld';
F1.Required := false;
F1.Dataset:=ds;
F2:=TIntegerField.Create(ds);
F2.Name := 'IntegerFld';
F2.FieldName := 'FIntegerFld';
F2.Required := True;
F2.Dataset:=ds;
F3:=TBCDField.Create(ds);
F3.Name := 'BCDFld';
F3.FieldName := 'FBCDFld';
F3.Required := false;
F3.Dataset:=ds;
(f3 as TBCDField).Precision := 2;
HackedDataset(ds).InitFieldDefsFromfields;
AssertEquals(3,ds.FieldDefs.Count);
CompareFieldAndFieldDef(F1,ds.FieldDefs[0]);
CompareFieldAndFieldDef(F2,ds.FieldDefs[1]);
CompareFieldAndFieldDef(F3,ds.FieldDefs[2]);
end;
initialization
RegisterTest(TTestBasics);
end.