MediaWiki  REL1_31
MediaWiki\Storage\SqlBlobStore Class Reference

Service for storing and loading Content objects. More...

Inheritance diagram for MediaWiki\Storage\SqlBlobStore:
Collaboration diagram for MediaWiki\Storage\SqlBlobStore:

Public Member Functions

 __construct (LoadBalancer $dbLoadBalancer, WANObjectCache $cache, $wikiId=false)
 
 compressData (&$blob)
 If $wgCompressRevisions is enabled, we will compress data. More...
 
 decompressData ( $blob, array $blobFlags)
 Re-converts revision text according to its flags. More...
 
 expandBlob ( $raw, $flags, $cacheKey=null)
 Expand a raw data blob according to the flags given. More...
 
 getBlob ( $blobAddress, $queryFlags=0)
 Retrieve a blob, given an address. More...
 
 getCacheExpiry ()
 
 getCompressBlobs ()
 
 getLegacyEncoding ()
 
 getLegacyEncodingConversionLang ()
 
 getTextIdFromAddress ( $address)
 Returns an ID corresponding to the old_id field in the text table, corresponding to the given $address. More...
 
 getUseExternalStore ()
 
 isReadOnly ()
 Check if the blob metadata or backing blob data store is read-only. More...
 
 setCacheExpiry ( $cacheExpiry)
 
 setCompressBlobs ( $compressBlobs)
 
 setLegacyEncoding ( $legacyEncoding, Language $language)
 
 setUseExternalStore ( $useExternalStore)
 
 storeBlob ( $data, $hints=[])
 Stores an arbitrary blob of data and returns an address that can be used with getBlob() to retrieve the same blob of data,. More...
 

Public Attributes

const TEXT_CACHE_GROUP = 'revisiontext:10'
 
- Public Attributes inherited from IDBAccessObject
const READ_LOCKING = 3
 Constants for object loading bitfield flags (higher => higher QoS) More...
 
const READ_NONE = -1
 
- Public Attributes inherited from MediaWiki\Storage\BlobStore
const DESIGNATION_HINT = 'designation'
 Hint key for use with storeBlob, indicating the general role the block takes in the application. More...
 
const FORMAT_HINT = 'cont_format'
 Hint key for use with storeBlob, indicating the serialization format used to create the blob, as a MIME type. More...
 
const MODEL_HINT = 'cont_model'
 Hint key for use with storeBlob, indicating the model of the content encoded in the given blob. More...
 
const PAGE_HINT = 'page_id'
 Hint key for use with storeBlob, indicating the page the blob is associated with. More...
 
const PARENT_HINT = 'rev_parent_id'
 Hint key for use with storeBlob, indicating the parent revision of the revision the blob is associated with. More...
 
const REVISION_HINT = 'rev_id'
 Hint key for use with storeBlob, indicating the revision the blob is associated with. More...
 
const ROLE_HINT = 'role_name'
 Hint key for use with storeBlob, indicating the slot the blob is associated with. More...
 
const SHA1_HINT = 'cont_sha1'
 Hint key for use with storeBlob, providing the SHA1 hash of the blob as passed to the method. More...
 

Private Member Functions

 fetchBlob ( $blobAddress, $queryFlags)
 MCR migration note: this corresponds to Revision::fetchText. More...
 
 getCacheTTL ()
 Get the text cache TTL. More...
 
 getDBConnection ( $index)
 
 getDBLoadBalancer ()
 

Static Private Member Functions

static splitBlobAddress ( $address)
 Splits a blob address into three parts: the schema, the ID, and parameters/flags. More...
 

Private Attributes

WANObjectCache $cache
 
int $cacheExpiry = 604800
 
bool $compressBlobs = false
 
LoadBalancer $dbLoadBalancer
 
bool string $legacyEncoding = false
 
Language null $legacyEncodingConversionLang = null
 
boolean $useExternalStore = false
 
bool string $wikiId
 Wiki ID. More...
 

Detailed Description

Service for storing and loading Content objects.

Since
1.31
Note
This was written to act as a drop-in replacement for the corresponding static methods in Revision.

Definition at line 50 of file SqlBlobStore.php.

Constructor & Destructor Documentation

◆ __construct()

MediaWiki\Storage\SqlBlobStore::__construct ( LoadBalancer  $dbLoadBalancer,
WANObjectCache  $cache,
  $wikiId = false 
)
Parameters
LoadBalancer$dbLoadBalancerA load balancer for acquiring database connections
WANObjectCache$cacheA cache manager for caching blobs
bool | string$wikiIdThe ID of the target wiki database. Use false for the local wiki.

