diff --git a/lib/Cake/Model/Datasource/Database/Sqlite.php b/lib/Cake/Model/Datasource/Database/Sqlite.php index da61aa273d0..8251fc34b57 100644 --- a/lib/Cake/Model/Datasource/Database/Sqlite.php +++ b/lib/Cake/Model/Datasource/Database/Sqlite.php @@ -407,10 +407,19 @@ public function buildColumn($column) { return null; } - if (isset($column['key']) && $column['key'] === 'primary' && $type === 'integer') { + $isPrimary = (isset($column['key']) && $column['key'] === 'primary'); + if ($isPrimary && $type === 'integer') { return $this->name($name) . ' ' . $this->columns['primary_key']['name']; } - return parent::buildColumn($column); + $out = parent::buildColumn($column); + if ($isPrimary && $type === 'biginteger') { + $replacement = 'PRIMARY KEY'; + if ($column['null'] === false) { + $replacement = 'NOT NULL ' . $replacement; + } + return str_replace($this->columns['primary_key']['name'], $replacement, $out); + } + return $out; } /** diff --git a/lib/Cake/Test/Case/Model/Datasource/Database/SqliteTest.php b/lib/Cake/Test/Case/Model/Datasource/Database/SqliteTest.php index 564fe593e3c..a121da5753e 100644 --- a/lib/Cake/Test/Case/Model/Datasource/Database/SqliteTest.php +++ b/lib/Cake/Test/Case/Model/Datasource/Database/SqliteTest.php @@ -264,6 +264,17 @@ public function testBuildColumn() { $result = $this->Dbo->buildColumn($data); $expected = '"huge" bigint(20) NOT NULL'; $this->assertEquals($expected, $result); + + $data = array( + 'name' => 'id', + 'type' => 'biginteger', + 'length' => 20, + 'null' => false, + 'key' => 'primary', + ); + $result = $this->Dbo->buildColumn($data); + $expected = '"id" bigint(20) NOT NULL PRIMARY KEY'; + $this->assertEquals($expected, $result); } /**