- // Tag stuff.
- $fields = array();
- // Fields are * in this case, so let the function modify an empty array to keep it happy.
- ChangeTags::modifyDisplayQuery( $tables,
- $fields,
- $conds,
- $join_conds,
- $query_options,
- $opts['tagfilter']
- );
-
- wfRunHooks('SpecialRecentChangesQuery', array( &$conds, &$tables, &$join_conds, $opts ) );
-
- // Is there either one namespace selected or excluded?
- // Tag filtering also has a better index.
- // Also, if this is "all" or main namespace, just use timestamp index.
- if( is_null($namespace) || $invert || $opts['tagfilter'] ) {
+ if ( !$this->including() ) {
+ // Tag stuff.
+ // Doesn't work when transcluding. See bug 23293
+ $fields = array();
+ // Fields are * in this case, so let the function modify an empty array to keep it happy.
+ ChangeTags::modifyDisplayQuery(
+ $tables, $fields, $conds, $join_conds, $query_options, $opts['tagfilter']
+ );
+ }
+
+ if ( !wfRunHooks( 'SpecialRecentChangesQuery', array( &$conds, &$tables, &$join_conds, $opts, &$query_options, &$select ) ) )
+ return false;
+
+ // Don't use the new_namespace_time timestamp index if:
+ // (a) "All namespaces" selected
+ // (b) We want all pages NOT in a certain namespaces (inverted)
+ // (c) There is a tag to filter on (use tag index instead)
+ // (d) UNION + sort/limit is not an option for the DBMS
+ if( is_null( $namespace )
+ || ( $invert && !is_null( $namespace ) )
+ || $opts['tagfilter'] != ''
+ || !$dbr->unionSupportsOrderAndLimit() )
+ {