Browse Source

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 years ago
parent
commit
810d724493
1 changed files with 7 additions and 4 deletions
  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
     If LogEvent(detPrepare) then
       Log(detPrepare,SQL);
       Log(detPrepare,SQL);
     PrepareStatement(Cursor,ATransaction,SQL,Nil);
     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;
   finally;
     DeAllocateCursorHandle(Cursor);
     DeAllocateCursorHandle(Cursor);
   end;
   end;