Add executeWrite().
authorMichael M Slusarz <slusarz@curecanti.org>
Tue, 25 May 2010 03:38:44 +0000 (21:38 -0600)
committerMichael M Slusarz <slusarz@curecanti.org>
Tue, 25 May 2010 03:50:52 +0000 (21:50 -0600)
Needed to run custom SQL queries that may need access to the write DB.

framework/Db/lib/Horde/Db/Adapter/Base.php
framework/Db/lib/Horde/Db/Adapter/Base/Schema.php
framework/Db/lib/Horde/Db/Adapter/Mysql/Schema.php
framework/Db/lib/Horde/Db/Adapter/Mysqli.php
framework/Db/lib/Horde/Db/Adapter/Postgresql/Schema.php
framework/Db/lib/Horde/Db/Adapter/Sqlite/Schema.php

index 76aec92..a393939 100644 (file)
@@ -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');
     }
 
     /**
index db30667..932af89 100644 (file)
@@ -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);
     }
 
     /**
index 24b3263..4d34e81 100644 (file)
@@ -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);
     }
 
     /**
index cba44d1..013f2fb 100644 (file)
@@ -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;
     }
 
index 991fe75..53c18e6 100644 (file)
@@ -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));
     }
 
     /**
index 76a1d79..76c5b2f 100644 (file)
@@ -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");
     }
 }