Browse Source

Implements support for MySQL Transactions. Mantis #19137. Patch by Ludo Brands.

git-svn-id: trunk@22598 -
lacak 13 years ago
parent
commit
d0fbfe4525
1 changed files with 29 additions and 5 deletions
  1. 29 5
      packages/fcl-db/src/sqldb/mysql/mysqlconn.inc

+ 29 - 5
packages/fcl-db/src/sqldb/mysql/mysqlconn.inc

@@ -1111,27 +1111,51 @@ end;
 
 
 function TConnectionName.Commit(trans: TSQLHandle): boolean;
 function TConnectionName.Commit(trans: TSQLHandle): boolean;
 begin
 begin
-  // Do nothing.
+  //mysql_commit(FMySQL);
+  Result := mysql_query(FMySQL, 'COMMIT') = 0;
+  if not Result then
+    MySQLError(FMySQL, SErrExecuting, Self);
 end;
 end;
 
 
 function TConnectionName.RollBack(trans: TSQLHandle): boolean;
 function TConnectionName.RollBack(trans: TSQLHandle): boolean;
 begin
 begin
-  // Do nothing
+  //mysql_rollback(FMySQL);
+  Result := mysql_query(FMySQL, 'ROLLBACK') = 0;
+  if not Result then
+    MySQLError(FMySQL, SErrExecuting, Self);
 end;
 end;
 
 
 function TConnectionName.StartdbTransaction(trans: TSQLHandle; AParams : string): boolean;
 function TConnectionName.StartdbTransaction(trans: TSQLHandle; AParams : string): boolean;
 begin
 begin
-  // Do nothing
+  Result := mysql_query(FMySQL, 'START TRANSACTION') = 0;
+  if not Result then
+    MySQLError(FMySQL, SErrExecuting, Self);
 end;
 end;
 
 
 procedure TConnectionName.CommitRetaining(trans: TSQLHandle);
 procedure TConnectionName.CommitRetaining(trans: TSQLHandle);
 begin
 begin
-  // Do nothing
+  {$IFDEF MYSQL50_UP}
+  if mysql_query(FMySQL, 'COMMIT AND CHAIN') <> 0 then
+    MySQLError(FMySQL, SErrExecuting, Self);
+  {$ELSE}
+  if mysql_query(FMySQL, 'COMMIT') <> 0 then
+    MySQLError(FMySQL, SErrExecuting, Self);
+  if mysql_query(FMySQL, 'START TRANSACTION') <> 0 then
+    MySQLError(FMySQL, SErrExecuting, Self);
+  {$ENDIF}
 end;
 end;
 
 
 procedure TConnectionName.RollBackRetaining(trans: TSQLHandle);
 procedure TConnectionName.RollBackRetaining(trans: TSQLHandle);
 begin
 begin
-  // Do nothing
+  {$IFDEF MYSQL50_UP}
+  if mysql_query(FMySQL, 'ROLLBACK AND CHAIN') <> 0 then
+    MySQLError(FMySQL, SErrExecuting, Self);
+  {$ELSE}
+  if mysql_query(FMySQL, 'ROLLBACK') <> 0 then
+    MySQLError(FMySQL, SErrExecuting, Self);
+  if mysql_query(FMySQL, 'START TRANSACTION') <> 0 then
+    MySQLError(FMySQL, SErrExecuting, Self);
+  {$ENDIF}
 end;
 end;
 
 
 function TConnectionName.GetSchemaInfoSQL(SchemaType: TSchemaType;
 function TConnectionName.GetSchemaInfoSQL(SchemaType: TSchemaType;