public function testDomainsTable() { if ($this->_conn->getDatabasePlatform()->getName() != "postgresql") { $this->markTestSkipped('PostgreSQL only test'); } $table = new \Doctrine\DBAL\Schema\Table("domains"); $table->addColumn('id', 'integer'); $table->addColumn('parent_id', 'integer'); $table->setPrimaryKey(array('id')); $table->addForeignKeyConstraint('domains', array('parent_id'), array('id')); $this->_conn->getSchemaManager()->createTable($table); $table = $this->_conn->getSchemaManager()->listTableDetails('domains'); $this->assertEquals('domains', $table->getName()); }
/** * @group DDC-2387 */ public function testCompositeAssociationKeyDetection() { $product = new \Doctrine\DBAL\Schema\Table('ddc2387_product'); $product->addColumn('id', 'integer'); $product->setPrimaryKey(array('id')); $attributes = new \Doctrine\DBAL\Schema\Table('ddc2387_attributes'); $attributes->addColumn('product_id', 'integer'); $attributes->addColumn('attribute_name', 'string'); $attributes->setPrimaryKey(array('product_id', 'attribute_name')); $attributes->addForeignKeyConstraint('ddc2387_product', array('product_id'), array('product_id')); $metadata = $this->convertToClassMetadata(array($product, $attributes), array()); $this->assertEquals(ClassMetadataInfo::GENERATOR_TYPE_NONE, $metadata['Ddc2387Attributes']->generatorType); $this->assertEquals(ClassMetadataInfo::GENERATOR_TYPE_AUTO, $metadata['Ddc2387Product']->generatorType); }
public function testCreateYamlWithForeignKeyFromDatabase() { if (!$this->_em->getConnection()->getDatabasePlatform()->supportsForeignKeyConstraints()) { $this->markTestSkipped('Platform does not support foreign keys.'); } $tableB = new \Doctrine\DBAL\Schema\Table("dbdriver_bar"); $tableB->addColumn('id', 'integer'); $tableB->setPrimaryKey(array('id')); $this->_sm->dropAndCreateTable($tableB); $tableA = new \Doctrine\DBAL\Schema\Table("dbdriver_baz"); $tableA->addColumn('id', 'integer'); $tableA->setPrimaryKey(array('id')); $tableA->addColumn('bar_id', 'integer'); $tableA->addForeignKeyConstraint('dbdriver_bar', array('bar_id'), array('id')); $this->_sm->dropAndCreateTable($tableA); $metadata = $this->extractClassMetadata("DbdriverBaz"); $this->assertArrayNotHasKey('bar', $metadata->fieldMappings); $this->assertArrayHasKey('id', $metadata->fieldMappings); $metadata->associationMappings = \array_change_key_case($metadata->associationMappings, \CASE_LOWER); $this->assertArrayHasKey('bar', $metadata->associationMappings); $this->assertType('Doctrine\\ORM\\Mapping\\OneToOneMapping', $metadata->associationMappings['bar']); }
public function testLoadMetadataWithForeignKeyFromDatabase() { if (!$this->_em->getConnection()->getDatabasePlatform()->supportsForeignKeyConstraints()) { $this->markTestSkipped('Platform does not support foreign keys.'); } $tableB = new \Doctrine\DBAL\Schema\Table("dbdriver_bar"); $tableB->addColumn('id', 'integer'); $tableB->setPrimaryKey(array('id')); $this->_sm->dropAndCreateTable($tableB); $tableA = new \Doctrine\DBAL\Schema\Table("dbdriver_baz"); $tableA->addColumn('id', 'integer'); $tableA->setPrimaryKey(array('id')); $tableA->addColumn('bar_id', 'integer'); $tableA->addForeignKeyConstraint('dbdriver_bar', array('bar_id'), array('id')); $this->_sm->dropAndCreateTable($tableA); $metadatas = $this->extractClassMetadata(array("DbdriverBar", "DbdriverBaz")); $this->assertArrayHasKey('DbdriverBaz', $metadatas); $bazMetadata = $metadatas['DbdriverBaz']; $this->assertArrayNotHasKey('barId', $bazMetadata->fieldMappings, "The foreign Key field should not be inflected as 'barId' field, its an association."); $this->assertArrayHasKey('id', $bazMetadata->fieldMappings); $bazMetadata->associationMappings = \array_change_key_case($bazMetadata->associationMappings, \CASE_LOWER); $this->assertArrayHasKey('bar', $bazMetadata->associationMappings); $this->assertEquals(ClassMetadataInfo::MANY_TO_ONE, $bazMetadata->associationMappings['bar']['type']); }
/** * @group DDC-887 */ public function testUpdateSchemaWithForeignKeyRenaming() { if (!$this->_sm->getDatabasePlatform()->supportsForeignKeyConstraints()) { $this->markTestSkipped('This test is only supported on platforms that have foreign keys.'); } $table = new \Doctrine\DBAL\Schema\Table('test_fk_base'); $table->addColumn('id', 'integer'); $table->setPrimaryKey(array('id')); $tableFK = new \Doctrine\DBAL\Schema\Table('test_fk_rename'); $tableFK->setSchemaConfig($this->_sm->createSchemaConfig()); $tableFK->addColumn('id', 'integer'); $tableFK->addColumn('fk_id', 'integer'); $tableFK->setPrimaryKey(array('id')); $tableFK->addIndex(array('fk_id'), 'fk_idx'); $tableFK->addForeignKeyConstraint('test_fk_base', array('fk_id'), array('id')); $this->_sm->createTable($table); $this->_sm->createTable($tableFK); $tableFKNew = new \Doctrine\DBAL\Schema\Table('test_fk_rename'); $tableFKNew->setSchemaConfig($this->_sm->createSchemaConfig()); $tableFKNew->addColumn('id', 'integer'); $tableFKNew->addColumn('rename_fk_id', 'integer'); $tableFKNew->setPrimaryKey(array('id')); $tableFKNew->addIndex(array('rename_fk_id'), 'fk_idx'); $tableFKNew->addForeignKeyConstraint('test_fk_base', array('rename_fk_id'), array('id')); $c = new \Doctrine\DBAL\Schema\Comparator(); $tableDiff = $c->diffTable($tableFK, $tableFKNew); $this->_sm->alterTable($tableDiff); }
public function testIgnoreManyToManyTableWithoutFurtherForeignKeyDetails() { $tableB = new \Doctrine\DBAL\Schema\Table("dbdriver_bar"); $tableB->addColumn('id', 'integer'); $tableB->setPrimaryKey(array('id')); $tableA = new \Doctrine\DBAL\Schema\Table("dbdriver_baz"); $tableA->addColumn('id', 'integer'); $tableA->setPrimaryKey(array('id')); $tableMany = new \Doctrine\DBAL\Schema\Table("dbdriver_bar_baz"); $tableMany->addColumn('bar_id', 'integer'); $tableMany->addColumn('baz_id', 'integer'); $tableMany->addForeignKeyConstraint('dbdriver_bar', array('bar_id'), array('id')); $metadatas = $this->convertToClassMetadata(array($tableA, $tableB), array($tableMany)); $this->assertEquals(0, count($metadatas['DbdriverBaz']->associationMappings), "no association mappings should be detected."); }
public static function setUpBeforeClass() { parent::setUpBeforeClass(); /** * get config */ if (isset($_SERVER['TRAVIS_DB'])) { static::$config = static::$travis_dbs[$_SERVER['TRAVIS_DB']]; } else { static::$config = (include APPPATH . 'config' . DS . \Fuel::DEVELOPMENT . DS . 'dbdocs.php'); static::$config = \Arr::get(static::$config, 'test_config.db'); } /** * connect to db */ static::$dd = Dbdocs::forge('default', static::$config); /** * drop views */ krsort(static::$test_views); foreach (static::$test_views as $test_view_name => $sql) { try { //TODO: check view exist static::$dd->sm->dropView($test_view_name); } catch (\Doctrine\DBAL\DBALException $e) { //do nothing } } /** * drop tables */ krsort(static::$test_tables); foreach (static::$test_tables as $test_table_name => $infos) { static::$dd->sm->tablesExist($test_table_name) and static::$dd->sm->dropTable($test_table_name); } /** * create tables */ ksort(static::$test_tables); foreach (static::$test_tables as $test_table_name => $infos) { $table = new \Doctrine\DBAL\Schema\Table($test_table_name); foreach ($infos['columns'] as $column) { empty($column['options']) and $column['options'] = array(); $table->addColumn($column['name'], $column['type'], $column['options']); } $table->setPrimaryKey($infos['primary_keys']); if (!empty($infos['foreign_keys'])) { foreach ($infos['foreign_keys'] as $foreign_key) { list($to_table_name, $to_column_name) = explode(".", $foreign_key['to']); $table->addForeignKeyConstraint($to_table_name, array($foreign_key['from']), array($to_column_name)); } } static::$dd->sm->createTable($table); } /** * create views */ ksort(static::$test_views); foreach (static::$test_views as $test_view_name => $sql) { $view = new \Doctrine\DBAL\Schema\View($test_view_name, $sql); static::$dd->sm->createView($view); } }