Commit 245bfb79 authored by Timo Bakx's avatar Timo Bakx

Updated sqlite unit tests

parent 51358603
...@@ -343,13 +343,7 @@ class SqlitePlatform extends AbstractPlatform ...@@ -343,13 +343,7 @@ class SqlitePlatform extends AbstractPlatform
} }
} }
if (isset($options['primary']) && ! empty($options['primary'])) { $queryFields .= $this->getNonAutoincrementPrimaryKeyDefinition($columns, $options);
$keyColumns = array_unique(array_values($options['primary']));
// the primary key is already defined in the column definition for auto increment fields
if (count($keyColumns) > 1 || !$columns[$keyColumns[0]]['autoincrement']) {
$queryFields .= ', PRIMARY KEY(' . implode(', ', $keyColumns) . ')';
}
}
if (isset($options['foreignKeys'])) { if (isset($options['foreignKeys'])) {
foreach ($options['foreignKeys'] as $foreignKey) { foreach ($options['foreignKeys'] as $foreignKey) {
...@@ -378,6 +372,29 @@ class SqlitePlatform extends AbstractPlatform ...@@ -378,6 +372,29 @@ class SqlitePlatform extends AbstractPlatform
return $query; return $query;
} }
/**
* Generate a PRIMARY KEY definition if no autoincrement value is used
*
* @param string[] $columns
* @param mixed[] $options
*/
private function getNonAutoincrementPrimaryKeyDefinition(array $columns, array $options) : string
{
if (empty($options['primary'])) {
return '';
}
$keyColumns = array_unique(array_values($options['primary']));
foreach ($keyColumns as $keyColumn) {
if (isset($columns[$keyColumn]['autoincrement']) && ! empty($columns[$keyColumn]['autoincrement'])) {
return '';
}
}
return ', PRIMARY KEY(' . implode(', ', $keyColumns) . ')';
}
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
......
...@@ -1489,4 +1489,32 @@ class SchemaManagerFunctionalTestCase extends \Doctrine\Tests\DbalFunctionalTest ...@@ -1489,4 +1489,32 @@ class SchemaManagerFunctionalTestCase extends \Doctrine\Tests\DbalFunctionalTest
self::assertFalse($tableDiff); self::assertFalse($tableDiff);
} }
/**
* @group DBAL-2921
*/
public function testPrimaryKeyAutoIncrement()
{
$table = new Table('test_pk_auto_increment');
$table->addColumn('id', 'integer', ['autoincrement' => true]);
$table->addColumn('text', 'string');
$table->setPrimaryKey(['id']);
$this->_sm->dropAndCreateTable($table);
$this->_conn->insert('test_pk_auto_increment', ['text' => '1']);
$query = $this->_conn->query('SELECT id FROM test_pk_auto_increment WHERE text = \'1\'');
$query->execute();
$lastUsedIdBeforeDelete = (int) $query->fetchColumn();
$this->_conn->query('DELETE FROM test_pk_auto_increment');
$this->_conn->insert('test_pk_auto_increment', ['text' => '2']);
$query = $this->_conn->query('SELECT id FROM test_pk_auto_increment WHERE text = \'2\'');
$query->execute();
$lastUsedIdAfterDelete = (int) $query->fetchColumn();
$this->assertGreaterThan($lastUsedIdBeforeDelete, $lastUsedIdAfterDelete);
}
} }
...@@ -233,38 +233,6 @@ SQL; ...@@ -233,38 +233,6 @@ SQL;
); );
} }
/**
* @group DBAL-2921
*/
public function testPrimaryKeyAutoIncrement()
{
$table = new Schema\Table('test_pk_auto_increment');
$table->addColumn('id', 'integer', [
'autoincrement' => true
]);
$table->addColumn('text', 'text');
$table->setPrimaryKey(['id']);
$this->_sm->dropAndCreateTable($table);
$this->_conn->insert('test_pk_auto_increment', ['text' => '1']);
$this->_conn->insert('test_pk_auto_increment', ['text' => '2']);
$this->_conn->insert('test_pk_auto_increment', ['text' => '3']);
$query = $this->_conn->query('SELECT id FROM test_pk_auto_increment WHERE text = "3"');
$query->execute();
$lastUsedIdBeforeDelete = (int)$query->fetchColumn();
$this->_conn->query('DELETE FROM test_pk_auto_increment');
$this->_conn->insert('test_pk_auto_increment', ['text' => '4']);
$query = $this->_conn->query('SELECT id FROM test_pk_auto_increment WHERE text = "4"');
$query->execute();
$lastUsedIdAfterDelete = (int)$query->fetchColumn();
$this->assertGreaterThan($lastUsedIdBeforeDelete, $lastUsedIdAfterDelete);
}
/** /**
* @group DBAL-2921 * @group DBAL-2921
*/ */
...@@ -277,16 +245,14 @@ SQL; ...@@ -277,16 +245,14 @@ SQL;
$this->_sm->dropAndCreateTable($table); $this->_sm->dropAndCreateTable($table);
$this->_conn->insert('test_pk_auto_increment', ['text' => '1']); $this->_conn->insert('test_pk_auto_increment', ['text' => '1']);
$this->_conn->insert('test_pk_auto_increment', ['text' => '2']);
$this->_conn->insert('test_pk_auto_increment', ['text' => '3']);
$this->_conn->query('DELETE FROM test_pk_auto_increment'); $this->_conn->query('DELETE FROM test_pk_auto_increment');
$this->_conn->insert('test_pk_auto_increment', ['text' => '4']); $this->_conn->insert('test_pk_auto_increment', ['text' => '2']);
$query = $this->_conn->query('SELECT id FROM test_pk_auto_increment WHERE text = "4"'); $query = $this->_conn->query('SELECT id FROM test_pk_auto_increment WHERE text = "2"');
$query->execute(); $query->execute();
$lastUsedIdAfterDelete = (int)$query->fetchColumn(); $lastUsedIdAfterDelete = (int) $query->fetchColumn();
// with an empty table, non autoincrement rowid is always 1 // with an empty table, non autoincrement rowid is always 1
$this->assertEquals(1, $lastUsedIdAfterDelete); $this->assertEquals(1, $lastUsedIdAfterDelete);
......
...@@ -19,7 +19,7 @@ class SqlitePlatformTest extends AbstractPlatformTestCase ...@@ -19,7 +19,7 @@ class SqlitePlatformTest extends AbstractPlatformTestCase
public function getGenerateTableSql() public function getGenerateTableSql()
{ {
return 'CREATE TABLE test (id INTEGER NOT NULL, test VARCHAR(255) DEFAULT NULL, PRIMARY KEY(id))'; return 'CREATE TABLE test (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, test VARCHAR(255) DEFAULT NULL)';
} }
public function getGenerateTableWithMultiColumnUniqueIndexSql() public function getGenerateTableWithMultiColumnUniqueIndexSql()
...@@ -65,7 +65,7 @@ class SqlitePlatformTest extends AbstractPlatformTestCase ...@@ -65,7 +65,7 @@ class SqlitePlatformTest extends AbstractPlatformTestCase
public function testIgnoresUnsignedIntegerDeclarationForAutoIncrementalIntegers() public function testIgnoresUnsignedIntegerDeclarationForAutoIncrementalIntegers()
{ {
self::assertSame( self::assertSame(
'INTEGER', 'INTEGER PRIMARY KEY AUTOINCREMENT',
$this->_platform->getIntegerTypeDeclarationSQL(array('autoincrement' => true, 'unsigned' => true)) $this->_platform->getIntegerTypeDeclarationSQL(array('autoincrement' => true, 'unsigned' => true))
); );
} }
...@@ -81,11 +81,11 @@ class SqlitePlatformTest extends AbstractPlatformTestCase ...@@ -81,11 +81,11 @@ class SqlitePlatformTest extends AbstractPlatformTestCase
$this->_platform->getTinyIntTypeDeclarationSQL(array()) $this->_platform->getTinyIntTypeDeclarationSQL(array())
); );
self::assertEquals( self::assertEquals(
'INTEGER', 'INTEGER PRIMARY KEY AUTOINCREMENT',
$this->_platform->getTinyIntTypeDeclarationSQL(array('autoincrement' => true)) $this->_platform->getTinyIntTypeDeclarationSQL(array('autoincrement' => true))
); );
self::assertEquals( self::assertEquals(
'INTEGER', 'INTEGER PRIMARY KEY AUTOINCREMENT',
$this->_platform->getTinyIntTypeDeclarationSQL( $this->_platform->getTinyIntTypeDeclarationSQL(
array('autoincrement' => true, 'primary' => true)) array('autoincrement' => true, 'primary' => true))
); );
...@@ -110,15 +110,15 @@ class SqlitePlatformTest extends AbstractPlatformTestCase ...@@ -110,15 +110,15 @@ class SqlitePlatformTest extends AbstractPlatformTestCase
$this->_platform->getSmallIntTypeDeclarationSQL(array()) $this->_platform->getSmallIntTypeDeclarationSQL(array())
); );
self::assertEquals( self::assertEquals(
'INTEGER', 'INTEGER PRIMARY KEY AUTOINCREMENT',
$this->_platform->getSmallIntTypeDeclarationSQL(array('autoincrement' => true)) $this->_platform->getSmallIntTypeDeclarationSQL(array('autoincrement' => true))
); );
self::assertEquals( self::assertEquals(
'INTEGER', 'INTEGER PRIMARY KEY AUTOINCREMENT',
$this->_platform->getTinyIntTypeDeclarationSQL(array('autoincrement' => true, 'unsigned' => true)) $this->_platform->getTinyIntTypeDeclarationSQL(array('autoincrement' => true, 'unsigned' => true))
); );
self::assertEquals( self::assertEquals(
'INTEGER', 'INTEGER PRIMARY KEY AUTOINCREMENT',
$this->_platform->getSmallIntTypeDeclarationSQL( $this->_platform->getSmallIntTypeDeclarationSQL(
array('autoincrement' => true, 'primary' => true)) array('autoincrement' => true, 'primary' => true))
); );
...@@ -143,15 +143,15 @@ class SqlitePlatformTest extends AbstractPlatformTestCase ...@@ -143,15 +143,15 @@ class SqlitePlatformTest extends AbstractPlatformTestCase
$this->_platform->getMediumIntTypeDeclarationSQL(array()) $this->_platform->getMediumIntTypeDeclarationSQL(array())
); );
self::assertEquals( self::assertEquals(
'INTEGER', 'INTEGER PRIMARY KEY AUTOINCREMENT',
$this->_platform->getMediumIntTypeDeclarationSQL(array('autoincrement' => true)) $this->_platform->getMediumIntTypeDeclarationSQL(array('autoincrement' => true))
); );
self::assertEquals( self::assertEquals(
'INTEGER', 'INTEGER PRIMARY KEY AUTOINCREMENT',
$this->_platform->getMediumIntTypeDeclarationSQL(array('autoincrement' => true, 'unsigned' => true)) $this->_platform->getMediumIntTypeDeclarationSQL(array('autoincrement' => true, 'unsigned' => true))
); );
self::assertEquals( self::assertEquals(
'INTEGER', 'INTEGER PRIMARY KEY AUTOINCREMENT',
$this->_platform->getMediumIntTypeDeclarationSQL( $this->_platform->getMediumIntTypeDeclarationSQL(
array('autoincrement' => true, 'primary' => true)) array('autoincrement' => true, 'primary' => true))
); );
...@@ -172,15 +172,15 @@ class SqlitePlatformTest extends AbstractPlatformTestCase ...@@ -172,15 +172,15 @@ class SqlitePlatformTest extends AbstractPlatformTestCase
$this->_platform->getIntegerTypeDeclarationSQL(array()) $this->_platform->getIntegerTypeDeclarationSQL(array())
); );
self::assertEquals( self::assertEquals(
'INTEGER', 'INTEGER PRIMARY KEY AUTOINCREMENT',
$this->_platform->getIntegerTypeDeclarationSQL(array('autoincrement' => true)) $this->_platform->getIntegerTypeDeclarationSQL(array('autoincrement' => true))
); );
self::assertEquals( self::assertEquals(
'INTEGER', 'INTEGER PRIMARY KEY AUTOINCREMENT',
$this->_platform->getIntegerTypeDeclarationSQL(array('autoincrement' => true, 'unsigned' => true)) $this->_platform->getIntegerTypeDeclarationSQL(array('autoincrement' => true, 'unsigned' => true))
); );
self::assertEquals( self::assertEquals(
'INTEGER', 'INTEGER PRIMARY KEY AUTOINCREMENT',
$this->_platform->getIntegerTypeDeclarationSQL( $this->_platform->getIntegerTypeDeclarationSQL(
array('autoincrement' => true, 'primary' => true)) array('autoincrement' => true, 'primary' => true))
); );
...@@ -205,15 +205,15 @@ class SqlitePlatformTest extends AbstractPlatformTestCase ...@@ -205,15 +205,15 @@ class SqlitePlatformTest extends AbstractPlatformTestCase
$this->_platform->getBigIntTypeDeclarationSQL(array()) $this->_platform->getBigIntTypeDeclarationSQL(array())
); );
self::assertEquals( self::assertEquals(
'INTEGER', 'INTEGER PRIMARY KEY AUTOINCREMENT',
$this->_platform->getBigIntTypeDeclarationSQL(array('autoincrement' => true)) $this->_platform->getBigIntTypeDeclarationSQL(array('autoincrement' => true))
); );
self::assertEquals( self::assertEquals(
'INTEGER', 'INTEGER PRIMARY KEY AUTOINCREMENT',
$this->_platform->getBigIntTypeDeclarationSQL(array('autoincrement' => true, 'unsigned' => true)) $this->_platform->getBigIntTypeDeclarationSQL(array('autoincrement' => true, 'unsigned' => true))
); );
self::assertEquals( self::assertEquals(
'INTEGER', 'INTEGER PRIMARY KEY AUTOINCREMENT',
$this->_platform->getBigIntTypeDeclarationSQL( $this->_platform->getBigIntTypeDeclarationSQL(
array('autoincrement' => true, 'primary' => true)) array('autoincrement' => true, 'primary' => true))
); );
...@@ -300,7 +300,7 @@ class SqlitePlatformTest extends AbstractPlatformTestCase ...@@ -300,7 +300,7 @@ class SqlitePlatformTest extends AbstractPlatformTestCase
return array( return array(
"CREATE TEMPORARY TABLE __temp__mytable AS SELECT id, bar, bloo FROM mytable", "CREATE TEMPORARY TABLE __temp__mytable AS SELECT id, bar, bloo FROM mytable",
"DROP TABLE mytable", "DROP TABLE mytable",
"CREATE TABLE mytable (id INTEGER NOT NULL, baz VARCHAR(255) DEFAULT 'def' NOT NULL, bloo BOOLEAN DEFAULT '0' NOT NULL, quota INTEGER DEFAULT NULL, PRIMARY KEY(id))", "CREATE TABLE mytable (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, baz VARCHAR(255) DEFAULT 'def' NOT NULL, bloo BOOLEAN DEFAULT '0' NOT NULL, quota INTEGER DEFAULT NULL)",
"INSERT INTO mytable (id, baz, bloo) SELECT id, bar, bloo FROM __temp__mytable", "INSERT INTO mytable (id, baz, bloo) SELECT id, bar, bloo FROM __temp__mytable",
"DROP TABLE __temp__mytable", "DROP TABLE __temp__mytable",
"ALTER TABLE mytable RENAME TO userlist", "ALTER TABLE mytable RENAME TO userlist",
...@@ -318,7 +318,7 @@ class SqlitePlatformTest extends AbstractPlatformTestCase ...@@ -318,7 +318,7 @@ class SqlitePlatformTest extends AbstractPlatformTestCase
$createTableSQL = $this->_platform->getCreateTableSQL($table); $createTableSQL = $this->_platform->getCreateTableSQL($table);
self::assertEquals( self::assertEquals(
'CREATE TABLE test ("like" INTEGER NOT NULL, PRIMARY KEY("like"))', 'CREATE TABLE test ("like" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL)',
$createTableSQL[0] $createTableSQL[0]
); );
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment