Subversion-Projekte lars-tiefland.ci

Revision

Revision 2257 | 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
 *
2414 lars 9
 * Copyright (c) 2014 - 2019, 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/)
2414 lars 32
 * @copyright	Copyright (c) 2014 - 2019, British Columbia Institute of Technology (https://bcit.ca/)
33
 * @license	https://opensource.org/licenses/MIT	MIT License
68 lars 34
 * @link	https://codeigniter.com
35
 * @since	Version 1.3.0
36
 * @filesource
37
 */
38
defined('BASEPATH') OR exit('No direct script access allowed');
39
 
40
/**
41
 * MS SQL Forge Class
42
 *
43
 * @package		CodeIgniter
44
 * @subpackage	Drivers
45
 * @category	Database
46
 * @author		EllisLab Dev Team
47
 * @link		https://codeigniter.com/user_guide/database/
48
 */
49
class CI_DB_mssql_forge extends CI_DB_forge {
50
 
51
	/**
52
	 * CREATE TABLE IF statement
53
	 *
54
	 * @var	string
55
	 */
56
	protected $_create_table_if	= "IF NOT EXISTS (SELECT * FROM sysobjects WHERE ID = object_id(N'%s') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)\nCREATE TABLE";
57
 
58
	/**
59
	 * DROP TABLE IF statement
60
	 *
61
	 * @var	string
62
	 */
63
	protected $_drop_table_if	= "IF EXISTS (SELECT * FROM sysobjects WHERE ID = object_id(N'%s') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)\nDROP TABLE";
64
 
65
	/**
66
	 * UNSIGNED support
67
	 *
68
	 * @var	array
69
	 */
70
	protected $_unsigned		= array(
71
		'TINYINT'	=> 'SMALLINT',
72
		'SMALLINT'	=> 'INT',
73
		'INT'		=> 'BIGINT',
74
		'REAL'		=> 'FLOAT'
75
	);
76
 
77
	// --------------------------------------------------------------------
78
 
79
	/**
80
	 * ALTER TABLE
81
	 *
82
	 * @param	string	$alter_type	ALTER type
83
	 * @param	string	$table		Table name
84
	 * @param	mixed	$field		Column definition
85
	 * @return	string|string[]
86
	 */
87
	protected function _alter_table($alter_type, $table, $field)
88
	{
89
		if (in_array($alter_type, array('ADD', 'DROP'), TRUE))
90
		{
91
			return parent::_alter_table($alter_type, $table, $field);
92
		}
93
 
94
		$sql = 'ALTER TABLE '.$this->db->escape_identifiers($table).' ALTER COLUMN ';
95
		$sqls = array();
96
		for ($i = 0, $c = count($field); $i < $c; $i++)
97
		{
98
			$sqls[] = $sql.$this->_process_column($field[$i]);
99
		}
100
 
101
		return $sqls;
102
	}
103
 
104
	// --------------------------------------------------------------------
105
 
106
	/**
107
	 * Field attribute TYPE
108
	 *
109
	 * Performs a data type mapping between different databases.
110
	 *
111
	 * @param	array	&$attributes
112
	 * @return	void
113
	 */
114
	protected function _attr_type(&$attributes)
115
	{
116
		if (isset($attributes['CONSTRAINT']) && strpos($attributes['TYPE'], 'INT') !== FALSE)
117
		{
118
			unset($attributes['CONSTRAINT']);
119
		}
120
 
121
		switch (strtoupper($attributes['TYPE']))
122
		{
123
			case 'MEDIUMINT':
124
				$attributes['TYPE'] = 'INTEGER';
125
				$attributes['UNSIGNED'] = FALSE;
126
				return;
127
			case 'INTEGER':
128
				$attributes['TYPE'] = 'INT';
129
				return;
130
			default: return;
131
		}
132
	}
133
 
134
	// --------------------------------------------------------------------
135
 
136
	/**
137
	 * Field attribute AUTO_INCREMENT
138
	 *
139
	 * @param	array	&$attributes
140
	 * @param	array	&$field
141
	 * @return	void
142
	 */
143
	protected function _attr_auto_increment(&$attributes, &$field)
144
	{
145
		if ( ! empty($attributes['AUTO_INCREMENT']) && $attributes['AUTO_INCREMENT'] === TRUE && stripos($field['type'], 'int') !== FALSE)
146
		{
147
			$field['auto_increment'] = ' IDENTITY(1,1)';
148
		}
149
	}
150
 
151
}