Adjust TestTemporaryTable test. Adds support for Firebird/Interbase Global Temporary Tables. (+small cleanup)

Mantis #0022976 , original patch by Reinier Olislagers 
 

git-svn-id: trunk@22666 -
This commit is contained in:
lacak 2012-10-16 10:26:55 +00:00
parent 339d06aa58
commit 83c866637b

View File

@ -1495,6 +1495,8 @@ begin
end;
procedure TTestFieldTypes.TestInsertLargeStrFields;
const
FieldValue='test1';
begin
with TSQLDBConnector(DBConnector) do
begin
@ -1507,11 +1509,11 @@ begin
TSQLDBConnector(DBConnector).Transaction.CommitRetaining;
query.sql.Text:='select * from FPDEV2';
Query.Open;
Query.InsertRecord([1,'test1']);
Query.InsertRecord([1,FieldValue]);
Query.ApplyUpdates;
Query.Close;
Query.Open;
AssertEquals(query.FieldByName('NAME').AsString,'test1');
AssertEquals(query.FieldByName('NAME').AsString,FieldValue);
query.Close;
end;
end;
@ -2027,19 +2029,37 @@ end;
procedure TTestFieldTypes.TestTemporaryTable;
begin
if SQLDbType in [interbase,mssql] then Ignore('This test does not apply to this sqldb-connection type, since it doesn''t support temporary tables');
if SQLDbType in [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
begin
SQL.Clear;
SQL.Add('CREATE TEMPORARY TABLE TEMP1 (id int)');
if SQLDbType=interbase then
// Global temporary table: introduced in Firebird 2.1
// has persistent metadata; data is per transaction (default) or per connection
SQL.Add('CREATE GLOBAL TEMPORARY TABLE FPDEV_TEMP (id int)')
else
SQL.Add('CREATE TEMPORARY TABLE FPDEV_TEMP (id int)');
ExecSQL;
SQL.Text := 'INSERT INTO TEMP1(id) values (5)';
ExecSQL;
SQL.Text := 'SELECT * FROM TEMP1';
Open;
AssertEquals(5,fields[0].AsInteger);
Close;
try
// Firebird/Interbase needs a commit after DDL:
TSQLDBConnector(DBConnector).Transaction.CommitRetaining;
SQL.Text := 'INSERT INTO FPDEV_TEMP(id) values (5)';
ExecSQL;
SQL.Text := 'SELECT * FROM FPDEV_TEMP';
Open;
AssertEquals(5, Fields[0].AsInteger);
Close;
finally
// For Firebird/Interbase, we need to explicitly delete the table as well (it's active within the transaction)
if SQLDbType=interbase then
begin
SQL.Text := 'DROP TABLE FPDEV_TEMP';
ExecSQL;
TSQLDBConnector(DBConnector).Transaction.CommitRetaining;
end;
end;
end;
end;