db = $db; $this->table = $table; $this->clusterName = $clusterName; } /** * Use ->setCaller( __METHOD__ ) to indicate which code is using this * class. Only used in debugging output. * @since 1.36 * * @param string $caller * @return self */ public function setCaller( $caller ) { $this->caller = $caller; return $this; } /** * @param array[][] $updates Array of arrays each containing two keys, 'primaryKey' * and 'changes'. primaryKey must contain a map of column names to values * sufficient to uniquely identify the row. changes must contain a map of column * names to update values to apply to the row. * @phan-param array $updates */ public function write( array $updates ) { $dbProvider = MediaWikiServices::getInstance()->getConnectionProvider(); $ticket = $dbProvider->getEmptyTransactionTicket( __METHOD__ ); $caller = __METHOD__; if ( (string)$this->caller !== '' ) { $caller .= " (for {$this->caller})"; } foreach ( $updates as $update ) { $this->db->newUpdateQueryBuilder() ->update( $this->table ) ->set( $update['changes'] ) ->where( $update['primaryKey'] ) ->caller( $caller )->execute(); } $dbProvider->commitAndWaitForReplication( __METHOD__, $ticket ); } }