소스 검색

fcl-db: tests: improve test for RefreshOnUpdate using returning clause.
When more than one record is updated then only fields in first record are correctly refreshed. Related to rev.30796 (which closes one bug, but opens other)

git-svn-id: trunk@30797 -

lacak 10 년 전
부모
커밋
35f6cbfbae
1개의 변경된 파일17개의 추가작업 그리고 10개의 파일을 삭제
  1. 17 10
      packages/fcl-db/tests/testsqldb.pas

+ 17 - 10
packages/fcl-db/tests/testsqldb.pas

@@ -692,11 +692,9 @@ begin
     if not (sqSupportReturning in Connection.ConnOptions) then
       Ignore(STestNotApplicable);
     ExecuteDirect('create table FPDEV2 (id integer not null, a varchar(10) default ''abcde'', b varchar(5) default ''fgh'', constraint PK_FPDEV2 primary key(id))');
-    if Transaction.Active then
-      Transaction.Commit;
-    ExecuteDirect('insert into FPDEV2 (id) values (123)');
-    if Transaction.Active then
-      Transaction.Commit;
+    CommitDDL;
+    ExecuteDirect('insert into FPDEV2 (id) values (1)');
+    ExecuteDirect('insert into FPDEV2 (id) values (2)');
     end;
   FMyQ:=SQLDBConnector.Query;
   FMyQ.SQL.Text:='select * from FPDEV2';
@@ -705,13 +703,22 @@ begin
     ProviderFlags:=ProviderFlags+[pfInKey];
   With FMyQ.FieldByName('b') do
     ProviderFlags:=[pfRefreshOnUpdate];  // Do not update, just fetch new value
+  SQLDBConnector.ExecuteDirect('update FPDEV2 set b=''b1'' where id=1');
+  SQLDBConnector.ExecuteDirect('update FPDEV2 set b=''b2'' where id=2');
   FMyQ.Edit;
-  FMyQ.FieldByName('a').AsString:='ccc';
-  FMyQ.Post;
-  SQLDBConnector.ExecuteDirect('update FPDEV2 set b=''123'' where id=123');
+  FMyQ.FieldByName('a').AsString:='a1';
+  FMyQ.Post;  // #1 record
+  FMyQ.Next;
+  FMyQ.Edit;
+  FMyQ.FieldByName('a').AsString:='a2';
+  FMyQ.Post;  // #2 record
   FMyQ.ApplyUpdates;
-  AssertEquals('a updated','ccc',FMyQ.FieldByName('a').AsString);
-  AssertEquals('b updated','123',FMyQ.FieldByName('b').AsString);
+  FMyQ.First;
+  AssertEquals('#1.a updated', 'a1', FMyQ.FieldByName('a').AsString);
+  AssertEquals('#1.b updated', 'b1', FMyQ.FieldByName('b').AsString);
+  FMyQ.Next;
+  AssertEquals('#2.a updated', 'a2', FMyQ.FieldByName('a').AsString);
+  AssertEquals('#2.b updated', 'b2', FMyQ.FieldByName('b').AsString);
 end;