Something went wrong. Try again.
@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main hq.recaptime.dev/wiki/Phorge
phorge phabricator
Something went wrong. Try again.
2.4 kB · 105 lines
PHP
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106<?php
/** * Represents current transaction state of a connection. */final class AphrontDatabaseTransactionState extends Phobject {
private $depth = 0; private $readLockLevel = 0; private $writeLockLevel = 0;
public function getDepth() { return $this->depth; }
public function increaseDepth() { return ++$this->depth; }
public function decreaseDepth() { if ($this->depth == 0) { throw new Exception( pht( 'Too many calls to %s or %s!', 'saveTransaction()', 'killTransaction()')); }
return --$this->depth; }
public function getSavepointName() { return 'Aphront_Savepoint_'.$this->depth; }
public function beginReadLocking() { $this->readLockLevel++; return $this; }
public function endReadLocking() { if ($this->readLockLevel == 0) { throw new Exception( pht( 'Too many calls to %s!', __FUNCTION__.'()')); } $this->readLockLevel--; return $this; }
public function isReadLocking() { return ($this->readLockLevel > 0); }
public function beginWriteLocking() { $this->writeLockLevel++; return $this; }
public function endWriteLocking() { if ($this->writeLockLevel == 0) { throw new Exception( pht( 'Too many calls to %s!', __FUNCTION__.'()')); } $this->writeLockLevel--; return $this; }
public function isWriteLocking() { return ($this->writeLockLevel > 0); }
public function __destruct() { if ($this->depth) { throw new Exception( pht( 'Process exited with an open transaction! The transaction '. 'will be implicitly rolled back. Calls to %s must always be '. 'paired with a call to %s or %s.', 'openTransaction()', 'saveTransaction()', 'killTransaction()')); } if ($this->readLockLevel) { throw new Exception( pht( 'Process exited with an open read lock! Call to %s '. 'must always be paired with a call to %s.', 'beginReadLocking()', 'endReadLocking()')); } if ($this->writeLockLevel) { throw new Exception( pht( 'Process exited with an open write lock! Call to %s '. 'must always be paired with a call to %s.', 'beginWriteLocking()', 'endWriteLocking()')); } }
}