|
@@ -140,16 +140,16 @@ const
|
|
'1991-03-01',
|
|
'1991-03-01',
|
|
'2040-10-16',
|
|
'2040-10-16',
|
|
'1977-09-29',
|
|
'1977-09-29',
|
|
|
|
+ '1899-12-29',
|
|
|
|
+ '1899-12-30',
|
|
|
|
+ '1899-12-31',
|
|
|
|
+ '1900-01-01',
|
|
'1800-03-30',
|
|
'1800-03-30',
|
|
- '1650-05-10',
|
|
|
|
'1754-06-04',
|
|
'1754-06-04',
|
|
|
|
+ '1650-05-10',
|
|
'0904-04-12',
|
|
'0904-04-12',
|
|
'0199-07-09',
|
|
'0199-07-09',
|
|
- '0001-01-01',
|
|
|
|
- '1899-12-29',
|
|
|
|
- '1899-12-30',
|
|
|
|
- '1899-12-31',
|
|
|
|
- '1900-01-01'
|
|
|
|
|
|
+ '0001-01-01'
|
|
);
|
|
);
|
|
|
|
|
|
testBytesValuesCount = 5;
|
|
testBytesValuesCount = 5;
|
|
@@ -394,10 +394,7 @@ begin
|
|
Open;
|
|
Open;
|
|
for i := 0 to testValuesCount-1 do
|
|
for i := 0 to testValuesCount-1 do
|
|
begin
|
|
begin
|
|
- if (SQLDbType in [mysql40,mysql41]) then
|
|
|
|
- AssertEquals(TrimRight(testValues[i]),fields[0].AsString) // MySQL < 5.0.3 automatically trims strings
|
|
|
|
- else
|
|
|
|
- AssertEquals(testValues[i],fields[0].AsString);
|
|
|
|
|
|
+ AssertEquals(testValues[i], Fields[0].AsString);
|
|
Next;
|
|
Next;
|
|
end;
|
|
end;
|
|
close;
|
|
close;
|
|
@@ -611,16 +608,7 @@ const
|
|
'2000-01-01 10:00:00',
|
|
'2000-01-01 10:00:00',
|
|
'2000-01-01 23:59:59',
|
|
'2000-01-01 23:59:59',
|
|
'1994-03-06 11:54:30',
|
|
'1994-03-06 11:54:30',
|
|
- '2040-10-16', // MySQL 4.0 doesn't support datetimes before 1970 or after 2038
|
|
|
|
- '1400-02-03 12:21:53',
|
|
|
|
- '0354-11-20 21:25:15',
|
|
|
|
- '1333-02-03 21:44:21',
|
|
|
|
- '1800-03-30',
|
|
|
|
- '1650-05-10',
|
|
|
|
- '1754-06-04',
|
|
|
|
- '0904-04-12',
|
|
|
|
- '0199-07-09',
|
|
|
|
- '0001-01-01',
|
|
|
|
|
|
+ '1754-06-04', // MySQL 4.0 doesn't support datetimes before 1970 or after 2038
|
|
'1899-12-29',
|
|
'1899-12-29',
|
|
'1899-12-30',
|
|
'1899-12-30',
|
|
'1899-12-31',
|
|
'1899-12-31',
|
|
@@ -631,20 +619,26 @@ const
|
|
'1899-12-29 18:00:51',
|
|
'1899-12-29 18:00:51',
|
|
'1903-04-02 01:04:02',
|
|
'1903-04-02 01:04:02',
|
|
'1815-09-24 03:47:22',
|
|
'1815-09-24 03:47:22',
|
|
- '2100-01-01 01:01:01'
|
|
|
|
|
|
+ '2040-10-16',
|
|
|
|
+ '2100-01-01 01:01:01',
|
|
|
|
+ '1400-02-03 12:21:53', // MS SQL 2005 doesn't support datetimes before 1753
|
|
|
|
+ '0354-11-20 21:25:15',
|
|
|
|
+ '1333-02-03 21:44:21',
|
|
|
|
+ '1800-03-30',
|
|
|
|
+ '1650-05-10',
|
|
|
|
+ '0904-04-12',
|
|
|
|
+ '0199-07-09',
|
|
|
|
+ '0001-01-01'
|
|
);
|
|
);
|
|
|
|
|
|
var
|
|
var
|
|
- i, corrTestValueCount : byte;
|
|
|
|
|
|
+ i : byte;
|
|
|
|
|
|
begin
|
|
begin
|
|
CreateTableWithFieldType(ftDateTime,FieldtypeDefinitions[ftDateTime]);
|
|
CreateTableWithFieldType(ftDateTime,FieldtypeDefinitions[ftDateTime]);
|
|
TestFieldDeclaration(ftDateTime,8);
|
|
TestFieldDeclaration(ftDateTime,8);
|
|
|
|
|
|
- if SQLDbType=mysql40 then corrTestValueCount := testValuesCount-21
|
|
|
|
- else corrTestValueCount := testValuesCount;
|
|
|
|
-
|
|
|
|
- for i := 0 to corrTestValueCount-1 do
|
|
|
|
|
|
+ for i := 0 to testValuesCount-1 do
|
|
if SQLDbType=oracle then
|
|
if SQLDbType=oracle then
|
|
TSQLDBConnector(DBConnector).Connection.ExecuteDirect('insert into FPDEV2 (FT) values (to_date (''' + testValues[i] + ''',''YYYY-MM-DD HH24:MI:SS''))')
|
|
TSQLDBConnector(DBConnector).Connection.ExecuteDirect('insert into FPDEV2 (FT) values (to_date (''' + testValues[i] + ''',''YYYY-MM-DD HH24:MI:SS''))')
|
|
else
|
|
else
|
|
@@ -653,7 +647,7 @@ begin
|
|
with TSQLDBConnector(DBConnector).Query do
|
|
with TSQLDBConnector(DBConnector).Query do
|
|
begin
|
|
begin
|
|
Open;
|
|
Open;
|
|
- for i := 0 to corrTestValueCount-1 do
|
|
|
|
|
|
+ for i := 0 to testValuesCount-1 do
|
|
begin
|
|
begin
|
|
if length(testValues[i]) < 12 then
|
|
if length(testValues[i]) < 12 then
|
|
AssertEquals(testValues[i],FormatDateTime('yyyy/mm/dd', fields[0].AsDateTime, DBConnector.FormatSettings))
|
|
AssertEquals(testValues[i],FormatDateTime('yyyy/mm/dd', fields[0].AsDateTime, DBConnector.FormatSettings))
|
|
@@ -784,12 +778,9 @@ begin
|
|
|
|
|
|
end;
|
|
end;
|
|
TSQLDBConnector(DBConnector).Transaction.CommitRetaining;
|
|
TSQLDBConnector(DBConnector).Transaction.CommitRetaining;
|
|
-
|
|
|
|
-
|
|
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TTestFieldTypes.TestIntParamQuery;
|
|
procedure TTestFieldTypes.TestIntParamQuery;
|
|
-
|
|
|
|
begin
|
|
begin
|
|
TestXXParamQuery(ftInteger,'INT',testIntValuesCount);
|
|
TestXXParamQuery(ftInteger,'INT',testIntValuesCount);
|
|
end;
|
|
end;
|
|
@@ -799,9 +790,14 @@ begin
|
|
TestXXParamQuery(ftFMTBcd,FieldtypeDefinitionsConst[ftFMTBcd],testValuesCount);
|
|
TestXXParamQuery(ftFMTBcd,FieldtypeDefinitionsConst[ftFMTBcd],testValuesCount);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TTestFieldTypes.TestDateParamQuery;
|
|
|
|
+begin
|
|
|
|
+ TestXXParamQuery(ftDate,FieldtypeDefinitions[ftDate],testDateValuesCount);
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TTestFieldTypes.TestTimeParamQuery;
|
|
procedure TTestFieldTypes.TestTimeParamQuery;
|
|
begin
|
|
begin
|
|
- TestXXParamQuery(ftTime,FieldtypeDefinitionsConst[ftTime],testValuesCount);
|
|
|
|
|
|
+ TestXXParamQuery(ftTime,FieldtypeDefinitions[ftTime],testValuesCount);
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TTestFieldTypes.TestDateTimeParamQuery;
|
|
procedure TTestFieldTypes.TestDateTimeParamQuery;
|
|
@@ -827,7 +823,7 @@ end;
|
|
|
|
|
|
procedure TTestFieldTypes.TestVarBytesParamQuery;
|
|
procedure TTestFieldTypes.TestVarBytesParamQuery;
|
|
begin
|
|
begin
|
|
- TestXXParamQuery(ftVarBytes, FieldtypeDefinitions[ftVarBytes], testVarBytesValuesCount);
|
|
|
|
|
|
+ TestXXParamQuery(ftVarBytes, FieldtypeDefinitions[ftVarBytes], testVarBytesValuesCount, SQLDbType<>mssql);
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TTestFieldTypes.TestStringParamQuery;
|
|
procedure TTestFieldTypes.TestStringParamQuery;
|
|
@@ -841,12 +837,6 @@ begin
|
|
TestXXParamQuery(ftFixedChar,'CHAR(10)',testValuesCount);
|
|
TestXXParamQuery(ftFixedChar,'CHAR(10)',testValuesCount);
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TTestFieldTypes.TestDateParamQuery;
|
|
|
|
-
|
|
|
|
-begin
|
|
|
|
- TestXXParamQuery(ftDate,'DATE',testDateValuesCount);
|
|
|
|
-end;
|
|
|
|
-
|
|
|
|
|
|
|
|
procedure TTestFieldTypes.TestXXParamQuery(ADatatype : TFieldType; ASQLTypeDecl : string; testValuescount : integer; Cross : boolean = false);
|
|
procedure TTestFieldTypes.TestXXParamQuery(ADatatype : TFieldType; ASQLTypeDecl : string; testValuescount : integer; Cross : boolean = false);
|
|
|
|
|
|
@@ -863,7 +853,6 @@ begin
|
|
|
|
|
|
with TSQLDBConnector(DBConnector).Query do
|
|
with TSQLDBConnector(DBConnector).Query do
|
|
begin
|
|
begin
|
|
- PacketRecords := -1;
|
|
|
|
sql.clear;
|
|
sql.clear;
|
|
sql.append('insert into FPDEV2 (ID,FIELD1) values (:id,:field1)');
|
|
sql.append('insert into FPDEV2 (ID,FIELD1) values (:id,:field1)');
|
|
|
|
|
|
@@ -891,7 +880,10 @@ begin
|
|
Params.ParamByName('field1').Value := StringToByteArray(testBytesValues[i])
|
|
Params.ParamByName('field1').Value := StringToByteArray(testBytesValues[i])
|
|
else
|
|
else
|
|
Params.ParamByName('field1').AsBlob := testBytesValues[i];
|
|
Params.ParamByName('field1').AsBlob := testBytesValues[i];
|
|
- ftVarBytes:Params.ParamByName('field1').AsString := testBytesValues[i];
|
|
|
|
|
|
+ ftVarBytes:if cross then
|
|
|
|
+ Params.ParamByName('field1').AsString := testBytesValues[i]
|
|
|
|
+ else
|
|
|
|
+ Params.ParamByName('field1').AsBlob := testBytesValues[i];
|
|
else
|
|
else
|
|
AssertTrue('no test for paramtype available',False);
|
|
AssertTrue('no test for paramtype available',False);
|
|
end;
|
|
end;
|
|
@@ -1247,6 +1239,11 @@ begin
|
|
Connection.ExecuteDirect('create procedure FPDEV_PROC returns (r integer) as begin r=1; end');
|
|
Connection.ExecuteDirect('create procedure FPDEV_PROC returns (r integer) as begin r=1; end');
|
|
Query.SQL.Text:='execute procedure FPDEV_PROC';
|
|
Query.SQL.Text:='execute procedure FPDEV_PROC';
|
|
end
|
|
end
|
|
|
|
+ else if SQLDbType = mssql then
|
|
|
|
+ begin
|
|
|
|
+ Connection.ExecuteDirect('create procedure FPDEV_PROC as select 1 union select 2;');
|
|
|
|
+ Query.SQL.Text:='execute FPDEV_PROC';
|
|
|
|
+ end
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
Ignore('This test does not apply to this sqldb-connection type, since it does not support selectable stored procedures.');
|
|
Ignore('This test does not apply to this sqldb-connection type, since it does not support selectable stored procedures.');
|
|
@@ -1532,10 +1529,11 @@ begin
|
|
begin
|
|
begin
|
|
with query do
|
|
with query do
|
|
begin
|
|
begin
|
|
- if (sqlDBtype=interbase) then
|
|
|
|
- SQL.Text:='select first 1 NAME from FPDEV where NAME=''TestName21'''
|
|
|
|
- else
|
|
|
|
- SQL.Text:='select NAME from FPDEV where NAME=''TestName21'' limit 1';
|
|
|
|
|
|
+ case sqlDBtype of
|
|
|
|
+ interbase : SQL.Text:='select first 1 NAME from FPDEV where NAME=''TestName21''';
|
|
|
|
+ mssql : SQL.Text:='select top 1 NAME from FPDEV where NAME=''TestName21''';
|
|
|
|
+ else SQL.Text:='select NAME from FPDEV where NAME=''TestName21'' limit 1';
|
|
|
|
+ end;
|
|
Open;
|
|
Open;
|
|
close;
|
|
close;
|
|
ServerFilter:='ID=21';
|
|
ServerFilter:='ID=21';
|
|
@@ -1656,7 +1654,7 @@ end;
|
|
procedure TTestFieldTypes.TestBug9744;
|
|
procedure TTestFieldTypes.TestBug9744;
|
|
var i : integer;
|
|
var i : integer;
|
|
begin
|
|
begin
|
|
- if SQLDbType in [interbase,postgresql] then Ignore('This test does not apply to this db-engine, since it has no double field-type');
|
|
|
|
|
|
+ if SQLDbType in [interbase,postgresql,mssql] then Ignore('This test does not apply to this db-engine, since it has no double field-type');
|
|
|
|
|
|
with TSQLDBConnector(DBConnector) do
|
|
with TSQLDBConnector(DBConnector) do
|
|
begin
|
|
begin
|
|
@@ -1826,6 +1824,8 @@ begin
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
datatype:=FieldtypeDefinitions[ftTime];
|
|
datatype:=FieldtypeDefinitions[ftTime];
|
|
|
|
+ if datatype = '' then
|
|
|
|
+ Ignore(STestNotApplicable);
|
|
if sqlDBType = sqlite3 then
|
|
if sqlDBType = sqlite3 then
|
|
testIntervalValuesCount := 5
|
|
testIntervalValuesCount := 5
|
|
else if sqlDBType in MySQLdbTypes then
|
|
else if sqlDBType in MySQLdbTypes then
|
|
@@ -1853,6 +1853,12 @@ begin
|
|
values:='DEFAULT VALUES';
|
|
values:='DEFAULT VALUES';
|
|
fieldtype:=ftInteger;
|
|
fieldtype:=ftInteger;
|
|
end
|
|
end
|
|
|
|
+ else if sqlDBType = mssql then
|
|
|
|
+ begin
|
|
|
|
+ datatype:='INTEGER IDENTITY';
|
|
|
|
+ values:='DEFAULT VALUES';
|
|
|
|
+ fieldtype:=ftAutoInc;
|
|
|
|
+ end
|
|
else
|
|
else
|
|
Ignore(STestNotApplicable);
|
|
Ignore(STestNotApplicable);
|
|
|
|
|
|
@@ -1925,14 +1931,14 @@ end;
|
|
|
|
|
|
procedure TTestFieldTypes.TestTemporaryTable;
|
|
procedure TTestFieldTypes.TestTemporaryTable;
|
|
begin
|
|
begin
|
|
- if SQLDbType=interbase then Ignore('This test does not apply to Interbase/Firebird, since it doesn''t support temporary tables');
|
|
|
|
|
|
+ if SQLDbType in [interbase,mssql] then Ignore('This test does not apply to this sqldb-connection type, since it doesn''t support temporary tables');
|
|
|
|
|
|
with TSQLDBConnector(DBConnector).Query do
|
|
with TSQLDBConnector(DBConnector).Query do
|
|
begin
|
|
begin
|
|
SQL.Clear;
|
|
SQL.Clear;
|
|
SQL.Add('CREATE TEMPORARY TABLE TEMP1 (id int)');
|
|
SQL.Add('CREATE TEMPORARY TABLE TEMP1 (id int)');
|
|
ExecSQL;
|
|
ExecSQL;
|
|
- SQL.Text := 'INSERT INTO TEMP1(id) values (5)';
|
|
|
|
|
|
+ SQL.Text := 'INSERT INTO TEMP1(id) values (5)';
|
|
ExecSQL;
|
|
ExecSQL;
|
|
SQL.Text := 'SELECT * FROM TEMP1';
|
|
SQL.Text := 'SELECT * FROM TEMP1';
|
|
Open;
|
|
Open;
|
|
@@ -2056,4 +2062,3 @@ end;
|
|
initialization
|
|
initialization
|
|
if uppercase(dbconnectorname)='SQL' then RegisterTest(TTestFieldTypes);
|
|
if uppercase(dbconnectorname)='SQL' then RegisterTest(TTestFieldTypes);
|
|
end.
|
|
end.
|
|
-
|
|
|