3 use Wikimedia\Rdbms\IDatabase
;
6 * Deferrable Update for closure/callback
8 class MWCallableUpdate
implements DeferrableUpdate
, DeferrableCallback
{
9 /** @var callable|null */
15 * @param callable $callback
16 * @param string $fname Calling method
17 * @param IDatabase|null $dbw Abort if this DB is rolled back [optional] (since 1.28)
19 public function __construct( callable
$callback, $fname = 'unknown', IDatabase
$dbw = null ) {
20 $this->callback
= $callback;
21 $this->fname
= $fname;
23 if ( $dbw && $dbw->trxLevel() ) {
24 $dbw->onTransactionResolution( [ $this, 'cancelOnRollback' ], $fname );
28 public function doUpdate() {
29 if ( $this->callback
) {
30 call_user_func( $this->callback
);
34 public function cancelOnRollback( $trigger ) {
35 if ( $trigger === IDatabase
::TRIGGER_ROLLBACK
) {
36 $this->callback
= null;
40 public function getOrigin() {