MediaWiki  master
Revision\RevisionStore Class Reference

Service for looking up page revisions. More...

Inheritance diagram for Revision\RevisionStore:
Collaboration diagram for Revision\RevisionStore:

Public Member Functions

 __construct (ILoadBalancer $loadBalancer, SqlBlobStore $blobStore, WANObjectCache $cache, CommentStore $commentStore, NameTableStore $contentModelStore, NameTableStore $slotRoleStore, SlotRoleRegistry $slotRoleRegistry, $mcrMigrationStage, ActorMigration $actorMigration, $wikiId=false)
 
 countRevisionsByPageId (IDatabase $db, $id)
 Get count of revisions per page...not very efficient. More...
 
 countRevisionsByTitle (IDatabase $db, $title)
 Get count of revisions per page...not very efficient. More...
 
 getArchiveQueryInfo ()
 Return the tables, fields, and join conditions to be selected to create a new RevisionArchiveRecord object. More...
 
 getContentHandlerUseDB ()
 
 getKnownCurrentRevision (Title $title, $revId)
 Load a revision based on a known page ID and current revision ID from the DB. More...
 
 getNextRevision (RevisionRecord $rev, $flags=0)
 Get the revision after $rev in the page's history, if any. More...
 
 getPreviousRevision (RevisionRecord $rev, $flags=0)
 Get the revision before $rev in the page's history, if any. More...
 
 getQueryInfo ( $options=[])
 Return the tables, fields, and join conditions to be selected to create a new RevisionStoreRecord object. More...
 
 getRcIdIfUnpatrolled (RevisionRecord $rev)
 MCR migration note: this replaces Revision::isUnpatrolled. More...
 
 getRecentChange (RevisionRecord $rev, $flags=0)
 Get the RC object belonging to the current revision, if there's one. More...
 
 getRevisionById ( $id, $flags=0)
 Load a page revision from a given revision ID number. More...
 
 getRevisionByPageId ( $pageId, $revId=0, $flags=0)
 Load either the current, or a specified, revision that's attached to a given page ID. More...
 
 getRevisionByTimestamp ( $title, $timestamp)
 Load the revision for the given title with the given timestamp. More...
 
 getRevisionByTitle (LinkTarget $linkTarget, $revId=0, $flags=0)
 Load either the current, or a specified, revision that's attached to a given link target. More...
 
 getRevisionSizes (array $revIds)
 Do a batched query for the sizes of a set of revisions. More...
 
 getSlotsQueryInfo ( $options=[])
 Return the tables, fields, and join conditions to be selected to create a new SlotRecord. More...
 
 getTimestampFromId ( $id, $flags=0)
 Get rev_timestamp from rev_id, without loading the rest of the row. More...
 
 getTitle ( $pageId, $revId, $queryFlags=self::READ_NORMAL)
 Determines the page Title based on the available information. More...
 
 insertRevisionOn (RevisionRecord $rev, IDatabase $dbw)
 Insert a new revision into the database, returning the new revision record on success and dies horribly on failure. More...
 
 isReadOnly ()
 
 listRevisionSizes (IDatabase $db, array $revIds)
 Do a batched query for the sizes of a set of revisions. More...
 
 loadRevisionFromId (IDatabase $db, $id)
 Load a page revision from a given revision ID number. More...
 
 loadRevisionFromPageId (IDatabase $db, $pageid, $id=0)
 Load either the current, or a specified, revision that's attached to a given page. More...
 
 loadRevisionFromTimestamp (IDatabase $db, $title, $timestamp)
 Load the revision for the given title with the given timestamp. More...
 
 loadRevisionFromTitle (IDatabase $db, $title, $id=0)
 Load either the current, or a specified, revision that's attached to a given page. More...
 
 newMutableRevisionFromArray (array $fields, $queryFlags=0, Title $title=null)
 Constructs a new MutableRevisionRecord based on the given associative array following the MW1.29 convention for the Revision constructor. More...
 
 newNullRevision (IDatabase $dbw, Title $title, CommentStoreComment $comment, $minor, User $user)
 Create a new null-revision for insertion into a page's history. More...
 
 newRevisionFromArchiveRow ( $row, $queryFlags=0, Title $title=null, array $overrides=[])
 Make a fake revision object from an archive table row. More...
 
 newRevisionFromRow ( $row, $queryFlags=0, Title $title=null, $fromCache=false)
 
 setContentHandlerUseDB ( $contentHandlerUseDB)
 
 setLogger (LoggerInterface $logger)
 
 userWasLastToEdit (IDatabase $db, $pageId, $userId, $since)
 Check if no edits were made by other users since the time a user started editing the page. More...
 
- Public Member Functions inherited from Revision\RevisionFactory
 newRevisionFromRow ( $row, $queryFlags=0, Title $title=null)
 Constructs a RevisionRecord given a database row and content slots. More...
 

Public Attributes

const ROW_CACHE_KEY = 'revision-row-1.29'
 
- Public Attributes inherited from IDBAccessObject
const READ_LOCKING = self::READ_LATEST | 2
 Constants for object loading bitfield flags (higher => higher QoS) More...
 
const READ_NONE = -1
 

