MediaWiki master
MediaWiki\Revision\RevisionStore Class Reference

Service for looking up page revisions. More...

Inherits MediaWiki\Revision\RevisionFactory, MediaWiki\Revision\RevisionLookup, and LoggerAwareInterface.

Collaboration diagram for MediaWiki\Revision\RevisionStore:

Public Member Functions

 __construct (ILoadBalancer $loadBalancer, SqlBlobStore $blobStore, WANObjectCache $cache, BagOStuff $localCache, CommentStore $commentStore, NameTableStore $contentModelStore, NameTableStore $slotRoleStore, SlotRoleRegistry $slotRoleRegistry, ActorStore $actorStore, IContentHandlerFactory $contentHandlerFactory, PageStore $pageStore, TitleFactory $titleFactory, HookContainer $hookContainer, $wikiId=WikiAwareEntity::LOCAL)
 
 countAuthorsBetween ( $pageId, ?RevisionRecord $old=null, ?RevisionRecord $new=null, ?Authority $performer=null, $max=null, $options=[])
 Get the number of authors between the given revisions.
 
 countRevisionsBetween ( $pageId, ?RevisionRecord $old=null, ?RevisionRecord $new=null, $max=null, $options=[])
 Get the number of revisions between the given revisions.
 
 countRevisionsByPageId (IReadableDatabase $db, $id)
 Get count of revisions per page...not very efficient.
 
 countRevisionsByTitle (IReadableDatabase $db, PageIdentity $page)
 Get count of revisions per page...not very efficient.
 
 findIdenticalRevision (RevisionRecord $revision, int $searchLimit)
 Tries to find a revision identical to $revision in $searchLimit most recent revisions of this page.
 
 getArchiveQueryInfo ()
 Return the tables, fields, and join conditions to be selected to create a new RevisionArchiveRecord object.
 
 getAuthorsBetween ( $pageId, ?RevisionRecord $old=null, ?RevisionRecord $new=null, ?Authority $performer=null, $max=null, $options=[])
 Get the authors between the given revisions or revisions.
 
 getContentBlobsForBatch ( $rowsOrIds, $slots=null, $queryFlags=0)
 Gets raw (serialized) content blobs for the given set of revisions.
 
 getFirstRevision ( $page, int $flags=IDBAccessObject::READ_NORMAL)
 Get the first revision of a given page.
 
 getKnownCurrentRevision (PageIdentity $page, $revId=0)
 Load a revision based on a known page ID and current revision ID from the DB.
 
 getNextRevision (RevisionRecord $rev, $flags=IDBAccessObject::READ_NORMAL)
 Get the revision after $rev in the page's history, if any.
 
 getPreviousRevision (RevisionRecord $rev, $flags=IDBAccessObject::READ_NORMAL)
 Get the revision before $rev in the page's history, if any.
 
 getQueryInfo ( $options=[])
 Return the tables, fields, and join conditions to be selected to create a new RevisionStoreRecord object.
 
 getRcIdIfUnpatrolled (RevisionRecord $rev)
 MCR migration note: this replaced Revision::isUnpatrolled.
 
 getRecentChange (RevisionRecord $rev, $flags=0)
 Get the RC object belonging to the current revision, if there's one.
 
 getRevisionById ( $id, $flags=0, ?PageIdentity $page=null)
 Load a page revision from a given revision ID number.
 
 getRevisionByPageId ( $pageId, $revId=0, $flags=0)
 Load either the current, or a specified, revision that's attached to a given page ID.
 
 getRevisionByTimestamp ( $page, string $timestamp, int $flags=IDBAccessObject::READ_NORMAL)
 Load the revision for the given title with the given timestamp.
 
 getRevisionByTitle ( $page, $revId=0, $flags=0)
 Load either the current, or a specified, revision that's attached to a given link target.
 
 getRevisionIdsBetween (int $pageId, ?RevisionRecord $old=null, ?RevisionRecord $new=null, ?int $max=null, $options=[], ?string $order=null, int $flags=IDBAccessObject::READ_NORMAL)
 Get IDs of revisions between the given revisions.
 
 getRevisionSizes (array $revIds)
 Do a batched query for the sizes of a set of revisions.
 
 getSlotsQueryInfo ( $options=[])
 Return the tables, fields, and join conditions to be selected to create a new SlotRecord.
 
 getTimestampFromId ( $id, $flags=0)
 Get rev_timestamp from rev_id, without loading the rest of the row.
 
 getTitle ( $pageId, $revId, $queryFlags=IDBAccessObject::READ_NORMAL)
 Determines the page Title based on the available information.
 
 getWikiId ()
 Get the ID of the wiki this revision belongs to.
 
 insertRevisionOn (RevisionRecord $rev, IDatabase $dbw)
 Insert a new revision into the database, returning the new revision record on success and dies horribly on failure.
 
 isReadOnly ()
 
 isRevisionRow ( $row, string $table='')
 Determine whether the parameter is a row containing all the fields that RevisionStore needs to create a RevisionRecord from the row.
 
 newArchiveSelectQueryBuilder (IReadableDatabase $dbr)
 Return a SelectQueryBuilder to allow querying archive table.