Definition at line 100 of file SqlBlobStore.php.

References MediaWiki\Storage\SqlBlobStore\$cache, MediaWiki\Storage\SqlBlobStore\$dbLoadBalancer, MediaWiki\Storage\SqlBlobStore\$wikiId, and cache.

Member Function Documentation

◆ compressData()

MediaWiki\Storage\SqlBlobStore::compressData ( $blob)

If $wgCompressRevisions is enabled, we will compress data.

The input string is modified in place. Return value is the flags field: contains 'gzip' if the data is compressed, and 'utf-8' if we're saving in UTF-8 mode.

MCR migration note: this replaces Revision::compressRevisionText

Note
direct use is deprecated!
Todo:
make this private, there should be no need to use this method outside this class.
Parameters
mixed&$blobReference to a text
Returns
string

Definition at line 431 of file SqlBlobStore.php.

References $blob, wfDebug(), and wfLogWarning().

Referenced by MediaWiki\Storage\SqlBlobStore\storeBlob().

◆ decompressData()

MediaWiki\Storage\SqlBlobStore::decompressData (   $blob,
array  $blobFlags 
)

Re-converts revision text according to its flags.

MCR migration note: this replaces Revision::decompressRevisionText

Note
direct use is deprecated, use getBlob() or SlotRecord::getContent() instead.
Todo:
make this private, there should be no need to use this method outside this class.
Parameters
mixed$blobReference to a text
array$blobFlagsCompression flags, such as 'gzip'. Note that not including 'utf-8' in $blobFlags will cause the data to be decoded according to the legacy encoding specified via setLegacyEncoding.
Returns
string|bool Decompressed text, or false on failure

Definition at line 471 of file SqlBlobStore.php.

References $blob, unserialize(), and wfLogWarning().

Referenced by MediaWiki\Storage\SqlBlobStore\expandBlob().

◆ expandBlob()

MediaWiki\Storage\SqlBlobStore::expandBlob (   $raw,
  $flags,
  $cacheKey = null 
)

Expand a raw data blob according to the flags given.

MCR migration note: this replaces Revision::getRevisionText

Note
direct use is deprecated, use getBlob() or SlotRecord::getContent() instead.
Todo:
make this private, there should be no need to use this method outside this class.
Parameters
string$rawThe raw blob data, to be processed according to $flags. May be the blob itself, or the blob compressed, or just the address of the actual blob, depending on $flags.
string | string[]$flagsBlob flags, such as 'external' or 'gzip'. Note that not including 'utf-8' in $flags will cause the data to be decoded according to the legacy encoding specified via setLegacyEncoding.
string | null$cacheKeyMay be used for caching if given
Returns
false|string The expanded blob or false on failure

Definition at line 377 of file SqlBlobStore.php.

References $blob, cache, MediaWiki\Storage\SqlBlobStore\decompressData(), ExternalStore\fetchFromURL(), function, MediaWiki\Storage\SqlBlobStore\TEXT_CACHE_GROUP, IExpiringStore\TTL_PROC_LONG, and use.

Referenced by MediaWiki\Storage\SqlBlobStore\fetchBlob().

◆ fetchBlob()

MediaWiki\Storage\SqlBlobStore::fetchBlob (   $blobAddress,
  $queryFlags 
)
private

MCR migration note: this corresponds to Revision::fetchText.

Parameters
string$blobAddress
int$queryFlags
Exceptions
BlobAccessException
Returns
string|false

Definition at line 298 of file SqlBlobStore.php.

References $blob, $options, MediaWiki\Storage\SqlBlobStore\expandBlob(), MediaWiki\Storage\SqlBlobStore\getDBConnection(), DBAccessObjectUtils\getDBOptions(), DBAccessObjectUtils\hasFlags(), list, MediaWiki\Storage\SqlBlobStore\splitBlobAddress(), and wfWarn().

Referenced by MediaWiki\Storage\SqlBlobStore\getBlob().

◆ getBlob()

MediaWiki\Storage\SqlBlobStore::getBlob (   $blobAddress,
  $queryFlags = 0 
)

Retrieve a blob, given an address.

Currently hardcoded to the 'text' table storage engine.

MCR migration note: this replaces Revision::loadText

Parameters
string$blobAddress
int$queryFlags
Exceptions
BlobAccessException
Returns
string

