Browse Source

Fix issues with SQLServer + boolean columns.

SQLServer should not have lengths applied to BIT column types.
Remove any length that could have been provided.

Fixes #2439
mark_story 14 years ago
parent
commit
4e67698506

+ 5 - 2
lib/Cake/Model/Datasource/Database/Sqlserver.php

@@ -656,12 +656,15 @@ class Sqlserver extends DboSource {
 /**
  * Generate a database-native column schema string
  *
- * @param array $column An array structured like the following: array('name'=>'value', 'type'=>'value'[, options]),
+ * @param array $column An array structured like the 
+ *   following: array('name'=>'value', 'type'=>'value'[, options]),
  *   where options can be 'default', 'length', or 'key'.
  * @return string
  */
 	public function buildColumn($column) {
-		$result = preg_replace('/(int|integer)\([0-9]+\)/i', '$1', parent::buildColumn($column));
+		$result = parent::buildColumn($column);
+		$result = preg_replace('/(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'] === '') {
 				$result = str_replace('DEFAULT NULL', "DEFAULT ''", $result);

+ 10 - 0
lib/Cake/Test/Case/Model/Datasource/Database/SqlserverTest.php

@@ -543,6 +543,16 @@ class SqlserverTest extends CakeTestCase {
 		$result = $this->db->buildColumn($column);
 		$expected = '[body] nvarchar(MAX)';
 		$this->assertEquals($expected, $result);
+
+		$column = array(
+			'name' => 'checked',
+			'type' => 'boolean',
+			'length' => 10,
+			'default' => '1'
+		);
+		$result = $this->db->buildColumn($column);
+		$expected = "[checked] bit DEFAULT '1'";
+		$this->assertEquals($expected, $result);
 	}
 
 /**