Private Member Functions

 assertCrossWikiContentLoadingIsSafe ()
 Throws a RevisionAccessException if this RevisionStore is configured for cross-wiki loading and still reading from the old DB schema. More...
 
 checkContent (Content $content, Title $title, $role)
 MCR migration note: this corresponds to Revision::checkContentModel. More...
 
 checkDatabaseWikiId (IDatabase $db)
 Throws an exception if the given database connection does not belong to the wiki this RevisionStore is bound to. More...
 
 emulateContentId ( $textId)
 Provides a content ID to use with emulated SlotRecords in SCHEMA_COMPAT_OLD mode, based on the revision's text ID (rev_text_id or ar_text_id, respectively). More...
 
 emulateMainSlot_1_29 ( $row, $queryFlags, Title $title)
 Constructs a RevisionRecord for the revisions main slot, based on the MW1.29 schema. More...
 
 failOnEmpty ( $value, $name)
 
 failOnNull ( $value, $name)
 
 fetchRevisionRowFromConds (IDatabase $db, $conditions, $flags=0)
 Given a set of conditions, return a row with the fields necessary to build RevisionRecord objects. More...
 
 findSlotContentId (IDatabase $db, $revId, $role)
 Finds the ID of a content row for a given revision and slot role. More...
 
 getBaseRevisionRow (IDatabase $dbw, RevisionRecord $rev, Title $title, $parentId)
 
 getDBConnection ( $mode, $groups=[])
 
 getDBConnectionRef ( $mode)
 
 getDBConnectionRefForQueryFlags ( $queryFlags)
 
 getDBLoadBalancer ()
 
 getPreviousRevisionId (IDatabase $db, RevisionRecord $rev)
 Get previous revision Id for this page_id This is used to populate rev_parent_id on save. More...
 
 getRelativeRevision (RevisionRecord $rev, $flags, $dir)
 Implementation of getPreviousRevision and getNextRevision. More...
 
 getRevisionRowCacheKey (IDatabase $db, $pageId, $revId)
 Get a cache key for use with a row as selected with getQueryInfo( [ 'page', 'user' ] ) Caching rows without 'page' or 'user' could lead to issues. More...
 
 hasMcrSchemaFlags ( $flags)
 
 initializeMutableRevisionFromArray (MutableRevisionRecord $record, array $fields)
 
 insertContentRowOn (SlotRecord $slot, IDatabase $dbw, $blobAddress)
 
 insertIpChangesRow (IDatabase $dbw, User $user, RevisionRecord $rev, $revisionId)
 Insert IP revision into ip_changes for use when querying for a range. More...
 
 insertRevisionInternal (RevisionRecord $rev, IDatabase $dbw, User $user, CommentStoreComment $comment, Title $title, $pageId, $parentId)
 
 insertRevisionRowOn (IDatabase $dbw, RevisionRecord $rev, Title $title, $parentId)
 
 insertSlotOn (IDatabase $dbw, $revisionId, SlotRecord $protoSlot, Title $title, array $blobHints=[])
 
 insertSlotRowOn (SlotRecord $slot, IDatabase $dbw, $revisionId, $contentId)
 
 loadRevisionFromConds (IDatabase $db, $conditions, $flags=0, Title $title=null)
 Given a set of conditions, fetch a revision from the given database connection. More...
 
 loadSlotContent (SlotRecord $slot, $blobData=null, $blobFlags=null, $blobFormat=null, $queryFlags=0)
 Loads a Content object based on a slot row. More...
 
 loadSlotRecords ( $revId, $queryFlags)
 
 newRevisionFromConds ( $conditions, $flags=0, Title $title=null)
 Given a set of conditions, fetch a revision. More...
 
 newRevisionSlots ( $revId, $revisionRow, $queryFlags, Title $title)
 Factory method for RevisionSlots. More...
 
 releaseDBConnection (IDatabase $connection)
 
 storeContentBlob (SlotRecord $slot, Title $title, array $blobHints=[])
 
 updateRevisionTextId (IDatabase $dbw, $revisionId, &$blobAddress)
 

Static Private Member Functions

static mapArchiveFields ( $archiveRow)
 Maps fields of the archive row to corresponding revision rows. More...
 

Private Attributes

ActorMigration $actorMigration
 
SqlBlobStore $blobStore
 
WANObjectCache $cache
 
CommentStore $commentStore
 
boolean $contentHandlerUseDB = true
 
NameTableStore $contentModelStore
 
ILoadBalancer $loadBalancer
 
LoggerInterface $logger
 
int $mcrMigrationStage
 An appropriate combination of SCHEMA_COMPAT_XXX flags. More...
 
SlotRoleRegistry $slotRoleRegistry
 
NameTableStore $slotRoleStore
 
bool string $wikiId
 

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 Revision.

Definition at line 76 of file RevisionStore.php.

Constructor & Destructor Documentation

◆ __construct()

Revision\RevisionStore::__construct ( ILoadBalancer  $loadBalancer,
SqlBlobStore  $blobStore,
WANObjectCache  $cache,
CommentStore  $commentStore,
NameTableStore  $contentModelStore,
NameTableStore  $slotRoleStore,
SlotRoleRegistry  $slotRoleRegistry,
  $mcrMigrationStage,
ActorMigration  $actorMigration,
  $wikiId = false 
)
Todo:
$blobStore should be allowed to be any BlobStore!
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.
CommentStore$commentStore
NameTableStore$contentModelStore
NameTableStore$slotRoleStore
SlotRoleRegistry$slotRoleRegistry
int$mcrMigrationStageAn appropriate combination of SCHEMA_COMPAT_XXX flags
ActorMigration$actorMigration
bool | string$wikiId

Definition at line 158 of file RevisionStore.php.