Implements MediaWiki\Storage\BlobStore.

Definition at line 265 of file SqlBlobStore.php.

References $blob, cache, MediaWiki\Storage\SqlBlobStore\fetchBlob(), function, Wikimedia\Rdbms\Database\getCacheSetOptions(), MediaWiki\Storage\SqlBlobStore\getDBConnection(), DBAccessObjectUtils\getDBOptions(), list, MediaWiki\Storage\SqlBlobStore\TEXT_CACHE_GROUP, IExpiringStore\TTL_PROC_LONG, and use.

◆ getCacheExpiry()

MediaWiki\Storage\SqlBlobStore::getCacheExpiry ( )
Returns
int time for which blobs can be cached, in seconds

Definition at line 113 of file SqlBlobStore.php.

References MediaWiki\Storage\SqlBlobStore\$cacheExpiry.

◆ getCacheTTL()

MediaWiki\Storage\SqlBlobStore::getCacheTTL ( )
private

Get the text cache TTL.

MCR migration note: this replaces Revision::getCacheTTL

Returns
int

Definition at line 525 of file SqlBlobStore.php.

References IExpiringStore\ATTR_EMULATION, cache, IExpiringStore\QOS_EMULATION_SQL, and WANObjectCache\TTL_UNCACHEABLE.

◆ getCompressBlobs()

MediaWiki\Storage\SqlBlobStore::getCompressBlobs ( )
Returns
bool whether blobs should be compressed for storage

Definition at line 129 of file SqlBlobStore.php.

References MediaWiki\Storage\SqlBlobStore\$compressBlobs.

◆ getDBConnection()

MediaWiki\Storage\SqlBlobStore::getDBConnection (   $index)
private
Parameters
int$indexA database index, like DB_MASTER or DB_REPLICA
Returns
IDatabase

Definition at line 196 of file SqlBlobStore.php.

References MediaWiki\Storage\SqlBlobStore\getDBLoadBalancer().

Referenced by MediaWiki\Storage\SqlBlobStore\fetchBlob(), MediaWiki\Storage\SqlBlobStore\getBlob(), and MediaWiki\Storage\SqlBlobStore\storeBlob().

◆ getDBLoadBalancer()

MediaWiki\Storage\SqlBlobStore::getDBLoadBalancer ( )
private

◆ getLegacyEncoding()

MediaWiki\Storage\SqlBlobStore::getLegacyEncoding ( )
Returns
false|string The legacy encoding to assume for blobs that are not marked as utf8. False means handling of legacy encoding is disabled, and utf8 assumed.

Definition at line 144 of file SqlBlobStore.php.

References MediaWiki\Storage\SqlBlobStore\$legacyEncoding.

◆ getLegacyEncodingConversionLang()

MediaWiki\Storage\SqlBlobStore::getLegacyEncodingConversionLang ( )
Returns
Language|null The locale to use when decoding from a legacy encoding, or null if handling of legacy encoding is disabled.

Definition at line 152 of file SqlBlobStore.php.

References MediaWiki\Storage\SqlBlobStore\$legacyEncodingConversionLang.

◆ getTextIdFromAddress()

MediaWiki\Storage\SqlBlobStore::getTextIdFromAddress (   $address)

Returns an ID corresponding to the old_id field in the text table, corresponding to the given $address.

Currently, $address must start with 'tt:' followed by a decimal integer representing the old_id; if $address does not start with 'tt:', null is returned. However, the implementation may change to insert rows into the text table on the fly.

Note
This method exists for use with the text table based storage schema. It should not be assumed that is will function with all future kinds of content addresses.
Deprecated:
since 1.31, so not assume that all blob addresses refer to a row in the text table. This method should become private once the relevant refactoring in WikiPage is complete.
Parameters
string$address
Returns
int|null

Definition at line 557 of file SqlBlobStore.php.

References list, and MediaWiki\Storage\SqlBlobStore\splitBlobAddress().

◆ getUseExternalStore()

MediaWiki\Storage\SqlBlobStore::getUseExternalStore ( )
Returns
bool Whether to use the ExternalStore mechanism for storing blobs.

Definition at line 171 of file SqlBlobStore.php.

References MediaWiki\Storage\SqlBlobStore\$useExternalStore.

◆ isReadOnly()

MediaWiki\Storage\SqlBlobStore::isReadOnly ( )

Check if the blob metadata or backing blob data store is read-only.

Returns
bool

Implements MediaWiki\Storage\BlobStore.