Since
1.41
Parameters
IReadableDatabase$dbrA db object to do the query on.
Returns
ArchiveSelectQueryBuilder

 
 newNullRevision (IDatabase $dbw, PageIdentity $page, CommentStoreComment $comment, $minor, UserIdentity $user)
 Create a new null-revision for insertion into a page's history.
 
 newRevisionFromArchiveRow ( $row, $queryFlags=0, ?PageIdentity $page=null, array $overrides=[])
 Make a fake RevisionRecord object from an archive table row.
 
 newRevisionFromArchiveRowAndSlots (stdClass $row, $slots, int $queryFlags=0, ?PageIdentity $page=null, array $overrides=[])
 
 newRevisionFromRow ( $row, $queryFlags=0, ?PageIdentity $page=null, $fromCache=false)
 
 newRevisionFromRowAndSlots (stdClass $row, $slots, int $queryFlags=0, ?PageIdentity $page=null, bool $fromCache=false)
 
 newRevisionsFromBatch ( $rows, array $options=[], $queryFlags=0, ?PageIdentity $page=null)
 Construct a RevisionRecord instance for each row in $rows, and return them as an associative array indexed by revision ID.
 
 newSelectQueryBuilder (IReadableDatabase $dbr)
 Return a SelectQueryBuilder to allow querying revision store.
Since
1.41
Parameters
IReadableDatabase$dbrA db object to do the query on.
Returns
RevisionSelectQueryBuilder

 
 setLogger (LoggerInterface $logger)
 
 updateSlotsOn (RevisionRecord $revision, RevisionSlotsUpdate $revisionSlotsUpdate, IDatabase $dbw)
 Update derived slots in an existing revision into the database, returning the modified slots on success.
 
 userWasLastToEdit (IReadableDatabase $db, $pageId, $userId, $since)
 Check if no edits were made by other users since the time a user started editing the page.
 
- Public Member Functions inherited from MediaWiki\Revision\RevisionFactory
 newRevisionFromRow ( $row, $queryFlags=IDBAccessObject::READ_NORMAL, ?PageIdentity $page=null)
 Constructs a RevisionRecord given a database row and content slots.
 

Public Attributes

const INCLUDE_BOTH = 'include_both'
 
const INCLUDE_NEW = 'include_new'
 
const INCLUDE_OLD = 'include_old'
 
const ORDER_NEWEST_TO_OLDEST = 'DESC'
 
const ORDER_OLDEST_TO_NEWEST = 'ASC'
 
const ROW_CACHE_KEY = 'revision-row-1.29'
 

Detailed Description

Service for looking up page revisions.

Since
1.31
1.32 Renamed from MediaWiki\Storage\RevisionStore
Note
This was written to act as a drop-in replacement for the corresponding static methods in the old Revision class (which was later removed in 1.37).

Definition at line 91 of file RevisionStore.php.

Constructor & Destructor Documentation

◆ __construct()

MediaWiki\Revision\RevisionStore::__construct ( ILoadBalancer $loadBalancer,
SqlBlobStore $blobStore,
WANObjectCache $cache,
BagOStuff $localCache,
CommentStore $commentStore,
NameTableStore $contentModelStore,
NameTableStore $slotRoleStore,
SlotRoleRegistry $slotRoleRegistry,
ActorStore $actorStore,
IContentHandlerFactory $contentHandlerFactory,
PageStore $pageStore,
TitleFactory $titleFactory,
HookContainer $hookContainer,
$wikiId = WikiAwareEntity::LOCAL )
Parameters
ILoadBalancer$loadBalancer
SqlBlobStore$blobStore
WANObjectCache$cacheA cache for caching revision rows. This can be the local wiki's default instance even if $wikiId refers to a different wiki, since makeGlobalKey() is used to constructed a key that allows cached revision rows from the same database to be re-used between wikis. For example, enwiki and frwiki will use the same cache keys for revision rows from the wikidatawiki database, regardless of the cache's default key space.
BagOStuff$localCacheAnother layer of cache, best to use APCu here.
CommentStore$commentStore
NameTableStore$contentModelStore
NameTableStore$slotRoleStore
SlotRoleRegistry$slotRoleRegistry
ActorStore$actorStore
IContentHandlerFactory$contentHandlerFactory
PageStore$pageStore
TitleFactory$titleFactory
HookContainer$hookContainer
false | string$wikiIdRelevant wiki id or WikiAwareEntity::LOCAL for the current one
Todo
$blobStore should be allowed to be any BlobStore!

Definition at line 192 of file RevisionStore.php.

Member Function Documentation

◆ countAuthorsBetween()

MediaWiki\Revision\RevisionStore::countAuthorsBetween ( $pageId,
?RevisionRecord $old = null,
?RevisionRecord $new = null,
?Authority $performer = null,
$max = null,
$options = [] )

Get the number of authors between the given revisions.

Used for diffs and other things that really need it.

