MediaWiki REL1_30
CommentStore Class Reference

CommentStore handles storage of comments (edit summaries, log reasons, etc) in the database. More...

Collaboration diagram for CommentStore:

Public Member Functions

 __construct ( $key, Language $lang=null)
 
 createComment (IDatabase $dbw, $comment, array $data=null)
 Create a new CommentStoreComment, inserting it into the database if necessary.
 
 getComment ( $row, $fallback=false)
 Extract the comment from a row.
 
 getCommentLegacy (IDatabase $db, $row, $fallback=false)
 Extract the comment from a row, with legacy lookups.
 
 getFields ()
 Get SELECT fields for the comment key.
 
 getJoin ()
 Get SELECT fields and joins for the comment key.
 
 insert (IDatabase $dbw, $comment, $data=null)
 Insert a comment in preparation for a row that references it.
 
 insertWithTempTable (IDatabase $dbw, $comment, $data=null)
 Insert a comment in a temporary table in preparation for a row that references it.
 

Static Public Member Functions

static hash ( $text, $data)
 Hashing function for comment storage.
 
static newKey ( $key)
 Static constructor for easier chaining.
 

Public Attributes

const COMMENT_CHARACTER_LIMIT = 1000
 Maximum length of a comment in UTF-8 characters.
 
const MAX_COMMENT_LENGTH = 65535
 Maximum length of a comment in bytes.
 
const MAX_DATA_LENGTH = 65535
 Maximum length of serialized data in bytes.
 

Static Protected Member Functions

static decodeMessage ( $data)
 Decode a message that was encoded by self::encodeMessage()
 
static encodeMessage (Message $msg)
 Encode a Message as a PHP data structure.
 

Protected Attributes

array null $joinCache = null
 Cache for self::getJoin()
 
string $key
 
Language $lang
 Language to use for comment truncation.
 
int $stage
 One of the MIGRATION_* constants.
 

Static Protected Attributes

static array $formerTempTables = []
 Fields that formerly used $tempTables Key is '$key', value is the MediaWiki version in which it was removed from $tempTables.
 
static array $tempTables
 Define fields that use temporary tables for transitional purposes Keys are '$key', values are arrays with four fields:
 

Private Member Functions

 getCommentInternal (IDatabase $db=null, $row, $fallback=false)
 Extract the comment from a row.
 
 insertInternal (IDatabase $dbw, $comment, $data)
 Implementation for self::insert() and self::insertWithTempTable()
 

Detailed Description

CommentStore handles storage of comments (edit summaries, log reasons, etc) in the database.

Since
1.30

Definition at line 30 of file CommentStore.php.

Constructor & Destructor Documentation

◆ __construct()

CommentStore::__construct ( $key,
Language $lang = null )
Parameters
string$keyA key such as "rev_comment" identifying the comment field being fetched.
Language$langLanguage to use for comment truncation. Defaults to $wgContLang.

Definition at line 100 of file CommentStore.php.

References $key, $lang, $wgCommentTableSchemaMigrationStage, $wgContLang, and key.

Member Function Documentation

◆ createComment()

CommentStore::createComment ( IDatabase $dbw,
$comment,
array $data = null )

Create a new CommentStoreComment, inserting it into the database if necessary.

If a comment is going to be passed to self::insert() or the like multiple times, it will be more efficient to pass a CommentStoreComment once rather than making self::insert() do it every time through.

Note
When passing a CommentStoreComment, this may set $comment->id if it's not already set. If $comment->id is already set, it will not be verified that the specified comment actually exists or that it corresponds to the comment text, message, and/or data in the CommentStoreComment.
Parameters
IDatabase$dbwDatabase handle to insert on. Unused if $comment is a CommentStoreComment and $comment->id is set.
string | Message | CommentStoreComment$commentComment text or Message object, or a CommentStoreComment.
array | null$dataStructured data to store. Keys beginning with '_' are reserved. Ignored if $comment is a CommentStoreComment.
Returns
CommentStoreComment

Definition at line 383 of file CommentStore.php.

References encodeMessage(), hash(), Wikimedia\Rdbms\IDatabase\insert(), Wikimedia\Rdbms\IDatabase\insertId(), MAX_DATA_LENGTH, MIGRATION_OLD, CommentStoreComment\newUnsavedComment(), Wikimedia\Rdbms\IDatabase\selectField(), true, and wfMessage().

Referenced by insertInternal().

◆ decodeMessage()

static CommentStore::decodeMessage ( $data)
staticprotected

Decode a message that was encoded by self::encodeMessage()

Parameters
array$data
Returns
Message

Definition at line 558 of file CommentStore.php.

References $key, array(), and decodeMessage().

Referenced by decodeMessage(), and getCommentInternal().

◆ encodeMessage()

static CommentStore::encodeMessage ( Message $msg)
staticprotected

Encode a Message as a PHP data structure.

Parameters
Message$msg
Returns
array

Definition at line 539 of file CommentStore.php.

