From 56aeff78e39e2cd182a07b5a367eb2935807fbdc Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Sun, 29 Nov 2009 00:01:21 +0000 Subject: [PATCH] * Made log_user_type_time index available when needed * Don't allow type,time index when 2+ types are given * Make sure $this->types becomes an array in limitType() ('' -> array() case was left out) * A few code style tweaks --- includes/LogEventsList.php | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/includes/LogEventsList.php b/includes/LogEventsList.php index 3510988ead..131493dfda 100644 --- a/includes/LogEventsList.php +++ b/includes/LogEventsList.php @@ -790,10 +790,13 @@ class LogPager extends ReverseChronologicalPager { $types = ($types === '') ? array() : (array)$types; // Don't even show header for private logs; don't recognize it... foreach ( $types as $type ) { - if( isset( $wgLogRestrictions[$type] ) && !$wgUser->isAllowed($wgLogRestrictions[$type]) ) { + if( isset( $wgLogRestrictions[$type] ) + && !$wgUser->isAllowed($wgLogRestrictions[$type]) + ) { $types = array_diff( $types, array( $type ) ); } } + $this->types = $types; // Don't show private logs to unprivileged users. // Also, only show them upon specific request to avoid suprises. $audience = $types ? 'user' : 'public'; @@ -802,7 +805,6 @@ class LogPager extends ReverseChronologicalPager { $this->mConds[] = $hideLogs; } if( count($types) ) { - $this->types = $types; $this->mConds['log_type'] = $types; // Set typeCGI; used in url param for paging if( count($types) == 1 ) $this->typeCGI = $types[0]; @@ -890,18 +892,25 @@ class LogPager extends ReverseChronologicalPager { $tables = array( 'logging', 'user' ); $this->mConds[] = 'user_id = log_user'; $groupBy = false; + $index = array(); # Add log_search table if there are conditions on it if( array_key_exists('ls_field',$this->mConds) ) { $tables[] = 'log_search'; - $index = array( 'log_search' => 'ls_field_val', 'logging' => 'PRIMARY' ); + $index['log_search'] = 'ls_field_val'; + $index['logging'] = 'PRIMARY'; $groupBy = 'ls_log_id'; - # Don't use the wrong logging index + # Avoid usage of the wrong index by limiting + # the choices of available indexes. This mainly + # avoids site-breaking filesorts. } else if( $this->title || $this->pattern || $this->user ) { - $index = array( 'logging' => array('page_time','user_time') ); - } else if( $this->types ) { - $index = array( 'logging' => 'type_time' ); + $index['logging'] = array( 'page_time', 'user_time' ); + if( count($this->types) == 1 ) { + $index['logging'][] = array( 'log_user_type_time' ); + } + } else if( count($this->types) == 1 ) { + $index['logging'] = 'type_time'; } else { - $index = array( 'logging' => 'times' ); + $index['logging'] = 'times'; } $options = array( 'USE INDEX' => $index ); # Don't show duplicate rows when using log_search -- 2.20.1