Since
1.35
Parameters
int$pageIdThe id of the page
RevisionRecord | null$oldOld revision . If null is provided, count starting from the first revision (inclusive).
RevisionRecord | null$newNew revision. If null is provided, count until the last revision (inclusive).
Authority | null$performerthe user whose access rights to apply
int | null$maxLimit of Revisions to count, will be incremented to detect truncations.
string | array$optionsSingle option, or an array of options: RevisionStore::INCLUDE_OLD Include $old in the range; $new is excluded. RevisionStore::INCLUDE_NEW Include $new in the range; $old is excluded. RevisionStore::INCLUDE_BOTH Include both $old and $new in the range.
Exceptions
InvalidArgumentExceptionin case either revision is unsaved or the revisions do not belong to the same page or unknown option is passed.
Returns
int Number of revisions authors in the range.

Definition at line 3314 of file RevisionStore.php.

◆ countRevisionsBetween()

MediaWiki\Revision\RevisionStore::countRevisionsBetween ( $pageId,
?RevisionRecord $old = null,
?RevisionRecord $new = null,
$max = null,
$options = [] )

Get the number of revisions between the given revisions.

Used for diffs and other things that really need it.

Since
1.35
Parameters
int$pageIdThe id of the page
RevisionRecord | null$oldOld revision. If null is provided, count starting from the first revision (inclusive).
RevisionRecord | null$newNew revision. If null is provided, count until the last revision (inclusive).
int | null$maxLimit of Revisions to count, will be incremented to detect truncations.
string | array$optionsSingle option, or an array of options: RevisionStore::INCLUDE_OLD Include $old in the range; $new is excluded. RevisionStore::INCLUDE_NEW Include $new in the range; $old is excluded. RevisionStore::INCLUDE_BOTH Include both $old and $new in the range.
Exceptions
InvalidArgumentExceptionin case either revision is unsaved or the revisions do not belong to the same page.
Returns
int Number of revisions between these revisions.

Definition at line 3347 of file RevisionStore.php.

◆ countRevisionsByPageId()

MediaWiki\Revision\RevisionStore::countRevisionsByPageId ( IReadableDatabase $db,
$id )

Get count of revisions per page...not very efficient.

MCR migration note: this replaced Revision::countByPageId

Parameters
IReadableDatabase$db
int$idPage id
Returns
int

Definition at line 2874 of file RevisionStore.php.

References Wikimedia\Rdbms\IReadableDatabase\newSelectQueryBuilder().

◆ countRevisionsByTitle()

MediaWiki\Revision\RevisionStore::countRevisionsByTitle ( IReadableDatabase $db,
PageIdentity $page )

Get count of revisions per page...not very efficient.

MCR migration note: this replaced Revision::countByTitle

Parameters
IReadableDatabase$db
PageIdentity$page
Returns
int

Definition at line 2897 of file RevisionStore.php.

◆ findIdenticalRevision()

MediaWiki\Revision\RevisionStore::findIdenticalRevision ( RevisionRecord $revision,
int $searchLimit )

Tries to find a revision identical to $revision in $searchLimit most recent revisions of this page.

The comparison is based on SHA1s of these revisions.

Since
1.37
Parameters
RevisionRecord$revisionwhich revision to compare to
int$searchLimitHow many recent revisions should be checked
Returns
RevisionRecord|null

Definition at line 3401 of file RevisionStore.php.

◆ getArchiveQueryInfo()

MediaWiki\Revision\RevisionStore::getArchiveQueryInfo ( )

Return the tables, fields, and join conditions to be selected to create a new RevisionArchiveRecord object.

Since 1.34, ar_user and ar_user_text have not been present in the database, but they continue to be available in query results as aliases.

MCR migration note: this replaced Revision::getArchiveQueryInfo

Since
1.31
Deprecated
since 1.41 use RevisionStore::newArchiveSelectQueryBuilder() instead.
Returns
array[] With three keys:
  • tables: (string[]) to include in the $table to IDatabase->select() or SelectQueryBuilder::tables
  • fields: (string[]) to include in the $vars to IDatabase->select() or SelectQueryBuilder::fields
  • joins: (array) to include in the $join_conds to IDatabase->select() or SelectQueryBuilder::joinConds

Implements MediaWiki\Revision\RevisionFactory.

Definition at line 2634 of file RevisionStore.php.

◆ getAuthorsBetween()

MediaWiki\Revision\RevisionStore::getAuthorsBetween ( $pageId,
?RevisionRecord $old = null,
?RevisionRecord $new = null,
?Authority $performer = null,
$max = null,
$options = [] )

Get the authors between the given revisions or revisions.

Used for diffs and other things that really need it.

Since
1.35
Parameters
int$pageIdThe id of the page
RevisionRecord | null$oldOld revision. If null is provided, count starting from the first revision (inclusive).
RevisionRecord | null$newNew revision. If null is provided, count until the last revision (inclusive).
Authority | null$performerthe user whose access rights to apply
int | null$maxLimit of Revisions to count, will be incremented to detect truncations.
string | array$optionsSingle option, or an array of options: RevisionStore::INCLUDE_OLD Include $old in the range; $new is excluded. RevisionStore::INCLUDE_NEW Include $new in the range; $old is excluded. RevisionStore::INCLUDE_BOTH Include both $old and $new in the range.
Exceptions
InvalidArgumentExceptionin case either revision is unsaved or the revisions do not belong to the same page or unknown option is passed.
Returns
UserIdentity[] Names of revision authors in the range

