After
36f4daf32c was merged, Aaron pointed out on Gerrit that:
Transaction can be used on replicas for REPEATABLE-READ mode, so
queries in that transaction see the same version of the DB. Those
do not involve writes and things would probably break sometimes
without it (like reads following foreign keys and reference in
separate queries).
So allow no-write connections to call begin() and commit(), and only
throw an exception when a write query is attempted.
Bug: T183265
Change-Id: I138677a714df13ead08061c3e9ef794c3befbe9d
}
final public function begin( $fname = __METHOD__, $mode = self::TRANSACTION_EXPLICIT ) {
}
final public function begin( $fname = __METHOD__, $mode = self::TRANSACTION_EXPLICIT ) {
- if ( !$this->allowWrite ) {
- throw new DBError(
- $this,
- 'Write operations are not allowed on this database connection!'
- );
- }
-
// Protect against mismatched atomic section, transaction nesting, and snapshot loss
if ( $this->mTrxLevel ) {
if ( $this->mTrxAtomicLevels ) {
// Protect against mismatched atomic section, transaction nesting, and snapshot loss
if ( $this->mTrxLevel ) {
if ( $this->mTrxAtomicLevels ) {
}
final public function commit( $fname = __METHOD__, $flush = '' ) {
}
final public function commit( $fname = __METHOD__, $flush = '' ) {
- if ( !$this->allowWrite ) {
- // we should never get here, since begin() would already throw
- throw new DBError(
- $this,
- 'Write operations are not allowed on this database connection!'
- );
- }
-
if ( $this->mTrxLevel && $this->mTrxAtomicLevels ) {
// There are still atomic sections open. This cannot be ignored
$levels = implode( ', ', $this->mTrxAtomicLevels );
if ( $this->mTrxLevel && $this->mTrxAtomicLevels ) {
// There are still atomic sections open. This cannot be ignored
$levels = implode( ', ', $this->mTrxAtomicLevels );