Beispiel #1
0
 /**
  * Get schema of existing table
  * 
  * @param String $_tableName
  * 
  * @return Setup_Backend_Schema_Table_Mysql
  */
 public function getExistingSchema($_tableName)
 {
     // Get common table information
     $select = $this->_db->select()->from('information_schema.tables')->where($this->_db->quoteIdentifier('TABLE_SCHEMA') . ' = ?', $this->_config->database->dbname)->where($this->_db->quoteIdentifier('TABLE_NAME') . ' = ?', SQL_TABLE_PREFIX . $_tableName);
     $stmt = $select->query();
     $tableInfo = $stmt->fetchObject();
     //$existingTable = new Setup_Backend_Schema_Table($tableInfo);
     $existingTable = Setup_Backend_Schema_Table_Factory::factory('Mysql', $tableInfo);
     // get field informations
     $select = $this->_db->select()->from('information_schema.COLUMNS')->where($this->_db->quoteIdentifier('TABLE_NAME') . ' = ?', SQL_TABLE_PREFIX . $_tableName);
     $stmt = $select->query();
     $tableColumns = $stmt->fetchAll();
     foreach ($tableColumns as $tableColumn) {
         $field = Setup_Backend_Schema_Field_Factory::factory('Mysql', $tableColumn);
         $existingTable->addField($field);
         if ($field->primary === 'true' || $field->unique === 'true' || $field->mul === 'true') {
             $index = Setup_Backend_Schema_Index_Factory::factory('Mysql', $tableColumn);
             // get foreign keys
             $select = $this->_db->select()->from('information_schema.KEY_COLUMN_USAGE')->where($this->_db->quoteIdentifier('TABLE_NAME') . ' = ?', SQL_TABLE_PREFIX . $_tableName)->where($this->_db->quoteIdentifier('COLUMN_NAME') . ' = ?', $tableColumn['COLUMN_NAME']);
             $stmt = $select->query();
             $keyUsage = $stmt->fetchAll();
             foreach ($keyUsage as $keyUse) {
                 if ($keyUse['REFERENCED_TABLE_NAME'] != NULL) {
                     $index->setForeignKey($keyUse);
                 }
             }
             $existingTable->addIndex($index);
         }
     }
     return $existingTable;
 }
 public function testEqualsExistingSchema_004()
 {
     $string = "\n            <field>\n                <name>a</name>\n                <type>datetime</type>\n            </field>";
     $field1 = Setup_Backend_Schema_Field_Factory::factory('Xml', $string);
     $this->_backend->addCol($this->_table->name, $field1);
     $field2 = $this->_getLastField();
     $this->assertTrue($field1->equals($field2));
     $this->assertTrue($field2->equals($field1));
 }
 public function testStringToFieldStatement_008()
 {
     $string = "\n                <field>\n                    <name>account_id</name>\n                    <type>integer</type>\n                    <unsigned>true</unsigned>\n                    <notnull>false</notnull>\n                </field>";
     $statement = $this->_fixFieldDeclarationString("`account_id` int(11)  unsigned ");
     $field = Setup_Backend_Schema_Field_Factory::factory('Xml', $string);
     $this->assertEquals($statement, $this->_backend->getFieldDeclarations($field));
     $this->_backend->addCol($this->_table->name, $field);
     $newColumn = $this->_getLastField();
     $this->assertEquals('false', $newColumn->notnull);
     $this->assertEquals('true', $newColumn->unsigned);
     $this->assertEquals(0, $newColumn->default);
     $this->assertTrue($newColumn->equals($field));
 }
 public function __construct($_tableDefinition = NULL)
 {
     if ($_tableDefinition !== NULL) {
         if (!$_tableDefinition instanceof SimpleXMLElement) {
             $_tableDefinition = new SimpleXMLElement($_tableDefinition);
         }
         $this->setName($_tableDefinition->name);
         $this->comment = (string) $_tableDefinition->comment;
         $this->version = (string) $_tableDefinition->version;
         foreach ($_tableDefinition->declaration->field as $field) {
             $this->addField(Setup_Backend_Schema_Field_Factory::factory('Xml', $field));
         }
         foreach ($_tableDefinition->declaration->index as $index) {
             $this->addIndex(Setup_Backend_Schema_Index_Factory::factory('Xml', $index));
         }
     }
 }