Definition at line 3235 of file RevisionStore.php.

◆ getContentBlobsForBatch()

MediaWiki\Revision\RevisionStore::getContentBlobsForBatch ( $rowsOrIds,
$slots = null,
$queryFlags = 0 )

Gets raw (serialized) content blobs for the given set of revisions.

Callers are responsible for unserializing and interpreting the content blobs based on the model_name field and the slot role.

This method is intended for bulk operations in maintenance scripts. It may be chosen over newRevisionsFromBatch by code that are only interested in raw content, as opposed to meta data. Code that needs to access meta data of revisions, slots, or content objects should use newRevisionsFromBatch() instead.

Parameters
Traversable | array$rowsOrIdslist of revision ids, or revision rows from a db query.
array | null$slotsthe role names for which to get slots.
int$queryFlags
Returns
StatusValue a status containing, if isOK() returns true, a two-level nested associative array, mapping from revision ID to an associative array that maps from role name to an anonymous object containing two fields:
  • model_name: the name of the content's model
  • blob_data: serialized content data

Definition at line 2269 of file RevisionStore.php.

◆ getFirstRevision()

MediaWiki\Revision\RevisionStore::getFirstRevision ( $page,
int $flags = IDBAccessObject::READ_NORMAL )

Get the first revision of a given page.

Since
1.35
Parameters
LinkTarget | PageIdentity$pageCalling with LinkTarget is deprecated since 1.36
int$flags
Returns
RevisionRecord|null

Implements MediaWiki\Revision\RevisionLookup.

Definition at line 3031 of file RevisionStore.php.

◆ getKnownCurrentRevision()

MediaWiki\Revision\RevisionStore::getKnownCurrentRevision ( PageIdentity $page,
$revId = 0 )

Load a revision based on a known page ID and current revision ID from the DB.

This method allows for the use of caching, though accessing anything that normally requires permission checks (aside from the text) will trigger a small DB lookup.

MCR migration note: this replaced Revision::newKnownCurrent

Parameters
PageIdentity$pagethe associated page
int$revIdcurrent revision of this page. Defaults to $title->getLatestRevID().
Returns
RevisionRecord|false Returns false if missing

Implements MediaWiki\Revision\RevisionLookup.

Definition at line 2959 of file RevisionStore.php.

References MediaWiki\Page\PageReference\__toString().

◆ getNextRevision()

MediaWiki\Revision\RevisionStore::getNextRevision ( RevisionRecord $rev,
$flags = IDBAccessObject::READ_NORMAL )

Get the revision after $rev in the page's history, if any.

Will return null for the latest revision but also for deleted or unsaved revisions.

MCR migration note: this replaced Revision::getNext

Parameters
RevisionRecord$rev
int$flags(optional) $flags include: IDBAccessObject::READ_LATEST: Select the data from the primary DB
Returns
RevisionRecord|null

Implements MediaWiki\Revision\RevisionLookup.

Definition at line 2785 of file RevisionStore.php.

◆ getPreviousRevision()

MediaWiki\Revision\RevisionStore::getPreviousRevision ( RevisionRecord $rev,
$flags = IDBAccessObject::READ_NORMAL )

Get the revision before $rev in the page's history, if any.

Will return null for the first revision but also for deleted or unsaved revisions.

MCR migration note: this replaced Revision::getPrevious

See also
PageArchive::getPreviousRevisionRecord
Parameters
RevisionRecord$rev
int$flags(optional) $flags include: IDBAccessObject::READ_LATEST: Select the data from the primary DB
Returns
RevisionRecord|null

Implements MediaWiki\Revision\RevisionLookup.

Definition at line 2770 of file RevisionStore.php.

◆ getQueryInfo()

MediaWiki\Revision\RevisionStore::getQueryInfo ( $options = [])

Return the tables, fields, and join conditions to be selected to create a new RevisionStoreRecord object.

MCR migration note: this replaced Revision::getQueryInfo

If the format of fields returned changes in any way then the cache key provided by self::getRevisionRowCacheKey should be updated.

Since
1.31
Deprecated
since 1.41 use RevisionStore::newSelectQueryBuilder() instead.
Parameters
array$optionsAny combination of the following strings
  • 'page': Join with the page table, and select fields to identify the page
  • 'user': Join with the user table, and select the user name
Returns
array[] With three keys:
  • tables: (string[]) to include in the $table to IDatabase->select() or SelectQueryBuilder::tables
  • fields: (string[]) to include in the $vars to IDatabase->select() or SelectQueryBuilder::fields
  • joins: (array) to include in the $join_conds to IDatabase->select() or SelectQueryBuilder::joinConds

Implements MediaWiki\Revision\RevisionFactory.

Definition at line 2442 of file RevisionStore.php.

◆ getRcIdIfUnpatrolled()

MediaWiki\Revision\RevisionStore::getRcIdIfUnpatrolled ( RevisionRecord $rev)

MCR migration note: this replaced Revision::isUnpatrolled.

