Skip to content

Commit d20e3e5

Browse files
committed
Fix using string primary_key value for sqlite
Signed-off-by: Matthew Peveler <[email protected]>
1 parent 6e522d6 commit d20e3e5

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

src/Phinx/Db/Adapter/SQLiteAdapter.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,9 @@ public function createTable(Table $table, array $columns = [], array $indexes =
424424

425425
$sql = 'CREATE TABLE ';
426426
$sql .= $this->quoteTableName($table->getName()) . ' (';
427+
if (isset($options['primary_key'])) {
428+
$options['primary_key'] = (array)$options['primary_key'];
429+
}
427430
foreach ($columns as $column) {
428431
$sql .= $this->quoteColumnName($column->getName()) . ' ' . $this->getColumnSqlDefinition($column) . ', ';
429432

@@ -446,9 +449,7 @@ public function createTable(Table $table, array $columns = [], array $indexes =
446449
if (isset($options['primary_key'])) {
447450
$sql = rtrim($sql);
448451
$sql .= ' PRIMARY KEY (';
449-
if (is_string($options['primary_key'])) { // handle primary_key => 'id'
450-
$sql .= $this->quoteColumnName($options['primary_key']);
451-
} elseif (is_array($options['primary_key'])) { // handle primary_key => array('tag_id', 'resource_id')
452+
if (is_array($options['primary_key'])) { // handle primary_key => array('tag_id', 'resource_id')
452453
$sql .= implode(',', array_map([$this, 'quoteColumnName'], $options['primary_key']));
453454
}
454455
$sql .= ')';

tests/Phinx/Db/Adapter/SQLiteAdapterTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,22 @@ public function testCreateTableIdentityIdColumn()
176176

177177
$this->assertTrue($this->adapter->hasTable('ntable'));
178178
$this->assertTrue($this->adapter->hasColumn('ntable', 'custom_id'));
179+
$this->assertTrue($this->adapter->hasPrimaryKey('ntable', 'custom_id'));
180+
181+
/** @var \Phinx\Db\Table\Column $idColumn */
182+
$idColumn = $this->adapter->getColumns('ntable')[0];
183+
$this->assertTrue($idColumn->getIdentity());
184+
}
185+
186+
public function testCreateTableIdentityIdColumnStringPrimaryKey()
187+
{
188+
$table = new Table('ntable', ['id' => false, 'primary_key' => 'custom_id'], $this->adapter);
189+
$table->addColumn('custom_id', 'integer', ['identity' => true])
190+
->save();
191+
192+
$this->assertTrue($this->adapter->hasTable('ntable'));
193+
$this->assertTrue($this->adapter->hasColumn('ntable', 'custom_id'));
194+
$this->assertTrue($this->adapter->hasPrimaryKey('ntable', 'custom_id'));
179195

180196
/** @var \Phinx\Db\Table\Column $idColumn */
181197
$idColumn = $this->adapter->getColumns('ntable')[0];

0 commit comments

Comments
 (0)