References Revision\RevisionStore\$actorMigration, Revision\RevisionStore\$blobStore, Revision\RevisionStore\$cache, Revision\RevisionStore\$commentStore, Revision\RevisionStore\$contentModelStore, Revision\RevisionStore\$loadBalancer, Revision\RevisionStore\$mcrMigrationStage, Revision\RevisionStore\$slotRoleRegistry, Revision\RevisionStore\$slotRoleStore, Revision\RevisionStore\$wikiId, cache, SCHEMA_COMPAT_READ_BOTH, SCHEMA_COMPAT_READ_NEW, SCHEMA_COMPAT_READ_OLD, SCHEMA_COMPAT_WRITE_BOTH, SCHEMA_COMPAT_WRITE_NEW, and SCHEMA_COMPAT_WRITE_OLD.

Member Function Documentation

◆ assertCrossWikiContentLoadingIsSafe()

Revision\RevisionStore::assertCrossWikiContentLoadingIsSafe ( )
private

Throws a RevisionAccessException if this RevisionStore is configured for cross-wiki loading and still reading from the old DB schema.

Exceptions
RevisionAccessException

Definition at line 228 of file RevisionStore.php.

References Revision\RevisionStore\hasMcrSchemaFlags(), and SCHEMA_COMPAT_READ_OLD.

Referenced by Revision\RevisionStore\checkContent(), Revision\RevisionStore\emulateMainSlot_1_29(), and Revision\RevisionStore\getBaseRevisionRow().

◆ checkContent()

Revision\RevisionStore::checkContent ( Content  $content,
Title  $title,
  $role 
)
private

◆ checkDatabaseWikiId()

Revision\RevisionStore::checkDatabaseWikiId ( IDatabase  $db)
private

◆ countRevisionsByPageId()

Revision\RevisionStore::countRevisionsByPageId ( IDatabase  $db,
  $id 
)

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

MCR migration note: this replaces Revision::countByPageId

Parameters
IDatabase$db
int$idPage id
Returns
int

Definition at line 2735 of file RevisionStore.php.

References Revision\RevisionStore\checkDatabaseWikiId().

Referenced by Revision\RevisionStore\countRevisionsByTitle().

◆ countRevisionsByTitle()

Revision\RevisionStore::countRevisionsByTitle ( IDatabase  $db,
  $title 
)

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

MCR migration note: this replaces Revision::countByTitle

Parameters
IDatabase$db
Title$title
Returns
int

Definition at line 2758 of file RevisionStore.php.

References $title, and Revision\RevisionStore\countRevisionsByPageId().

◆ emulateContentId()

Revision\RevisionStore::emulateContentId (   $textId)
private

Provides a content ID to use with emulated SlotRecords in SCHEMA_COMPAT_OLD mode, based on the revision's text ID (rev_text_id or ar_text_id, respectively).

Note that in SCHEMA_COMPAT_WRITE_BOTH, a callback to findSlotContentId() should be used instead, since in that mode, some revision rows may already have a real content ID, while other's don't - and for the ones that don't, we should indicate that it is missing and cause SlotRecords::hasContentId() to return false.

Parameters
int$textId
Returns
int The emulated content ID

Definition at line 1408 of file RevisionStore.php.

Referenced by Revision\RevisionStore\emulateMainSlot_1_29(), and Revision\RevisionStore\insertSlotOn().

◆ emulateMainSlot_1_29()

Revision\RevisionStore::emulateMainSlot_1_29 (   $row,
  $queryFlags,
Title  $title 
)
private

◆ failOnEmpty()

Revision\RevisionStore::failOnEmpty (   $value,
  $name 
)
private
Parameters
mixed$value
string$name
Exceptions
IncompleteRevisionExceptionif $value is empty
Returns
mixed $value, if $value is not null

Definition at line 424 of file RevisionStore.php.

References $value, and null.

Referenced by Revision\RevisionStore\insertRevisionOn().

◆ failOnNull()

Revision\RevisionStore::failOnNull (   $value,
  $name 
)
private
Parameters
mixed$value
string$name
Exceptions
IncompleteRevisionExceptionif $value is null
Returns
mixed $value, if $value is not null

Definition at line 407 of file RevisionStore.php.

References $value, and null.

Referenced by Revision\RevisionStore\insertRevisionOn().

◆ fetchRevisionRowFromConds()

Revision\RevisionStore::fetchRevisionRowFromConds ( IDatabase  $db,
  $conditions,
  $flags = 0 
)
private

Given a set of conditions, return a row with the fields necessary to build RevisionRecord objects.

MCR migration note: this corresponds to Revision::fetchFromConds

Parameters
IDatabase$db
array$conditions
int$flags(optional)
Returns
object|false data row as a raw object

Definition at line 2222 of file RevisionStore.php.

References $options, $revQuery, Revision\RevisionStore\checkDatabaseWikiId(), and Revision\RevisionStore\getQueryInfo().

Referenced by Revision\RevisionStore\getKnownCurrentRevision(), Revision\RevisionStore\loadRevisionFromConds(), and Revision\RevisionStore\newRevisionFromRow().

◆ findSlotContentId()

Revision\RevisionStore::findSlotContentId ( IDatabase  $db,
  $revId,
  $role 
)
private

Finds the ID of a content row for a given revision and slot role.

This can be used to re-use content rows even while the content ID is still missing from SlotRecords, when writing to both the old and the new schema during MCR schema migration.

Todo:
remove after MCR schema migration is complete.
Parameters
IDatabase$db
int$revId
string$role
Returns
int|null

