Skip to content

Commit efa0d98

Browse files
committed
Made transaction isolation level settings easier to understand
1 parent e1fd726 commit efa0d98

File tree

1 file changed

+12
-22
lines changed

1 file changed

+12
-22
lines changed

ext/pdo_firebird/firebird_driver.c

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -761,51 +761,41 @@ static bool php_firebird_begin_transaction(pdo_dbh_t *dbh, bool is_auto_commit_t
761761
pdo_firebird_db_handle *H = (pdo_firebird_db_handle *)dbh->driver_data;
762762

763763
/* 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;
765767

766768
if (is_auto_commit_txn) {
767769
/*
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`.
770771
*/
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;
773774
} else {
774775
switch (H->txn_isolation_level) {
775776
/*
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
777778
* commit or rollback if there is indeterminate data.
778779
* Introducing too many configuration values ​​at once can cause confusion, so
779780
* 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.
784781
*/
785782
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
788785
break;
789786

790787
case PDO_FB_SERIALIZABLE:
791-
*ptpb++ = isc_tpb_consistency;
788+
tpb[2] = isc_tpb_consistency;
792789
break;
793790

794791
case PDO_FB_REPEATABLE_READ:
795792
default:
796-
*ptpb++ = isc_tpb_concurrency;
793+
tpb[2] = isc_tpb_concurrency;
797794
break;
798795
}
799796
}
800797

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)) {
809799
php_firebird_error(dbh);
810800
return false;
811801
}

0 commit comments

Comments
 (0)