source: sourcecode/system/database/drivers/mssql/mssql_forge.php @ 1

Last change on this file since 1 was 1, checked in by dungnv, 11 years ago
File size: 5.7 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 * MS SQL Forge Class
20 *
21 * @category    Database
22 * @author              ExpressionEngine Dev Team
23 * @link                http://codeigniter.com/user_guide/database/
24 */
25class CI_DB_mssql_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         * Drop Table
57         *
58         * @access      private
59         * @return      bool
60         */
61        function _drop_table($table)
62        {
63                return "DROP TABLE ".$this->db->_escape_identifiers($table);
64        }
65
66        // --------------------------------------------------------------------
67
68        /**
69         * Create Table
70         *
71         * @access      private
72         * @param       string  the table name
73         * @param       array   the fields
74         * @param       mixed   primary key(s)
75         * @param       mixed   key(s)
76         * @param       boolean should 'IF NOT EXISTS' be added to the SQL
77         * @return      bool
78         */
79        function _create_table($table, $fields, $primary_keys, $keys, $if_not_exists)
80        {
81                $sql = 'CREATE TABLE ';
82
83                if ($if_not_exists === TRUE)
84                {
85                        $sql .= 'IF NOT EXISTS ';
86                }
87
88                $sql .= $this->db->_escape_identifiers($table)." (";
89                $current_field_count = 0;
90
91                foreach ($fields as $field=>$attributes)
92                {
93                        // Numeric field names aren't allowed in databases, so if the key is
94                        // numeric, we know it was assigned by PHP and the developer manually
95                        // entered the field information, so we'll simply add it to the list
96                        if (is_numeric($field))
97                        {
98                                $sql .= "\n\t$attributes";
99                        }
100                        else
101                        {
102                                $attributes = array_change_key_case($attributes, CASE_UPPER);
103
104                                $sql .= "\n\t".$this->db->_protect_identifiers($field);
105
106                                $sql .=  ' '.$attributes['TYPE'];
107
108                                if (array_key_exists('CONSTRAINT', $attributes))
109                                {
110                                        $sql .= '('.$attributes['CONSTRAINT'].')';
111                                }
112
113                                if (array_key_exists('UNSIGNED', $attributes) && $attributes['UNSIGNED'] === TRUE)
114                                {
115                                        $sql .= ' UNSIGNED';
116                                }
117
118                                if (array_key_exists('DEFAULT', $attributes))
119                                {
120                                        $sql .= ' DEFAULT \''.$attributes['DEFAULT'].'\'';
121                                }
122
123                                if (array_key_exists('NULL', $attributes) && $attributes['NULL'] === TRUE)
124                                {
125                                        $sql .= ' NULL';
126                                }
127                                else
128                                {
129                                        $sql .= ' NOT NULL';
130                                }
131
132                                if (array_key_exists('AUTO_INCREMENT', $attributes) && $attributes['AUTO_INCREMENT'] === TRUE)
133                                {
134                                        $sql .= ' AUTO_INCREMENT';
135                                }
136                        }
137
138                        // don't add a comma on the end of the last field
139                        if (++$current_field_count < count($fields))
140                        {
141                                $sql .= ',';
142                        }
143                }
144
145                if (count($primary_keys) > 0)
146                {
147                        $primary_keys = $this->db->_protect_identifiers($primary_keys);
148                        $sql .= ",\n\tPRIMARY KEY (" . implode(', ', $primary_keys) . ")";
149                }
150
151                if (is_array($keys) && count($keys) > 0)
152                {
153                        foreach ($keys as $key)
154                        {
155                                if (is_array($key))
156                                {
157                                        $key = $this->db->_protect_identifiers($key);
158                                }
159                                else
160                                {
161                                        $key = array($this->db->_protect_identifiers($key));
162                                }
163
164                                $sql .= ",\n\tFOREIGN KEY (" . implode(', ', $key) . ")";
165                        }
166                }
167
168                $sql .= "\n)";
169
170                return $sql;
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                // I think this syntax will work, but can find little documentation on renaming tables in MSSQL
241                $sql = 'ALTER TABLE '.$this->db->_protect_identifiers($table_name)." RENAME TO ".$this->db->_protect_identifiers($new_table_name);
242                return $sql;
243        }
244
245}
246
247/* End of file mssql_forge.php */
248/* Location: ./system/database/drivers/mssql/mssql_forge.php */
Note: See TracBrowser for help on using the repository browser.