public function testStringToIndexStatement_003() { $fieldString = "\n <field>\n <name>group_id</name>\n <type>integer</type>\n </field>"; $field = Setup_Backend_Schema_Field_Factory::factory('Xml', $fieldString); $this->_backend->addCol($this->_table->name, $field); $fieldString = "\n <field>\n <name>account_id</name>\n <type>integer</type>\n </field>"; $field = Setup_Backend_Schema_Field_Factory::factory('Xml', $fieldString); $this->_backend->addCol($this->_table->name, $field); $string = "\n <index>\n <name>group_id-account_id</name>\n <unique>true</unique>\n <field>\n <name>group_id</name>\n </field>\n <field>\n <name>account_id</name>\n </field>\n </index> "; $index = Setup_Backend_Schema_Index_Factory::factory('Xml', $string); $this->_backend->addIndex($this->_table->name, $index); $db = Tinebase_Core::getDb(); $tableName = SQL_TABLE_PREFIX . $this->_table->name; $db->insert($tableName, array('name' => 'test1', 'group_id' => 1, 'account_id' => 1)); $db->insert($tableName, array('name' => 'test2', 'group_id' => 1, 'account_id' => 2)); $db->insert($tableName, array('name' => 'test3', 'group_id' => 2, 'account_id' => 1)); $this->setExpectedException('Zend_Db_Statement_Exception'); //unique constraint violation $db->insert($tableName, array('name' => 'test4', 'group_id' => 1, 'account_id' => 1)); }
/** * create the right postgreSql-statement-snippet for columns/fields * PostgreSQL has not unsigned modifier * * @param Setup_Backend_Schema_Field_Abstract field / column * @param String | optional $_tableName [Not used in this backend (PostgreSQL)] * @return string */ public function getFieldDeclarations(Setup_Backend_Schema_Field_Abstract $_field, $_tableName = '') { $_field->unsigned = false; $fieldDeclarations = parent::getFieldDeclarations($_field, $_tableName); $fieldTypes = array('tinyint', 'mediumint', 'bigint', 'int', 'integer'); foreach ($fieldTypes as $fieldType) { $fieldDeclarations = preg_replace('/ ' . $fieldType . '\\(\\d*\\)/', ' integer', $fieldDeclarations); } $fieldDeclarations = preg_replace('/ smallint\\(\\d*\\)/', ' smallint', $fieldDeclarations); return $fieldDeclarations; }
/** * Override method: not null option has to be handled differently for enum data type * @see tine20/Setup/Backend/Setup_Backend_Abstract#_addDeclarationNotNull($_buffer, $_field) */ protected function _addDeclarationNotNull(array $_buffer, Setup_Backend_Schema_Field_Abstract $_field) { if ($_field->type == 'enum') { return $_buffer; } return parent::_addDeclarationNotNull($_buffer, $_field); }