Subversion-Projekte lars-tiefland.ci

Revision

Revision 2254 | Zur aktuellen Revision | Details | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
68 lars 1
<?php
2
/**
3
 * CodeIgniter
4
 *
5
 * An open source application development framework for PHP
6
 *
7
 * This content is released under the MIT License (MIT)
8
 *
2257 lars 9
 * Copyright (c) 2014 - 2018, British Columbia Institute of Technology
68 lars 10
 *
11
 * Permission is hereby granted, free of charge, to any person obtaining a copy
12
 * of this software and associated documentation files (the "Software"), to deal
13
 * in the Software without restriction, including without limitation the rights
14
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15
 * copies of the Software, and to permit persons to whom the Software is
16
 * furnished to do so, subject to the following conditions:
17
 *
18
 * The above copyright notice and this permission notice shall be included in
19
 * all copies or substantial portions of the Software.
20
 *
21
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27
 * THE SOFTWARE.
28
 *
29
 * @package	CodeIgniter
30
 * @author	EllisLab Dev Team
31
 * @copyright	Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/)
2257 lars 32
 * @copyright	Copyright (c) 2014 - 2018, British Columbia Institute of Technology (http://bcit.ca/)
68 lars 33
 * @license	http://opensource.org/licenses/MIT	MIT License
34
 * @link	https://codeigniter.com
35
 * @since	Version 3.0.0
36
 * @filesource
37
 */
38
defined('BASEPATH') OR exit('No direct script access allowed');
39
 
40
/**
41
 * PDO 4D Forge Class
42
 *
43
 * @category	Database
44
 * @author		EllisLab Dev Team
45
 * @link		https://codeigniter.com/user_guide/database/
46
 */
47
class CI_DB_pdo_4d_forge extends CI_DB_pdo_forge {
48
 
49
	/**
50
	 * CREATE DATABASE statement
51
	 *
52
	 * @var	string
53
	 */
54
	protected $_create_database	= 'CREATE SCHEMA %s';
55
 
56
	/**
57
	 * DROP DATABASE statement
58
	 *
59
	 * @var	string
60
	 */
61
	protected $_drop_database	= 'DROP SCHEMA %s';
62
 
63
	/**
64
	 * CREATE TABLE IF statement
65
	 *
66
	 * @var	string
67
	 */
68
	protected $_create_table_if	= 'CREATE TABLE IF NOT EXISTS';
69
 
70
	/**
71
	 * RENAME TABLE statement
72
	 *
73
	 * @var	string
74
	 */
75
	protected $_rename_table	= FALSE;
76
 
77
	/**
78
	 * DROP TABLE IF statement
79
	 *
80
	 * @var	string
81
	 */
82
	protected $_drop_table_if	= 'DROP TABLE IF EXISTS';
83
 
84
	/**
85
	 * UNSIGNED support
86
	 *
87
	 * @var	array
88
	 */
89
	protected $_unsigned		= array(
90
		'INT16'		=> 'INT',
91
		'SMALLINT'	=> 'INT',
92
		'INT'		=> 'INT64',
93
		'INT32'		=> 'INT64'
94
	);
95
 
96
	/**
97
	 * DEFAULT value representation in CREATE/ALTER TABLE statements
98
	 *
99
	 * @var	string
100
	 */
101
	protected $_default		= FALSE;
102
 
103
	// --------------------------------------------------------------------
104
 
105
	/**
106
	 * ALTER TABLE
107
	 *
108
	 * @param	string	$alter_type	ALTER type
109
	 * @param	string	$table		Table name
110
	 * @param	mixed	$field		Column definition
111
	 * @return	string|string[]
112
	 */
113
	protected function _alter_table($alter_type, $table, $field)
114
	{
115
		if (in_array($alter_type, array('ADD', 'DROP'), TRUE))
116
		{
117
			return parent::_alter_table($alter_type, $table, $field);
118
		}
119
 
120
		// No method of modifying columns is supported
121
		return FALSE;
122
	}
123
 
124
	// --------------------------------------------------------------------
125
 
126
	/**
127
	 * Process column
128
	 *
129
	 * @param	array	$field
130
	 * @return	string
131
	 */
132
	protected function _process_column($field)
133
	{
134
		return $this->db->escape_identifiers($field['name'])
135
			.' '.$field['type'].$field['length']
136
			.$field['null']
137
			.$field['unique']
138
			.$field['auto_increment'];
139
	}
140
 
141
	// --------------------------------------------------------------------
142
 
143
	/**
144
	 * Field attribute TYPE
145
	 *
146
	 * Performs a data type mapping between different databases.
147
	 *
148
	 * @param	array	&$attributes
149
	 * @return	void
150
	 */
151
	protected function _attr_type(&$attributes)
152
	{
153
		switch (strtoupper($attributes['TYPE']))
154
		{
155
			case 'TINYINT':
156
				$attributes['TYPE'] = 'SMALLINT';
157
				$attributes['UNSIGNED'] = FALSE;
158
				return;
159
			case 'MEDIUMINT':
160
				$attributes['TYPE'] = 'INTEGER';
161
				$attributes['UNSIGNED'] = FALSE;
162
				return;
163
			case 'INTEGER':
164
				$attributes['TYPE'] = 'INT';
165
				return;
166
			case 'BIGINT':
167
				$attributes['TYPE'] = 'INT64';
168
				return;
169
			default: return;
170
		}
171
	}
172
 
173
	// --------------------------------------------------------------------
174
 
175
	/**
176
	 * Field attribute UNIQUE
177
	 *
178
	 * @param	array	&$attributes
179
	 * @param	array	&$field
180
	 * @return	void
181
	 */
182
	protected function _attr_unique(&$attributes, &$field)
183
	{
184
		if ( ! empty($attributes['UNIQUE']) && $attributes['UNIQUE'] === TRUE)
185
		{
186
			$field['unique'] = ' UNIQUE';
187
 
188
			// UNIQUE must be used with NOT NULL
189
			$field['null'] = ' NOT NULL';
190
		}
191
	}
192
 
193
	// --------------------------------------------------------------------
194
 
195
	/**
196
	 * Field attribute AUTO_INCREMENT
197
	 *
198
	 * @param	array	&$attributes
199
	 * @param	array	&$field
200
	 * @return	void
201
	 */
202
	protected function _attr_auto_increment(&$attributes, &$field)
203
	{
204
		if ( ! empty($attributes['AUTO_INCREMENT']) && $attributes['AUTO_INCREMENT'] === TRUE)
205
		{
206
			if (stripos($field['type'], 'int') !== FALSE)
207
			{
208
				$field['auto_increment'] = ' AUTO_INCREMENT';
209
			}
210
			elseif (strcasecmp($field['type'], 'UUID') === 0)
211
			{
212
				$field['auto_increment'] = ' AUTO_GENERATE';
213
			}
214
		}
215
	}
216
 
217
}