Needed to run custom SQL queries that may need access to the write DB.
}
/**
+ * 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.
{
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');
}
/**
$sql = "CREATE $temp TABLE ".$this->quoteTableName($tableDefinition->getName())." (\n".
$tableDefinition->toSql()."\n".
") $opts";
- return $this->execute($sql);
+ return $this->executeWrite($sql);
}
/**
public function dropTable($name)
{
$this->_clearTableCache($name);
- return $this->execute('DROP TABLE ' . $this->quoteTableName($name));
+ return $this->executeWrite('DROP TABLE ' . $this->quoteTableName($name));
}
/**
' ADD '.$this->quoteColumnName($columnName) .
' '.$this->typeToSql($type, $limit, $precision, $scale, $unsigned);
$sql = $this->addColumnOptions($sql, $options);
- return $this->execute($sql);
+ return $this->executeWrite($sql);
}
/**
$this->_clearTableCache($tableName);
$sql = 'ALTER TABLE ' . $this->quoteTableName($tableName).' DROP '.$this->quoteColumnName($columnName);
- return $this->execute($sql);
+ return $this->executeWrite($sql);
}
/**
$quotedColumnNames = implode(', ', $quotedCols);
$sql = "CREATE $indexType INDEX ".$this->quoteColumnName($indexName).
'ON '.$this->quoteTableName($tableName) . " ($quotedColumnNames)";
- return $this->execute($sql);
+ return $this->executeWrite($sql);
}
/**
$index = $this->indexName($tableName, $options);
$sql = "DROP INDEX ".$this->quoteColumnName($index).' ON ' . $this->quoteTableName($tableName);
- return $this->execute($sql);
+ return $this->executeWrite($sql);
}
/**
*/
public function createDatabase($name)
{
- return $this->execute("CREATE DATABASE `$name`");
+ return $this->executeWrite("CREATE DATABASE `$name`");
}
/**
*/
public function dropDatabase($name)
{
- return $this->execute("DROP DATABASE IF EXISTS `$name`");
+ return $this->executeWrite("DROP DATABASE IF EXISTS `$name`");
}
/**
{
$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));
}
/**
$default = $this->quote($default);
$sql = "ALTER TABLE $quotedTableName CHANGE $quotedColumnName $quotedColumnName
$currentType DEFAULT $default";
- return $this->execute($sql);
+ return $this->executeWrite($sql);
}
/**
$sql = "ALTER TABLE $quotedTableName CHANGE $quotedColumnName $quotedColumnName $typeSql";
$sql = $this->addColumnOptions($sql, $options);
- $this->execute($sql);
+ $this->executeWrite($sql);
}
/**
$quotedColumnName.' '.
$this->quoteColumnName($newColumnName)." ".
$currentType;
- return $this->execute($sql);
+ return $this->executeWrite($sql);
}
/**
*/
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;
}
}
}
- return $this->execute('CREATE DATABASE ' . $this->quoteTableName($name) . $optionString);
+ return $this->executeWrite('CREATE DATABASE ' . $this->quoteTableName($name) . $optionString);
}
/**
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"); }
}
{
$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));
}
/**
}
// 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;
$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.
$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);
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);
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');
}
/**
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));
}
/**
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));
}
/**
{
$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));
}
/**
parent::addColumn($tableName, $columnName, $type, $options);
// See last paragraph on http://www.sqlite.org/lang_altertable.html
- $this->execute('VACUUM');
+ $this->executeWrite('VACUUM');
}
/**
$index = $this->indexName($tableName, $options);
$sql = 'DROP INDEX '.$this->quoteColumnName($index);
- return $this->execute($sql);
+ return $this->executeWrite($sql);
}
$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");
}
}