upgrade to codeigniter 1.7.2 for f12
[www-register-wizard.git] / database / drivers / postgre / postgre_forge.php
1 <?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
2 /**
3  * CodeIgniter
4  *
5  * An open source application development framework for PHP 4.3.2 or newer
6  *
7  * @package             CodeIgniter
8  * @author              ExpressionEngine Dev Team
9  * @copyright   Copyright (c) 2008 - 2009, 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  * Postgre Forge Class
20  *
21  * @category    Database
22  * @author              ExpressionEngine Dev Team
23  * @link                http://codeigniter.com/user_guide/database/
24  */
25 class CI_DB_postgre_forge extends CI_DB_forge {
26
27         /**
28          * Create database
29          *
30          * @access      private
31          * @param       string  the database name
32          * @return      bool
33          */
34         function _create_database($name)
35         {
36                 return "CREATE DATABASE ".$name;
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 "DROP DATABASE ".$name;
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\tFOREIGN KEY (" . 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 "DROP TABLE ".$this->db->_escape_identifiers($table)." CASCADE";
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 postgre_forge.php */
248 /* Location: ./system/database/drivers/postgre/postgre_forge.php */