예제 #1
0
 public function testLoadMetadataFromDatabaseDetail()
 {
     if (!$this->_em->getConnection()->getDatabasePlatform()->supportsForeignKeyConstraints()) {
         $this->markTestSkipped('Platform does not support foreign keys.');
     }
     $table = new \Doctrine\DBAL\Schema\Table("dbdriver_foo");
     $table->addColumn('id', 'integer', array('unsigned' => true));
     $table->setPrimaryKey(array('id'));
     $table->addColumn('column_unsigned', 'integer', array('unsigned' => true));
     $table->addColumn('column_comment', 'string', array('comment' => 'test_comment'));
     $table->addColumn('column_default', 'string', array('default' => 'test_default'));
     $table->addColumn('column_decimal', 'decimal', array('precision' => 4, 'scale' => 3));
     $table->addColumn('column_index1', 'string');
     $table->addColumn('column_index2', 'string');
     $table->addIndex(array('column_index1', 'column_index2'), 'index1');
     $table->addColumn('column_unique_index1', 'string');
     $table->addColumn('column_unique_index2', 'string');
     $table->addUniqueIndex(array('column_unique_index1', 'column_unique_index2'), 'unique_index1');
     $this->_sm->dropAndCreateTable($table);
     $metadatas = $this->extractClassMetadata(array("DbdriverFoo"));
     $this->assertArrayHasKey('DbdriverFoo', $metadatas);
     $metadata = $metadatas['DbdriverFoo'];
     $this->assertArrayHasKey('id', $metadata->fieldMappings);
     $this->assertEquals('id', $metadata->fieldMappings['id']['fieldName']);
     $this->assertEquals('id', strtolower($metadata->fieldMappings['id']['columnName']));
     $this->assertEquals('integer', (string) $metadata->fieldMappings['id']['type']);
     // FIXME: Condition here is fugly.
     // NOTE: PostgreSQL and SQL SERVER do not support UNSIGNED integer
     if (!$this->_em->getConnection()->getDatabasePlatform() instanceof PostgreSqlPlatform and !$this->_em->getConnection()->getDatabasePlatform() instanceof SQLServerPlatform) {
         $this->assertArrayHasKey('columnUnsigned', $metadata->fieldMappings);
         $this->assertTrue($metadata->fieldMappings['columnUnsigned']['options']['unsigned']);
     }
     $this->assertArrayHasKey('columnComment', $metadata->fieldMappings);
     $this->assertEquals('test_comment', $metadata->fieldMappings['columnComment']['options']['comment']);
     $this->assertArrayHasKey('columnDefault', $metadata->fieldMappings);
     $this->assertEquals('test_default', $metadata->fieldMappings['columnDefault']['options']['default']);
     $this->assertArrayHasKey('columnDecimal', $metadata->fieldMappings);
     $this->assertEquals(4, $metadata->fieldMappings['columnDecimal']['precision']);
     $this->assertEquals(3, $metadata->fieldMappings['columnDecimal']['scale']);
     $this->assertTrue(!empty($metadata->table['indexes']['index1']['columns']));
     $this->assertEquals(array('column_index1', 'column_index2'), $metadata->table['indexes']['index1']['columns']);
     $this->assertTrue(!empty($metadata->table['uniqueConstraints']['unique_index1']['columns']));
     $this->assertEquals(array('column_unique_index1', 'column_unique_index2'), $metadata->table['uniqueConstraints']['unique_index1']['columns']);
 }
 /**
  * @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);
 }
 protected function createTableSchema()
 {
     $table = new \Doctrine\DBAL\Schema\Table('points');
     $table->addColumn('id', 'integer', array('notnull' => true));
     $table->addColumn('text', 'text', array('notnull' => true));
     $table->addColumn('tsvector', 'tsvector', array('notnull' => true));
     $table->addColumn('geometry', 'geometry', array('notnull' => true))->setCustomSchemaOptions(array('geometry_type' => 'GEOMETRY', 'srid' => 0));
     $table->addColumn('point', 'geometry', array('notnull' => true))->setCustomSchemaOptions(array('geometry_type' => 'POINT', 'srid' => 0));
     $table->addColumn('point_2d', 'geometry', array('notnull' => true))->setCustomSchemaOptions(array('geometry_type' => 'POINT', 'srid' => 3785));
     $table->addColumn('point_3dz', 'geometry', array('notnull' => true))->setCustomSchemaOptions(array('geometry_type' => 'POINTZ', 'srid' => 3785));
     $table->addColumn('point_3dm', 'geometry', array('notnull' => true))->setCustomSchemaOptions(array('geometry_type' => 'POINTM', 'srid' => 3785));
     $table->addColumn('point_4d', 'geometry', array('notnull' => true))->setCustomSchemaOptions(array('geometry_type' => 'POINTZM', 'srid' => 3785));
     $table->addColumn('point_2d_nullable', 'geometry', array('notnull' => false))->setCustomSchemaOptions(array('geometry_type' => 'POINT', 'srid' => 3785));
     $table->addColumn('point_2d_nosrid', 'geometry', array('notnull' => true))->setCustomSchemaOptions(array('geometry_type' => 'POINT', 'srid' => 0));
     $table->addColumn('geography', 'geography', array('notnull' => true))->setCustomSchemaOptions(array('geometry_type' => 'GEOMETRY', 'srid' => 4326));
     $table->addColumn('point_geography_2d', 'geography', array('notnull' => true))->setCustomSchemaOptions(array('geometry_type' => 'POINT', 'srid' => 4326));
     $table->addColumn('point_geography_2d_srid', 'geography', array('notnull' => true))->setCustomSchemaOptions(array('geometry_type' => 'POINT', 'srid' => 4326));
     $table->addIndex(array('text'), 'idx_text');
     $table->addIndex(array('tsvector'), 'idx_text_gist');
     $table->addIndex(array('point'), null, array('SPATIAL'));
     $table->addIndex(array('point_2d'), null, array('SPATIAL'));
     $table->addIndex(array('point_3dz'), null, array('SPATIAL'));
     $table->addIndex(array('point_3dm'), null, array('SPATIAL'));
     $table->addIndex(array('point_4d'), null, array('SPATIAL'));
     $table->addIndex(array('point_2d_nullable'), null, array('SPATIAL'));
     $table->addIndex(array('point_2d_nosrid'), null, array('SPATIAL'));
     $table->addIndex(array('point_geography_2d'), null, array('SPATIAL'));
     $table->addIndex(array('point_geography_2d_srid'), null, array('SPATIAL'));
     $table->setPrimaryKey(array('id'));
     return $table;
 }