Definition at line 2254 of file RevisionStore.php.

References Revision\RevisionStore\hasMcrSchemaFlags(), null, and SCHEMA_COMPAT_WRITE_NEW.

Referenced by Revision\RevisionStore\emulateMainSlot_1_29().

◆ getArchiveQueryInfo()

Revision\RevisionStore::getArchiveQueryInfo ( )

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

MCR migration note: this replaces Revision::getArchiveQueryInfo

Since
1.31
Returns
array With three keys:
  • tables: (string[]) to include in the $table to IDatabase->select()
  • fields: (string[]) to include in the $vars to IDatabase->select()
  • joins: (array) to include in the $join_conds to IDatabase->select()

Definition at line 2481 of file RevisionStore.php.

References $ret, Revision\RevisionStore\hasMcrSchemaFlags(), and SCHEMA_COMPAT_READ_OLD.

◆ getBaseRevisionRow()

◆ getContentHandlerUseDB()

Revision\RevisionStore::getContentHandlerUseDB ( )
Returns
bool

Definition at line 250 of file RevisionStore.php.

References Revision\RevisionStore\$contentHandlerUseDB.

◆ getDBConnection()

Revision\RevisionStore::getDBConnection (   $mode,
  $groups = [] 
)
private

◆ getDBConnectionRef()

Revision\RevisionStore::getDBConnectionRef (   $mode)
private

◆ getDBConnectionRefForQueryFlags()

◆ getDBLoadBalancer()

◆ getKnownCurrentRevision()

Revision\RevisionStore::getKnownCurrentRevision ( Title  $title,
  $revId 
)

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 replaces Revision::newKnownCurrent

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

Implements Revision\RevisionLookup.

Definition at line 2826 of file RevisionStore.php.

References array(), cache, DB_REPLICA, Revision\RevisionStore\fetchRevisionRowFromConds(), Title\getArticleID(), Wikimedia\Rdbms\Database\getCacheSetOptions(), Revision\RevisionStore\getDBConnectionRef(), Title\getLatestRevID(), Title\getPrefixedDBkey(), Revision\RevisionStore\getRevisionRowCacheKey(), Revision\RevisionStore\newRevisionFromRow(), IExpiringStore\TTL_WEEK, use, and wfWarn().

◆ getNextRevision()

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

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 replaces Revision::getNext

See also
Title::getNextRevisionID
Parameters
RevisionRecord$rev
int$flags(optional) $flags include: IDBAccessObject::READ_LATEST: Select the data from the master
Returns
RevisionRecord|null

Implements Revision\RevisionLookup.

Definition at line 2655 of file RevisionStore.php.

References Revision\RevisionStore\getRelativeRevision(), and wfDeprecated().

◆ getPreviousRevision()

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

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 replaces Revision::getPrevious

See also
Title::getPreviousRevisionID
PageArchive::getPreviousRevision
Parameters
RevisionRecord$rev
int$flags(optional) $flags include: IDBAccessObject::READ_LATEST: Select the data from the master
Returns
RevisionRecord|null

Implements Revision\RevisionLookup.

Definition at line 2632 of file RevisionStore.php.

References Revision\RevisionStore\getRelativeRevision(), and wfDeprecated().

◆ getPreviousRevisionId()

Revision\RevisionStore::getPreviousRevisionId ( IDatabase  $db,
RevisionRecord  $rev 
)
private

Get previous revision Id for this page_id This is used to populate rev_parent_id on save.

MCR migration note: this corresponds to Revision::getPreviousRevisionId

Parameters
IDatabase$db
RevisionRecord$rev
Returns
int

Definition at line 2676 of file RevisionStore.php.

References Revision\RevisionStore\checkDatabaseWikiId(), Revision\RevisionRecord\getId(), Revision\RevisionRecord\getPageId(), and null.

Referenced by Revision\RevisionStore\insertRevisionOn().

◆ getQueryInfo()

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

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

MCR migration note: this replaces 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
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
  • 'text': Join with the text table, and select fields to load page text. This option is deprecated in MW 1.32 when the MCR migration flag SCHEMA_COMPAT_WRITE_NEW is set, and disallowed when SCHEMA_COMPAT_READ_OLD is not set.
Returns
array With three keys:
  • tables: (string[]) to include in the $table to IDatabase->select()
  • fields: (string[]) to include in the $vars to IDatabase->select()
  • joins: (array) to include in the $join_conds to IDatabase->select()

Definition at line 2299 of file RevisionStore.php.

References $options, $ret, Revision\RevisionStore\hasMcrSchemaFlags(), SCHEMA_COMPAT_READ_OLD, and SCHEMA_COMPAT_WRITE_OLD.

Referenced by Revision\RevisionStore\fetchRevisionRowFromConds(), and Revision\RevisionStore\userWasLastToEdit().

◆ getRcIdIfUnpatrolled()

Revision\RevisionStore::getRcIdIfUnpatrolled ( RevisionRecord  $rev)

MCR migration note: this replaces 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 1131 of file RevisionStore.php.

References Revision\RevisionStore\getRecentChange(), and RecentChange\PRC_UNPATROLLED.

◆ getRecentChange()

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

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

MCR migration note: this replaces Revision::getRecentChange

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

Definition at line 1153 of file RevisionStore.php.

References false, Revision\RevisionStore\getDBConnection(), DBAccessObjectUtils\getDBOptions(), Revision\RevisionRecord\getId(), Revision\RevisionRecord\getTimestamp(), Revision\RevisionRecord\getUser(), list, RecentChange\newFromConds(), null, Revision\RevisionRecord\RAW, and Revision\RevisionStore\releaseDBConnection().