Todo
This is overly specific, so move or kill this method.
Parameters
RevisionRecord$rev
Returns
int Rcid of the unpatrolled row, zero if there isn't one

Definition at line 1111 of file RevisionStore.php.

◆ getRecentChange()

MediaWiki\Revision\RevisionStore::getRecentChange ( RevisionRecord $rev,
$flags = 0 )

Get the RC object belonging to the current revision, if there's one.

MCR migration note: this replaced Revision::getRecentChange

Todo
move this somewhere else?
Parameters
RevisionRecord$rev
int$flags(optional) $flags include: IDBAccessObject::READ_LATEST: Select the data from the primary DB
Returns
null|RecentChange

Definition at line 1133 of file RevisionStore.php.

References DB_PRIMARY, DB_REPLICA, MediaWiki\Revision\RevisionRecord\getId(), RC_EDIT, RC_LOG, and RC_NEW.

◆ getRevisionById()

MediaWiki\Revision\RevisionStore::getRevisionById ( $id,
$flags = 0,
?PageIdentity $page = null )

Load a page revision from a given revision ID number.

Returns null if no such revision can be found.

MCR migration note: this replaced Revision::newFromId

$flags include: IDBAccessObject::READ_LATEST: Select the data from the primary DB IDBAccessObject::READ_LOCKING : Select & lock the data from the primary DB

Parameters
int$id
int$flags(optional)
PageIdentity | null$pageThe page the revision belongs to. Providing the page may improve performance.
Returns
RevisionRecord|null

Implements MediaWiki\Revision\RevisionLookup.

Definition at line 1265 of file RevisionStore.php.

◆ getRevisionByPageId()

MediaWiki\Revision\RevisionStore::getRevisionByPageId ( $pageId,
$revId = 0,
$flags = 0 )

Load either the current, or a specified, revision that's attached to a given page ID.

Returns null if no such revision can be found.

MCR migration note: this replaced Revision::newFromPageId

$flags include: IDBAccessObject::READ_LATEST: Select the data from the primary DB (since 1.20) IDBAccessObject::READ_LOCKING : Select & lock the data from the primary DB

Parameters
int$pageId
int$revId(optional)
int$flagsBitfield (optional)
Returns
RevisionRecord|null

Implements MediaWiki\Revision\RevisionLookup.

Definition at line 1332 of file RevisionStore.php.

◆ getRevisionByTimestamp()

MediaWiki\Revision\RevisionStore::getRevisionByTimestamp ( $page,
string $timestamp,
int $flags = IDBAccessObject::READ_NORMAL )

Load the revision for the given title with the given timestamp.

WARNING: Timestamps may in some circumstances not be unique, so this isn't the best key to use.

MCR migration note: this replaced Revision::loadFromTimestamp

Parameters
LinkTarget | PageIdentity$pageCalling with LinkTarget is deprecated since 1.36
string$timestamp
int$flagsBitfield (optional) include: IDBAccessObject::READ_LATEST: Select the data from the primary DB IDBAccessObject::READ_LOCKING: Select & lock the data from the primary DB Default: IDBAccessObject::READ_NORMAL
Returns
RevisionRecord|null

Implements MediaWiki\Revision\RevisionLookup.

Definition at line 1371 of file RevisionStore.php.

◆ getRevisionByTitle()

MediaWiki\Revision\RevisionStore::getRevisionByTitle ( $page,
$revId = 0,
$flags = 0 )

Load either the current, or a specified, revision that's attached to a given link target.

If not attached to that link target, will return null.

MCR migration note: this replaced Revision::newFromTitle

$flags include: IDBAccessObject::READ_LATEST: Select the data from the primary DB IDBAccessObject::READ_LOCKING : Select & lock the data from the primary DB

Parameters
LinkTarget | PageIdentity$pageCalling with LinkTarget is deprecated since 1.36
int$revId(optional)
int$flagsBitfield (optional)
Returns
RevisionRecord|null

Implements MediaWiki\Revision\RevisionLookup.

Definition at line 1285 of file RevisionStore.php.

◆ getRevisionIdsBetween()

MediaWiki\Revision\RevisionStore::getRevisionIdsBetween ( int $pageId,
?RevisionRecord $old = null,
?RevisionRecord $new = null,
?int $max = null,
$options = [],
?string $order = null,
int $flags = IDBAccessObject::READ_NORMAL )

Get IDs of revisions between the given revisions.

Since
1.36
Parameters
int$pageIdThe id of the page
RevisionRecord | null$oldOld revision. If null is provided, count starting from the first revision (inclusive).
RevisionRecord | null$newNew revision. If null is provided, count until the last revision (inclusive).
int | null$maxLimit of Revisions to count, will be incremented by one to detect truncations.
string | array$optionsSingle option, or an array of options: RevisionStore::INCLUDE_OLD Include $old in the range; $new is excluded. RevisionStore::INCLUDE_NEW Include $new in the range; $old is excluded. RevisionStore::INCLUDE_BOTH Include both $old and $new in the range.
string | null$orderThe direction in which the revisions should be sorted. Possible values:
  • RevisionStore::ORDER_OLDEST_TO_NEWEST
  • RevisionStore::ORDER_NEWEST_TO_OLDEST
  • null for no specific ordering (default value)
