@@ -761,51 +761,41 @@ static bool php_firebird_begin_transaction(pdo_dbh_t *dbh, bool is_auto_commit_t
761
761
pdo_firebird_db_handle * H = (pdo_firebird_db_handle * )dbh -> driver_data ;
762
762
763
763
/* isc_xxx are all 1 byte. */
764
- char tpb [5 ] = { isc_tpb_version3 }, * ptpb = tpb + 1 ;
764
+ char tpb [5 ] = { isc_tpb_version3 };
765
+
766
+ tpb [1 ] = H -> is_writable_txn ? isc_tpb_write : isc_tpb_read ;
765
767
766
768
if (is_auto_commit_txn ) {
767
769
/*
768
- * In autocommit mode, we need to always read the latest information, that is,
769
- * expect phantom reads, so we set read committed.
770
+ * In autocommit mode, we need to always read the latest information, so we set `read committed`.
770
771
*/
771
- * ptpb ++ = isc_tpb_read_committed ;
772
- * ptpb ++ = isc_tpb_rec_version ;
772
+ tpb [ 2 ] = isc_tpb_read_committed ;
773
+ tpb [ 3 ] = isc_tpb_rec_version ;
773
774
} else {
774
775
switch (H -> txn_isolation_level ) {
775
776
/*
776
- * firebird's read committed has the option to wait until other transactions
777
+ * firebird's ` read committed` has the option to wait until other transactions
777
778
* commit or rollback if there is indeterminate data.
778
779
* Introducing too many configuration values at once can cause confusion, so
779
780
* we don't support in PDO that feature yet.
780
- *
781
- * Also, there is information that depending on the settings, it is possible to
782
- * reproduce behavior like read uncommited, but at least with the current firebird
783
- * API, this is not possible.
784
781
*/
785
782
case PDO_FB_READ_COMMITTED :
786
- * ptpb ++ = isc_tpb_read_committed ;
787
- * ptpb ++ = isc_tpb_rec_version ;
783
+ tpb [ 2 ] = isc_tpb_read_committed ;
784
+ tpb [ 3 ] = isc_tpb_rec_version ; // not wait to commit indeterminate data
788
785
break ;
789
786
790
787
case PDO_FB_SERIALIZABLE :
791
- * ptpb ++ = isc_tpb_consistency ;
788
+ tpb [ 2 ] = isc_tpb_consistency ;
792
789
break ;
793
790
794
791
case PDO_FB_REPEATABLE_READ :
795
792
default :
796
- * ptpb ++ = isc_tpb_concurrency ;
793
+ tpb [ 2 ] = isc_tpb_concurrency ;
797
794
break ;
798
795
}
799
796
}
800
797
801
-
802
- if (H -> is_writable_txn ) {
803
- * ptpb ++ = isc_tpb_write ;
804
- } else {
805
- * ptpb ++ = isc_tpb_read ;
806
- }
807
-
808
- if (isc_start_transaction (H -> isc_status , & H -> tr , 1 , & H -> db , (unsigned short )(ptpb - tpb ), tpb )) {
798
+ if (isc_start_transaction (H -> isc_status , & H -> tr , 1 , & H -> db , sizeof (tpb ), tpb )) {
809
799
php_firebird_error (dbh );
810
800
return false;
811
801
}
0 commit comments