Browse Source

fcl-db: mysql: fix memleak. Bug #33837

git-svn-id: trunk@39185 -
lacak 7 years ago
parent
commit
c65c4abd4d
1 changed files with 26 additions and 23 deletions
  1. 26 23
      packages/fcl-db/src/sqldb/mysql/mysqlconn.inc

+ 26 - 23
packages/fcl-db/src/sqldb/mysql/mysqlconn.inc

@@ -1170,31 +1170,34 @@ begin
   if not assigned(Transaction) then
     DatabaseError(SErrConnTransactionnSet);
 
-  qry := tsqlquery.Create(nil);
-  qry.transaction := Transaction;
-  qry.database := Self;
-  with qry do
-    begin
-    ParseSQL := False;
-    sql.clear;
-    sql.add('show index from ' +  TableName);
-    open;
-    end;
-  while not qry.eof do with IndexDefs.AddIndexDef do
-    begin
-    Name := trim(qry.fieldbyname('Key_name').asstring);
-    Fields := trim(qry.fieldbyname('Column_name').asstring);
-    If Name = 'PRIMARY' then options := options + [ixPrimary];
-    If qry.fieldbyname('Non_unique').asinteger = 0 then options := options + [ixUnique];
-    qry.next;
-    while (name = trim(qry.fieldbyname('Key_name').asstring)) and (not qry.eof) do
+  qry := TSQLQuery.Create(nil);
+  qry.Transaction := Transaction;
+  qry.Database := Self;
+  try
+    with qry do
       begin
-      Fields := Fields + ';' + trim(qry.fieldbyname('Column_name').asstring);
-      qry.next;
+      ParseSQL := False;
+      SQL.Clear;
+      SQL.Add('show index from ' +  TableName);
+      Open;
       end;
-    end;
-  qry.close;
-  qry.free;
+    while not qry.Eof do with IndexDefs.AddIndexDef do
+      begin
+      Name := trim(qry.FieldByName('Key_name').AsString);
+      Fields := trim(qry.FieldByName('Column_name').AsString);
+      If Name = 'PRIMARY' then options := options + [ixPrimary];
+      If qry.FieldByName('Non_unique').AsInteger = 0 then Options := Options + [ixUnique];
+      qry.Next;
+      while (Name = trim(qry.FieldByName('Key_name').AsString)) and (not qry.Eof) do
+        begin
+        Fields := Fields + ';' + trim(qry.FieldByName('Column_name').AsString);
+        qry.Next;
+        end;
+      end;
+    qry.Close;
+  finally
+    qry.Free;
+  end;
 end;
 
 function TConnectionName.RowsAffected(cursor: TSQLCursor): TRowsCount;