diff options
author | webchick <webchick@24967.no-reply.drupal.org> | 2011-06-27 08:42:37 -0700 |
---|---|---|
committer | webchick <webchick@24967.no-reply.drupal.org> | 2011-06-27 08:42:37 -0700 |
commit | 3b2601b62a0e9162609e417b54907ea09a1f508a (patch) | |
tree | feee0e639e625bc51de788abeed032f94de67321 /includes | |
parent | cb6f0ff36c5facaa09dde0146f781816779f2d40 (diff) | |
download | brdo-3b2601b62a0e9162609e417b54907ea09a1f508a.tar.gz brdo-3b2601b62a0e9162609e417b54907ea09a1f508a.tar.bz2 |
Issue #561422 follow-up by Damien Tournoud, lyricnz, chx: Fixed SQLite support for faster db prefixes.
Diffstat (limited to 'includes')
-rw-r--r-- | includes/database/database.inc | 30 | ||||
-rw-r--r-- | includes/database/sqlite/database.inc | 14 |
2 files changed, 17 insertions, 27 deletions
diff --git a/includes/database/database.inc b/includes/database/database.inc index b04cdf7df..e08f9074f 100644 --- a/includes/database/database.inc +++ b/includes/database/database.inc @@ -273,16 +273,7 @@ abstract class DatabaseConnection extends PDO { protected $schema = NULL; /** - * The default prefix used by this database connection. - * - * Separated from the other prefixes for performance reasons. - * - * @var string - */ - protected $defaultPrefix = ''; - - /** - * The non-default prefixes used by this database connection. + * The prefixes used by this database connection. * * @var array */ @@ -389,7 +380,7 @@ abstract class DatabaseConnection extends PDO { } /** - * Preprocess the prefixes used by this database connection. + * Set the list of prefixes used by this database connection. * * @param $prefix * The prefixes, in any of the multiple forms documented in @@ -397,13 +388,10 @@ abstract class DatabaseConnection extends PDO { */ protected function setPrefix($prefix) { if (is_array($prefix)) { - $this->defaultPrefix = isset($prefix['default']) ? $prefix['default'] : ''; - unset($prefix['default']); - $this->prefixes = $prefix; + $this->prefixes = $prefix + array('default' => ''); } else { - $this->defaultPrefix = $prefix; - $this->prefixes = array(); + $this->prefixes = array('default' => $prefix); } // Set up variables for use in prefixTables(). Replace table-specific @@ -411,12 +399,14 @@ abstract class DatabaseConnection extends PDO { $this->prefixSearch = array(); $this->prefixReplace = array(); foreach ($this->prefixes as $key => $val) { - $this->prefixSearch[] = '{' . $key . '}'; - $this->prefixReplace[] = $val . $key; + if ($key != 'default') { + $this->prefixSearch[] = '{' . $key . '}'; + $this->prefixReplace[] = $val . $key; + } } // Then replace remaining tables with the default prefix. $this->prefixSearch[] = '{'; - $this->prefixReplace[] = $this->defaultPrefix; + $this->prefixReplace[] = $this->prefixes['default']; $this->prefixSearch[] = '}'; $this->prefixReplace[] = ''; } @@ -450,7 +440,7 @@ abstract class DatabaseConnection extends PDO { return $this->prefixes[$table]; } else { - return $this->defaultPrefix; + return $this->prefixes['default']; } } diff --git a/includes/database/sqlite/database.inc b/includes/database/sqlite/database.inc index cf3b9551f..0fc0b5528 100644 --- a/includes/database/sqlite/database.inc +++ b/includes/database/sqlite/database.inc @@ -71,12 +71,8 @@ class DatabaseConnection_sqlite extends DatabaseConnection { )); // Attach one database for each registered prefix. - $prefixes = &$this->prefixes; - if (!empty($this->defaultPrefix)) { - // Add in the default prefix, which is also attached. - $prefixes[] = &$this->defaultPrefix; - } - foreach ($this->prefixes as $table => &$prefix) { + $prefixes = $this->prefixes; + foreach ($prefixes as $table => &$prefix) { // Empty prefix means query the main database -- no need to attach anything. if (!empty($prefix)) { // Only attach the database once. @@ -90,6 +86,8 @@ class DatabaseConnection_sqlite extends DatabaseConnection { $prefix .= '.'; } } + // Regenerate the prefixes replacement table. + $this->setPrefix($prefixes); // Detect support for SAVEPOINT. $version = $this->query('SELECT sqlite_version()')->fetchField(); @@ -240,7 +238,9 @@ class DatabaseConnection_sqlite extends DatabaseConnection { // Generate a new temporary table name and protect it from prefixing. // SQLite requires that temporary tables to be non-qualified. $tablename = $this->generateTemporaryTableName(); - $this->prefixes[$tablename] = ''; + $prefixes = $this->prefixes; + $prefixes[$tablename] = ''; + $this->setPrefix($prefixes); $this->query(preg_replace('/^SELECT/i', 'CREATE TEMPORARY TABLE ' . $tablename . ' AS SELECT', $query), $args, $options); return $tablename; |