Subversion Repositories Applications.papyrus

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2005 Aurelien 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, 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
 */
25
class 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 */