* @since 1.20
*/
class DBFileJournal extends FileJournal {
+ /** @var DatabaseBase */
+ protected $dbw;
+
protected $wiki = false; // string; wiki DB name
/**
* Construct a new instance from configuration.
* $config includes:
* 'wiki' : wiki name to use for LoadBalancer
- *
+ *
* @param $config Array
*/
protected function __construct( array $config ) {
'fj_backend' => $this->backend,
'fj_op' => $entry['op'],
'fj_path' => $entry['path'],
- 'fj_path_sha1' => wfBaseConvert( sha1( $entry['path'] ), 16, 36, 31 ),
'fj_new_sha1' => $entry['newSha1'],
'fj_timestamp' => $dbw->timestamp( $now )
);
}
try {
- $dbw->begin();
$dbw->insert( 'filejournal', $data, __METHOD__ );
- $dbw->commit();
} catch ( DBError $e ) {
$status->fatal( 'filejournal-fail-dbquery', $this->backend );
return $status;
return $status;
}
+ /**
+ * @see FileJournal::doGetCurrentPosition()
+ * @return integer|false
+ */
+ protected function doGetCurrentPosition() {
+ $dbw = $this->getMasterDB();
+
+ return $dbw->selectField( 'filejournal', 'MAX(fj_id)',
+ array( 'fj_backend' => $this->backend ),
+ __METHOD__
+ );
+ }
+
/**
* @see FileJournal::doGetChangeEntries()
* @return Array
$dbw = $this->getMasterDB();
$dbCutoff = $dbw->timestamp( time() - 86400 * $this->ttlDays );
- $dbw->begin();
$dbw->delete( 'filejournal',
array( 'fj_timestamp < ' . $dbw->addQuotes( $dbCutoff ) ),
__METHOD__
);
- $dbw->commit();
return $status;
}
* @throws DBError
*/
protected function getMasterDB() {
- $lb = wfGetLBFactory()->newMainLB();
- return $lb->getConnection( DB_MASTER, array(), $this->wiki );
+ if ( !$this->dbw ) {
+ // Get a separate connection in autocommit mode
+ $lb = wfGetLBFactory()->newMainLB();
+ $this->dbw = $lb->getConnection( DB_MASTER, array(), $this->wiki );
+ $this->dbw->clearFlag( DBO_TRX );
+ }
+ return $this->dbw;
}
}