_platform = $this->createPlatform(); } /** * @group DDC-1360 */ public function testQuoteIdentifier() { if ($this->_platform->getName() == "mssql") { $this->markTestSkipped('Not working this way on mssql.'); } $c = $this->_platform->getIdentifierQuoteCharacter(); $this->assertEquals($c."test".$c, $this->_platform->quoteIdentifier("test")); $this->assertEquals($c."test".$c.".".$c."test".$c, $this->_platform->quoteIdentifier("test.test")); $this->assertEquals(str_repeat($c, 4), $this->_platform->quoteIdentifier($c)); } /** * @group DDC-1360 */ public function testQuoteSingleIdentifier() { if ($this->_platform->getName() == "mssql") { $this->markTestSkipped('Not working this way on mssql.'); } $c = $this->_platform->getIdentifierQuoteCharacter(); $this->assertEquals($c."test".$c, $this->_platform->quoteSingleIdentifier("test")); $this->assertEquals($c."test.test".$c, $this->_platform->quoteSingleIdentifier("test.test")); $this->assertEquals(str_repeat($c, 4), $this->_platform->quoteSingleIdentifier($c)); } public function testGetInvalidtForeignKeyReferentialActionSQL() { $this->setExpectedException('InvalidArgumentException'); $this->_platform->getForeignKeyReferentialActionSQL('unknown'); } public function testGetUnknownDoctrineMappingType() { $this->setExpectedException('Doctrine\DBAL\DBALException'); $this->_platform->getDoctrineTypeMapping('foobar'); } public function testRegisterDoctrineMappingType() { $this->_platform->registerDoctrineTypeMapping('foo', 'integer'); $this->assertEquals('integer', $this->_platform->getDoctrineTypeMapping('foo')); } public function testRegisterUnknownDoctrineMappingType() { $this->setExpectedException('Doctrine\DBAL\DBALException'); $this->_platform->registerDoctrineTypeMapping('foo', 'bar'); } public function testCreateWithNoColumns() { $table = new \Doctrine\DBAL\Schema\Table('test'); $this->setExpectedException('Doctrine\DBAL\DBALException'); $sql = $this->_platform->getCreateTableSQL($table); } public function testGeneratesTableCreationSql() { $table = new \Doctrine\DBAL\Schema\Table('test'); $table->addColumn('id', 'integer', array('notnull' => true, 'autoincrement' => true)); $table->addColumn('test', 'string', array('notnull' => false, 'length' => 255)); $table->setPrimaryKey(array('id')); $sql = $this->_platform->getCreateTableSQL($table); $this->assertEquals($this->getGenerateTableSql(), $sql[0]); } abstract public function getGenerateTableSql(); public function testGenerateTableWithMultiColumnUniqueIndex() { $table = new \Doctrine\DBAL\Schema\Table('test'); $table->addColumn('foo', 'string', array('notnull' => false, 'length' => 255)); $table->addColumn('bar', 'string', array('notnull' => false, 'length' => 255)); $table->addUniqueIndex(array("foo", "bar")); $sql = $this->_platform->getCreateTableSQL($table); $this->assertEquals($this->getGenerateTableWithMultiColumnUniqueIndexSql(), $sql); } abstract public function getGenerateTableWithMultiColumnUniqueIndexSql(); public function testGeneratesIndexCreationSql() { $indexDef = new \Doctrine\DBAL\Schema\Index('my_idx', array('user_name', 'last_login')); $this->assertEquals( $this->getGenerateIndexSql(), $this->_platform->getCreateIndexSQL($indexDef, 'mytable') ); } abstract public function getGenerateIndexSql(); public function testGeneratesUniqueIndexCreationSql() { $indexDef = new \Doctrine\DBAL\Schema\Index('index_name', array('test', 'test2'), true); $sql = $this->_platform->getCreateIndexSQL($indexDef, 'test'); $this->assertEquals($this->getGenerateUniqueIndexSql(), $sql); } abstract public function getGenerateUniqueIndexSql(); public function testGeneratesForeignKeyCreationSql() { $fk = new \Doctrine\DBAL\Schema\ForeignKeyConstraint(array('fk_name_id'), 'other_table', array('id'), ''); $sql = $this->_platform->getCreateForeignKeySQL($fk, 'test'); $this->assertEquals($sql, $this->getGenerateForeignKeySql()); } abstract public function getGenerateForeignKeySql(); public function testGeneratesConstraintCreationSql() { $idx = new \Doctrine\DBAL\Schema\Index('constraint_name', array('test'), true, false); $sql = $this->_platform->getCreateConstraintSQL($idx, 'test'); $this->assertEquals($this->getGenerateConstraintUniqueIndexSql(), $sql); $pk = new \Doctrine\DBAL\Schema\Index('constraint_name', array('test'), true, true); $sql = $this->_platform->getCreateConstraintSQL($pk, 'test'); $this->assertEquals($this->getGenerateConstraintPrimaryIndexSql(), $sql); $fk = new \Doctrine\DBAL\Schema\ForeignKeyConstraint(array('fk_name'), 'foreign', array('id'), 'constraint_fk'); $sql = $this->_platform->getCreateConstraintSQL($fk, 'test'); $this->assertEquals($this->getGenerateConstraintForeignKeySql(), $sql); } protected function getBitAndComparisonExpressionSql($value1, $value2) { return '(' . $value1 . ' & ' . $value2 . ')'; } /** * @group DDC-1213 */ public function testGeneratesBitAndComparisonExpressionSql() { $sql = $this->_platform->getBitAndComparisonExpression(2, 4); $this->assertEquals($this->getBitAndComparisonExpressionSql(2, 4), $sql); } protected function getBitOrComparisonExpressionSql($value1, $value2) { return '(' . $value1 . ' | ' . $value2 . ')'; } /** * @group DDC-1213 */ public function testGeneratesBitOrComparisonExpressionSql() { $sql = $this->_platform->getBitOrComparisonExpression(2, 4); $this->assertEquals($this->getBitOrComparisonExpressionSql(2, 4), $sql); } public function getGenerateConstraintUniqueIndexSql() { return 'ALTER TABLE test ADD CONSTRAINT constraint_name UNIQUE (test)'; } public function getGenerateConstraintPrimaryIndexSql() { return 'ALTER TABLE test ADD CONSTRAINT constraint_name PRIMARY KEY (test)'; } public function getGenerateConstraintForeignKeySql() { return 'ALTER TABLE test ADD CONSTRAINT constraint_fk FOREIGN KEY (fk_name) REFERENCES foreign (id)'; } abstract public function getGenerateAlterTableSql(); public function testGeneratesTableAlterationSql() { $expectedSql = $this->getGenerateAlterTableSql(); $tableDiff = new \Doctrine\DBAL\Schema\TableDiff('mytable'); $tableDiff->newName = 'userlist'; $tableDiff->addedColumns['quota'] = new \Doctrine\DBAL\Schema\Column('quota', \Doctrine\DBAL\Types\Type::getType('integer'), array('notnull' => false)); $tableDiff->removedColumns['foo'] = new \Doctrine\DBAL\Schema\Column('foo', \Doctrine\DBAL\Types\Type::getType('integer')); $tableDiff->changedColumns['bar'] = new \Doctrine\DBAL\Schema\ColumnDiff( 'bar', new \Doctrine\DBAL\Schema\Column( 'baz', \Doctrine\DBAL\Types\Type::getType('string'), array('default' => 'def') ), array('type', 'notnull', 'default') ); $tableDiff->changedColumns['bloo'] = new \Doctrine\DBAL\Schema\ColumnDiff( 'bloo', new \Doctrine\DBAL\Schema\Column( 'bloo', \Doctrine\DBAL\Types\Type::getType('boolean'), array('default' => false) ), array('type', 'notnull', 'default') ); $sql = $this->_platform->getAlterTableSQL($tableDiff); $this->assertEquals($expectedSql, $sql); } public function testGetCustomColumnDeclarationSql() { $field = array('columnDefinition' => 'MEDIUMINT(6) UNSIGNED'); $this->assertEquals('foo MEDIUMINT(6) UNSIGNED', $this->_platform->getColumnDeclarationSQL('foo', $field)); } public function testGetCreateTableSqlDispatchEvent() { $listenerMock = $this->getMock('GetCreateTableSqlDispatchEvenListener', array('onSchemaCreateTable', 'onSchemaCreateTableColumn')); $listenerMock ->expects($this->once()) ->method('onSchemaCreateTable'); $listenerMock ->expects($this->exactly(2)) ->method('onSchemaCreateTableColumn'); $eventManager = new EventManager(); $eventManager->addEventListener(array(Events::onSchemaCreateTable, Events::onSchemaCreateTableColumn), $listenerMock); $this->_platform->setEventManager($eventManager); $table = new \Doctrine\DBAL\Schema\Table('test'); $table->addColumn('foo', 'string', array('notnull' => false, 'length' => 255)); $table->addColumn('bar', 'string', array('notnull' => false, 'length' => 255)); $this->_platform->getCreateTableSQL($table); } public function testGetDropTableSqlDispatchEvent() { $listenerMock = $this->getMock('GetDropTableSqlDispatchEventListener', array('onSchemaDropTable')); $listenerMock ->expects($this->once()) ->method('onSchemaDropTable'); $eventManager = new EventManager(); $eventManager->addEventListener(array(Events::onSchemaDropTable), $listenerMock); $this->_platform->setEventManager($eventManager); $this->_platform->getDropTableSQL('TABLE'); } public function testGetAlterTableSqlDispatchEvent() { $events = array( 'onSchemaAlterTable', 'onSchemaAlterTableAddColumn', 'onSchemaAlterTableRemoveColumn', 'onSchemaAlterTableChangeColumn', 'onSchemaAlterTableRenameColumn' ); $listenerMock = $this->getMock('GetAlterTableSqlDispatchEvenListener', $events); $listenerMock ->expects($this->once()) ->method('onSchemaAlterTable'); $listenerMock ->expects($this->once()) ->method('onSchemaAlterTableAddColumn'); $listenerMock ->expects($this->once()) ->method('onSchemaAlterTableRemoveColumn'); $listenerMock ->expects($this->once()) ->method('onSchemaAlterTableChangeColumn'); $listenerMock ->expects($this->once()) ->method('onSchemaAlterTableRenameColumn'); $eventManager = new EventManager(); $events = array( Events::onSchemaAlterTable, Events::onSchemaAlterTableAddColumn, Events::onSchemaAlterTableRemoveColumn, Events::onSchemaAlterTableChangeColumn, Events::onSchemaAlterTableRenameColumn ); $eventManager->addEventListener($events, $listenerMock); $this->_platform->setEventManager($eventManager); $tableDiff = new \Doctrine\DBAL\Schema\TableDiff('mytable'); $tableDiff->addedColumns['added'] = new \Doctrine\DBAL\Schema\Column('added', \Doctrine\DBAL\Types\Type::getType('integer'), array()); $tableDiff->removedColumns['removed'] = new \Doctrine\DBAL\Schema\Column('removed', \Doctrine\DBAL\Types\Type::getType('integer'), array()); $tableDiff->changedColumns['changed'] = new \Doctrine\DBAL\Schema\ColumnDiff( 'changed', new \Doctrine\DBAL\Schema\Column( 'changed2', \Doctrine\DBAL\Types\Type::getType('string'), array() ), array() ); $tableDiff->renamedColumns['renamed'] = new \Doctrine\DBAL\Schema\Column('renamed2', \Doctrine\DBAL\Types\Type::getType('integer'), array()); $this->_platform->getAlterTableSQL($tableDiff); } /** * @group DBAL-42 */ public function testCreateTableColumnComments() { $table = new \Doctrine\DBAL\Schema\Table('test'); $table->addColumn('id', 'integer', array('comment' => 'This is a comment')); $table->setPrimaryKey(array('id')); $this->assertEquals($this->getCreateTableColumnCommentsSQL(), $this->_platform->getCreateTableSQL($table)); } /** * @group DBAL-42 */ public function testAlterTableColumnComments() { $tableDiff = new \Doctrine\DBAL\Schema\TableDiff('mytable'); $tableDiff->addedColumns['quota'] = new \Doctrine\DBAL\Schema\Column('quota', \Doctrine\DBAL\Types\Type::getType('integer'), array('comment' => 'A comment')); $tableDiff->changedColumns['bar'] = new \Doctrine\DBAL\Schema\ColumnDiff( 'bar', new \Doctrine\DBAL\Schema\Column( 'baz', \Doctrine\DBAL\Types\Type::getType('string'), array('comment' => 'B comment') ), array('comment') ); $this->assertEquals($this->getAlterTableColumnCommentsSQL(), $this->_platform->getAlterTableSQL($tableDiff)); } public function testCreateTableColumnTypeComments() { $table = new \Doctrine\DBAL\Schema\Table('test'); $table->addColumn('id', 'integer'); $table->addColumn('data', 'array'); $table->setPrimaryKey(array('id')); $this->assertEquals($this->getCreateTableColumnTypeCommentsSQL(), $this->_platform->getCreateTableSQL($table)); } public function getCreateTableColumnCommentsSQL() { $this->markTestSkipped('Platform does not support Column comments.'); } public function getAlterTableColumnCommentsSQL() { $this->markTestSkipped('Platform does not support Column comments.'); } public function getCreateTableColumnTypeCommentsSQL() { $this->markTestSkipped('Platform does not support Column comments.'); } /** * @group DBAL-45 */ public function testKeywordList() { $keywordList = $this->_platform->getReservedKeywordsList(); $this->assertInstanceOf('Doctrine\DBAL\Platforms\Keywords\KeywordList', $keywordList); $this->assertTrue($keywordList->isKeyword('table')); } }