Referenced by Revision\RevisionStore\getRcIdIfUnpatrolled().

◆ getRelativeRevision()

Revision\RevisionStore::getRelativeRevision ( RevisionRecord  $rev,
  $flags,
  $dir 
)
private

◆ getRevisionById()

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

Load a page revision from a given revision ID number.

Returns null if no such revision can be found.

MCR migration note: this replaces Revision::newFromId

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

Parameters
int$id
int$flags(optional)
Returns
RevisionRecord|null

Implements Revision\RevisionLookup.

Definition at line 1491 of file RevisionStore.php.

References Revision\RevisionStore\newRevisionFromConds().

Referenced by Revision\RevisionStore\getRelativeRevision().

◆ getRevisionByPageId()

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 replaces Revision::newFromPageId

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

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

Implements Revision\RevisionLookup.

Definition at line 1557 of file RevisionStore.php.

References $rev, Revision\RevisionStore\getDBConnectionRefForQueryFlags(), Revision\RevisionStore\loadRevisionFromConds(), and Revision\RevisionStore\newRevisionFromConds().

◆ getRevisionByTimestamp()

Revision\RevisionStore::getRevisionByTimestamp (   $title,
  $timestamp 
)

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 replaces Revision::loadFromTimestamp

Parameters
Title$title
string$timestamp
Returns
RevisionRecord|null

Definition at line 1593 of file RevisionStore.php.

References $title, DB_REPLICA, Revision\RevisionStore\getDBConnection(), and Revision\RevisionStore\newRevisionFromConds().

◆ getRevisionByTitle()