References $key, $params, and encodeMessage().

Referenced by createComment(), and encodeMessage().

◆ getComment()

CommentStore::getComment ( $row,
$fallback = false )

Extract the comment from a row.

Use self::getJoin() to ensure the row contains the needed data.

If you need to fake a comment in a row for some reason, set fields {$key}_text (string) and {$key}_data (JSON string or null).

Parameters
object | array$rowResult row.
bool$fallbackIf true, fall back as well as possible instead of throwing an exception.
Returns
CommentStoreComment

Definition at line 340 of file CommentStore.php.

References $fallback, and getCommentInternal().

◆ getCommentInternal()

CommentStore::getCommentInternal ( IDatabase $db = null,
$row,
$fallback = false )
private

Extract the comment from a row.

Shared implementation for getComment() and getCommentLegacy()

Parameters
IDatabase | null$dbDatabase handle for getCommentLegacy(), or null for getComment()
object | array$row
bool$fallback
Returns
CommentStoreComment

Definition at line 216 of file CommentStore.php.

References $fallback, $key, $t, array(), decodeMessage(), MIGRATION_NEW, MIGRATION_OLD, object, and wfLogWarning().

Referenced by getComment(), and getCommentLegacy().

◆ getCommentLegacy()

CommentStore::getCommentLegacy ( IDatabase $db,
$row,
$fallback = false )

Extract the comment from a row, with legacy lookups.

If $row might have been generated using self::getFields() rather than self::getJoin(), use this. Prefer self::getComment() if you know callers used self::getJoin() for the row fetch.

If you need to fake a comment in a row for some reason, set fields {$key}_text (string) and {$key}_data (JSON string or null).

Parameters
IDatabase$dbDatabase handle to use for lookup
object | array$rowResult row.
bool$fallbackIf true, fall back as well as possible instead of throwing an exception.
Returns
CommentStoreComment

Definition at line 359 of file CommentStore.php.

References $fallback, and getCommentInternal().

◆ getFields()

CommentStore::getFields ( )

Get SELECT fields for the comment key.

Each resulting row should be passed to self::getCommentLegacy() to get the actual comment.

Note
Use of this method may require a subsequent database query to actually fetch the comment. If possible, use self::getJoin() instead.
Returns
string[] to include in the $vars to IDatabase->select(). All fields are aliased, so + is safe to use.

Definition at line 129 of file CommentStore.php.

References $key, key, MIGRATION_NEW, and MIGRATION_OLD.

◆ getJoin()

CommentStore::getJoin ( )

Get SELECT fields and joins for the comment key.

Each resulting row should be passed to self::getComment() to get the actual comment.

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() All tables, fields, and joins are aliased, so + is safe to use.

Definition at line 160 of file CommentStore.php.

References $joinCache, $key, $t, $tables, key, MIGRATION_NEW, and MIGRATION_OLD.

◆ hash()

static CommentStore::hash ( $text,
$data )
static

Hashing function for comment storage.

Parameters
string$textComment text
string | null$dataComment data
Returns
int 32-bit signed integer

Definition at line 577 of file CommentStore.php.

Referenced by createComment(), and MigrateComments\loadCommentIDs().

◆ insert()

CommentStore::insert ( IDatabase $dbw,
$comment,
$data = null )

Insert a comment in preparation for a row that references it.

Note
It's recommended to include both the call to this method and the row insert in the same transaction.
Parameters
IDatabase$dbwDatabase handle to insert on
string | Message | CommentStoreComment$commentAs for self::createComment()
array | null$dataAs for self::createComment()
Returns
array Fields for the insert or update

Definition at line 493 of file CommentStore.php.

References insertInternal(), key, and list.

◆ insertInternal()

CommentStore::insertInternal ( IDatabase $dbw,
$comment,
$data )
private

Implementation for self::insert() and self::insertWithTempTable()

Parameters
IDatabase$dbw
string | Message | CommentStoreComment$comment
array | null$data
Returns
array [ array $fields, callable $callback ]

Definition at line 450 of file CommentStore.php.

References $key, $t, createComment(), Wikimedia\Rdbms\IDatabase\insert(), key, and MIGRATION_WRITE_BOTH.

Referenced by insert(), and insertWithTempTable().

◆ insertWithTempTable()

CommentStore::insertWithTempTable ( IDatabase $dbw,
$comment,
$data = null )

Insert a comment in a temporary table in preparation for a row that references it.

This is currently needed for "rev_comment" and "img_description". In the future that requirement will be removed.

Note
It's recommended to include both the call to this method and the row insert in the same transaction.
Parameters
IDatabase$dbwDatabase handle to insert on
string | Message | CommentStoreComment$commentAs for self::createComment()
array | null$dataAs for self::createComment()
Returns
array Two values:
  • array Fields for the insert or update
  • callable Function to call when the primary key of the row being inserted/updated is known. Pass it that primary key.

Definition at line 518 of file CommentStore.php.

References insertInternal(), key, list, and wfDeprecated().

