mssql_forge.php
Go to the documentation of this file.00001 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 class CI_DB_mssql_forge extends CI_DB_forge {
00026
00027
00028
00029
00030
00031
00032
00033
00034 function _create_database($name)
00035 {
00036 return "CREATE DATABASE ".$name;
00037 }
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048 function _drop_database($name)
00049 {
00050 return "DROP DATABASE ".$name;
00051 }
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061 function _drop_table($table)
00062 {
00063 return "DROP TABLE ".$this->db->_escape_table($table);
00064 }
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079 function _create_table($table, $fields, $primary_keys, $keys, $if_not_exists)
00080 {
00081 $sql = 'CREATE TABLE ';
00082
00083 if ($if_not_exists === TRUE)
00084 {
00085 $sql .= 'IF NOT EXISTS ';
00086 }
00087
00088 $sql .= $this->db->_escape_table($table)." (";
00089 $current_field_count = 0;
00090
00091 foreach ($fields as $field=>$attributes)
00092 {
00093
00094
00095
00096 if (is_numeric($field))
00097 {
00098 $sql .= "\n\t$attributes";
00099 }
00100 else
00101 {
00102 $attributes = array_change_key_case($attributes, CASE_UPPER);
00103
00104 $sql .= "\n\t".$this->db->_protect_identifiers($field);
00105
00106 $sql .= ' '.$attributes['TYPE'];
00107
00108 if (array_key_exists('CONSTRAINT', $attributes))
00109 {
00110 $sql .= '('.$attributes['CONSTRAINT'].')';
00111 }
00112
00113 if (array_key_exists('UNSIGNED', $attributes) && $attributes['UNSIGNED'] === TRUE)
00114 {
00115 $sql .= ' UNSIGNED';
00116 }
00117
00118 if (array_key_exists('DEFAULT', $attributes))
00119 {
00120 $sql .= ' DEFAULT \''.$attributes['DEFAULT'].'\'';
00121 }
00122
00123 if (array_key_exists('NULL', $attributes) && $attributes['NULL'] === TRUE)
00124 {
00125 $sql .= ' NULL';
00126 }
00127 else
00128 {
00129 $sql .= ' NOT NULL';
00130 }
00131
00132 if (array_key_exists('AUTO_INCREMENT', $attributes) && $attributes['AUTO_INCREMENT'] === TRUE)
00133 {
00134 $sql .= ' AUTO_INCREMENT';
00135 }
00136 }
00137
00138
00139 if (++$current_field_count < count($fields))
00140 {
00141 $sql .= ',';
00142 }
00143 }
00144
00145 if (count($primary_keys) > 0)
00146 {
00147 $primary_keys = $this->db->_protect_identifiers($primary_keys);
00148 $sql .= ",\n\tPRIMARY KEY (" . implode(', ', $primary_keys) . ")";
00149 }
00150
00151 if (is_array($keys) && count($keys) > 0)
00152 {
00153 foreach ($keys as $key)
00154 {
00155 if (is_array($key))
00156 {
00157 $key = $this->db->_protect_identifiers($key);
00158 }
00159 else
00160 {
00161 $key = array($this->db->_protect_identifiers($key));
00162 }
00163
00164 $sql .= ",\n\tFOREIGN KEY (" . implode(', ', $key) . ")";
00165 }
00166 }
00167
00168 $sql .= "\n)";
00169
00170 return $sql;
00171 }
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191 function _alter_table($alter_type, $table, $column_name, $column_definition = '', $default_value = '', $null = '', $after_field = '')
00192 {
00193 $sql = 'ALTER TABLE '.$this->db->_protect_identifiers($table)." $alter_type ".$this->db->_protect_identifiers($column_name);
00194
00195
00196 if ($alter_type == 'DROP')
00197 {
00198 return $sql;
00199 }
00200
00201 $sql .= " $column_definition";
00202
00203 if ($default_value != '')
00204 {
00205 $sql .= " DEFAULT \"$default_value\"";
00206 }
00207
00208 if ($null === NULL)
00209 {
00210 $sql .= ' NULL';
00211 }
00212 else
00213 {
00214 $sql .= ' NOT NULL';
00215 }
00216
00217 if ($after_field != '')
00218 {
00219 $sql .= ' AFTER ' . $this->db->_protect_identifiers($after_field);
00220 }
00221
00222 return $sql;
00223
00224 }
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238 function _rename_table($table_name, $new_table_name)
00239 {
00240
00241 $sql = 'ALTER TABLE '.$this->db->_protect_identifiers($table_name)." RENAME TO ".$this->db->_protect_identifiers($new_table_name);
00242 return $sql;
00243 }
00244
00245 }
00246
00247
00248