From b67277b8063b0e6aab051ce269194255ef83e808 Mon Sep 17 00:00:00 2001 From: Andrey Andreev Date: Mon, 12 Nov 2012 12:51:14 +0200 Subject: Bring back the AFTER clause for DB Forge add_column() (it was temporarily removed due to multiple inconsistencies with other drivers) This commit also fixes issue #1988. Also added support for the FIRST clause (again, MySQL and CUBRID only). --- user_guide_src/source/changelog.rst | 3 +- user_guide_src/source/database/forge.rst | 23 +++++++++++++--- user_guide_src/source/installation/upgrade_300.rst | 32 +++++++++++++++++++++- 3 files changed, 52 insertions(+), 6 deletions(-) (limited to 'user_guide_src/source') diff --git a/user_guide_src/source/changelog.rst b/user_guide_src/source/changelog.rst index f3509d00a..792969cf4 100644 --- a/user_guide_src/source/changelog.rst +++ b/user_guide_src/source/changelog.rst @@ -168,7 +168,8 @@ Release Date: Not Released - :doc:`Database Forge ` changes include: - Added an optional second parameter to ``drop_table()`` that allows adding the **IF EXISTS** condition, which is no longer the default. - Added support for passing a custom database object to the loader. - - Removed the optional AFTER clause from method ``add_column()``. + - Deprecated ``add_column()``'s third method. *AFTER* clause should now be added to the field definition array instead. + - Added support for usage of the *FIRST* clause in ``add_column()`` for MySQL and CUBRID. - Overall improved support for all of the drivers. - :doc:`Database Utility ` chages include: - Added support for passing a custom database object to the loader. diff --git a/user_guide_src/source/database/forge.rst b/user_guide_src/source/database/forge.rst index de5748b45..ca904ed00 100644 --- a/user_guide_src/source/database/forge.rst +++ b/user_guide_src/source/database/forge.rst @@ -231,7 +231,7 @@ Modifying Tables **************** $this->dbforge->add_column() -============================= +============================ The ``add_column()`` method is used to modify an existing table. It accepts the same field array as above, and can be used for an unlimited @@ -243,10 +243,25 @@ number of additional fields. 'preferences' => array('type' => 'TEXT') ); $this->dbforge->add_column('table_name', $fields); - // gives ALTER TABLE table_name ADD preferences TEXT + // Executes: ALTER TABLE table_name ADD preferences TEXT + +If you are using MySQL or CUBIRD, then you can take advantage of their +AFTER and FIRST clauses to position the new column. + +Examples:: + + // Will place the new column after the `another_field` column: + $fields = array( + 'preferences' => array('type' => 'TEXT', 'after' => 'another_field') + ); + + // Will place the new column at the start of the table definition: + $fields = array( + 'preferences' => array('type' => 'TEXT', 'first' => TRUE) + ); $this->dbforge->drop_column() -============================== +============================= Used to remove a column from a table. @@ -256,7 +271,7 @@ Used to remove a column from a table. $this->dbforge->modify_column() -================================ +=============================== The usage of this method is identical to ``add_column()``, except it alters an existing column rather than adding a new one. In order to diff --git a/user_guide_src/source/installation/upgrade_300.rst b/user_guide_src/source/installation/upgrade_300.rst index 2bfb1bdbf..0af21b11e 100644 --- a/user_guide_src/source/installation/upgrade_300.rst +++ b/user_guide_src/source/installation/upgrade_300.rst @@ -284,4 +284,34 @@ should write '-' instead of 'dash' and '_' instead of 'underscore'. in CodeIgniter 3.1+. .. note:: These options are still available, but you're strongly encouraged to remove their usage - sooner rather than later. \ No newline at end of file + sooner rather than later. + +Database Forge method add_column() with an AFTER clause +======================================================= + +If you have used the **third parameter** for :doc:`Database Forge ` method +``add_column()`` to add a field for an AFTER clause, then you should change its usage. + +That third parameter has been deprecated and scheduled for removal in CodeIgniter 3.1+. + +You should now put AFTER clause field names in the field definition array instead:: + + // Old usage: + $field = array( + 'new_field' => array('type' => 'TEXT') + ); + + $this->dbforge->add_column('table_name', $field, 'another_field'); + + // New usage: + $field = array( + 'new_field' => array('type' => 'TEXT', 'after' => 'another_field') + ); + + $this->dbforge->add_column('table_name', $field); + +.. note:: The parameter is still available, but you're strongly encouraged to remove its usage + sooner rather than later. + +.. note:: This is for MySQL and CUBRID databases only! Other drivers don't support this + clause and will silently ignore it. -- cgit v1.2.3-24-g4f1b