Go to the documentation of this file.
31 parent::__construct( $query, $moduleName,
'rn' );
39 $this->
run( $resultPageSet );
51 protected function runQuery( $resultPageSet, $limit, $start, $startId, $end ) {
56 $this->
addFields( [
'page_id',
'page_random' ] );
57 if ( is_null( $resultPageSet ) ) {
58 $this->
addFields( [
'page_title',
'page_namespace' ] );
60 $this->
addFields( $resultPageSet->getPageTableFields() );
62 $this->
addWhereFld(
'page_namespace', $params[
'namespace'] );
63 if ( $params[
'redirect'] || $params[
'filterredir'] ===
'redirects' ) {
65 } elseif ( $params[
'filterredir'] ===
'nonredirects' ) {
67 } elseif ( is_null( $resultPageSet ) ) {
68 $this->
addFields( [
'page_is_redirect' ] );
72 if ( $start !==
null ) {
73 $start = $this->
getDB()->addQuotes( $start );
75 $startId = (int)$startId;
76 $this->
addWhere(
"page_random = $start AND page_id >= $startId OR page_random > $start" );
78 $this->
addWhere(
"page_random >= $start" );
81 if ( $end !==
null ) {
82 $this->
addWhere(
'page_random < ' . $this->
getDB()->addQuotes( $end ) );
84 $this->
addOption(
'ORDER BY', [
'page_random',
'page_id' ] );
91 foreach (
$res as $row ) {
92 if ( $count++ >= $limit ) {
93 return [ 0,
"{$row->page_random}|{$row->page_id}" ];
95 if ( is_null( $resultPageSet ) ) {
98 'id' => (int)$row->page_id,
101 if ( isset( $row->page_is_redirect ) ) {
102 $page[
'redirect'] = (bool)$row->page_is_redirect;
104 $fit = $result->addValue(
$path,
null, $page );
106 return [ 0,
"{$row->page_random}|{$row->page_id}" ];
109 $resultPageSet->processDbRow( $row );
113 return [ $limit - $count, null ];
119 public function run( $resultPageSet =
null ) {
124 $request = $this->
getMain()->getRequest();
125 if ( $request->getCheck( $this->encodeParamName(
'filterredir' ) ) ) {
129 if ( isset( $params[
'continue'] ) ) {
130 $cont = explode(
'|', $params[
'continue'] );
134 $startId = (int)$cont[2];
135 $end = $cont[3] ? $rand :
null;
149 if ( $resultPageSet !==
null ) {
150 $endFlag = $end ===
null ? 0 : 1;
152 $this,
'continue',
"$rand|$start|$startId|$endFlag"
156 list( $left, $continue ) =
157 $this->
runQuery( $resultPageSet, $params[
'limit'], $start, $startId, $end );
158 if ( $end ===
null && $continue ===
null ) {
163 list( $left, $continue ) = $this->
runQuery( $resultPageSet, $left,
null,
null, $end );
166 if ( $continue !==
null ) {
167 $endFlag = $end ===
null ? 0 : 1;
171 if ( is_null( $resultPageSet ) ) {
209 'action=query&list=random&rnnamespace=0&rnlimit=2'
210 =>
'apihelp-query+random-example-simple',
211 'action=query&generator=random&grnnamespace=0&grnlimit=2&prop=info'
212 =>
'apihelp-query+random-example-generator',
217 return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Random';
addFields( $value)
Add a set of fields to select to the internal array.
This is the main query class.
getHelpUrls()
Return links to more detailed help pages about the module.
resetQueryParams()
Blank the internal arrays with query parameters.
const PARAM_HELP_MSG
(string|array|Message) Specify an alternative i18n documentation message for this parameter.
const PARAM_TYPE
(string|string[]) Either an array of allowed value strings, or a string type as described below.
getResult()
Get the result object.
run( $resultPageSet=null)
executeGenerator( $resultPageSet)
Execute this module as a generator.
addOption( $name, $value=null)
Add an option such as LIMIT or USE INDEX.
setContinueEnumParameter( $paramName, $paramValue)
Overridden to set the generator param if in generator mode.
const PARAM_DEPRECATED
(boolean) Is the parameter deprecated (will show a warning)?
const PARAM_MIN
(integer) Lowest value allowed for the parameter, for PARAM_TYPE 'integer' and 'limit'.
getAllowedParams()
Returns an array of allowed parameters (parameter name) => (default value) or (parameter name) => (ar...
const LIMIT_BIG1
Fast query, standard limit.
getDB()
Get the Query database connection (read-only)
const PARAM_MAX
(integer) Max value allowed for the parameter, for PARAM_TYPE 'integer' and 'limit'.
__construct(ApiQuery $query, $moduleName)
addTables( $tables, $alias=null)
Add a set of tables to the internal array.
select( $method, $extraQuery=[], array &$hookData=null)
Execute a SELECT query based on the values in the internal arrays.
extractRequestParams( $options=[])
Using getAllowedParams(), this function makes an array of the values provided by the user,...
static makeTitle( $ns, $title, $fragment='', $interwiki='')
Create a new Title from a namespace index and a DB key.
getExamplesMessages()
Returns usage examples for this module.
getContinuationManager()
Get the continuation manager.
dieContinueUsageIf( $condition)
Die with the 'badcontinue' error.
getCacheMode( $params)
Get the cache mode for the data generated by this module.
addWhereFld( $field, $value)
Equivalent to addWhere( [ $field => $value ] )
requireMaxOneParameter( $params, $required)
Die if more than one of a certain set of parameters is set and not false.
wfRandom()
Get a random decimal value in the domain of [0, 1), in a way not likely to give duplicate values for ...
const LIMIT_BIG2
Fast query, apihighlimits limit.
const PARAM_DFLT
(null|boolean|integer|string) Default value of the parameter.
Query module to get list of random pages.
getModuleName()
Get the name of the module being executed by this instance.
const PARAM_ISMULTI
(boolean) Accept multiple pipe-separated values for this parameter (e.g.
runQuery( $resultPageSet, $limit, $start, $startId, $end)
Actually perform the query and add pages to the result.
const PARAM_MAX2
(integer) Max value allowed for the parameter for users with the apihighlimits right,...
getMain()
Get the main module.
addWhere( $value)
Add a set of WHERE clauses to the internal array.
execute()
Evaluates the parameters, performs the requested query, and sets up the result.
static addTitleInfo(&$arr, $title, $prefix='')
Add information (title and namespace) about a Title object to a result array.