From d4e929c37a70291e33c9a686e6e5576bd2a3dd86 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Wed, 10 Sep 2014 13:11:04 +0200 Subject: [PATCH] Remove implicit prepared statement cache and get the connection from the server container in \OC_DB --- core/command/maintenance/repair.php | 4 ---- lib/private/db.php | 35 +++++++--------------------- lib/private/db/connection.php | 16 +------------ lib/private/db/connectionfactory.php | 13 ----------- lib/private/preferences.php | 6 ++--- lib/private/updater.php | 1 - 6 files changed, 13 insertions(+), 62 deletions(-) diff --git a/core/command/maintenance/repair.php b/core/command/maintenance/repair.php index 9af5996b2e1..7c0cf71d3b6 100644 --- a/core/command/maintenance/repair.php +++ b/core/command/maintenance/repair.php @@ -35,10 +35,6 @@ class Repair extends Command { } protected function execute(InputInterface $input, OutputInterface $output) { - // TODO: inject DB connection/factory when possible - $connection = \OC_DB::getConnection(); - $connection->disableQueryStatementCaching(); - $maintenanceMode = $this->config->getValue('maintenance', false); $this->config->setValue('maintenance', true); diff --git a/lib/private/db.php b/lib/private/db.php index ba069977d35..381ed93e81e 100644 --- a/lib/private/db.php +++ b/lib/private/db.php @@ -110,10 +110,9 @@ class OC_DB { * The existing database connection is closed and connected again */ public static function reconnect() { - if(self::$connection) { - self::$connection->close(); - self::$connection->connect(); - } + $connection = \OC::$server->getDatabaseConnection(); + $connection->close(); + $connection->connect(); } /** @@ -146,7 +145,7 @@ class OC_DB { * SQL query via Doctrine prepare(), needs to be execute()'d! */ static public function prepare( $query , $limit = null, $offset = null, $isManipulation = null) { - self::connect(); + $connection = \OC::$server->getDatabaseConnection(); if ($isManipulation === null) { //try to guess, so we return the number of rows on manipulations @@ -155,7 +154,7 @@ class OC_DB { // return the result try { - $result = self::$connection->prepare($query, $limit, $offset); + $result =$connection->prepare($query, $limit, $offset); } catch (\Doctrine\DBAL\DBALException $e) { throw new \DatabaseException($e->getMessage(), $query); } @@ -252,8 +251,7 @@ class OC_DB { * cause trouble! */ public static function insertid($table=null) { - self::connect(); - return self::$connection->lastInsertId($table); + return \OC::$server->getDatabaseConnection()->lastInsertId($table); } /** @@ -263,24 +261,21 @@ class OC_DB { * @return boolean number of updated rows */ public static function insertIfNotExist($table, $input) { - self::connect(); - return self::$connection->insertIfNotExist($table, $input); + return \OC::$server->getDatabaseConnection()->insertIfNotExist($table, $input); } /** * Start a transaction */ public static function beginTransaction() { - self::connect(); - self::$connection->beginTransaction(); + return \OC::$server->getDatabaseConnection()->beginTransaction(); } /** * Commit the database changes done during a transaction that is in progress */ public static function commit() { - self::connect(); - self::$connection->commit(); + return \OC::$server->getDatabaseConnection()->commit(); } /** @@ -414,18 +409,6 @@ class OC_DB { return ''; } - /** - * @param bool $enabled - */ - static public function enableCaching($enabled) { - self::connect(); - if ($enabled) { - self::$connection->enableQueryStatementCaching(); - } else { - self::$connection->disableQueryStatementCaching(); - } - } - /** * Checks if a table exists in the database - the database prefix will be prepended * diff --git a/lib/private/db/connection.php b/lib/private/db/connection.php index f91175511b0..a6cdf858899 100644 --- a/lib/private/db/connection.php +++ b/lib/private/db/connection.php @@ -24,13 +24,6 @@ class Connection extends \Doctrine\DBAL\Connection implements IDBConnection { */ protected $adapter; - /** - * @var \Doctrine\DBAL\Driver\Statement[] $preparedQueries - */ - protected $preparedQueries = array(); - - protected $cachingQueryStatementEnabled = true; - /** * Initializes a new instance of the Connection class. * @@ -70,9 +63,6 @@ class Connection extends \Doctrine\DBAL\Connection implements IDBConnection { $platform = $this->getDatabasePlatform(); $statement = $platform->modifyLimitQuery($statement, $limit, $offset); } else { - if (isset($this->preparedQueries[$statement]) && $this->cachingQueryStatementEnabled) { - return $this->preparedQueries[$statement]; - } $origStatement = $statement; } $statement = $this->replaceTablePrefix($statement); @@ -81,11 +71,7 @@ class Connection extends \Doctrine\DBAL\Connection implements IDBConnection { if(\OC_Config::getValue( 'log_query', false)) { \OC_Log::write('core', 'DB prepare : '.$statement, \OC_Log::DEBUG); } - $result = parent::prepare($statement); - if (is_null($limit) && $this->cachingQueryStatementEnabled) { - $this->preparedQueries[$origStatement] = $result; - } - return $result; + return parent::prepare($statement); } /** diff --git a/lib/private/db/connectionfactory.php b/lib/private/db/connectionfactory.php index 589a1c0affd..a5260c1a4c5 100644 --- a/lib/private/db/connectionfactory.php +++ b/lib/private/db/connectionfactory.php @@ -98,19 +98,6 @@ class ConnectionFactory { new \Doctrine\DBAL\Configuration(), $eventManager ); - switch ($normalizedType) { - case 'sqlite3': - // Sqlite doesn't handle query caching and schema changes - // TODO: find a better way to handle this - /** @var $connection \OC\DB\Connection */ - $connection->disableQueryStatementCaching(); - break; - case 'oci': - // oracle seems to have issues with cached statements which have been closed - /** @var $connection \OC\DB\Connection */ - $connection->disableQueryStatementCaching(); - break; - } return $connection; } diff --git a/lib/private/preferences.php b/lib/private/preferences.php index a849cc23e1a..cdaa207449d 100644 --- a/lib/private/preferences.php +++ b/lib/private/preferences.php @@ -36,7 +36,7 @@ namespace OC; -use \OC\DB\Connection; +use OCP\IDBConnection; /** @@ -61,9 +61,9 @@ class Preferences { protected $cache = array(); /** - * @param \OC\DB\Connection $conn + * @param \OCP\IDBConnection $conn */ - public function __construct(Connection $conn) { + public function __construct(IDBConnection $conn) { $this->conn = $conn; } diff --git a/lib/private/updater.php b/lib/private/updater.php index 38a281cd2f8..c4c70a3cc4a 100644 --- a/lib/private/updater.php +++ b/lib/private/updater.php @@ -129,7 +129,6 @@ class Updater extends BasicEmitter { * @return bool true if the operation succeeded, false otherwise */ public function upgrade() { - \OC_DB::enableCaching(false); \OC_Config::setValue('maintenance', true); $installedVersion = \OC_Config::getValue('version', '0.0.0'); -- 2.39.5