Browse Source

fcl-db: oracle: fix transaction parameters handling (only one of OCI_TRANS_READONLY, OCI_TRANS_READWRITE, OCI_TRANS_SERIALIZABLE should be used). Bug #28043

git-svn-id: trunk@30814 -
lacak 10 years ago
parent
commit
31c1581b9f
1 changed files with 8 additions and 11 deletions
  1. 8 11
      packages/fcl-db/src/sqldb/oracle/oracleconnection.pp

+ 8 - 11
packages/fcl-db/src/sqldb/oracle/oracleconnection.pp

@@ -767,30 +767,27 @@ end;
 
 
 function TOracleConnection.StartDBTransaction(trans: TSQLHandle; AParams: string): boolean;
 function TOracleConnection.StartDBTransaction(trans: TSQLHandle; AParams: string): boolean;
 var
 var
-  x_flags : ub4;
+  flags : ub4;
   i : Integer;
   i : Integer;
   s : string;
   s : string;
   locTrans : TOracleTrans;
   locTrans : TOracleTrans;
 begin
 begin
-  locTrans := TOracleTrans(trans);
-  if ( Length(AParams) = 0 ) then begin
-    x_flags := OCI_TRANS_NEW or OCI_TRANS_READWRITE;
-  end else begin
-    x_flags := OCI_DEFAULT;
+  flags := OCI_TRANS_NEW or OCI_TRANS_READWRITE;
+  if AParams <> '' then begin
     i := 1;
     i := 1;
     s := ExtractSubStr(AParams,i,StdWordDelims);
     s := ExtractSubStr(AParams,i,StdWordDelims);
     while ( s <> '' ) do begin
     while ( s <> '' ) do begin
       if ( s = 'readonly' ) then
       if ( s = 'readonly' ) then
-        x_flags := x_flags and OCI_TRANS_READONLY
+        flags := flags and OCI_TRANS_READONLY
       else if ( s = 'serializable' ) then
       else if ( s = 'serializable' ) then
-        x_flags := x_flags and OCI_TRANS_SERIALIZABLE
+        flags := flags and OCI_TRANS_SERIALIZABLE
       else if ( s = 'readwrite' ) then
       else if ( s = 'readwrite' ) then
-        x_flags := x_flags and OCI_TRANS_READWRITE;
+        flags := flags and OCI_TRANS_READWRITE;
       s := ExtractSubStr(AParams,i,StdWordDelims);
       s := ExtractSubStr(AParams,i,StdWordDelims);
     end;
     end;
-    x_flags := x_flags and OCI_TRANS_NEW;
   end;
   end;
-  locTrans.FOciFlags := x_flags;
+  locTrans := TOracleTrans(trans);
+  locTrans.FOciFlags := flags;
   InternalStartDBTransaction(locTrans);
   InternalStartDBTransaction(locTrans);
   Result := True;
   Result := True;
 end;
 end;