Bladeren bron

fcl-db: sqldb: ensure, that if error happens during ExecuteDirect, UnprepareStatement is called. Leaving unfinished statement causes error on later connection close (SQLite). Bug #29376 (fixed as suggested by reporter).
DB test suite do not show any regression.

git-svn-id: trunk@33079 -

lacak 9 jaren geleden
bovenliggende
commit
810d724493
1 gewijzigde bestanden met toevoegingen van 7 en 4 verwijderingen
  1. 7 4
      packages/fcl-db/src/sqldb/sqldb.pp

+ 7 - 4
packages/fcl-db/src/sqldb/sqldb.pp

@@ -1273,10 +1273,13 @@ begin
     If LogEvent(detPrepare) then
       Log(detPrepare,SQL);
     PrepareStatement(Cursor,ATransaction,SQL,Nil);
-    If LogEvent(detExecute) then
-      Log(detExecute,SQL);
-    Execute(Cursor,ATransaction, Nil);
-    UnPrepareStatement(Cursor);
+    try
+      If LogEvent(detExecute) then
+        Log(detExecute,SQL);
+      Execute(Cursor,ATransaction, Nil);
+    finally
+      UnPrepareStatement(Cursor);
+    end;
   finally;
     DeAllocateCursorHandle(Cursor);
   end;