Explorar o código

#5176 Speed improvements: additional DB caches

Alex Trofimov hai 1 ano
pai
achega
0ed69b1923

+ 27 - 7
inc/classes/BxDolModuleQuery.php

@@ -43,9 +43,17 @@ class BxDolModuleQuery extends BxDolDb implements iBxDolSingleton
         return $bFromCache ? $this->fromMemory('sys_modules_' . $iId, 'getRow', $sSql) : $this->getRow($sSql);
         return $bFromCache ? $this->fromMemory('sys_modules_' . $iId, 'getRow', $sSql) : $this->getRow($sSql);
     }
     }
     function getModuleByName($sName, $bFromCache = true)
     function getModuleByName($sName, $bFromCache = true)
-    {
-        $sSql = $this->prepare("SELECT * FROM `sys_modules` WHERE `name`=? LIMIT 1", $sName);
-        return $bFromCache ? $this->fromMemory('sys_modules_' . $sName, 'getRow', $sSql) : $this->getRow($sSql);
+    {            
+        if ($bFromCache) {
+            $sSql = "SELECT * FROM `sys_modules`";
+            $a = $this->fromCache('sys_modules_list', 'getAllWithKey', $sSql, 'name');
+            if ($a && isset($a[$sName]))
+                return $a[$sName];
+            return false;
+        } else {
+            $sSql = $this->prepare("SELECT * FROM `sys_modules` WHERE `name`=? LIMIT 1", $sName);
+            return $this->getRow($sSql);
+        }
     }
     }
     function getModuleByUri($sUri, $bFromCache = true)
     function getModuleByUri($sUri, $bFromCache = true)
     {
     {
@@ -55,17 +63,26 @@ class BxDolModuleQuery extends BxDolDb implements iBxDolSingleton
     function enableModuleByUri($sUri)
     function enableModuleByUri($sUri)
     {
     {
         $sSql = $this->prepare("UPDATE `sys_modules` SET `enabled`='1' WHERE `uri`=? LIMIT 1", $sUri);
         $sSql = $this->prepare("UPDATE `sys_modules` SET `enabled`='1' WHERE `uri`=? LIMIT 1", $sUri);
-        return (int)$this->query($sSql) > 0;
+        $bRet = (int)$this->query($sSql) > 0;
+        if ($bRet)
+            $this->cleanCache('sys_modules_list');
+        return $bRet;
     }
     }
     function disableModuleByUri($sUri)
     function disableModuleByUri($sUri)
     {
     {
         $sSql = $this->prepare("UPDATE `sys_modules` SET `enabled`='0' WHERE `uri`=? LIMIT 1", $sUri);
         $sSql = $this->prepare("UPDATE `sys_modules` SET `enabled`='0' WHERE `uri`=? LIMIT 1", $sUri);
-        return (int)$this->query($sSql) > 0;
+        $bRet = (int)$this->query($sSql) > 0;
+        if ($bRet)
+            $this->cleanCache('sys_modules_list');
+        return $bRet;
     }
     }
     function setModulePendingUninstall($sUri, $bPendingUninstall)
     function setModulePendingUninstall($sUri, $bPendingUninstall)
     {
     {
         $sSql = $this->prepare("UPDATE `sys_modules` SET `pending_uninstall` = ? WHERE `uri` = ? LIMIT 1", $bPendingUninstall ? 1 : 0, $sUri);
         $sSql = $this->prepare("UPDATE `sys_modules` SET `pending_uninstall` = ? WHERE `uri` = ? LIMIT 1", $bPendingUninstall ? 1 : 0, $sUri);
-        return $this->query($sSql);
+        $bRet = $this->query($sSql);
+        if ($bRet)
+            $this->cleanCache('sys_modules_list');
+        return $bRet;
     }
     }
     function isModule($sUri)
     function isModule($sUri)
     {
     {
@@ -274,7 +291,10 @@ class BxDolModuleQuery extends BxDolDb implements iBxDolSingleton
         $sWhereClause = !empty($aParamsWhere) ? $this->arrayToSQL($aParamsWhere, " AND ") : "1";
         $sWhereClause = !empty($aParamsWhere) ? $this->arrayToSQL($aParamsWhere, " AND ") : "1";
 
 
         $sSql = "UPDATE `sys_modules` SET " . $this->arrayToSQL($aParamsSet) . " WHERE " . $sWhereClause;
         $sSql = "UPDATE `sys_modules` SET " . $this->arrayToSQL($aParamsSet) . " WHERE " . $sWhereClause;
-        return $this->query($sSql);
+        $mixedRet = $this->query($sSql);
+        if ($mixedRet)
+            $this->cleanCache('sys_modules_list');
+        return $mixedRet;        
     }
     }
     
     
     public function checkModulesSubtypes()
     public function checkModulesSubtypes()

+ 9 - 1
studio/classes/BxDolStudioInstallerQuery.php

@@ -66,7 +66,13 @@ class BxDolStudioInstallerQuery extends BxDolModuleQuery
         $sQuery = $this->prepare("INSERT IGNORE INTO `sys_modules`(`type`, `name`, `title`, `vendor`, `version`, `help_url`, `path`, `uri`, `class_prefix`, `db_prefix`, `lang_category`, `dependencies`, `date`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, UNIX_TIMESTAMP())", $aConfig['type'], $aConfig['name'], $aConfig['title'], $aConfig['vendor'], $aConfig['version'], $sHelpUrl, $aConfig['home_dir'], $aConfig['home_uri'], $aConfig['class_prefix'], $aConfig['db_prefix'], $aConfig['language_category'], $sDependencies);
         $sQuery = $this->prepare("INSERT IGNORE INTO `sys_modules`(`type`, `name`, `title`, `vendor`, `version`, `help_url`, `path`, `uri`, `class_prefix`, `db_prefix`, `lang_category`, `dependencies`, `date`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, UNIX_TIMESTAMP())", $aConfig['type'], $aConfig['name'], $aConfig['title'], $aConfig['vendor'], $aConfig['version'], $sHelpUrl, $aConfig['home_dir'], $aConfig['home_uri'], $aConfig['class_prefix'], $aConfig['db_prefix'], $aConfig['language_category'], $sDependencies);
         $iResult = (int)$this->query($sQuery);
         $iResult = (int)$this->query($sQuery);
 
 
-        return $iResult > 0 ? (int)$this->lastId() : 0;
+        if ($iResult > 0) {
+            $iRet = (int)$this->lastId();
+            $this->cleanCache('sys_modules_list');
+            return $iRet;
+        } else {
+            return 0;
+        }
     }
     }
 
 
     function insertModuleTrack($iModuleId, &$aFile)
     function insertModuleTrack($iModuleId, &$aFile)
@@ -97,6 +103,8 @@ class BxDolStudioInstallerQuery extends BxDolModuleQuery
 
 
         $this->deleteModuleTrackFiles($iId);
         $this->deleteModuleTrackFiles($iId);
 
 
+        $this->cleanCache('sys_modules_list');
+
         return $iId;
         return $iId;
     }
     }
 }
 }