_sm->listFunctions(); $this->assertType('array', $funcs); $this->assertTrue(count($funcs)>=0); } public function testListTriggers() { $triggers = $this->_sm->listTriggers(); $this->assertType('array', $triggers); $this->assertTrue(count($triggers) >= 0); } public function testListDatabases() { $this->_sm->dropAndCreateDatabase('test_create_database'); $databases = $this->_sm->listDatabases(); $databases = \array_map('strtolower', $databases); $this->assertEquals(true, in_array('test_create_database', $databases)); } public function testListTables() { $this->createTestTable('list_tables_test'); $tables = $this->_sm->listTables(); $tables = \array_change_key_case($tables, CASE_LOWER); $this->assertEquals(true, in_array('list_tables_test', $tables)); } public function testListTableColumns() { $data = array(); $data['columns'] = array( 'id' => array( 'type' => Type::getType('integer'), 'autoincrement' => true, 'primary' => true, 'notnull' => true ), 'test' => array( 'type' => Type::getType('string'), 'length' => 255, 'notnull' => false, ), 'foo' => array( 'type' => Type::getType('text'), 'notnull' => true, ), 'bar' => array( 'type' => Type::getType('decimal'), 'precision' => 10, 'scale' => 4, ), 'baz1' => array( 'type' => Type::getType('datetime'), ), 'baz2' => array( 'type' => Type::getType('time'), ), 'baz3' => array( 'type' => Type::getType('date'), ), ); $this->createTestTable('list_table_columns', $data); $columns = $this->_sm->listTableColumns('list_table_columns'); $columns = \array_change_key_case($columns, CASE_LOWER); $this->assertArrayHasKey('id', $columns); $this->assertEquals('id', strtolower($columns['id']['name'])); $this->assertType('Doctrine\DBAL\Types\IntegerType', $columns['id']['type']); $this->assertEquals(null, $columns['id']['length']); $this->assertEquals(null, $columns['id']['precision']); $this->assertEquals(null, $columns['id']['scale']); $this->assertEquals(false, $columns['id']['unsigned']); $this->assertEquals(false, $columns['id']['fixed']); $this->assertEquals(true, $columns['id']['notnull']); $this->assertEquals(null, $columns['id']['default']); $this->assertType('array', $columns['id']['platformDetails']); $this->assertArrayHasKey('test', $columns); $this->assertEquals('test', strtolower($columns['test']['name'])); $this->assertType('Doctrine\DBAL\Types\StringType', $columns['test']['type']); $this->assertEquals(255, $columns['test']['length']); $this->assertEquals(null, $columns['test']['precision']); $this->assertEquals(null, $columns['test']['scale']); $this->assertEquals(false, $columns['test']['unsigned']); $this->assertEquals(false, $columns['test']['fixed']); $this->assertEquals(false, $columns['test']['notnull']); $this->assertEquals(null, $columns['test']['default']); $this->assertType('array', $columns['test']['platformDetails']); $this->assertEquals('foo', strtolower($columns['foo']['name'])); $this->assertType('Doctrine\DBAL\Types\TextType', $columns['foo']['type']); $this->assertEquals(null, $columns['foo']['length']); $this->assertEquals(null, $columns['foo']['precision']); $this->assertEquals(null, $columns['foo']['scale']); $this->assertEquals(false, $columns['foo']['unsigned']); $this->assertEquals(false, $columns['foo']['fixed']); $this->assertEquals(true, $columns['foo']['notnull']); $this->assertEquals(null, $columns['foo']['default']); $this->assertType('array', $columns['foo']['platformDetails']); $this->assertEquals('bar', strtolower($columns['bar']['name'])); $this->assertType('Doctrine\DBAL\Types\DecimalType', $columns['bar']['type']); $this->assertEquals(null, $columns['bar']['length']); $this->assertEquals(10, $columns['bar']['precision']); $this->assertEquals(4, $columns['bar']['scale']); $this->assertEquals(false, $columns['bar']['unsigned']); $this->assertEquals(false, $columns['bar']['fixed']); $this->assertEquals(false, $columns['bar']['notnull']); $this->assertEquals(null, $columns['bar']['default']); $this->assertType('array', $columns['bar']['platformDetails']); $this->assertEquals('baz1', strtolower($columns['baz1']['name'])); $this->assertType('Doctrine\DBAL\Types\DateTimeType', $columns['baz1']['type']); $this->assertEquals(null, $columns['baz1']['length']); $this->assertEquals(null, $columns['baz1']['precision']); $this->assertEquals(null, $columns['baz1']['scale']); $this->assertEquals(false, $columns['baz1']['unsigned']); $this->assertEquals(false, $columns['baz1']['fixed']); $this->assertEquals(false, $columns['baz1']['notnull']); $this->assertEquals(null, $columns['baz1']['default']); $this->assertType('array', $columns['baz1']['platformDetails']); $this->assertEquals('baz2', strtolower($columns['baz2']['name'])); $this->assertContains($columns['baz2']['type']->getName(), array('Time', 'Date', 'DateTime')); $this->assertEquals(null, $columns['baz2']['length']); $this->assertEquals(null, $columns['baz2']['precision']); $this->assertEquals(null, $columns['baz2']['scale']); $this->assertEquals(false, $columns['baz2']['unsigned']); $this->assertEquals(false, $columns['baz2']['fixed']); $this->assertEquals(false, $columns['baz2']['notnull']); $this->assertEquals(null, $columns['baz2']['default']); $this->assertType('array', $columns['baz2']['platformDetails']); $this->assertEquals('baz3', strtolower($columns['baz3']['name'])); $this->assertContains($columns['baz2']['type']->getName(), array('Time', 'Date', 'DateTime')); $this->assertEquals(null, $columns['baz3']['length']); $this->assertEquals(null, $columns['baz3']['precision']); $this->assertEquals(null, $columns['baz3']['scale']); $this->assertEquals(false, $columns['baz3']['unsigned']); $this->assertEquals(false, $columns['baz3']['fixed']); $this->assertEquals(false, $columns['baz3']['notnull']); $this->assertEquals(null, $columns['baz3']['default']); $this->assertType('array', $columns['baz3']['platformDetails']); } public function testListTableIndexes() { $data['options'] = array( 'indexes' => array( 'test_index_name' => array( 'columns' => array( 'test' => array() ), 'type' => 'unique' ), 'test_composite_idx' => array( 'columns' => array( 'id' => array(), 'test' => array(), ) ), ) ); $this->createTestTable('list_table_indexes_test', $data); $tableIndexes = $this->_sm->listTableIndexes('list_table_indexes_test'); $this->assertEquals(3, count($tableIndexes)); $this->assertEquals(array('id'), $tableIndexes['primary']['columns']); $this->assertTrue($tableIndexes['primary']['unique']); $this->assertTrue($tableIndexes['primary']['primary']); $this->assertEquals('test_index_name', $tableIndexes['test_index_name']['name']); $this->assertEquals(array('test'), $tableIndexes['test_index_name']['columns']); $this->assertTrue($tableIndexes['test_index_name']['unique']); $this->assertFalse($tableIndexes['test_index_name']['primary']); $this->assertEquals('test_composite_idx', $tableIndexes['test_composite_idx']['name']); $this->assertEquals(array('id', 'test'), $tableIndexes['test_composite_idx']['columns']); $this->assertFalse($tableIndexes['test_composite_idx']['unique']); $this->assertFalse($tableIndexes['test_composite_idx']['primary']); } public function testDropAndCreateIndex() { $this->createTestTable('test_create_index'); $index = array( 'columns' => array( 'test' => array() ), 'type' => 'unique' ); $this->_sm->dropAndCreateIndex('test_create_index', 'test', $index); $tableIndexes = $this->_sm->listTableIndexes('test_create_index'); $this->assertEquals('test', $tableIndexes['test']['name']); $this->assertEquals(array('test'), $tableIndexes['test']['columns']); $this->assertTrue($tableIndexes['test']['unique']); $this->assertFalse($tableIndexes['test']['primary']); } protected function getCreateExampleViewSql() { $this->markTestSkipped('No Create Example View SQL was defined for this SchemaManager'); } public function testListViews() { $this->_sm->dropAndCreateView('test_create_view', $this->getCreateExampleViewSql()); $views = $this->_sm->listViews(); $this->assertTrue(count($views) >= 1, "There should be at least the fixture view created in the database, but none were found."); $found = false; foreach($views AS $view) { if(!isset($view['name']) || !isset($view['sql'])) { $this->fail( "listViews() has to return entries with both name ". "and sql keys, but only ".implode(", ", array_keys($view))." are present." ); } if($view['name'] == 'test_create_view') { $found = true; } } $this->assertTrue($found, "'test_create_view' View was not found in listViews()."); } /** * @var \Doctrine\DBAL\Schema\AbstractSchemaManager */ protected $_sm; protected function setUp() { parent::setUp(); $class = get_class($this); $e = explode('\\', $class); $testClass = end($e); $dbms = strtolower(str_replace('SchemaManagerTest', null, $testClass)); if ($this->_conn->getDatabasePlatform()->getName() !== $dbms) { $this->markTestSkipped('The ' . $testClass .' requires the use of ' . $dbms); } $this->_sm = $this->_conn->getSchemaManager(); } protected function createTestTable($name = 'test_table', $data = array()) { if ( ! isset($data['columns'])) { $columns = array( 'id' => array( 'type' => Type::getType('integer'), 'autoincrement' => true, 'primary' => true, 'notnull' => true ), 'test' => array( 'type' => Type::getType('string'), 'length' => 255 ), 'foreign_key_test' => array( 'type' => Type::getType('integer') ) ); } else { $columns = $data['columns']; } $options = array(); if (isset($data['options'])) { $options = $data['options']; } $this->_sm->dropAndCreateTable($name, $columns, $options); } }