Better handling of NULL default values for columns
authorChuck Hagenbuch <chuck@horde.org>
Tue, 1 Jun 2010 02:56:42 +0000 (22:56 -0400)
committerChuck Hagenbuch <chuck@horde.org>
Tue, 1 Jun 2010 02:56:42 +0000 (22:56 -0400)
framework/Db/lib/Horde/Db/Adapter/Sqlite/Column.php
framework/Db/lib/Horde/Db/Adapter/Sqlite/Schema.php

index 7de9605..33adf21 100644 (file)
@@ -61,6 +61,8 @@ class Horde_Db_Adapter_Sqlite_Column extends Horde_Db_Adapter_Base_Column
     {
         if ($value == '"t"' || $value == "'t'") {
             return true;
+        } elseif ($value == '""' || $value == "''") {
+            return null;
         } else {
             return parent::valueToBoolean($value);
         }
index 89ea35b..591e57e 100644 (file)
@@ -260,11 +260,22 @@ class Horde_Db_Adapter_Sqlite_Schema extends Horde_Db_Adapter_Base_Schema
 
         $defs = array('$definition["'.$columnName.'"]->setType("'.$type.'");');
         if (isset($options['limit'])) { $defs[] = '$definition["'.$columnName.'"]->setLimit("'.$options['limit'].'");'; }
-        if (isset($options['default'])) { $defs[] = '$definition["'.$columnName.'"]->setDefault("'.$options['default'].'");'; }
         if (isset($options['null'])) { $defs[] = '$definition["'.$columnName.'"]->setNull("'.$options['null'].'");'; }
         if (isset($options['precision'])) { $defs[] = '$definition["'.$columnName.'"]->setPrecision("'.$options['precision'].'");'; }
         if (isset($options['scale'])) { $defs[] = '$definition["'.$columnName.'"]->setScale("'.$options['scale'].'");'; }
 
+        if (array_key_exists('default', $options)) {
+            if ($options['default'] === true) {
+                $default = 'true';
+            } elseif ($options['default'] === false) {
+                $default = 'false';
+            } elseif ($options['default'] === null) {
+                $default = 'null';
+            } else {
+                $default = '"' . $options['default'] . '"';
+            }
+            $defs[] = '$definition["'.$columnName.'"]->setDefault('.$default.');'; }
+
         return $this->_alterTable($tableName, array(),
             create_function('$definition', implode("\n", $defs)));
     }
@@ -278,8 +289,9 @@ class Horde_Db_Adapter_Sqlite_Schema extends Horde_Db_Adapter_Base_Schema
     {
         $this->_clearTableCache($tableName);
 
+        $default = is_null($default) ? 'null' : '"' . $default . '"';
         return $this->_alterTable($tableName, array(),
-            create_function('$definition', '$definition["'.$columnName.'"]->setDefault("'.$default.'");'));
+            create_function('$definition', '$definition["'.$columnName.'"]->setDefault('.$default.');'));
     }
 
     /**