int$flags
Exceptions
InvalidArgumentExceptionin case either revision is unsaved or the revisions do not belong to the same page or unknown option is passed.
Returns
int[]

Definition at line 3166 of file RevisionStore.php.

◆ getRevisionSizes()

MediaWiki\Revision\RevisionStore::getRevisionSizes ( array $revIds)

Do a batched query for the sizes of a set of revisions.

MCR migration note: this replaced Revision::getParentLengths

Parameters
int[]$revIds
Returns
int[] associative array mapping revision IDs from $revIds to the nominal size of the corresponding revision.

Definition at line 2674 of file RevisionStore.php.

◆ getSlotsQueryInfo()

MediaWiki\Revision\RevisionStore::getSlotsQueryInfo ( $options = [])

Return the tables, fields, and join conditions to be selected to create a new SlotRecord.

Since
1.32
Parameters
array$optionsAny combination of the following strings
  • 'content': Join with the content table, and select content meta-data fields
  • 'model': Join with the content_models table, and select the model_name field. Only applicable if 'content' is also set.
  • 'role': Join with the slot_roles table, and select the role_name field
Returns
array[] With three keys:
  • tables: (string[]) to include in the $table to IDatabase->select() or SelectQueryBuilder::tables
  • fields: (string[]) to include in the $vars to IDatabase->select() or SelectQueryBuilder::fields
  • joins: (array) to include in the $join_conds to IDatabase->select() or SelectQueryBuilder::joinConds
  • keys: (associative array) to look up fields to match against. In particular, the field that can be used to find slots by rev_id can be found in ['keys']['rev_id'].

Definition at line 2541 of file RevisionStore.php.

◆ getTimestampFromId()

MediaWiki\Revision\RevisionStore::getTimestampFromId ( $id,
$flags = 0 )

Get rev_timestamp from rev_id, without loading the rest of the row.

Historically, there was an extra Title parameter that was passed before $id. This is no longer needed and is deprecated in 1.34.

MCR migration note: this replaced Revision::getTimestampFromId

Parameters
int$id
int$flags
Returns
string|false False if not found

Implements MediaWiki\Revision\RevisionLookup.

Definition at line 2837 of file RevisionStore.php.

References Wikimedia\Rdbms\IReadableDatabase\newSelectQueryBuilder().

◆ getTitle()

MediaWiki\Revision\RevisionStore::getTitle ( $pageId,
$revId,
$queryFlags = IDBAccessObject::READ_NORMAL )

Determines the page Title based on the available information.

MCR migration note: this corresponded to Revision::getTitle

Deprecated
since 1.36, Use RevisionRecord::getPage() instead.
Note
The resulting Title object will be misleading if the RevisionStore is not for the local wiki.
Parameters
int | null$pageId
int | null$revId
int$queryFlags
Returns
Title
Exceptions
RevisionAccessException

Definition at line 290 of file RevisionStore.php.

References wfDeprecatedMsg().

◆ getWikiId()

MediaWiki\Revision\RevisionStore::getWikiId ( )

Get the ID of the wiki this revision belongs to.

Returns
string|false The wiki's logical name, of false to indicate the local wiki.

Definition at line 243 of file RevisionStore.php.

◆ insertRevisionOn()

MediaWiki\Revision\RevisionStore::insertRevisionOn ( RevisionRecord $rev,
IDatabase $dbw )

Insert a new revision into the database, returning the new revision record on success and dies horribly on failure.

This should be followed up by a WikiPage::updateRevisionOn on call to update page_latest on the page the revision is added to.

MCR migration note: this replaced Revision::insertOn

Parameters
RevisionRecord$rev
IDatabase$dbw(primary connection)
Returns
RevisionRecord the new revision record.

Definition at line 430 of file RevisionStore.php.

References Wikimedia\Rdbms\IDatabase\doAtomicSection(), MediaWiki\Revision\RevisionRecord\getComment(), MediaWiki\Revision\RevisionRecord\getId(), MediaWiki\Revision\RevisionRecord\getPage(), MediaWiki\Revision\RevisionRecord\getPageId(), MediaWiki\Revision\RevisionRecord\getParentId(), MediaWiki\Revision\RevisionRecord\getSha1(), MediaWiki\Revision\RevisionRecord\getSize(), MediaWiki\Revision\RevisionRecord\getSlot(), MediaWiki\Revision\RevisionRecord\getSlotRoles(), MediaWiki\Revision\RevisionRecord\getTimestamp(), MediaWiki\Revision\RevisionRecord\getUser(), and MediaWiki\Revision\RevisionRecord\isReadyForInsertion().

◆ isReadOnly()

MediaWiki\Revision\RevisionStore::isReadOnly ( )
Returns
bool Whether the store is read-only

Definition at line 234 of file RevisionStore.php.

◆ isRevisionRow()

MediaWiki\Revision\RevisionStore::isRevisionRow ( $row,
string $table = '' )

Determine whether the parameter is a row containing all the fields that RevisionStore needs to create a RevisionRecord from the row.

