Theaitetos has submitted this change and it was merged.

Change subject: speed up revision-based queries (not)createdby and 
(not)modifiedby
......................................................................


speed up revision-based queries (not)createdby and (not)modifiedby

Change-Id: I435c38a411740702b11b1824436af5494d428924
---
M DPLMain.php
1 file changed, 25 insertions(+), 15 deletions(-)

Approvals:
  Theaitetos: Verified; Looks good to me, approved



diff --git a/DPLMain.php b/DPLMain.php
index 727a546..9d17df9 100644
--- a/DPLMain.php
+++ b/DPLMain.php
@@ -1780,6 +1780,9 @@
         $sTemplateLinksTable = $dbr->tableName( 'templatelinks' );
         $sSqlPageLinksTable = '';
         $sSqlExternalLinksTable = '';
+        $sSqlCreationRevisionTable = '';
+        $sSqlNoCreationRevisionTable = '';
+        $sSqlChangeRevisionTable = '';
         $sSqlCond_page_pl = '';
         $sSqlCond_page_el = '';
         $sSqlCond_page_tpl = '';
@@ -2130,20 +2133,27 @@
 
         // Revisions ==================================
         if ( $sCreatedBy != "" ) {
-            $sSqlCond_page_rev .= ' AND ' . $dbr->addQuotes($sCreatedBy) . ' = 
(SELECT rev_user_text FROM '.$sRevisionTable
-                                .' WHERE '.$sRevisionTable.'.rev_page=page_id 
ORDER BY '.$sRevisionTable.'.rev_timestamp ASC LIMIT 1)';
-        }
-        if ( $sNotCreatedBy != "" ) {
-            $sSqlCond_page_rev .= ' AND ' . $dbr->addQuotes($sNotCreatedBy) . 
' != (SELECT rev_user_text FROM '.$sRevisionTable
-                                .' WHERE '.$sRevisionTable.'.rev_page=page_id 
ORDER BY '.$sRevisionTable.'.rev_timestamp ASC LIMIT 1)';
-        }
-        if ( $sModifiedBy != "" ) {
-            $sSqlCond_page_rev .= ' AND ' . $dbr->addQuotes($sModifiedBy) . ' 
IN (SELECT rev_user_text FROM '.$sRevisionTable
-                                .' WHERE 
'.$sRevisionTable.'.rev_page=page_id)';
-        }
-        if ( $sNotModifiedBy != "" ) {
-            $sSqlCond_page_rev .= ' AND ' . $dbr->addQuotes($sNotModifiedBy) . 
' NOT IN (SELECT rev_user_text FROM '.$sRevisionTable.' WHERE 
'.$sRevisionTable.'.rev_page=page_id)';
-        }
+                       $sSqlCreationRevisionTable = $sRevisionTable . ' AS 
creation_rev, ';
+                       $sSqlCond_page_rev .= ' AND ' . 
$dbr->addQuotes($sCreatedBy) . ' = creation_rev.rev_user_text'
+                                                               .' AND 
creation_rev.rev_page = page_id'
+                                                               .' AND 
creation_rev.rev_parent_id = 0';
+               }
+               if ( $sNotCreatedBy != "" ) {
+                       $sSqlNoCreationRevisionTable = $sRevisionTable . ' AS 
no_creation_rev, ';
+                       $sSqlCond_page_rev .= ' AND ' . 
$dbr->addQuotes($sCreatedBy) . ' != no_creation_rev.rev_user_text'
+                                                               .' AND 
no_creation_rev.rev_page = page_id'
+                                                               .' AND 
no_creation_rev.rev_parent_id = 0';
+               }
+               if ( $sModifiedBy != "" ) {
+                       $sSqlChangeRevisionTable = $sRevisionTable . ' AS 
change_rev, ';
+                       $sSqlCond_page_rev .= ' AND ' . 
$dbr->addQuotes($sCreatedBy) . ' = change_rev.rev_user_text'
+                                                               .' AND 
change_rev.rev_page = page_id';
+               }
+               if ( $sNotModifiedBy != "" ) {
+                       $sSqlCond_page_rev .= ' AND NOT EXISTS (SELECT 1 FROM 
'.$sRevisionTable
+                                                               .' WHERE 
'.$sRevisionTable.'.rev_page=page_id AND '.
+                                                               
$sRevisionTable.'.rev_user_text = ' . $dbr->addQuotes($sNotModifiedBy) . ' 
LIMIT 1)';
+               }
         if ( $sLastModifiedBy != "" ) {
             $sSqlCond_page_rev .= ' AND ' . $dbr->addQuotes($sLastModifiedBy) 
. ' = (SELECT rev_user_text FROM '.$sRevisionTable
                                 .' WHERE '.$sRevisionTable.'.rev_page=page_id 
ORDER BY '.$sRevisionTable.'.rev_timestamp DESC LIMIT 1)';
@@ -2225,7 +2235,7 @@
                                                $sPageTable.'.page_title AS 
page_title,'.$sPageTable.'.page_id AS page_id' . $sSqlSelPage . $sSqlSortkey . 
$sSqlPage_counter .
                                 $sSqlPage_size . $sSqlPage_touched . 
$sSqlRev_user .
                                 $sSqlRev_timestamp . $sSqlRev_id . $sSqlCats . 
$sSqlCl_timestamp .
-                                ' FROM ' . $sSqlRevisionTable . $sSqlRCTable . 
$sSqlPageLinksTable . $sSqlExternalLinksTable . $sPageTable;
+                                ' FROM ' . $sSqlRevisionTable . 
$sSqlCreationRevisionTable . $sSqlNoCreationRevisionTable . 
$sSqlChangeRevisionTable . $sSqlRCTable . $sSqlPageLinksTable . 
$sSqlExternalLinksTable . $sPageTable;
 
         // JOIN ...
         if($sSqlClHeadTable != '' || $sSqlClTableForGC != '') {

-- 
To view, visit https://gerrit.wikimedia.org/r/151567
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I435c38a411740702b11b1824436af5494d428924
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/DynamicPageList
Gerrit-Branch: master
Gerrit-Owner: Theaitetos <[email protected]>
Gerrit-Reviewer: Brian Wolff <[email protected]>
Gerrit-Reviewer: Springle <[email protected]>
Gerrit-Reviewer: Theaitetos <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to