appdb/include maintainer.php

WineHQ wineowner at wine.codeweavers.com
Thu Jul 26 09:42:21 CDT 2007


ChangeSet ID:	31280
CVSROOT:	/opt/cvs-commit
Module name:	appdb
Changes by:	wineowner at winehq.org	2007/07/26 09:42:21

Modified files:
	include        : maintainer.php 

Log message:
	Alexander Nicolaysen Sørnes <alex at thehandofagony.com>
	Speedup maintainer::objectGetEntries and maintainer::objectGetEntriesCount. Use UNION for sql
	statements and multipage controls

Patch: http://cvs.winehq.org/patch.py?id=31280

Old revision  New revision  Changes     Path
 1.49          1.50          +83 -47     appdb/include/maintainer.php

Index: appdb/include/maintainer.php
diff -u -p appdb/include/maintainer.php:1.49 appdb/include/maintainer.php:1.50
--- appdb/include/maintainer.php:1.49	26 Jul 2007 14:42:21 -0000
+++ appdb/include/maintainer.php	26 Jul 2007 14:42:21 -0000
@@ -165,7 +165,7 @@ class maintainer
     var $sMaintainReason;
     var $bSuperMaintainer;
     var $aSubmitTime; //FIXME: should be 'sSubmitTime'
-    var $bQueued;
+    var $bQueued; //FIXME: Should be sQueued
     var $sReplyText;
 
     // parameters used in the queued data notification system
@@ -382,45 +382,75 @@ class maintainer
         return $hResult;
     }
 
-    function ObjectGetEntries($bQueued, $bRejected)
+    function ObjectGetEntries($bQueued, $bRejected, $iRows = 0, $iStart = 0)
     {
         /* Not implemented */
         if($bRejected)
             return FALSE;
 
+        $sLimit = "";
+
+        /* Should we add a limit clause to the query? */
+        if($iRows || $iStart)
+        {
+            $sLimit = " LIMIT ?,?";
+
+            /* Selecting 0 rows makes no sense, so we assume the user wants to select all of them
+               after an offset given by iStart */
+            if(!$iRows)
+                $iRows = maintainer::objectGetEntriesCount($bQueued, $bRejected);
+        }
+
         /* Excluding requests for queued apps and versions, as these will be
            handled automatically */
-        $sQuery = "SELECT DISTINCT appMaintainers.* FROM 
-            appMaintainers, appFamily, appVersion WHERE
+        $sQuery = "(SELECT DISTINCT appMaintainers.* FROM 
+            appMaintainers, appFamily WHERE
             appMaintainers.queued = '?'
             AND
-            appFamily.appId = appVersion.appId
+            appMaintainers.superMaintainer = '1'
             AND
-            (
-                (
-                    appFamily.appId = appMaintainers.appId
-                    AND
-                    appFamily.queued = 'false'
-                    AND 
-                    appMaintainers.versionId = ''
-                )
-                OR
-                (
-                    appVersion.versionId = appMaintainers.versionId
-                    AND
-                    appVersion.queued = 'false'
-                )
-            )";
+            appFamily.appId = appMaintainers.appId
+            AND
+            appFamily.queued = 'false') UNION
+            (SELECT DISTINCT appMaintainers.* FROM
+            appMaintainers, appVersion WHERE
+            appMaintainers.queued = '?'
+            AND
+            appMaintainers.versionId = appVersion.versionId
+            AND
+            appMaintainers.superMaintainer = '0'
+            AND
+            appVersion.queued = 'false')$sLimit";
 
         if($bQueued)
         {
             if($_SESSION['current']->hasPriv("admin"))
-                return query_parameters($sQuery, $bQueued ? "true" : "false");
-            else
+            {
+                if($sLimit)
+                {
+                    return query_parameters($sQuery, $bQueued ? "true" : "false",
+                                            $bQueued ? "true" : "false",
+                                            $iStart, $iRows);
+                } else
+                {
+                    return query_parameters($sQuery, $bQueued ? "true" : "false",
+                                            $bQueued ? "true" : "false");
+                }
+            } else
+            {
                 return NULL;
+            }
         } else
         {
-            return query_parameters($sQuery, $bQueued ? "true" : "false");
+            if($sLimit)
+            {
+                return query_parameters($sQuery, $bQueued ? "true" : "false",
+                                        $bQueued ? "true" : "false", $iStart, $iRows);
+            } else
+            {
+                return query_parameters($sQuery, $bQueued ? "true" : "false",
+                                        $bQueued ? "true" : "false");
+            }
         }
     }
 
@@ -475,34 +505,33 @@ class maintainer
 
         /* Excluding requests for queued apps and versions, as these are handled 
            automatically.  One SELECT for super maintainers, one for maintainers. */
-       $sQuery = "SELECT COUNT(DISTINCT maintainerId) as queued_maintainers FROM 
-                appMaintainers, appFamily, appVersion WHERE
-                appMaintainers.queued = '?'
-                AND
-                appFamily.appId = appVersion.appId
-                AND
-                (
-                    (
-                        appFamily.appId = appMaintainers.appId
-                        AND
-                        appFamily.queued = 'false'
-                        AND 
-                        appMaintainers.versionId = ''
-                    )
-                    OR
-                    (
-                        appVersion.versionId = appMaintainers.versionId
-                        AND
-                        appVersion.queued = 'false'
-                    )
-                )";
+       $sQuery = "(SELECT COUNT(DISTINCT maintainerId) as count FROM 
+            appMaintainers, appFamily WHERE
+            appMaintainers.queued = '?'
+            AND
+            appMaintainers.superMaintainer = '1'
+            AND
+            appFamily.appId = appMaintainers.appId
+            AND
+            appFamily.queued = 'false') UNION
+            (SELECT COUNT(DISTINCT maintainerId) as count FROM
+            appMaintainers, appVersion WHERE
+            appMaintainers.queued = '?'
+            AND
+            appMaintainers.versionId = appVersion.versionId
+            AND
+            appMaintainers.superMaintainer = '0'
+            AND
+            appVersion.queued = 'false')";
 
-        if(!($hResult = query_parameters($sQuery, $bQueued ? "true" : "false")))
+        if(!($hResult = query_parameters($sQuery, $bQueued ? "true" : "false",
+                                         $bQueued ? "true" : "false")))
             return FALSE;
 
-        $oRow = mysql_fetch_object($hResult);
+        for($iCount = 0; $oRow = mysql_fetch_object($hResult);)
+            $iCount += $oRow->count;
 
-        return $oRow->queued_maintainers;
+        return $iCount;
     }
 
     /* see how many maintainer entries we have in the database */
@@ -782,6 +811,13 @@ class maintainer
         return TRUE;
     }
 
+    function objectGetItemsPerPage($bQueued = false)
+    {
+        $aItemsPerPage = array(25, 50, 100, 200);
+        $iDefaultPerPage = 25;
+        return array($aItemsPerPage, $iDefaultPerPage);
+    }
+
     function update()
     {
         /* STUB: No updating possible at the moment */



More information about the wine-cvs mailing list