Definition at line 593 of file SqlBlobStore.php.

References ExternalStore\defaultStoresAreReadOnly(), and MediaWiki\Storage\SqlBlobStore\getDBLoadBalancer().

◆ setCacheExpiry()

MediaWiki\Storage\SqlBlobStore::setCacheExpiry (   $cacheExpiry)
Parameters
int$cacheExpirytime for which blobs can be cached, in seconds

Definition at line 120 of file SqlBlobStore.php.

References MediaWiki\Storage\SqlBlobStore\$cacheExpiry.

◆ setCompressBlobs()

MediaWiki\Storage\SqlBlobStore::setCompressBlobs (   $compressBlobs)
Parameters
bool$compressBlobswhether blobs should be compressed for storage

Definition at line 136 of file SqlBlobStore.php.

References MediaWiki\Storage\SqlBlobStore\$compressBlobs.

◆ setLegacyEncoding()

MediaWiki\Storage\SqlBlobStore::setLegacyEncoding (   $legacyEncoding,
Language  $language 
)
Parameters
string$legacyEncodingThe legacy encoding to assume for blobs that are not marked as utf8.
Language$languageThe locale to use when decoding from a legacy encoding.

Definition at line 161 of file SqlBlobStore.php.

References MediaWiki\Storage\SqlBlobStore\$legacyEncoding.

◆ setUseExternalStore()

MediaWiki\Storage\SqlBlobStore::setUseExternalStore (   $useExternalStore)
Parameters
bool$useExternalStoreWhether to use the ExternalStore mechanism for storing blobs.

Definition at line 178 of file SqlBlobStore.php.

References MediaWiki\Storage\SqlBlobStore\$useExternalStore.

◆ splitBlobAddress()

static MediaWiki\Storage\SqlBlobStore::splitBlobAddress (   $address)
staticprivate

Splits a blob address into three parts: the schema, the ID, and parameters/flags.

Parameters
string$address
Exceptions
InvalidArgumentException
Returns
array [ $schema, $id, $parameters ], with $parameters being an assoc array.

Definition at line 581 of file SqlBlobStore.php.

References wfCgiToArray().

Referenced by MediaWiki\Storage\SqlBlobStore\fetchBlob(), and MediaWiki\Storage\SqlBlobStore\getTextIdFromAddress().

◆ storeBlob()

MediaWiki\Storage\SqlBlobStore::storeBlob (   $data,
  $hints = [] 
)

Stores an arbitrary blob of data and returns an address that can be used with getBlob() to retrieve the same blob of data,.

Parameters
string$data
array$hintsAn array of hints.
Exceptions
BlobAccessException
Returns
string an address that can be used with getBlob() to retrieve the data.

Implements MediaWiki\Storage\BlobStore.

Definition at line 211 of file SqlBlobStore.php.

References $e, MediaWiki\Storage\SqlBlobStore\compressData(), DB_MASTER, MediaWiki\Storage\SqlBlobStore\getDBConnection(), and ExternalStore\insertToDefault().

Member Data Documentation

◆ $cache

WANObjectCache MediaWiki\Storage\SqlBlobStore::$cache
private

Definition at line 63 of file SqlBlobStore.php.

Referenced by MediaWiki\Storage\SqlBlobStore\__construct().

◆ $cacheExpiry

int MediaWiki\Storage\SqlBlobStore::$cacheExpiry = 604800
private

◆ $compressBlobs

bool MediaWiki\Storage\SqlBlobStore::$compressBlobs = false
private

◆ $dbLoadBalancer

LoadBalancer MediaWiki\Storage\SqlBlobStore::$dbLoadBalancer
private

◆ $legacyEncoding

bool string MediaWiki\Storage\SqlBlobStore::$legacyEncoding = false
private

◆ $legacyEncodingConversionLang

Language null MediaWiki\Storage\SqlBlobStore::$legacyEncodingConversionLang = null
private

◆ $useExternalStore

boolean MediaWiki\Storage\SqlBlobStore::$useExternalStore = false
private

◆ $wikiId

bool string MediaWiki\Storage\SqlBlobStore::$wikiId
private

Wiki ID.

Definition at line 68 of file SqlBlobStore.php.

Referenced by MediaWiki\Storage\SqlBlobStore\__construct().

◆ TEXT_CACHE_GROUP

const MediaWiki\Storage\SqlBlobStore::TEXT_CACHE_GROUP = 'revisiontext:10'

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