Merge branch '2013.03'
authorPhilipp Schüle <p.schuele@metaways.de>
Mon, 3 Jun 2013 11:23:16 +0000 (13:23 +0200)
committerPhilipp Schüle <p.schuele@metaways.de>
Mon, 3 Jun 2013 11:23:16 +0000 (13:23 +0200)
1  2 
tine20/Setup/Backend/Pgsql.php

@@@ -272,15 -272,15 +272,15 @@@ class Setup_Backend_Pgsql extends Setup
       */
      public function alterCol($_tableName, Setup_Backend_Schema_Field_Abstract $_declaration, $_oldName = NULL) 
      {
+         $quotedName = $this->_db->quoteIdentifier($_declaration->name);
+         
          $baseStatement = 'ALTER TABLE ' . $this->_db->quoteIdentifier(SQL_TABLE_PREFIX . $_tableName);
  
          // rename the column if needed
          if ($_oldName !== NULL) {
-             $statement = $baseStatement . ' RENAME COLUMN ' . $this->_db->quoteIdentifier($_oldName) . ' TO ' . $this->_db->quoteIdentifier($_declaration->name);
+             $statement = $baseStatement . ' RENAME COLUMN ' . $this->_db->quoteIdentifier($_oldName) . ' TO ' . $quotedName;
              $this->execQueryVoid($statement);
          }
-         
-         $quotedName = $this->_db->quoteIdentifier($_declaration->name);
  
          $fieldDeclaration = $this->getFieldDeclarations($_declaration);
          
          // cut of NOT NULL and DEFAULT from the end
          $type      = preg_replace(array('/ (NOT NULL|DEFAULT .*)/'), null, $type);
          
-         $statement = $baseStatement . ' ALTER COLUMN ' . $this->_db->quoteIdentifier($_declaration->name) . ' TYPE ' . $type;
+         $statement = $baseStatement . ' ALTER COLUMN ' . $quotedName . ' TYPE ' . $type . ' USING CAST(' . $quotedName . ' AS ' . $type . ')';
          $this->execQueryVoid($statement);
          
          if (preg_match('/NOT NULL/', $fieldDeclaration)) {
-             $statement = $baseStatement . ' ALTER COLUMN ' . $this->_db->quoteIdentifier($_declaration->name) . ' SET NOT NULL ';
+             $statement = $baseStatement . ' ALTER COLUMN ' . $quotedName . ' SET NOT NULL ';
              $this->execQueryVoid($statement);
          }
          
          if (preg_match('/(?P<DEFAULT>DEFAULT .*)/', $fieldDeclaration, $matches)) {
-             $statement = $baseStatement . ' ALTER COLUMN ' . $this->_db->quoteIdentifier($_declaration->name) . ' SET ' . $matches['DEFAULT'];
+             $statement = $baseStatement . ' ALTER COLUMN ' . $quotedName . ' SET ' . $matches['DEFAULT'];
              $this->execQueryVoid($statement);
          }
      }
          if (!empty($_declaration->primary)) {
              $identifier = SQL_TABLE_PREFIX . $_tableName . '_pkey';
          } elseif (!empty($_declaration->unique)) {
 -            $identifier = SQL_TABLE_PREFIX . $_tableName . '_' . $_key->name . '_key';
 +            $identifier = SQL_TABLE_PREFIX . $_tableName . '_' . $_declaration->name . '_key';
          } else {
 -            $identifier = SQL_TABLE_PREFIX . $_tableName . '_' . $_key->name;
 +            $identifier = SQL_TABLE_PREFIX . $_tableName . '_' . $_declaration->name;
          }
          
          if ($this->_constraintExists($identifier)) {