◆ newKey()

static CommentStore::newKey ( $key)
static

Static constructor for easier chaining.

Parameters
string$keyA key such as "rev_comment" identifying the comment field being fetched.
Returns
CommentStore

Definition at line 114 of file CommentStore.php.

References $key.

Referenced by Revision\__construct(), RenameUserCleanup\checkRenameLog(), RevDelLogList\doQuery(), WikiPage\doUpdateRestrictions(), WikiExporter\dumpFrom(), FeedUtils\formatDiff(), DeletedContribsPager\formatRevisionRow(), ImageListPager\formatValue(), ProtectedPagesPager\formatValue(), BlockListPager\formatValue(), RevDelLogItem\getApiData(), RecentChange\getAttribute(), Block\getAutoblockUpdateArray(), LocalFile\getCacheFields(), DatabaseLogEntry\getComment(), RCDatabaseLogEntry\getComment(), Block\getDatabaseArray(), RevDelLogItem\getHTML(), EditPage\getLastDelete(), IRCColourfulRCFeedFormatter\getLine(), BlockListPager\getQueryInfo(), DeletedContribsPager\getQueryInfo(), NewPagesPager\getQueryInfo(), ProtectedPagesPager\getQueryInfo(), ImageListPager\getQueryInfoReal(), PageArchive\getRevision(), DatabaseLogEntry\getSelectQueryData(), WikiRevision\importLogItem(), Block\initFromRow(), ManualLogEntry\insert(), Revision\insertOn(), PageArchive\listRevisions(), RecentChange\loadFromRow(), ArchivedFile\loadFromRow(), LocalFile\loadFromRow(), Revision\newFromArchiveRow(), OldLocalFile\recordOldUpload(), SpecialNewpages\revisionFromRcResult(), RecentChange\save(), LogPage\saveContent(), Revision\selectArchiveFields(), Block\selectFields(), RecentChange\selectFields(), ArchivedFile\selectFields(), LocalFile\selectFields(), OldLocalFile\selectFields(), Revision\selectFields(), EditPage\showEditForm(), ApiQueryBase\showHiddenUsersAddBlockInfo(), CommentStoreTest\testConstructor(), PageArchive\undeleteRevisions(), XmlDumpWriter\writeLogItem(), and XmlDumpWriter\writeRevision().

Member Data Documentation

◆ $formerTempTables

array CommentStore::$formerTempTables = []
staticprotected

Fields that formerly used $tempTables Key is '$key', value is the MediaWiki version in which it was removed from $tempTables.

Definition at line 80 of file CommentStore.php.

◆ $joinCache

array null CommentStore::$joinCache = null
protected

Cache for self::getJoin()

Definition at line 89 of file CommentStore.php.

Referenced by getJoin().

◆ $key

string CommentStore::$key
protected

◆ $lang

Language CommentStore::$lang
protected

Language to use for comment truncation.

Definition at line 92 of file CommentStore.php.

Referenced by __construct().

◆ $stage

int CommentStore::$stage
protected

One of the MIGRATION_* constants.

Definition at line 86 of file CommentStore.php.

◆ $tempTables

array CommentStore::$tempTables
staticprotected
Initial value:
= [
'rev_comment' => [
'table' => 'revision_comment_temp',
'pk' => 'revcomment_rev',
'field' => 'revcomment_comment_id',
'joinPK' => 'rev_id',
],
'img_description' => [
'table' => 'image_comment_temp',
'pk' => 'imgcomment_name',
'field' => 'imgcomment_description_id',
'joinPK' => 'img_name',
],
]

Define fields that use temporary tables for transitional purposes Keys are '$key', values are arrays with four fields:

  • table: Temporary table name
  • pk: Temporary table column referring to the main table's primary key
  • field: Temporary table column referring comment.comment_id
  • joinPK: Main table's primary key

Definition at line 60 of file CommentStore.php.

◆ COMMENT_CHARACTER_LIMIT

const CommentStore::COMMENT_CHARACTER_LIMIT = 1000

Maximum length of a comment in UTF-8 characters.

Longer comments will be truncated.

Note
This must be at least 255 and not greater than floor( MAX_COMMENT_LENGTH / 4 ).

Definition at line 36 of file CommentStore.php.

Referenced by CommentStoreTest\testInsertTruncation().

◆ MAX_COMMENT_LENGTH

const CommentStore::MAX_COMMENT_LENGTH = 65535

Maximum length of a comment in bytes.

Longer comments will be truncated.

Note
This value is determined by the size of the underlying database field, currently BLOB in MySQL/MariaDB.

Definition at line 43 of file CommentStore.php.

◆ MAX_DATA_LENGTH

const CommentStore::MAX_DATA_LENGTH = 65535

Maximum length of serialized data in bytes.

Longer data will result in an exception.

Note
This value is determined by the size of the underlying database field, currently BLOB in MySQL/MariaDB.

Definition at line 50 of file CommentStore.php.

Referenced by createComment().


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