From 556ca7c259f179d69a1bace18224280720889acc Mon Sep 17 00:00:00 2001 From: Michael M Slusarz Date: Mon, 24 May 2010 21:38:44 -0600 Subject: [PATCH] Add executeWrite(). Needed to run custom SQL queries that may need access to the write DB. --- framework/Db/lib/Horde/Db/Adapter/Base.php | 26 +++++++++++++++++--- framework/Db/lib/Horde/Db/Adapter/Base/Schema.php | 12 +++++----- framework/Db/lib/Horde/Db/Adapter/Mysql/Schema.php | 12 +++++----- framework/Db/lib/Horde/Db/Adapter/Mysqli.php | 2 +- .../Db/lib/Horde/Db/Adapter/Postgresql/Schema.php | 28 +++++++++++----------- .../Db/lib/Horde/Db/Adapter/Sqlite/Schema.php | 8 +++---- 6 files changed, 54 insertions(+), 34 deletions(-) diff --git a/framework/Db/lib/Horde/Db/Adapter/Base.php b/framework/Db/lib/Horde/Db/Adapter/Base.php index 76aec92ea..a3939398e 100644 --- a/framework/Db/lib/Horde/Db/Adapter/Base.php +++ b/framework/Db/lib/Horde/Db/Adapter/Base.php @@ -545,6 +545,26 @@ abstract class Horde_Db_Adapter_Base } /** + * Executes the SQL statement in the context of this connection. + * Uses the write DB if necessary. + * + * @param string $sql SQL statement. + * @param mixed $arg1 Either an array of bound parameters or a query + * name. + * @param string $arg2 If $arg1 contains bound parameters, the query + * name. + * + * @return Traversable + * @throws Horde_Db_Exception + */ + public function executeWrite($sql, $arg1 = null, $arg2 = null) + { + return $this->_write + ? $this->_write->execute($sql, $arg1, $arg2) + : $this->execute($sql, $arg1, $arg2); + } + + /** * Returns the last auto-generated ID from the affected table. * * @param string $sql SQL statement. @@ -730,10 +750,10 @@ abstract class Horde_Db_Adapter_Base { if ($this->_write) { return $this->_write->insertFixture($fixture, $tableName); - } else { - /*@TODO*/ - return $this->execute("INSERT INTO #{quote_table_name(table_name)} (#{fixture.key_list}) VALUES (#{fixture.value_list})", 'Fixture Insert'); } + + /*@TODO*/ + return $this->execute("INSERT INTO #{quote_table_name(table_name)} (#{fixture.key_list}) VALUES (#{fixture.value_list})", 'Fixture Insert'); } /** diff --git a/framework/Db/lib/Horde/Db/Adapter/Base/Schema.php b/framework/Db/lib/Horde/Db/Adapter/Base/Schema.php index db3066770..932af89ba 100644 --- a/framework/Db/lib/Horde/Db/Adapter/Base/Schema.php +++ b/framework/Db/lib/Horde/Db/Adapter/Base/Schema.php @@ -420,7 +420,7 @@ abstract class Horde_Db_Adapter_Base_Schema $sql = "CREATE $temp TABLE ".$this->quoteTableName($tableDefinition->getName())." (\n". $tableDefinition->toSql()."\n". ") $opts"; - return $this->execute($sql); + return $this->executeWrite($sql); } /** @@ -441,7 +441,7 @@ abstract class Horde_Db_Adapter_Base_Schema public function dropTable($name) { $this->_clearTableCache($name); - return $this->execute('DROP TABLE ' . $this->quoteTableName($name)); + return $this->executeWrite('DROP TABLE ' . $this->quoteTableName($name)); } /** @@ -466,7 +466,7 @@ abstract class Horde_Db_Adapter_Base_Schema ' ADD '.$this->quoteColumnName($columnName) . ' '.$this->typeToSql($type, $limit, $precision, $scale, $unsigned); $sql = $this->addColumnOptions($sql, $options); - return $this->execute($sql); + return $this->executeWrite($sql); } /** @@ -482,7 +482,7 @@ abstract class Horde_Db_Adapter_Base_Schema $this->_clearTableCache($tableName); $sql = 'ALTER TABLE ' . $this->quoteTableName($tableName).' DROP '.$this->quoteColumnName($columnName); - return $this->execute($sql); + return $this->executeWrite($sql); } /** @@ -574,7 +574,7 @@ abstract class Horde_Db_Adapter_Base_Schema $quotedColumnNames = implode(', ', $quotedCols); $sql = "CREATE $indexType INDEX ".$this->quoteColumnName($indexName). 'ON '.$this->quoteTableName($tableName) . " ($quotedColumnNames)"; - return $this->execute($sql); + return $this->executeWrite($sql); } /** @@ -600,7 +600,7 @@ abstract class Horde_Db_Adapter_Base_Schema $index = $this->indexName($tableName, $options); $sql = "DROP INDEX ".$this->quoteColumnName($index).' ON ' . $this->quoteTableName($tableName); - return $this->execute($sql); + return $this->executeWrite($sql); } /** diff --git a/framework/Db/lib/Horde/Db/Adapter/Mysql/Schema.php b/framework/Db/lib/Horde/Db/Adapter/Mysql/Schema.php index 24b3263ca..4d34e81c8 100644 --- a/framework/Db/lib/Horde/Db/Adapter/Mysql/Schema.php +++ b/framework/Db/lib/Horde/Db/Adapter/Mysql/Schema.php @@ -94,7 +94,7 @@ class Horde_Db_Adapter_Mysql_Schema extends Horde_Db_Adapter_Base_Schema */ public function createDatabase($name) { - return $this->execute("CREATE DATABASE `$name`"); + return $this->executeWrite("CREATE DATABASE `$name`"); } /** @@ -104,7 +104,7 @@ class Horde_Db_Adapter_Mysql_Schema extends Horde_Db_Adapter_Base_Schema */ public function dropDatabase($name) { - return $this->execute("DROP DATABASE IF EXISTS `$name`"); + return $this->executeWrite("DROP DATABASE IF EXISTS `$name`"); } /** @@ -275,7 +275,7 @@ class Horde_Db_Adapter_Mysql_Schema extends Horde_Db_Adapter_Base_Schema { $this->_clearTableCache($name); - return $this->execute('ALTER TABLE '.$this->quoteTableName($name).' RENAME '.$this->quoteTableName($newName)); + return $this->executeWrite('ALTER TABLE '.$this->quoteTableName($name).' RENAME '.$this->quoteTableName($newName)); } /** @@ -297,7 +297,7 @@ class Horde_Db_Adapter_Mysql_Schema extends Horde_Db_Adapter_Base_Schema $default = $this->quote($default); $sql = "ALTER TABLE $quotedTableName CHANGE $quotedColumnName $quotedColumnName $currentType DEFAULT $default"; - return $this->execute($sql); + return $this->executeWrite($sql); } /** @@ -327,7 +327,7 @@ class Horde_Db_Adapter_Mysql_Schema extends Horde_Db_Adapter_Base_Schema $sql = "ALTER TABLE $quotedTableName CHANGE $quotedColumnName $quotedColumnName $typeSql"; $sql = $this->addColumnOptions($sql, $options); - $this->execute($sql); + $this->executeWrite($sql); } /** @@ -350,7 +350,7 @@ class Horde_Db_Adapter_Mysql_Schema extends Horde_Db_Adapter_Base_Schema $quotedColumnName.' '. $this->quoteColumnName($newColumnName)." ". $currentType; - return $this->execute($sql); + return $this->executeWrite($sql); } /** diff --git a/framework/Db/lib/Horde/Db/Adapter/Mysqli.php b/framework/Db/lib/Horde/Db/Adapter/Mysqli.php index cba44d165..013f2fba3 100644 --- a/framework/Db/lib/Horde/Db/Adapter/Mysqli.php +++ b/framework/Db/lib/Horde/Db/Adapter/Mysqli.php @@ -336,7 +336,7 @@ class Horde_Db_Adapter_Mysqli extends Horde_Db_Adapter_Base */ public function insert($sql, $arg1=null, $arg2=null, $pk=null, $idValue=null, $sequenceName=null) { - $this->execute($sql, $arg1, $arg2); + $this->executeWrite($sql, $arg1, $arg2); return isset($idValue) ? $idValue : $this->_insertId; } diff --git a/framework/Db/lib/Horde/Db/Adapter/Postgresql/Schema.php b/framework/Db/lib/Horde/Db/Adapter/Postgresql/Schema.php index 991fe75e5..53c18e6bb 100644 --- a/framework/Db/lib/Horde/Db/Adapter/Postgresql/Schema.php +++ b/framework/Db/lib/Horde/Db/Adapter/Postgresql/Schema.php @@ -154,7 +154,7 @@ class Horde_Db_Adapter_Postgresql_Schema extends Horde_Db_Adapter_Base_Schema } } - return $this->execute('CREATE DATABASE ' . $this->quoteTableName($name) . $optionString); + return $this->executeWrite('CREATE DATABASE ' . $this->quoteTableName($name) . $optionString); } /** @@ -166,10 +166,10 @@ class Horde_Db_Adapter_Postgresql_Schema extends Horde_Db_Adapter_Base_Schema public function dropDatabase($name) { if ($this->postgresqlVersion() >= 80200) { - return $this->execute('DROP DATABASE IF EXISTS ' . $this->quoteTableName($name)); + return $this->executeWrite('DROP DATABASE IF EXISTS ' . $this->quoteTableName($name)); } else { try { - return $this->execute('DROP DATABASE ' . $this->quoteTableName($name)); + return $this->executeWrite('DROP DATABASE ' . $this->quoteTableName($name)); } catch (Horde_Db_Exception $e) { if ($this->_logger) { $this->_logger->warn("$name database doesn't exist"); } } @@ -430,7 +430,7 @@ class Horde_Db_Adapter_Postgresql_Schema extends Horde_Db_Adapter_Base_Schema { $this->_clearTableCache($name); - return $this->execute('ALTER TABLE ' . $this->quoteTableName($name) . ' RENAME TO ' . $this->quoteTableName($newName)); + return $this->executeWrite('ALTER TABLE ' . $this->quoteTableName($name) . ' RENAME TO ' . $this->quoteTableName($newName)); } /** @@ -464,7 +464,7 @@ class Horde_Db_Adapter_Postgresql_Schema extends Horde_Db_Adapter_Base_Schema } // Add the column. - $this->execute('ALTER TABLE ' . $this->quoteTableName($tableName) . ' ADD COLUMN ' . $this->quoteColumnName($columnName) . ' ' . $sqltype); + $this->executeWrite('ALTER TABLE ' . $this->quoteTableName($tableName) . ' ADD COLUMN ' . $this->quoteColumnName($columnName) . ' ' . $sqltype); $default = isset($options['default']) ? $options['default'] : null; $notnull = isset($options['null']) && $options['null'] === false; @@ -493,7 +493,7 @@ class Horde_Db_Adapter_Postgresql_Schema extends Horde_Db_Adapter_Base_Schema $quotedTableName = $this->quoteTableName($tableName); try { - $this->execute('ALTER TABLE '.$quotedTableName.' ALTER COLUMN '.$this->quoteColumnName($columnName).' TYPE '.$this->typeToSql($type, $limit, $precision, $scale)); + $this->executeWrite('ALTER TABLE '.$quotedTableName.' ALTER COLUMN '.$this->quoteColumnName($columnName).' TYPE '.$this->typeToSql($type, $limit, $precision, $scale)); } catch (Horde_Db_Exception $e) { // This is PostgreSQL 7.x, or the old type could not be coerced to // the new type, so we have to use a more arcane way of doing it. @@ -518,9 +518,9 @@ class Horde_Db_Adapter_Postgresql_Schema extends Horde_Db_Adapter_Base_Schema $this->addColumn($tableName, $tmpColumnName, $type, $options); if ($oldType == 'boolean') { - $this->execute('UPDATE '.$quotedTableName.' SET '.$this->quoteColumnName($tmpColumnName).' = CAST(CASE WHEN '.$this->quoteColumnName($columnName).' IS TRUE THEN 1 ELSE 0 END AS '.$this->typeToSql($type, $limit, $precision, $scale).')'); + $this->update('UPDATE '.$quotedTableName.' SET '.$this->quoteColumnName($tmpColumnName).' = CAST(CASE WHEN '.$this->quoteColumnName($columnName).' IS TRUE THEN 1 ELSE 0 END AS '.$this->typeToSql($type, $limit, $precision, $scale).')'); } else { - $this->execute('UPDATE '.$quotedTableName.' SET '.$this->quoteColumnName($tmpColumnName).' = CAST('.$this->quoteColumnName($columnName).' AS '.$this->typeToSql($type, $limit, $precision, $scale).')'); + $this->update('UPDATE '.$quotedTableName.' SET '.$this->quoteColumnName($tmpColumnName).' = CAST('.$this->quoteColumnName($columnName).' AS '.$this->typeToSql($type, $limit, $precision, $scale).')'); } $this->removeColumn($tableName, $columnName); @@ -537,7 +537,7 @@ class Horde_Db_Adapter_Postgresql_Schema extends Horde_Db_Adapter_Base_Schema if ($autoincrement) { $seq_name = $this->quoteSequenceName($this->defaultSequenceName($tableName, $columnName)); - $this->execute('CREATE SEQUENCE ' . $seq_name); + $this->executeWrite('CREATE SEQUENCE ' . $seq_name); $this->changeColumnDefault($tableName, $columnName, 'NEXTVAL(' . $seq_name . ')'); } elseif (array_key_exists('default', $options)) { $this->changeColumnDefault($tableName, $columnName, $default); @@ -554,16 +554,16 @@ class Horde_Db_Adapter_Postgresql_Schema extends Horde_Db_Adapter_Base_Schema public function changeColumnDefault($tableName, $columnName, $default) { $this->_clearTableCache($tableName); - return $this->execute('ALTER TABLE '.$this->quoteTableName($tableName). ' ALTER COLUMN '.$this->quoteColumnName($columnName).' SET DEFAULT '.$this->quote($default)); + return $this->executeWrite('ALTER TABLE '.$this->quoteTableName($tableName). ' ALTER COLUMN '.$this->quoteColumnName($columnName).' SET DEFAULT '.$this->quote($default)); } public function changeColumnNull($tableName, $columnName, $null, $default = null) { $this->_clearTableCache($tableName); if (!($null || is_null($default))) { - $this->execute('UPDATE '.$this->quoteTableName($tableName).' SET '.$this->quoteColumnName($columnName).' = '.$this->quote($default).' WHERE '.$this->quoteColumnName($columnName).' IS NULL'); + $this->update('UPDATE '.$this->quoteTableName($tableName).' SET '.$this->quoteColumnName($columnName).' = '.$this->quote($default).' WHERE '.$this->quoteColumnName($columnName).' IS NULL'); } - return $this->execute('ALTER TABLE '.$this->quoteTableName($tableName).' ALTER '.$this->quoteColumnName($columnName).' '.($null ? 'DROP' : 'SET').' NOT NULL'); + return $this->executeWrite('ALTER TABLE '.$this->quoteTableName($tableName).' ALTER '.$this->quoteColumnName($columnName).' '.($null ? 'DROP' : 'SET').' NOT NULL'); } /** @@ -572,7 +572,7 @@ class Horde_Db_Adapter_Postgresql_Schema extends Horde_Db_Adapter_Base_Schema public function renameColumn($tableName, $columnName, $newColumnName) { $this->_clearTableCache($tableName); - return $this->execute('ALTER TABLE '.$this->quoteTableName($tableName).' RENAME COLUMN '.$this->quoteColumnName($columnName).' TO '.$this->quoteColumnName($newColumnName)); + return $this->executeWrite('ALTER TABLE '.$this->quoteTableName($tableName).' RENAME COLUMN '.$this->quoteColumnName($columnName).' TO '.$this->quoteColumnName($newColumnName)); } /** @@ -581,7 +581,7 @@ class Horde_Db_Adapter_Postgresql_Schema extends Horde_Db_Adapter_Base_Schema public function removeIndex($tableName, $options = array()) { $this->_clearTableCache($tableName); - return $this->execute('DROP INDEX '.$this->indexName($tableName, $options)); + return $this->executeWrite('DROP INDEX '.$this->indexName($tableName, $options)); } /** diff --git a/framework/Db/lib/Horde/Db/Adapter/Sqlite/Schema.php b/framework/Db/lib/Horde/Db/Adapter/Sqlite/Schema.php index 76a1d797e..76c5b2f52 100644 --- a/framework/Db/lib/Horde/Db/Adapter/Sqlite/Schema.php +++ b/framework/Db/lib/Horde/Db/Adapter/Sqlite/Schema.php @@ -193,7 +193,7 @@ class Horde_Db_Adapter_Sqlite_Schema extends Horde_Db_Adapter_Base_Schema { $this->_clearTableCache($name); - return $this->execute('ALTER TABLE ' . $this->quoteTableName($name) . ' RENAME TO ' . $this->quoteTableName($newName)); + return $this->executeWrite('ALTER TABLE ' . $this->quoteTableName($name) . ' RENAME TO ' . $this->quoteTableName($newName)); } /** @@ -216,7 +216,7 @@ class Horde_Db_Adapter_Sqlite_Schema extends Horde_Db_Adapter_Base_Schema parent::addColumn($tableName, $columnName, $type, $options); // See last paragraph on http://www.sqlite.org/lang_altertable.html - $this->execute('VACUUM'); + $this->executeWrite('VACUUM'); } /** @@ -304,7 +304,7 @@ class Horde_Db_Adapter_Sqlite_Schema extends Horde_Db_Adapter_Base_Schema $index = $this->indexName($tableName, $options); $sql = 'DROP INDEX '.$this->quoteColumnName($index); - return $this->execute($sql); + return $this->executeWrite($sql); } @@ -436,6 +436,6 @@ class Horde_Db_Adapter_Sqlite_Schema extends Horde_Db_Adapter_Base_Schema $quotedFrom = $this->quoteTableName($from); $quotedFromColumns = implode(', ', array_map(array($this, 'quoteColumnName'), $fromColumns)); - $this->execute("INSERT INTO $quotedTo ($quotedToColumns) SELECT $quotedFromColumns FROM $quotedFrom"); + $this->insert("INSERT INTO $quotedTo ($quotedToColumns) SELECT $quotedFromColumns FROM $quotedFrom"); } } -- 2.11.0