Beispiel #5
0
 /**
  * add column callerid
  *
  */
 public function update_5()
 {
     $fieldDefinition = '
     <field>
         <name>callerid</name>
         <type>text</type>
         <length>80</length>
         <notnull>false</notnull>
     </field>';
     $column = Setup_Backend_Schema_Field_Factory::factory('String', $fieldDefinition);
     $this->_backend->addCol('phone_callhistory', $column);
     $this->setApplicationVersion('Phone', '0.6');
 }
 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));
 }
 public function testEquals_003()
 {
     $fieldString = "\n        <field>\n            <name>name</name>\n            <type>integer</type>\n            <length>8</length>\n        </field>";
     $field = Setup_Backend_Schema_Field_Factory::factory('Xml', $fieldString);
     $this->_backend->alterCol($this->_table->name, $field, 'name');
     $existingSchema = $this->_backend->getExistingSchema($this->_table->name);
     $this->assertFalse($this->_table->equals($existingSchema));
     //$this->assertFalse($existingSchema->equals($this->_table));
 }
 public function testStringToIndexStatement_004()
 {
     $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>id-account_type-account_id</name>\n                    <field>\n                        <name>name</name>\n                    </field>\n                    <field>\n                        <name>account_id</name>\n                    </field>\n                </index>";
     $index = Setup_Backend_Schema_Index_Factory::factory('Xml', $string);
     $indexesBefore = $this->_backend->getIndexesForTable($this->_table->name);
     $this->_backend->addIndex($this->_table->name, $index);
     $indexesAfter = $this->_backend->getIndexesForTable($this->_table->name);
     $this->assertEquals(count($indexesBefore) + 1, count($indexesAfter));
 }
 public function setFields($_fieldDefinitions)
 {
     foreach ($_fieldDefinitions as $fieldDefinition) {
         $this->addField(Setup_Backend_Schema_Field_Factory::factory('Mysql', $fieldDefinition));
     }
 }
 public function getExistingSchema($_tableName)
 {
     $tableInfo = $this->_getTableInfo($_tableName);
     $existingTable = Setup_Backend_Schema_Table_Factory::factory('Oracle', $tableInfo);
     foreach ($tableInfo as $index => $tableColumn) {
         $field = Setup_Backend_Schema_Field_Factory::factory('Oracle', $tableColumn);
         $existingTable->addField($field);
         if ($field->primary === 'true' || $field->unique === 'true' || $field->mul === 'true') {
             $index = Setup_Backend_Schema_Index_Factory::factory('Oracle', $tableColumn);
             $existingTable->addIndex($index);
         }
     }
     $foreignKeys = $this->getConstraintsForTable($_tableName, Setup_Backend_Oracle::CONSTRAINT_TYPE_FOREIGN, true);
     foreach ($foreignKeys as $foreignKey) {
         $index = Setup_Backend_Schema_Index_Factory::factory('Oracle', $tableColumn);
         $index->setForeignKey($foreignKey);
         $existingTable->addIndex($index);
     }
     return $existingTable;
 }
 public function testStringToFieldStatement()
 {
     $field = Setup_Backend_Schema_Field_Factory::factory('Xml', "\n            <field>\n                <name>account_id</name>\n                <type>integer</type>\n                <unsigned>true</unsigned>\n                <notnull>false</notnull>\n            </field>\n        ");
     $this->assertEquals('  "account_id" integer', $this->_backend->getFieldDeclarations($field));
 }
Beispiel #12
0
 public function setFields($_tableDefinition)
 {
     foreach ($_tableDefinition as $fieldDefinition) {
         $this->addField(Setup_Backend_Schema_Field_Factory::factory('Oracle', $fieldDefinition));
     }
 }