Browse Source

--- Merging r22598 into '.':
U packages/fcl-db/src/sqldb/mysql/mysqlconn.inc
--- Merging r22816 into '.':
U packages/fcl-db/src/sqldb/mssql/mssqlconn.pp

# revisions: 22598,22816
r22598 | lacak | 2012-10-09 07:26:27 +0200 (Tue, 09 Oct 2012) | 1 line
Changed paths:
M /trunk/packages/fcl-db/src/sqldb/mysql/mysqlconn.inc

Implements support for MySQL Transactions. Mantis #19137. Patch by Ludo Brands.
r22816 | lacak | 2012-10-22 10:07:07 +0200 (Mon, 22 Oct 2012) | 1 line
Changed paths:
M /trunk/packages/fcl-db/src/sqldb/mssql/mssqlconn.pp

Char-case is not guaranteed to be always upper-case, so use LowerCase like others sqlDB connections.

git-svn-id: branches/fixes_2_6@23906 -

marco 12 years ago
parent
commit
0ad5811ba1

+ 2 - 1
packages/fcl-db/src/sqldb/mssql/mssqlconn.pp

@@ -395,7 +395,8 @@ end;
 
 function TMSSQLConnection.StrToStatementType(s: string): TStatementType;
 begin
-  if s = 'EXEC' then
+  s:=LowerCase(s);
+  if s = 'exec' then
     Result:=stExecProcedure
   else
     Result:=inherited StrToStatementType(s);

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

@@ -1111,27 +1111,51 @@ end;
 
 function TConnectionName.Commit(trans: TSQLHandle): boolean;
 begin
-  // Do nothing.
+  //mysql_commit(FMySQL);
+  Result := mysql_query(FMySQL, 'COMMIT') = 0;
+  if not Result then
+    MySQLError(FMySQL, SErrExecuting, Self);
 end;
 
 function TConnectionName.RollBack(trans: TSQLHandle): boolean;
 begin
-  // Do nothing
+  //mysql_rollback(FMySQL);
+  Result := mysql_query(FMySQL, 'ROLLBACK') = 0;
+  if not Result then
+    MySQLError(FMySQL, SErrExecuting, Self);
 end;
 
 function TConnectionName.StartdbTransaction(trans: TSQLHandle; AParams : string): boolean;
 begin
-  // Do nothing
+  Result := mysql_query(FMySQL, 'START TRANSACTION') = 0;
+  if not Result then
+    MySQLError(FMySQL, SErrExecuting, Self);
 end;
 
 procedure TConnectionName.CommitRetaining(trans: TSQLHandle);
 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;
 
 procedure TConnectionName.RollBackRetaining(trans: TSQLHandle);
 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;
 
 function TConnectionName.GetSchemaInfoSQL(SchemaType: TSchemaType;