fcl-db: tests: test that RowsAffected is specific per query not per connection (if more queries are executed over same connection)

git-svn-id: trunk@25377 -
This commit is contained in:
lacak 2013-08-27 09:54:01 +00:00
parent 4817a0e670
commit c42890ed75

View File

@ -1975,41 +1975,50 @@ begin
end; end;
procedure TTestFieldTypes.TestRowsAffected; procedure TTestFieldTypes.TestRowsAffected;
var Query2: TSQLQuery;
begin begin
with TSQLDBConnector(DBConnector) do with TSQLDBConnector(DBConnector) do
begin begin
AssertEquals(-1,query.RowsAffected); Query2 := GetNDataset(0) as TSQLQuery;
AssertEquals(-1, Query.RowsAffected);
Connection.ExecuteDirect('create table FPDEV2 (' + Connection.ExecuteDirect('create table FPDEV2 (' +
' ID INT NOT NULL, ' + ' ID INT NOT NULL, ' +
' NAME VARCHAR(250),' + ' NAME VARCHAR(250),' +
' PRIMARY KEY (ID) ' + ' PRIMARY KEY (ID) )');
') ');
// Firebird/Interbase need a commit after a DDL statement. Not necessary for the other connections // Firebird/Interbase need a commit after a DDL statement. Not necessary for the other connections
TSQLDBConnector(DBConnector).CommitDDL; TSQLDBConnector(DBConnector).CommitDDL;
Query.SQL.Text := 'insert into FPDEV2(ID,NAME) values (1,''test1'')'; Query.SQL.Text := 'insert into FPDEV2(ID,NAME) values (1,''test1'')';
Query.ExecSQL; Query.ExecSQL;
AssertEquals(1,query.RowsAffected); AssertEquals(1, Query.RowsAffected);
Query.SQL.Text := 'insert into FPDEV2(ID,NAME) values (2,''test2'')'; Query.SQL.Text := 'insert into FPDEV2(ID,NAME) values (2,''test2'')';
Query.ExecSQL; Query.ExecSQL;
AssertEquals(1,query.RowsAffected); AssertEquals(1, Query.RowsAffected);
Query.SQL.Text := 'update FPDEV2 set NAME=''NewTest'''; Query.SQL.Text := 'update FPDEV2 set NAME=''NewTest''';
Query.ExecSQL; Query.ExecSQL;
AssertEquals(2,query.RowsAffected);
AssertEquals(-1, Query2.RowsAffected);
Query2.SQL.Text := 'insert into FPDEV2 values(3,''test3'')';
Query2.ExecSQL;
AssertEquals(1, Query2.RowsAffected);
// tests, that RowsAffected is specific per query, not per connection
// i.e. that it doesn't return only RowsAffected of last query executed over connection
AssertEquals(2, Query.RowsAffected);
Query.SQL.Text := 'select * from FPDEV2'; Query.SQL.Text := 'select * from FPDEV2';
Query.Open; Query.Open;
AssertTrue(query.RowsAffected<>0); // It should return -1 or the number of selected rows. AssertTrue(Query.RowsAffected<>0); // It should return -1 or the number of selected rows.
query.Close; Query.Close;
AssertTrue(query.RowsAffected<>0); // It should return -1 or the same as the last time it was called. AssertTrue(Query.RowsAffected<>0); // It should return -1 or the same as the last time it was called.
if (SQLConnType = sqlite3) then // sqlite doesn't count the rowsaffected if there is no where-clause
Query.SQL.Text := 'delete from FPDEV2 where 1' Query.SQL.Text := 'delete from FPDEV2 where ID>0'; // sqlite doesn't count the RowsAffected if there is no where-clause
else
Query.SQL.Text := 'delete from FPDEV2';
Query.ExecSQL; Query.ExecSQL;
AssertEquals(2,query.RowsAffected); AssertEquals(3, Query.RowsAffected);
Query.SQL.Text := 'delete from FPDEV2'; Query.SQL.Text := 'delete from FPDEV2';
Query.ExecSQL; Query.ExecSQL;
AssertEquals(0,query.RowsAffected); AssertEquals(0, Query.RowsAffected);
end; end;
end; end;