source: sourcecode/system/database/drivers/oci8/oci8_forge.php @ 1

Last change on this file since 1 was 1, checked in by dungnv, 11 years ago
File size: 5.5 KB
Line 
1<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
2/**
3 * CodeIgniter
4 *
5 * An open source application development framework for PHP 5.1.6 or newer
6 *
7 * @package             CodeIgniter
8 * @author              ExpressionEngine Dev Team
9 * @copyright   Copyright (c) 2008 - 2011, EllisLab, Inc.
10 * @license             http://codeigniter.com/user_guide/license.html
11 * @link                http://codeigniter.com
12 * @since               Version 1.0
13 * @filesource
14 */
15
16// ------------------------------------------------------------------------
17
18/**
19 * Oracle Forge Class
20 *
21 * @category    Database
22 * @author              ExpressionEngine Dev Team
23 * @link                http://codeigniter.com/user_guide/database/
24 */
25class CI_DB_oci8_forge extends CI_DB_forge {
26
27        /**
28         * Create database
29         *
30         * @access      public
31         * @param       string  the database name
32         * @return      bool
33         */
34        function _create_database($name)
35        {
36                return FALSE;
37        }
38
39        // --------------------------------------------------------------------
40
41        /**
42         * Drop database
43         *
44         * @access      private
45         * @param       string  the database name
46         * @return      bool
47         */
48        function _drop_database($name)
49        {
50                return FALSE;
51        }
52
53        // --------------------------------------------------------------------
54
55        /**
56         * Create Table
57         *
58         * @access      private
59         * @param       string  the table name
60         * @param       array   the fields
61         * @param       mixed   primary key(s)
62         * @param       mixed   key(s)
63         * @param       boolean should 'IF NOT EXISTS' be added to the SQL
64         * @return      bool
65         */
66        function _create_table($table, $fields, $primary_keys, $keys, $if_not_exists)
67        {
68                $sql = 'CREATE TABLE ';
69
70                if ($if_not_exists === TRUE)
71                {
72                        $sql .= 'IF NOT EXISTS ';
73                }
74
75                $sql .= $this->db->_escape_identifiers($table)." (";
76                $current_field_count = 0;
77
78                foreach ($fields as $field=>$attributes)
79                {
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                        {
85                                $sql .= "\n\t$attributes";
86                        }
87                        else
88                        {
89                                $attributes = array_change_key_case($attributes, CASE_UPPER);
90
91                                $sql .= "\n\t".$this->db->_protect_identifiers($field);
92
93                                $sql .=  ' '.$attributes['TYPE'];
94
95                                if (array_key_exists('CONSTRAINT', $attributes))
96                                {
97                                        $sql .= '('.$attributes['CONSTRAINT'].')';
98                                }
99
100                                if (array_key_exists('UNSIGNED', $attributes) && $attributes['UNSIGNED'] === TRUE)
101                                {
102                                        $sql .= ' UNSIGNED';
103                                }
104
105                                if (array_key_exists('DEFAULT', $attributes))
106                                {
107                                        $sql .= ' DEFAULT \''.$attributes['DEFAULT'].'\'';
108                                }
109
110                                if (array_key_exists('NULL', $attributes) && $attributes['NULL'] === TRUE)
111                                {
112                                        $sql .= ' NULL';
113                                }
114                                else
115                                {
116                                        $sql .= ' NOT NULL';
117                                }
118
119                                if (array_key_exists('AUTO_INCREMENT', $attributes) && $attributes['AUTO_INCREMENT'] === TRUE)
120                                {
121                                        $sql .= ' AUTO_INCREMENT';
122                                }
123                        }
124
125                        // don't add a comma on the end of the last field
126                        if (++$current_field_count < count($fields))
127                        {
128                                $sql .= ',';
129                        }
130                }
131
132                if (count($primary_keys) > 0)
133                {
134                        $primary_keys = $this->db->_protect_identifiers($primary_keys);
135                        $sql .= ",\n\tPRIMARY KEY (" . implode(', ', $primary_keys) . ")";
136                }
137
138                if (is_array($keys) && count($keys) > 0)
139                {
140                        foreach ($keys as $key)
141                        {
142                                if (is_array($key))
143                                {
144                                        $key = $this->db->_protect_identifiers($key);
145                                }
146                                else
147                                {
148                                        $key = array($this->db->_protect_identifiers($key));
149                                }
150
151                                $sql .= ",\n\tUNIQUE COLUMNS (" . implode(', ', $key) . ")";
152                        }
153                }
154
155                $sql .= "\n)";
156
157                return $sql;
158        }
159
160        // --------------------------------------------------------------------
161
162        /**
163         * Drop Table
164         *
165         * @access      private
166         * @return      bool
167         */
168        function _drop_table($table)
169        {
170                return FALSE;
171        }
172
173        // --------------------------------------------------------------------
174
175        /**
176         * Alter table query
177         *
178         * Generates a platform-specific query so that a table can be altered
179         * Called by add_column(), drop_column(), and column_alter(),
180         *
181         * @access      private
182         * @param       string  the ALTER type (ADD, DROP, CHANGE)
183         * @param       string  the column name
184         * @param       string  the table name
185         * @param       string  the column definition
186         * @param       string  the default value
187         * @param       boolean should 'NOT NULL' be added
188         * @param       string  the field after which we should add the new field
189         * @return      object
190         */
191        function _alter_table($alter_type, $table, $column_name, $column_definition = '', $default_value = '', $null = '', $after_field = '')
192        {
193                $sql = 'ALTER TABLE '.$this->db->_protect_identifiers($table)." $alter_type ".$this->db->_protect_identifiers($column_name);
194
195                // DROP has everything it needs now.
196                if ($alter_type == 'DROP')
197                {
198                        return $sql;
199                }
200
201                $sql .= " $column_definition";
202
203                if ($default_value != '')
204                {
205                        $sql .= " DEFAULT \"$default_value\"";
206                }
207
208                if ($null === NULL)
209                {
210                        $sql .= ' NULL';
211                }
212                else
213                {
214                        $sql .= ' NOT NULL';
215                }
216
217                if ($after_field != '')
218                {
219                        $sql .= ' AFTER ' . $this->db->_protect_identifiers($after_field);
220                }
221
222                return $sql;
223
224        }
225
226        // --------------------------------------------------------------------
227
228        /**
229         * Rename a table
230         *
231         * Generates a platform-specific query so that a table can be renamed
232         *
233         * @access      private
234         * @param       string  the old table name
235         * @param       string  the new table name
236         * @return      string
237         */
238        function _rename_table($table_name, $new_table_name)
239        {
240                $sql = 'ALTER TABLE '.$this->db->_protect_identifiers($table_name)." RENAME TO ".$this->db->_protect_identifiers($new_table_name);
241                return $sql;
242        }
243
244
245}
246
247/* End of file oci8_forge.php */
248/* Location: ./system/database/drivers/oci8/oci8_forge.php */
Note: See TracBrowser for help on using the repository browser.