mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-15 19:29:09 +02:00
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:
parent
4817a0e670
commit
c42890ed75
@ -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;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user