Revision\RevisionStore::getRevisionByTitle ( LinkTarget  $linkTarget,
  $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 replaces Revision::newFromTitle

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

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

Implements Revision\RevisionLookup.

Definition at line 1511 of file RevisionStore.php.

References $rev, $title, Revision\RevisionStore\getDBConnectionRefForQueryFlags(), Revision\RevisionStore\loadRevisionFromConds(), Title\newFromLinkTarget(), and Revision\RevisionStore\newRevisionFromConds().

◆ getRevisionRowCacheKey()

Revision\RevisionStore::getRevisionRowCacheKey ( IDatabase  $db,
  $pageId,
  $revId 
)
private

Get a cache key for use with a row as selected with getQueryInfo( [ 'page', 'user' ] ) Caching rows without 'page' or 'user' could lead to issues.

If the format of the rows returned by the query provided by getQueryInfo changes the cache key should be updated to avoid conflicts.

Parameters
IDatabase$db
int$pageId
int$revId
Returns
string

Definition at line 2886 of file RevisionStore.php.

References cache, and class.

Referenced by Revision\RevisionStore\getKnownCurrentRevision().

◆ getRevisionSizes()

Revision\RevisionStore::getRevisionSizes ( array  $revIds)

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

MCR migration note: this replaces 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 2523 of file RevisionStore.php.

References DB_REPLICA, Revision\RevisionStore\getDBConnection(), and Revision\RevisionStore\listRevisionSizes().

◆ getSlotsQueryInfo()

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()
  • fields: (string[]) to include in the $vars to IDatabase->select()
  • joins: (array) to include in the $join_conds to IDatabase->select()

Definition at line 2399 of file RevisionStore.php.

References $options, $ret, DB_REPLICA, Revision\RevisionStore\getDBConnectionRef(), Revision\RevisionStore\hasMcrSchemaFlags(), Revision\SlotRecord\MAIN, and SCHEMA_COMPAT_READ_OLD.

◆ getTimestampFromId()

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 replaces Revision::getTimestampFromId

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

Implements Revision\RevisionLookup.

Definition at line 2712 of file RevisionStore.php.

References Revision\RevisionStore\getDBConnectionRefForQueryFlags(), and wfTimestamp().

Referenced by Revision\RevisionStore\getRelativeRevision().

◆ getTitle()

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

Determines the page Title based on the available information.

MCR migration note: this corresponds to Revision::getTitle

Note
this method should be private, external use should be avoided!
Parameters
int | null$pageId
int | null$revId
int$queryFlags
Returns
Title
Exceptions
RevisionAccessException

Definition at line 332 of file RevisionStore.php.

References $dbr, $title, DB_MASTER, false, Title\GAID_FOR_UPDATE, Revision\RevisionStore\getDBConnectionRef(), DBAccessObjectUtils\getDBOptions(), DBAccessObjectUtils\hasFlags(), list, Title\newFromID(), Title\newFromRow(), null, and wfBacktrace().

Referenced by Revision\RevisionStore\newMutableRevisionFromArray(), and Revision\RevisionStore\newRevisionFromRow().

◆ hasMcrSchemaFlags()

◆ initializeMutableRevisionFromArray()

◆ insertContentRowOn()

Revision\RevisionStore::insertContentRowOn ( SlotRecord  $slot,
IDatabase  $dbw,
  $blobAddress 
)
private
Parameters
SlotRecord$slot
IDatabase$dbw
string$blobAddress
Returns
int content row ID

Definition at line 975 of file RevisionStore.php.

References Revision\SlotRecord\getModel(), Revision\SlotRecord\getSha1(), and Revision\SlotRecord\getSize().

Referenced by Revision\RevisionStore\insertSlotOn().

◆ insertIpChangesRow()

Revision\RevisionStore::insertIpChangesRow ( IDatabase  $dbw,
User  $user,
RevisionRecord  $rev,
  $revisionId 
)
private

Insert IP revision into ip_changes for use when querying for a range.

Parameters
IDatabase$dbw
User$user
RevisionRecord$rev
int$revisionId

Definition at line 728 of file RevisionStore.php.

References User\getId(), User\getName(), Revision\RevisionRecord\getTimestamp(), IP\isValid(), and IP\toHex().

Referenced by Revision\RevisionStore\insertRevisionInternal().

◆ insertRevisionInternal()

◆ insertRevisionOn()

◆ insertRevisionRowOn()

Revision\RevisionStore::insertRevisionRowOn ( IDatabase  $dbw,
RevisionRecord  $rev,
Title  $title,
  $parentId 
)
private

◆ insertSlotOn()

◆ insertSlotRowOn()

Revision\RevisionStore::insertSlotRowOn ( SlotRecord  $slot,
IDatabase  $dbw,
  $revisionId,
  $contentId 
)
private
Parameters
SlotRecord$slot
IDatabase$dbw
int$revisionId
int$contentId

Definition at line 957 of file RevisionStore.php.

References Revision\SlotRecord\getOrigin(), Revision\SlotRecord\getRole(), and Revision\SlotRecord\hasOrigin().

Referenced by Revision\RevisionStore\insertSlotOn().

◆ isReadOnly()

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

Definition at line 243 of file RevisionStore.php.

◆ listRevisionSizes()

Revision\RevisionStore::listRevisionSizes ( IDatabase  $db,
array  $revIds 
)

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

MCR migration note: this replaces Revision::getParentLengths

Deprecated:
use RevisionStore::getRevisionSizes instead.
Parameters
IDatabase$db
int[]$revIds
Returns
int[] associative array mapping revision IDs from $revIds to the nominal size of the corresponding revision.

Definition at line 2539 of file RevisionStore.php.

References $res, as, and Revision\RevisionStore\checkDatabaseWikiId().

Referenced by Revision\RevisionStore\getRevisionSizes().

◆ loadRevisionFromConds()

Revision\RevisionStore::loadRevisionFromConds ( IDatabase  $db,
  $conditions,
  $flags = 0,
Title  $title = null 
)
private

Given a set of conditions, fetch a revision from the given database connection.

MCR migration note: this corresponds to Revision::loadFromConds

Parameters
IDatabase$db
array$conditions
int$flags(optional)
Title | null$title
Returns
RevisionRecord|null

Definition at line 2159 of file RevisionStore.php.

References $rev, $title, Revision\RevisionStore\fetchRevisionRowFromConds(), Revision\RevisionStore\newRevisionFromRow(), and null.

Referenced by Revision\RevisionStore\getRevisionByPageId(), Revision\RevisionStore\getRevisionByTitle(), Revision\RevisionStore\loadRevisionFromId(), Revision\RevisionStore\loadRevisionFromPageId(), Revision\RevisionStore\loadRevisionFromTimestamp(), Revision\RevisionStore\loadRevisionFromTitle(), Revision\RevisionStore\newNullRevision(), and Revision\RevisionStore\newRevisionFromConds().

◆ loadRevisionFromId()

Revision\RevisionStore::loadRevisionFromId ( IDatabase  $db,
  $id 
)

Load a page revision from a given revision ID number.

Returns null if no such revision can be found.

MCR migration note: this corresponds to Revision::loadFromId

Note
direct use is deprecated!
Todo:
remove when unused! there seem to be no callers of Revision::loadFromId
Parameters
IDatabase$db
int$id
Returns
RevisionRecord|null

Definition at line 2018 of file RevisionStore.php.

References Revision\RevisionStore\loadRevisionFromConds().

◆ loadRevisionFromPageId()

Revision\RevisionStore::loadRevisionFromPageId ( IDatabase  $db,
  $pageid,
  $id = 0 
)

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

If not attached to that page, will return null.

MCR migration note: this replaces Revision::loadFromPageId

Note
direct use is deprecated!
Todo:
remove when unused!
Parameters
IDatabase$db
int$pageid
int$id
Returns
RevisionRecord|null

Definition at line 2037 of file RevisionStore.php.

References Revision\RevisionStore\loadRevisionFromConds().

◆ loadRevisionFromTimestamp()

Revision\RevisionStore::loadRevisionFromTimestamp ( IDatabase  $db,
  $title,
  $timestamp 
)

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 replaces Revision::loadFromTimestamp

Note
direct use is deprecated! Use getRevisionFromTimestamp instead!
Todo:
remove when unused!
Parameters
IDatabase$db
Title$title
string$timestamp
Returns
RevisionRecord|null

Definition at line 2097 of file RevisionStore.php.

References $title, and Revision\RevisionStore\loadRevisionFromConds().

◆ loadRevisionFromTitle()

Revision\RevisionStore::loadRevisionFromTitle ( IDatabase  $db,
  $title,
  $id = 0 
)

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

If not attached to that page, will return null.

MCR migration note: this replaces Revision::loadFromTitle

Note
direct use is deprecated!
Todo:
remove when unused!
Parameters
IDatabase$db
Title$title
int$id
Returns
RevisionRecord|null

Definition at line 2063 of file RevisionStore.php.

References $title, and Revision\RevisionStore\loadRevisionFromConds().

◆ loadSlotContent()

Revision\RevisionStore::loadSlotContent ( SlotRecord  $slot,
  $blobData = null,
  $blobFlags = null,
  $blobFormat = null,
  $queryFlags = 0 
)
private

Loads a Content object based on a slot row.

This method does not call $slot->getContent(), and may be used as a callback called by $slot->getContent().

MCR migration note: this roughly corresponds to Revision::getContentInternal

Parameters
SlotRecord$slotThe SlotRecord to load content for
string | null$blobDataThe content blob, in the form indicated by $blobFlags
string | null$blobFlagsFlags indicating how $blobData needs to be processed. Use null if no processing should happen. That is in constrast to the empty string, which causes the blob to be decoded according to the configured legacy encoding.
string | null$blobFormatMIME type indicating how $dataBlob is encoded
int$queryFlags
Exceptions
RevisionAccessException
Returns
Content

Definition at line 1434 of file RevisionStore.php.

References $content, $e, $handler, Revision\SlotRecord\getAddress(), ContentHandler\getForModelID(), Revision\SlotRecord\getModel(), Revision\SlotRecord\hasAddress(), and null.

Referenced by Revision\RevisionStore\emulateMainSlot_1_29(), and Revision\RevisionStore\loadSlotRecords().

◆ loadSlotRecords()

Revision\RevisionStore::loadSlotRecords (   $revId,
  $queryFlags 
)
private

◆ mapArchiveFields()

static Revision\RevisionStore::mapArchiveFields (   $archiveRow)
staticprivate

Maps fields of the archive row to corresponding revision rows.

Parameters
object$archiveRow
Returns
object a revision row object, corresponding to $archiveRow.

Definition at line 1190 of file RevisionStore.php.

References as.

Referenced by Revision\RevisionStore\emulateMainSlot_1_29().

◆ newMutableRevisionFromArray()

Revision\RevisionStore::newMutableRevisionFromArray ( array  $fields,
  $queryFlags = 0,
Title  $title = null 
)

Constructs a new MutableRevisionRecord based on the given associative array following the MW1.29 convention for the Revision constructor.

MCR migration note: this replaces Revision::newFromRow

Parameters
array$fields
int$queryFlags
Title | null$title
Returns
MutableRevisionRecord
Exceptions
MWException
RevisionAccessException

Implements Revision\RevisionFactory.

Definition at line 1845 of file RevisionStore.php.

References $content, $title, as, Revision\RevisionStore\emulateMainSlot_1_29(), Revision\RevisionStore\getTitle(), Revision\RevisionStore\hasMcrSchemaFlags(), Revision\RevisionStore\initializeMutableRevisionFromArray(), CommentStoreComment\newUnsavedComment(), null, and SCHEMA_COMPAT_READ_OLD.

◆ newNullRevision()

Revision\RevisionStore::newNullRevision ( IDatabase  $dbw,
Title  $title,
CommentStoreComment  $comment,
  $minor,
User  $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 replaces 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
Title$titleTitle of the page to read from
CommentStoreComment$commentRevisionRecord's summary
bool$minorWhether the revision should be considered as minor
User$userThe user to attribute the revision to
Returns
RevisionRecord|null RevisionRecord or null on error

Definition at line 1067 of file RevisionStore.php.

References Revision\RevisionStore\checkDatabaseWikiId(), Title\getArticleID(), Revision\RevisionStore\loadRevisionFromConds(), Revision\MutableRevisionRecord\newFromParentRevision(), null, and wfTimestampNow().

◆ newRevisionFromArchiveRow()

Revision\RevisionStore::newRevisionFromArchiveRow (   $row,
  $queryFlags = 0,
Title  $title = null,
array  $overrides = [] 
)

Make a fake revision object from an archive table row.

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

MCR migration note: this replaces Revision::newFromArchiveRow

Parameters
object$row
int$queryFlags
Title | null$title
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
Exceptions
MWException

Implements Revision\RevisionFactory.

Definition at line 1705 of file RevisionStore.php.

References $title, $user, $value, as, Revision\RevisionStore\getDBConnectionRefForQueryFlags(), Title\makeTitle(), User\newFromAnyId(), Revision\RevisionStore\newRevisionSlots(), null, and wfWarn().

◆ newRevisionFromConds()

Revision\RevisionStore::newRevisionFromConds (   $conditions,
  $flags = 0,
Title  $title = null 
)
private

Given a set of conditions, fetch a revision.

This method should be used if we are pretty sure the revision exists. Unless $flags has READ_LATEST set, this method will first try to find the revision on a replica before hitting the master database.

MCR migration note: this corresponds to Revision::newFromConds

Parameters
array$conditions
int$flags(optional)
Title | null$title
Returns
RevisionRecord|null

Definition at line 2124 of file RevisionStore.php.

References $rev, $title, DB_MASTER, Revision\RevisionStore\getDBConnection(), Revision\RevisionStore\getDBConnectionRefForQueryFlags(), Revision\RevisionStore\getDBLoadBalancer(), Revision\RevisionStore\loadRevisionFromConds(), and Revision\RevisionStore\releaseDBConnection().

Referenced by Revision\RevisionStore\getRevisionById(), Revision\RevisionStore\getRevisionByPageId(), Revision\RevisionStore\getRevisionByTimestamp(), and Revision\RevisionStore\getRevisionByTitle().

◆ newRevisionFromRow()

Revision\RevisionStore::newRevisionFromRow (   $row,
  $queryFlags = 0,
Title  $title = null,
  $fromCache = false 
)
See also
RevisionFactory::newRevisionFromRow

MCR migration note: this replaces Revision::newFromRow

Parameters
object$row
int$queryFlags
Title | null$title
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 1772 of file RevisionStore.php.

References $rev, $title, $user, Revision\RevisionStore\$wikiId, Revision\RevisionStore\fetchRevisionRowFromConds(), Revision\RevisionStore\getDBConnectionRefForQueryFlags(), Revision\RevisionStore\getTitle(), User\newFromAnyId(), Revision\RevisionStore\newRevisionSlots(), null, use, and wfWarn().

Referenced by Revision\RevisionStore\getKnownCurrentRevision(), and Revision\RevisionStore\loadRevisionFromConds().

◆ newRevisionSlots()

Revision\RevisionStore::newRevisionSlots (   $revId,
  $revisionRow,
  $queryFlags,
Title  $title 
)
private

Factory method for RevisionSlots.

Note
If other code has a need to construct RevisionSlots objects, this should be made public, since RevisionSlots instances should not be constructed directly.
Parameters
int$revId
object$revisionRow
int$queryFlags
Title$title
Returns
RevisionSlots
Exceptions
MWException

Definition at line 1666 of file RevisionStore.php.

References Revision\RevisionStore\emulateMainSlot_1_29(), Revision\RevisionStore\hasMcrSchemaFlags(), Revision\RevisionStore\loadSlotRecords(), Revision\SlotRecord\MAIN, SCHEMA_COMPAT_READ_NEW, and use.

Referenced by Revision\RevisionStore\newRevisionFromArchiveRow(), and Revision\RevisionStore\newRevisionFromRow().

◆ releaseDBConnection()

Revision\RevisionStore::releaseDBConnection ( IDatabase  $connection)
private
Parameters
IDatabase$connection

Definition at line 303 of file RevisionStore.php.

References Revision\RevisionStore\getDBLoadBalancer().

Referenced by Revision\RevisionStore\getRecentChange(), and Revision\RevisionStore\newRevisionFromConds().

◆ setContentHandlerUseDB()

Revision\RevisionStore::setContentHandlerUseDB (   $contentHandlerUseDB)

◆ setLogger()

Revision\RevisionStore::setLogger ( LoggerInterface  $logger)

◆ storeContentBlob()

Revision\RevisionStore::storeContentBlob ( SlotRecord  $slot,
Title  $title,
array  $blobHints = [] 
)
private

◆ updateRevisionTextId()

Revision\RevisionStore::updateRevisionTextId ( IDatabase  $dbw,
  $revisionId,
$blobAddress 
)
private
Parameters
IDatabase$dbw
int$revisionId
string&$blobAddress(may change!)
Returns
int the text row id

Definition at line 646 of file RevisionStore.php.

References MediaWiki\Storage\SqlBlobStore\makeAddressFromTextId().

Referenced by Revision\RevisionStore\insertRevisionInternal(), and Revision\RevisionStore\insertSlotOn().

◆ userWasLastToEdit()

Revision\RevisionStore::userWasLastToEdit ( IDatabase  $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 replaces 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 has been deprecated since 1.24.
Parameters
IDatabase$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 2784 of file RevisionStore.php.

References $res, $revQuery, as, Revision\RevisionStore\checkDatabaseWikiId(), and Revision\RevisionStore\getQueryInfo().

Member Data Documentation

◆ $actorMigration

ActorMigration Revision\RevisionStore::$actorMigration
private

Definition at line 115 of file RevisionStore.php.

Referenced by Revision\RevisionStore\__construct().

◆ $blobStore

SqlBlobStore Revision\RevisionStore::$blobStore
private

Definition at line 84 of file RevisionStore.php.

Referenced by Revision\RevisionStore\__construct().

◆ $cache

WANObjectCache Revision\RevisionStore::$cache
private

Definition at line 105 of file RevisionStore.php.

Referenced by Revision\RevisionStore\__construct().

◆ $commentStore

CommentStore Revision\RevisionStore::$commentStore
private

Definition at line 110 of file RevisionStore.php.

Referenced by Revision\RevisionStore\__construct().

◆ $contentHandlerUseDB

boolean Revision\RevisionStore::$contentHandlerUseDB = true
private

◆ $contentModelStore

NameTableStore Revision\RevisionStore::$contentModelStore
private

Definition at line 125 of file RevisionStore.php.

Referenced by Revision\RevisionStore\__construct().

◆ $loadBalancer

ILoadBalancer Revision\RevisionStore::$loadBalancer
private

◆ $logger

LoggerInterface Revision\RevisionStore::$logger
private

Definition at line 120 of file RevisionStore.php.

Referenced by Revision\RevisionStore\setLogger().

◆ $mcrMigrationStage

int Revision\RevisionStore::$mcrMigrationStage
private

An appropriate combination of SCHEMA_COMPAT_XXX flags.

Definition at line 133 of file RevisionStore.php.

Referenced by Revision\RevisionStore\__construct().

◆ $slotRoleRegistry

SlotRoleRegistry Revision\RevisionStore::$slotRoleRegistry
private

Definition at line 136 of file RevisionStore.php.

Referenced by Revision\RevisionStore\__construct().

◆ $slotRoleStore

NameTableStore Revision\RevisionStore::$slotRoleStore
private

Definition at line 130 of file RevisionStore.php.

Referenced by Revision\RevisionStore\__construct().

◆ $wikiId

bool string Revision\RevisionStore::$wikiId
private

◆ ROW_CACHE_KEY

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

Definition at line 79 of file RevisionStore.php.


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