blob: 6b8097370054b8348b3882eff56c38cfd5e53d5c [file] [log] [blame]
Andrey Andreev7f55d612012-01-26 13:44:28 +02001<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
Esen Sagynov2e087942011-08-09 23:35:01 -07002/**
3 * CodeIgniter
4 *
Phil Sturgeon07c1ac82012-03-09 17:03:37 +00005 * An open source application development framework for PHP 5.2.4 or newer
Esen Sagynov2e087942011-08-09 23:35:01 -07006 *
Derek Jonesf4a4bd82011-10-20 12:18:42 -05007 * NOTICE OF LICENSE
Andrey Andreev7f55d612012-01-26 13:44:28 +02008 *
Derek Jonesf4a4bd82011-10-20 12:18:42 -05009 * Licensed under the Open Software License version 3.0
Andrey Andreev7f55d612012-01-26 13:44:28 +020010 *
Derek Jonesf4a4bd82011-10-20 12:18:42 -050011 * This source file is subject to the Open Software License (OSL 3.0) that is
12 * bundled with this package in the files license.txt / license.rst. It is
13 * also available through the world wide web at this URL:
14 * http://opensource.org/licenses/OSL-3.0
15 * If you did not receive a copy of the license and are unable to obtain it
16 * through the world wide web, please send an email to
17 * licensing@ellislab.com so we can send you a copy immediately.
18 *
Esen Sagynov2e087942011-08-09 23:35:01 -070019 * @package CodeIgniter
Derek Jonesf4a4bd82011-10-20 12:18:42 -050020 * @author EllisLab Dev Team
Greg Aker0defe5d2012-01-01 18:46:41 -060021 * @copyright Copyright (c) 2008 - 2012, EllisLab, Inc. (http://ellislab.com/)
Derek Jonesf4a4bd82011-10-20 12:18:42 -050022 * @license http://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
Esen Sagynov2e087942011-08-09 23:35:01 -070023 * @link http://codeigniter.com
Andrey Andreevcf631202012-02-16 11:36:28 +020024 * @since Version 2.1
Esen Sagynov2e087942011-08-09 23:35:01 -070025 * @filesource
26 */
27
Esen Sagynov2e087942011-08-09 23:35:01 -070028/**
29 * CUBRID Forge Class
30 *
31 * @category Database
Esen Sagynov2ab2b1e2011-08-11 00:41:16 -070032 * @author Esen Sagynov
Esen Sagynov2e087942011-08-09 23:35:01 -070033 * @link http://codeigniter.com/user_guide/database/
34 */
35class CI_DB_cubrid_forge extends CI_DB_forge {
36
37 /**
38 * Create database
39 *
Esen Sagynov2e087942011-08-09 23:35:01 -070040 * @param string the database name
41 * @return bool
42 */
Andrey Andreev7f55d612012-01-26 13:44:28 +020043 public function _create_database($name)
Esen Sagynov2e087942011-08-09 23:35:01 -070044 {
Andrey Andreev394a3f12012-02-15 14:35:11 +020045 // CUBRID does not allow to create a database in SQL. GUI or
46 // command line tools have to be used for this purpose.
Esen Sagynov2e087942011-08-09 23:35:01 -070047 return FALSE;
48 }
49
50 // --------------------------------------------------------------------
51
52 /**
53 * Drop database
54 *
Esen Sagynov2e087942011-08-09 23:35:01 -070055 * @param string the database name
56 * @return bool
57 */
Andrey Andreev7f55d612012-01-26 13:44:28 +020058 public function _drop_database($name)
Esen Sagynov2e087942011-08-09 23:35:01 -070059 {
Andrey Andreev394a3f12012-02-15 14:35:11 +020060 // CUBRID does not allow to drop a database in SQL. GUI or
61 // command line tools have to be used for this purpose.
Esen Sagynov2e087942011-08-09 23:35:01 -070062 return FALSE;
63 }
64
65 // --------------------------------------------------------------------
66
67 /**
68 * Process Fields
69 *
Esen Sagynov2e087942011-08-09 23:35:01 -070070 * @param mixed the fields
71 * @return string
72 */
Andrey Andreev7719a032012-01-27 21:05:55 +020073 protected function _process_fields($fields)
Esen Sagynov2e087942011-08-09 23:35:01 -070074 {
75 $current_field_count = 0;
76 $sql = '';
77
Andrey Andreev7f55d612012-01-26 13:44:28 +020078 foreach ($fields as $field => $attributes)
Esen Sagynov2e087942011-08-09 23:35:01 -070079 {
80 // Numeric field names aren't allowed in databases, so if the key is
81 // numeric, we know it was assigned by PHP and the developer manually
82 // entered the field information, so we'll simply add it to the list
83 if (is_numeric($field))
84 {
Andrey Andreev7f55d612012-01-26 13:44:28 +020085 $sql .= "\n\t".$attributes;
Esen Sagynov2e087942011-08-09 23:35:01 -070086 }
87 else
88 {
89 $attributes = array_change_key_case($attributes, CASE_UPPER);
Andrey Andreev394a3f12012-02-15 14:35:11 +020090 $sql .= "\n\t".$this->db->protect_identifiers($field)
Andrey Andreevc6953f42012-01-26 14:43:16 +020091 .( ! empty($attributes['NAME']) ? ' '.$this->db->protect_identifiers($attributes['NAME']).' ' : '');
Esen Sagynov2e087942011-08-09 23:35:01 -070092
Andrey Andreev69a60932012-01-26 14:04:06 +020093 if ( ! empty($attributes['TYPE']))
Esen Sagynov2e087942011-08-09 23:35:01 -070094 {
Esen Sagynov2ab2b1e2011-08-11 00:41:16 -070095 $sql .= ' '.$attributes['TYPE'];
Esen Sagynov2e087942011-08-09 23:35:01 -070096
Andrey Andreevc6953f42012-01-26 14:43:16 +020097 if ( ! empty($attributes['CONSTRAINT']))
Esen Sagynov2e087942011-08-09 23:35:01 -070098 {
99 switch ($attributes['TYPE'])
100 {
101 case 'decimal':
102 case 'float':
103 case 'numeric':
104 $sql .= '('.implode(',', $attributes['CONSTRAINT']).')';
105 break;
Andrey Andreev394a3f12012-02-15 14:35:11 +0200106 case 'enum':
107 // Will be supported in the future as part a part of
108 // MySQL compatibility features.
Andrey Andreev7f55d612012-01-26 13:44:28 +0200109 break;
Esen Sagynov2e087942011-08-09 23:35:01 -0700110 case 'set':
111 $sql .= '("'.implode('","', $attributes['CONSTRAINT']).'")';
112 break;
113 default:
114 $sql .= '('.$attributes['CONSTRAINT'].')';
115 }
116 }
117 }
118
Andrey Andreev394a3f12012-02-15 14:35:11 +0200119 /* As of version 8.4.1 CUBRID does not support UNSIGNED INTEGER data type.
Andrey Andreev7f55d612012-01-26 13:44:28 +0200120 * Will be supported in the next release as a part of MySQL Compatibility.
121 *
Andrey Andreev69a60932012-01-26 14:04:06 +0200122 if (isset($attributes['UNSIGNED']) && $attributes['UNSIGNED'] === TRUE)
Esen Sagynov2e087942011-08-09 23:35:01 -0700123 {
Andrey Andreev7f55d612012-01-26 13:44:28 +0200124 $sql .= ' UNSIGNED';
Esen Sagynov2e087942011-08-09 23:35:01 -0700125 }
Andrey Andreev7f55d612012-01-26 13:44:28 +0200126 */
Esen Sagynov2e087942011-08-09 23:35:01 -0700127
Andrey Andreev69a60932012-01-26 14:04:06 +0200128 $sql .= (isset($attributes['DEFAULT']) ? " DEFAULT '".$attributes['DEFAULT']."'" : '')
Andrey Andreevc6953f42012-01-26 14:43:16 +0200129 .(( ! empty($attributes['NULL']) && $attributes['NULL'] === TRUE) ? ' NULL' : ' NOT NULL')
130 .(( ! empty($attributes['AUTO_INCREMENT']) && $attributes['AUTO_INCREMENT'] === TRUE) ? ' AUTO_INCREMENT' : '')
131 .(( ! empty($attributes['UNIQUE']) && $attributes['UNIQUE'] === TRUE) ? ' UNIQUE' : '');
Esen Sagynov2e087942011-08-09 23:35:01 -0700132 }
133
134 // don't add a comma on the end of the last field
135 if (++$current_field_count < count($fields))
136 {
137 $sql .= ',';
138 }
139 }
140
141 return $sql;
142 }
143
144 // --------------------------------------------------------------------
145
146 /**
147 * Create Table
148 *
Esen Sagynov2e087942011-08-09 23:35:01 -0700149 * @param string the table name
150 * @param mixed the fields
151 * @param mixed primary key(s)
152 * @param mixed key(s)
Andrey Andreev582d6a82012-03-20 15:13:49 +0200153 * @param bool should 'IF NOT EXISTS' be added to the SQL
Esen Sagynov2e087942011-08-09 23:35:01 -0700154 * @return bool
155 */
Andrey Andreev7f55d612012-01-26 13:44:28 +0200156 public function _create_table($table, $fields, $primary_keys, $keys, $if_not_exists)
Esen Sagynov2e087942011-08-09 23:35:01 -0700157 {
158 $sql = 'CREATE TABLE ';
159
Andrey Andreev394a3f12012-02-15 14:35:11 +0200160 /* As of version 8.4.1 CUBRID does not support this SQL syntax.
Esen Sagynov2e087942011-08-09 23:35:01 -0700161 if ($if_not_exists === TRUE)
162 {
Andrey Andreev7f55d612012-01-26 13:44:28 +0200163 $sql .= 'IF NOT EXISTS ';
Esen Sagynov2e087942011-08-09 23:35:01 -0700164 }
Andrey Andreev7f55d612012-01-26 13:44:28 +0200165 */
Esen Sagynov2e087942011-08-09 23:35:01 -0700166
Andrey Andreev2e430a32012-02-12 23:37:58 +0200167 $sql .= $this->db->protect_identifiers($table).' ('.$this->_process_fields($fields);
Esen Sagynov2e087942011-08-09 23:35:01 -0700168
169 // If there is a PK defined
170 if (count($primary_keys) > 0)
171 {
Andrey Andreev394a3f12012-02-15 14:35:11 +0200172 $key_name = $this->db->protect_identifiers('pk_'.$table.'_'.implode('_', $primary_keys));
Andrey Andreev7f55d612012-01-26 13:44:28 +0200173 $sql .= ",\n\tCONSTRAINT ".$key_name.' PRIMARY KEY('.implode(', ', $this->db->protect_identifiers($primary_keys)).')';
Esen Sagynov2e087942011-08-09 23:35:01 -0700174 }
175
176 if (is_array($keys) && count($keys) > 0)
177 {
178 foreach ($keys as $key)
179 {
180 if (is_array($key))
181 {
Andrey Andreev394a3f12012-02-15 14:35:11 +0200182 $key_name = $this->db->protect_identifiers('idx_'.$table.implode('_', $key));
Andrey Andreev7f55d612012-01-26 13:44:28 +0200183 $key = $this->db->protect_identifiers($key);
Esen Sagynov2e087942011-08-09 23:35:01 -0700184 }
185 else
186 {
Andrey Andreev394a3f12012-02-15 14:35:11 +0200187 $key_name = $this->db->protect_identifiers('idx_'.$table.$key);
Esen Sagynov2e087942011-08-09 23:35:01 -0700188 $key = array($key_name);
189 }
Andrey Andreev7f55d612012-01-26 13:44:28 +0200190
191 $sql .= ",\n\tKEY ".$key_name.' ('.implode(', ', $key).')';
Esen Sagynov2e087942011-08-09 23:35:01 -0700192 }
193 }
194
Andrey Andreev7f55d612012-01-26 13:44:28 +0200195 return $sql."\n);";
Esen Sagynov2e087942011-08-09 23:35:01 -0700196 }
197
198 // --------------------------------------------------------------------
199
200 /**
201 * Drop Table
202 *
Esen Sagynov2e087942011-08-09 23:35:01 -0700203 * @return string
204 */
Andrey Andreev7f55d612012-01-26 13:44:28 +0200205 public function _drop_table($table)
Esen Sagynov2e087942011-08-09 23:35:01 -0700206 {
Andrey Andreev2e430a32012-02-12 23:37:58 +0200207 return 'DROP TABLE IF EXISTS '.$this->db->protect_identifiers($table);
Esen Sagynov2e087942011-08-09 23:35:01 -0700208 }
209
210 // --------------------------------------------------------------------
211
212 /**
213 * Alter table query
214 *
215 * Generates a platform-specific query so that a table can be altered
216 * Called by add_column(), drop_column(), and column_alter(),
217 *
Esen Sagynov2e087942011-08-09 23:35:01 -0700218 * @param string the ALTER type (ADD, DROP, CHANGE)
219 * @param string the column name
220 * @param array fields
221 * @param string the field after which we should add the new field
Andrey Andreev7f55d612012-01-26 13:44:28 +0200222 * @return string
Esen Sagynov2e087942011-08-09 23:35:01 -0700223 */
Andrey Andreev7f55d612012-01-26 13:44:28 +0200224 public function _alter_table($alter_type, $table, $fields, $after_field = '')
Esen Sagynov2e087942011-08-09 23:35:01 -0700225 {
Andrey Andreev7f55d612012-01-26 13:44:28 +0200226 $sql = 'ALTER TABLE '.$this->db->protect_identifiers($table).' '.$alter_type.' ';
Esen Sagynov2e087942011-08-09 23:35:01 -0700227
228 // DROP has everything it needs now.
Andrey Andreev7f55d612012-01-26 13:44:28 +0200229 if ($alter_type === 'DROP')
Esen Sagynov2e087942011-08-09 23:35:01 -0700230 {
Andrey Andreev7f55d612012-01-26 13:44:28 +0200231 return $sql.$this->db->protect_identifiers($fields);
Esen Sagynov2e087942011-08-09 23:35:01 -0700232 }
233
Andrey Andreev7f55d612012-01-26 13:44:28 +0200234 return $sql.$this->_process_fields($fields)
235 .($after_field != '' ? ' AFTER '.$this->db->protect_identifiers($after_field) : '');
Esen Sagynov2e087942011-08-09 23:35:01 -0700236 }
237
238 // --------------------------------------------------------------------
239
240 /**
241 * Rename a table
242 *
243 * Generates a platform-specific query so that a table can be renamed
244 *
Esen Sagynov2e087942011-08-09 23:35:01 -0700245 * @param string the old table name
246 * @param string the new table name
247 * @return string
248 */
Andrey Andreev7f55d612012-01-26 13:44:28 +0200249 public function _rename_table($table_name, $new_table_name)
Esen Sagynov2e087942011-08-09 23:35:01 -0700250 {
Andrey Andreev7f55d612012-01-26 13:44:28 +0200251 return 'RENAME TABLE '.$this->db->protect_identifiers($table_name).' AS '.$this->db->protect_identifiers($new_table_name);
Esen Sagynov2e087942011-08-09 23:35:01 -0700252 }
253
254}
255
256/* End of file cubrid_forge.php */
Andrey Andreevfead0552012-03-20 15:23:06 +0200257/* Location: ./system/database/drivers/cubrid/cubrid_forge.php */