diff options
author | Andrey Andreev <narf@devilix.net> | 2016-11-22 12:23:33 +0100 |
---|---|---|
committer | Andrey Andreev <narf@devilix.net> | 2016-11-22 12:23:33 +0100 |
commit | 21b7a2a2d00bd5645b2ca1afcfa4098e207292a4 (patch) | |
tree | 2d53b72677b4890e843af0e9d92a9358295b141a | |
parent | 8d11232616fdf984ff8b9bb295693bdea91d7d8e (diff) |
Add support for CURRENT_TIMESTAMP (and similar) defaults to date/time fields in DB Forge
As requested in #4852
-rw-r--r-- | system/database/DB_forge.php | 36 | ||||
-rw-r--r-- | user_guide_src/source/changelog.rst | 6 |
2 files changed, 29 insertions, 13 deletions
diff --git a/system/database/DB_forge.php b/system/database/DB_forge.php index ed6f4b672..fe81d0510 100644 --- a/system/database/DB_forge.php +++ b/system/database/DB_forge.php @@ -894,21 +894,33 @@ abstract class CI_DB_forge { return; } - if (array_key_exists('DEFAULT', $attributes)) + if ( ! array_key_exists('DEFAULT', $attributes)) { - if ($attributes['DEFAULT'] === NULL) - { - $field['default'] = empty($this->_null) ? '' : $this->_default.$this->_null; + return; + } - // Override the NULL attribute if that's our default - $attributes['NULL'] = TRUE; - $field['null'] = empty($this->_null) ? '' : ' '.$this->_null; - } - else - { - $field['default'] = $this->_default.$this->db->escape($attributes['DEFAULT']); - } + if ($attributes['DEFAULT'] === NULL) + { + $field['default'] = empty($this->_null) ? '' : $this->_default.$this->_null; + + // Override the NULL attribute if that's our default + $attributes['NULL'] = TRUE; + $field['null'] = empty($this->_null) ? '' : ' '.$this->_null; + return; } + + // White-list CURRENT_TIMESTAMP & similar (e.g. Oracle has stuff like SYSTIMESTAMP) defaults for date/time fields + if ( + isset($attributes['TYPE']) + && (stripos($attributes['TYPE'], 'time') !== FALSE || stripos($attributes['TYPE'], 'date') !== FALSE) + && (stripos($attributes['DEFAULT'], 'time') !== FALSE || stripos($attributes['DEFAULT'], 'date') !== FALSE) + ) + { + $field['default'] = $this->_default.$attributes['DEFAULT']; + return; + } + + $field['default'] = $this->_default.$this->db->escape($attributes['DEFAULT']); } // -------------------------------------------------------------------- diff --git a/user_guide_src/source/changelog.rst b/user_guide_src/source/changelog.rst index 9c3058ce5..692d06833 100644 --- a/user_guide_src/source/changelog.rst +++ b/user_guide_src/source/changelog.rst @@ -31,12 +31,16 @@ Release Date: Not Released - Changed method ``clear()`` to also reset captions. -- Database +- :doc:`Database <database/index>` - Changed method ``initialize()`` to return void and instead throw a ``RuntimeException`` in case of failure. - Changed method ``db_connect()`` to always set the connection character set (if supported by the driver) and to fail if it can't. - Removed method ``db_set_charset()`` and the ability to change a connection character set at runtime. + - :doc:`Database Forge <database/forge>`: + + - Added support for declaring date/time type fields default values as ``CURRENT_TIMESTAMP`` and similar. + - Helpers - Added new function :php:func:`ordinal_format()` to :doc:`Inflector Helper <helpers/inflector_helper>`. |