Merge pull request #1195 from owncloud/cache_prepared

Cache prepared statements in OC_DB
This commit is contained in:
Thomas Müller 2013-01-15 22:23:34 -08:00
commit 1f7bf57ece
1 changed files with 14 additions and 2 deletions

View File

@ -41,6 +41,8 @@ class OC_DB {
const BACKEND_PDO=0; const BACKEND_PDO=0;
const BACKEND_MDB2=1; const BACKEND_MDB2=1;
static private $preparedQueries = array();
/** /**
* @var MDB2_Driver_Common * @var MDB2_Driver_Common
*/ */
@ -121,6 +123,7 @@ class OC_DB {
return true; return true;
} }
} }
self::$preparedQueries = array();
// The global data we need // The global data we need
$name = OC_Config::getValue( "dbname", "owncloud" ); $name = OC_Config::getValue( "dbname", "owncloud" );
$host = OC_Config::getValue( "dbhost", "" ); $host = OC_Config::getValue( "dbhost", "" );
@ -201,6 +204,7 @@ class OC_DB {
return true; return true;
} }
} }
self::$preparedQueries = array();
// The global data we need // The global data we need
$name = OC_Config::getValue( "dbname", "owncloud" ); $name = OC_Config::getValue( "dbname", "owncloud" );
$host = OC_Config::getValue( "dbhost", "" ); $host = OC_Config::getValue( "dbhost", "" );
@ -321,7 +325,12 @@ class OC_DB {
$query.=$limitsql; $query.=$limitsql;
} }
} }
} else {
if (isset(self::$preparedQueries[$query])) {
return self::$preparedQueries[$query];
}
} }
$rawQuery = $query;
// Optimize the query // Optimize the query
$query = self::processQuery( $query ); $query = self::processQuery( $query );
@ -343,6 +352,9 @@ class OC_DB {
} }
$result=new PDOStatementWrapper($result); $result=new PDOStatementWrapper($result);
} }
if (is_null($limit) || $limit == -1) {
self::$preparedQueries[$rawQuery] = $result;
}
return $result; return $result;
} }