From: Gonçalo Queirós Date: Fri, 14 Aug 2009 13:39:44 +0000 (+0200) Subject: Fix sequence escaping for PostgreSQL. X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=a19ec1aae6f60815248e91ff24866f09d8adb080;p=horde.git Fix sequence escaping for PostgreSQL. --- diff --git a/framework/Db/lib/Horde/Db/Adapter/Pdo/Pgsql.php b/framework/Db/lib/Horde/Db/Adapter/Pdo/Pgsql.php index 462bcac42..088981708 100644 --- a/framework/Db/lib/Horde/Db/Adapter/Pdo/Pgsql.php +++ b/framework/Db/lib/Horde/Db/Adapter/Pdo/Pgsql.php @@ -241,7 +241,7 @@ class Horde_Db_Adapter_Pdo_Pgsql extends Horde_Db_Adapter_Pdo_Abstract */ protected function _lastInsertId($table, $sequenceName) { - return (int)$this->selectValue('SELECT currval('.$this->quoteColumnName($sequenceName).')'); + return (int)$this->selectValue('SELECT currval('.$this->quoteSequenceName($sequenceName).')'); } } diff --git a/framework/Db/lib/Horde/Db/Adapter/Postgresql/Schema.php b/framework/Db/lib/Horde/Db/Adapter/Postgresql/Schema.php index c9f049cd1..9c73a98c0 100644 --- a/framework/Db/lib/Horde/Db/Adapter/Postgresql/Schema.php +++ b/framework/Db/lib/Horde/Db/Adapter/Postgresql/Schema.php @@ -42,6 +42,16 @@ class Horde_Db_Adapter_Postgresql_Schema extends Horde_Db_Adapter_Abstract_Schem { return '"' . str_replace('"', '""', $name) . '"'; } + + /** + * Quotes sequence names for use in SQL queries. + * + * @return string + */ + public function quoteSequenceName($name) + { + return '\'' . str_replace('"', '""', $name) . '\''; + } /** * Quotes PostgreSQL-specific data types for SQL input. @@ -356,11 +366,11 @@ class Horde_Db_Adapter_Postgresql_Schema extends Horde_Db_Adapter_Abstract_Schem if ($pk) { if ($sequence) { - $quotedSequence = $this->quoteColumnName($sequence); + $quotedSequence = $this->quoteSequenceName($sequence); $quotedTable = $this->quoteTableName($table); $quotedPk = $this->quoteColumnName($pk); - $sql = "SELECT setval('$quotedSequence', (SELECT COALESCE(MAX($quotedPk)+(SELECT increment_by FROM $quotedSequence), (SELECT min_value FROM $quotedSequence)) FROM $quotedTable), false)"; + $sql = "SELECT setval($quotedSequence, (SELECT COALESCE(MAX($quotedPk)+(SELECT increment_by FROM $quotedSequence), (SELECT min_value FROM $quotedSequence)) FROM $quotedTable), false)"; $this->selectValue($sql, 'Reset sequence'); } else { /*@TODO logger.warn "$table has primary key $pk with no default sequence" if logger*/