Parameters
mixed$row
string$table'archive' or empty
Returns
bool

Implements MediaWiki\Revision\RevisionFactory.

Definition at line 2601 of file RevisionStore.php.

◆ newArchiveSelectQueryBuilder()

MediaWiki\Revision\RevisionStore::newArchiveSelectQueryBuilder ( IReadableDatabase $dbr)

Return a SelectQueryBuilder to allow querying archive table.

Since
1.41
Parameters
IReadableDatabase$dbrA db object to do the query on.
Returns
ArchiveSelectQueryBuilder

Implements MediaWiki\Revision\RevisionFactory.

Definition at line 2516 of file RevisionStore.php.

◆ newNullRevision()

MediaWiki\Revision\RevisionStore::newNullRevision ( IDatabase $dbw,
PageIdentity $page,
CommentStoreComment $comment,
$minor,
UserIdentity $user )

Create a new null-revision for insertion into a page's history.

This will not re-save the text, but simply refer to the text from the previous version.

Such revisions can for instance identify page rename operations and other such meta-modifications.

Note
This method grabs a FOR UPDATE lock on the relevant row of the page table, to prevent a new revision from being inserted before the null revision has been written to the database.

MCR migration note: this replaced Revision::newNullRevision

Todo
Introduce newFromParentRevision(). newNullRevision can then be based on that (or go away).
Parameters
IDatabase$dbwused for obtaining the lock on the page table row
PageIdentity$pagethe page to read from
CommentStoreComment$commentRevisionRecord's summary
bool$minorWhether the revision should be considered as minor
UserIdentity$userThe user to attribute the revision to
Returns
RevisionRecord|null RevisionRecord or null on error

Definition at line 1041 of file RevisionStore.php.

References Wikimedia\Rdbms\IReadableDatabase\newSelectQueryBuilder().

◆ newRevisionFromArchiveRow()

MediaWiki\Revision\RevisionStore::newRevisionFromArchiveRow ( $row,
$queryFlags = 0,
?PageIdentity $page = null,
array $overrides = [] )

Make a fake RevisionRecord object from an archive table row.

This is queried for permissions or even inserted (as in Special:Undelete)

The user ID and user name may optionally be supplied using the aliases ar_user and ar_user_text (the names of fields which existed before MW 1.34).

MCR migration note: this replaced Revision::newFromArchiveRow

Parameters
\\stdClass$row
int$queryFlags
PageIdentity | null$page
array$overridesassociative array with fields of $row to override. This may be used e.g. to force the parent revision ID or page ID. Keys in the array are fields names from the archive table without the 'ar_' prefix, i.e. use 'parent_id' to override ar_parent_id.
Returns
RevisionRecord

Implements MediaWiki\Revision\RevisionFactory.

Definition at line 1601 of file RevisionStore.php.

◆ newRevisionFromArchiveRowAndSlots()

MediaWiki\Revision\RevisionStore::newRevisionFromArchiveRowAndSlots ( stdClass $row,
$slots,
int $queryFlags = 0,
?PageIdentity $page = null,
array $overrides = [] )
See also
newRevisionFromArchiveRow()
Since
1.35
Parameters
stdClass$row
null | stdClass[] | RevisionSlots$slots
  • Database rows generated from a query based on getSlotsQueryInfo with the 'content' flag set. Or
  • RevisionSlots instance
int$queryFlags
PageIdentity | null$page
array$overridesassociative array with fields of $row to override. This may be used e.g. to force the parent revision ID or page ID. Keys in the array are fields names from the archive table without the 'ar_' prefix, i.e. use 'parent_id' to override ar_parent_id.
Returns
RevisionRecord

Definition at line 1649 of file RevisionStore.php.

◆ newRevisionFromRow()

MediaWiki\Revision\RevisionStore::newRevisionFromRow ( $row,
$queryFlags = 0,
?PageIdentity $page = null,
$fromCache = false )
See also
RevisionFactory::newRevisionFromRow

MCR migration note: this replaced Revision::newFromRow

Parameters
\\stdClass$rowA database row generated from a query based on RevisionSelectQueryBuilder
int$queryFlags
PageIdentity | null$pagePreloaded page object
bool$fromCacheif true, the returned RevisionRecord will ensure that no stale data is returned from getters, by querying the database as needed
Returns
RevisionRecord

Definition at line 1622 of file RevisionStore.php.

◆ newRevisionFromRowAndSlots()

MediaWiki\Revision\RevisionStore::newRevisionFromRowAndSlots ( stdClass $row,
$slots,
int $queryFlags = 0,
?PageIdentity $page = null,
bool $fromCache = false )
See also
newFromRevisionRow()
Parameters
stdClass$rowA database row generated from a query based on RevisionSelectQueryBuilder
null | stdClass[] | RevisionSlots$slots
  • Database rows generated from a query based on getSlotsQueryInfo with the 'content' flag set. Or
  • RevisionSlots instance
int$queryFlags
PageIdentity | null$page
bool$fromCacheif true, the returned RevisionRecord will ensure that no stale data is returned from getters, by querying the database as needed
Returns
RevisionRecord
Exceptions
RevisionAccessException
See also
RevisionFactory::newRevisionFromRow

