wiki.techinc.nl/includes/filerepo/file/FileSelectQueryBuilder.php
Umherirrender 8d97313f81 Fix some line indent
Change-Id: I8f82724197d20f9289d80e138d80310f1eab29f2
2024-04-20 00:25:15 +02:00

184 lines
5.5 KiB
PHP

<?php
/**
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
* @file
*/
namespace MediaWiki\FileRepo\File;
use InvalidArgumentException;
use Wikimedia\Rdbms\IReadableDatabase;
use Wikimedia\Rdbms\SelectQueryBuilder;
class FileSelectQueryBuilder extends SelectQueryBuilder {
/**
* @internal use ::newFor* instead.
* @param IReadableDatabase $db
* @param string $type either 'file', 'oldfile' or 'archivedfile'
* @param array $options
* - omit-lazy: Omit fields that are lazily cached.
*/
public function __construct( IReadableDatabase $db, string $type = 'file', array $options = [] ) {
parent::__construct( $db );
if ( $type === 'file' ) {
$this->initFile( $options );
} elseif ( $type === 'oldfile' ) {
$this->initOldFile( $options );
} elseif ( $type === 'archivedfile' ) {
$this->initArchivedFile( $options );
} else {
throw new InvalidArgumentException( "Type $type is not among accepted values" );
}
}
public static function newForFile( IReadableDatabase $db, array $options = [] ): FileSelectQueryBuilder {
return new FileSelectQueryBuilder( $db, 'file', $options );
}
public static function newForOldFile( IReadableDatabase $db, array $options = [] ): FileSelectQueryBuilder {
return new FileSelectQueryBuilder( $db, 'oldfile', $options );
}
public static function newForArchivedFile( IReadableDatabase $db, array $options = [] ): FileSelectQueryBuilder {
return new FileSelectQueryBuilder( $db, 'archivedfile', $options );
}
private function initFile( $options ) {
$this->table( 'image' )
->join( 'actor', 'image_actor', 'actor_id=img_actor' )
->join(
'comment',
'comment_img_description',
'comment_img_description.comment_id = img_description_id'
);
if ( !in_array( 'omit-nonlazy', $options, true ) ) {
$this->fields(
[
'img_name',
'img_size',
'img_width',
'img_height',
'img_metadata',
'img_bits',
'img_media_type',
'img_major_mime',
'img_minor_mime',
'img_timestamp',
'img_sha1',
'img_actor',
'img_user' => 'image_actor.actor_user',
'img_user_text' => 'image_actor.actor_name',
'img_description_text' => 'comment_img_description.comment_text',
'img_description_data' => 'comment_img_description.comment_data',
'img_description_cid' => 'comment_img_description.comment_id'
]
);
}
if ( !in_array( 'omit-lazy', $options, true ) ) {
// Note: Keep this in sync with LocalFile::getLazyCacheFields() and
// LocalFile::loadExtraFromDB()
$this->field( 'img_metadata' );
}
}
private function initOldFile( $options ) {
$this->table( 'oldimage' )
->join( 'actor', 'oldimage_actor', 'actor_id=oi_actor' )
->join(
'comment',
'comment_oi_description',
'comment_oi_description.comment_id = oi_description_id'
);
if ( !in_array( 'omit-nonlazy', $options, true ) ) {
$this->fields(
[
'oi_name',
'oi_archive_name',
'oi_size',
'oi_width',
'oi_height',
'oi_bits',
'oi_media_type',
'oi_major_mime',
'oi_minor_mime',
'oi_timestamp',
'oi_deleted',
'oi_sha1',
'oi_actor',
'oi_user' => 'oldimage_actor.actor_user',
'oi_user_text' => 'oldimage_actor.actor_name',
'oi_description_text' => 'comment_oi_description.comment_text',
'oi_description_data' => 'comment_oi_description.comment_data',
'oi_description_cid' => 'comment_oi_description.comment_id'
]
);
}
if ( !in_array( 'omit-lazy', $options, true ) ) {
// Note: Keep this in sync with LocalFile::getLazyCacheFields() and
// LocalFile::loadExtraFromDB()
$this->field( 'oi_metadata' );
}
}
private function initArchivedFile( $options ) {
$this->table( 'filearchive' )
->join( 'actor', 'filearchive_actor', 'actor_id=fa_actor' )
->join(
'comment',
'comment_fa_description',
'comment_fa_description.comment_id = fa_description_id'
);
if ( !in_array( 'omit-nonlazy', $options, true ) ) {
$this->fields(
[
'fa_id',
'fa_name',
'fa_archive_name',
'fa_storage_key',
'fa_storage_group',
'fa_size',
'fa_bits',
'fa_width',
'fa_height',
'fa_metadata',
'fa_media_type',
'fa_major_mime',
'fa_minor_mime',
'fa_timestamp',
'fa_deleted',
'fa_deleted_timestamp', /* Used by LocalFileRestoreBatch */
'fa_sha1',
'fa_actor',
'fa_user' => 'filearchive_actor.actor_user',
'fa_user_text' => 'filearchive_actor.actor_name',
'fa_description_text' => 'comment_fa_description.comment_text',
'fa_description_data' => 'comment_fa_description.comment_data',
'fa_description_cid' => 'comment_fa_description.comment_id'
]
);
}
if ( !in_array( 'omit-lazy', $options, true ) ) {
// Note: Keep this in sync with LocalFile::getLazyCacheFields() and
// LocalFile::loadExtraFromDB()
$this->field( 'fa_metadata' );
}
}
}