From d4ee62be617b3f567e5d85cb681fe77912e68844 Mon Sep 17 00:00:00 2001 From: mark_story Date: Thu, 30 Aug 2012 16:35:36 +0100 Subject: [PATCH] Add support for biginteger on SQLserver. --- .../Model/Datasource/Database/Sqlserver.php | 24 +++++++++++-------- .../Datasource/Database/SqlserverTest.php | 8 +++++++ 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/lib/Cake/Model/Datasource/Database/Sqlserver.php b/lib/Cake/Model/Datasource/Database/Sqlserver.php index 3700ca2d0d6..8e6f23e5eb3 100644 --- a/lib/Cake/Model/Datasource/Database/Sqlserver.php +++ b/lib/Cake/Model/Datasource/Database/Sqlserver.php @@ -86,16 +86,17 @@ class Sqlserver extends DboSource { */ public $columns = array( 'primary_key' => array('name' => 'IDENTITY (1, 1) NOT NULL'), - 'string' => array('name' => 'nvarchar', 'limit' => '255'), - 'text' => array('name' => 'nvarchar', 'limit' => 'MAX'), - 'integer' => array('name' => 'int', 'formatter' => 'intval'), - 'float' => array('name' => 'numeric', 'formatter' => 'floatval'), - 'datetime' => array('name' => 'datetime', 'format' => 'Y-m-d H:i:s', 'formatter' => 'date'), + 'string' => array('name' => 'nvarchar', 'limit' => '255'), + 'text' => array('name' => 'nvarchar', 'limit' => 'MAX'), + 'integer' => array('name' => 'int', 'formatter' => 'intval'), + 'biginteger' => array('name' => 'bigint'), + 'float' => array('name' => 'numeric', 'formatter' => 'floatval'), + 'datetime' => array('name' => 'datetime', 'format' => 'Y-m-d H:i:s', 'formatter' => 'date'), 'timestamp' => array('name' => 'timestamp', 'format' => 'Y-m-d H:i:s', 'formatter' => 'date'), - 'time' => array('name' => 'datetime', 'format' => 'H:i:s', 'formatter' => 'date'), - 'date' => array('name' => 'datetime', 'format' => 'Y-m-d', 'formatter' => 'date'), - 'binary' => array('name' => 'varbinary'), - 'boolean' => array('name' => 'bit') + 'time' => array('name' => 'datetime', 'format' => 'H:i:s', 'formatter' => 'date'), + 'date' => array('name' => 'datetime', 'format' => 'Y-m-d', 'formatter' => 'date'), + 'binary' => array('name' => 'varbinary'), + 'boolean' => array('name' => 'bit') ); /** @@ -399,6 +400,9 @@ public function column($real) { if ($col == 'bit') { return 'boolean'; } + if (strpos($col, 'bigint') !== false) { + return 'biginteger'; + } if (strpos($col, 'int') !== false) { return 'integer'; } @@ -643,7 +647,7 @@ public function insertMulti($table, $fields, $values) { */ public function buildColumn($column) { $result = parent::buildColumn($column); - $result = preg_replace('/(int|integer)\([0-9]+\)/i', '$1', $result); + $result = preg_replace('/(bigint|int|integer)\([0-9]+\)/i', '$1', $result); $result = preg_replace('/(bit)\([0-9]+\)/i', '$1', $result); if (strpos($result, 'DEFAULT NULL') !== false) { if (isset($column['default']) && $column['default'] === '') { diff --git a/lib/Cake/Test/Case/Model/Datasource/Database/SqlserverTest.php b/lib/Cake/Test/Case/Model/Datasource/Database/SqlserverTest.php index e31595bf32d..18e3d6f9d8d 100644 --- a/lib/Cake/Test/Case/Model/Datasource/Database/SqlserverTest.php +++ b/lib/Cake/Test/Case/Model/Datasource/Database/SqlserverTest.php @@ -553,6 +553,14 @@ public function testBuildColumn() { $result = $this->db->buildColumn($column); $expected = "[checked] bit DEFAULT '1'"; $this->assertEquals($expected, $result); + + $column = array( + 'name' => 'huge', + 'type' => 'biginteger', + ); + $result = $this->db->buildColumn($column); + $expected = "[huge] bigint"; + $this->assertEquals($expected, $result); } /**