Definition at line 1723 of file RevisionStore.php.

◆ newRevisionsFromBatch()

MediaWiki\Revision\RevisionStore::newRevisionsFromBatch ( $rows,
array $options = [],
$queryFlags = 0,
?PageIdentity $page = null )

Construct a RevisionRecord instance for each row in $rows, and return them as an associative array indexed by revision ID.

Use RevisionSelectQueryBuilder or getArchiveQueryInfo() to construct the query that produces the rows.

Parameters
IResultWrapper | \\stdClass[]$rowsthe rows to construct revision records from
array$optionsSupports the following options: 'slots' - whether metadata about revision slots should be loaded immediately. Supports falsy or truthy value as well as an explicit list of slot role names. The main slot will always be loaded. 'content' - whether the actual content of the slots should be preloaded. 'archive' - whether the rows where generated using getArchiveQueryInfo(), rather than getQueryInfo.
int$queryFlags
PageIdentity | null$pageThe page to which all the revision rows belong, if there is such a page and the caller has it handy, so we don't have to look it up again. If this parameter is given and any of the rows has a rev_page_id that is different from Article Id associated with the page, an InvalidArgumentException is thrown.
Returns
StatusValue a status with a RevisionRecord[] of successfully fetched revisions and an array of errors for the revisions failed to fetch.

Definition at line 1935 of file RevisionStore.php.

References MediaWiki\Page\PageReference\getDBkey(), MediaWiki\Page\PageReference\getNamespace(), and if.

◆ newSelectQueryBuilder()

MediaWiki\Revision\RevisionStore::newSelectQueryBuilder ( IReadableDatabase $dbr)

Return a SelectQueryBuilder to allow querying revision store.

Since
1.41
Parameters
IReadableDatabase$dbrA db object to do the query on.
Returns
RevisionSelectQueryBuilder

Implements MediaWiki\Revision\RevisionFactory.

Definition at line 2509 of file RevisionStore.php.

◆ setLogger()

MediaWiki\Revision\RevisionStore::setLogger ( LoggerInterface $logger)

Definition at line 227 of file RevisionStore.php.

◆ updateSlotsOn()

MediaWiki\Revision\RevisionStore::updateSlotsOn ( RevisionRecord $revision,
RevisionSlotsUpdate $revisionSlotsUpdate,
IDatabase $dbw )

Update derived slots in an existing revision into the database, returning the modified slots on success.

Parameters
RevisionRecord$revisionAfter this method returns, the $revision object will be obsolete in that it does not have the new slots.
RevisionSlotsUpdate$revisionSlotsUpdate
IDatabase$dbw(primary connection)
Returns
SlotRecord[] the new slot records.
Access: internal

Definition at line 544 of file RevisionStore.php.

◆ userWasLastToEdit()

MediaWiki\Revision\RevisionStore::userWasLastToEdit ( IReadableDatabase $db,
$pageId,
$userId,
$since )

Check if no edits were made by other users since the time a user started editing the page.

Limit to 50 revisions for the sake of performance.

MCR migration note: this replaced Revision::userWasLastToEdit

Deprecated
since 1.31; Can possibly be removed, since the self-conflict suppression logic in EditPage that uses this seems conceptually dubious. Revision::userWasLastToEdit had been deprecated since 1.24 (the Revision class was removed entirely in 1.37).
Parameters
IReadableDatabase$dbThe Database to perform the check on.
int$pageIdThe ID of the page in question
int$userIdThe ID of the user in question
string$sinceLook at edits since this time
Returns
bool True if the given user was the only one to edit since the given timestamp

Definition at line 2923 of file RevisionStore.php.

References Wikimedia\Rdbms\IReadableDatabase\expr(), and Wikimedia\Rdbms\Platform\ISQLPlatform\timestamp().

Member Data Documentation

◆ INCLUDE_BOTH

const MediaWiki\Revision\RevisionStore::INCLUDE_BOTH = 'include_both'

Definition at line 103 of file RevisionStore.php.

◆ INCLUDE_NEW

const MediaWiki\Revision\RevisionStore::INCLUDE_NEW = 'include_new'

Definition at line 102 of file RevisionStore.php.

◆ INCLUDE_OLD

const MediaWiki\Revision\RevisionStore::INCLUDE_OLD = 'include_old'

Definition at line 101 of file RevisionStore.php.

◆ ORDER_NEWEST_TO_OLDEST

const MediaWiki\Revision\RevisionStore::ORDER_NEWEST_TO_OLDEST = 'DESC'

Definition at line 98 of file RevisionStore.php.

◆ ORDER_OLDEST_TO_NEWEST

const MediaWiki\Revision\RevisionStore::ORDER_OLDEST_TO_NEWEST = 'ASC'

Definition at line 97 of file RevisionStore.php.

◆ ROW_CACHE_KEY

const MediaWiki\Revision\RevisionStore::ROW_CACHE_KEY = 'revision-row-1.29'

Definition at line 95 of file RevisionStore.php.


The documentation for this class was generated from the following file: