SQL   A
last analyzed

Complexity

Total Complexity 17

Size/Duplication

Total Lines 213
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 1

Importance

Changes 3
Bugs 2 Features 0
Metric Value
wmc 17
c 3
b 2
f 0
lcom 0
cbo 1
dl 0
loc 213
rs 10

15 Methods

Rating   Name   Duplication   Size   Complexity  
A limit() 0 9 2
A explain() 0 4 1
A random() 0 4 1
A db_list() 0 4 1
A table_list() 0 9 2
A system_table_list() 0 5 1
A view_list() 0 4 1
A trigger_list() 0 4 1
A function_list() 0 4 1
A procedure_list() 0 4 1
A sequence_list() 0 4 1
A type_list() 0 4 1
A column_list() 0 4 1
A fk_list() 0 17 1
A index_list() 0 4 1
1
<?php
2
/**
3
 * Query
4
 *
5
 * Free Query Builder / Database Abstraction Layer
6
 *
7
 * @package		Query
8
 * @author		Timothy J. Warren
9
 * @copyright	Copyright (c) 2012 - 2015
10
 * @link 		https://github.com/aviat4ion/Query
11
 * @license		http://philsturgeon.co.uk/code/dbad-license
12
 */
13
14
// --------------------------------------------------------------------------
15
16
namespace Query\Drivers\Mysql;
17
18
/**
19
 * MySQL specifc SQL
20
 *
21
 * @package Query
22
 * @subpackage Drivers
23
 */
24
class SQL extends \Query\AbstractSQL {
25
26
	/**
27
	 * Limit clause
28
	 *
29
	 * @param string $sql
30
	 * @param int $limit
31
	 * @param int $offset
32
	 * @return string
33
	 */
34
	public function limit($sql, $limit, $offset=FALSE)
35
	{
36
		if ( ! is_numeric($offset))
37
		{
38
			return $sql." LIMIT {$limit}";
39
		}
40
41
		return $sql." LIMIT {$offset}, {$limit}";
42
	}
43
44
	// --------------------------------------------------------------------------
45
46
	/**
47
	 * Get the query plan for the sql query
48
	 *
49
	 * @param string $sql
50
	 * @return string
51
	 */
52
	public function explain($sql)
53
	{
54
		return "EXPLAIN EXTENDED {$sql}";
55
	}
56
57
	// --------------------------------------------------------------------------
58
59
	/**
60
	 * Random ordering keyword
61
	 *
62
	 * @return string
63
	 */
64
	public function random()
65
	{
66
		return ' RAND() DESC';
67
	}
68
69
	// --------------------------------------------------------------------------
70
71
	/**
72
	 * Returns sql to list other databases
73
	 *
74
	 * @return string
75
	 */
76
	public function db_list()
77
	{
78
		return "SHOW DATABASES WHERE `Database` NOT IN ('information_schema','mysql')";
79
	}
80
81
	// --------------------------------------------------------------------------
82
83
	/**
84
	 * Returns sql to list tables
85
	 *
86
	 * @param string $database
87
	 * @return string
88
	 */
89
	public function table_list($database='')
90
	{
91
		if ( ! empty($database))
92
		{
93
			return "SHOW TABLES FROM `{$database}`";
94
		}
95
96
		return 'SHOW TABLES';
97
	}
98
99
	// --------------------------------------------------------------------------
100
101
	/**
102
	 * Overridden in MySQL class
103
	 *
104
	 * @return string
105
	 */
106
	public function system_table_list()
107
	{
108
		return 'SELECT `TABLE_NAME` FROM `information_schema`.`TABLES`
109
			WHERE `TABLE_SCHEMA`=\'information_schema\'';
110
	}
111
112
	// --------------------------------------------------------------------------
113
114
	/**
115
	 * Returns sql to list views
116
	 *
117
	 * @return string
118
	 */
119
	public function view_list()
120
	{
121
		return 'SELECT `table_name` FROM `information_schema`.`views`';
122
	}
123
124
	// --------------------------------------------------------------------------
125
126
	/**
127
	 * Returns sql to list triggers
128
	 *
129
	 * @return string
130
	 */
131
	public function trigger_list()
132
	{
133
		return 'SHOW TRIGGERS';
134
	}
135
136
	// --------------------------------------------------------------------------
137
138
	/**
139
	 * Return sql to list functions
140
	 *
141
	 * @return string
142
	 */
143
	public function function_list()
144
	{
145
		return 'SHOW FUNCTION STATUS';
146
	}
147
148
	// --------------------------------------------------------------------------
149
150
	/**
151
	 * Return sql to list stored procedures
152
	 *
153
	 * @return string
154
	 */
155
	public function procedure_list()
156
	{
157
		return 'SHOW PROCEDURE STATUS';
158
	}
159
160
	// --------------------------------------------------------------------------
161
162
	/**
163
	 * Return sql to list sequences
164
	 *
165
	 * @return NULL
166
	 */
167
	public function sequence_list()
168
	{
169
		return NULL;
170
	}
171
172
	// --------------------------------------------------------------------------
173
174
	/**
175
	 * SQL to show list of field types
176
	 *
177
	 * @return string
178
	 */
179
	public function type_list()
180
	{
181
		return "SELECT DISTINCT `DATA_TYPE` FROM `information_schema`.`COLUMNS`";
182
	}
183
184
	// --------------------------------------------------------------------------
185
186
	/**
187
	 * SQL to show infromation about columns in a table
188
	 *
189
	 * @param string $table
190
	 * @return string
191
	 */
192
	public function column_list($table)
193
	{
194
		return "SHOW FULL COLUMNS FROM {$table}";
195
	}
196
197
	// --------------------------------------------------------------------------
198
199
	/**
200
	 * Get the list of foreign keys for the current
201
	 * table
202
	 *
203
	 * @param string $table
204
	 * @return string
205
	 */
206
	public function fk_list($table)
207
	{
208
		return <<<SQL
209
			SELECT DISTINCT `kcu`.`COLUMN_NAME` as `child_column`,
210
					`kcu`.`REFERENCED_TABLE_NAME` as `parent_table`,
211
					`kcu`.`REFERENCED_COLUMN_NAME` as `parent_column`,
212
					`rc`.`UPDATE_RULE` AS `update`,
213
					`rc`.`DELETE_RULE` AS `delete`
214
			FROM `INFORMATION_SCHEMA`.`TABLE_CONSTRAINTS` `tc`
215
			INNER JOIN `INFORMATION_SCHEMA`.`KEY_COLUMN_USAGE` `kcu`
216
				ON `kcu`.`CONSTRAINT_NAME`=`tc`.`CONSTRAINT_NAME`
217
			INNER JOIN `INFORMATION_SCHEMA`.`REFERENTIAL_CONSTRAINTS` `rc`
218
				ON `rc`.`CONSTRAINT_NAME`=`tc`.`CONSTRAINT_NAME`
219
			WHERE `tc`.`CONSTRAINT_TYPE`='FOREIGN KEY'
220
			AND `tc`.`TABLE_NAME`='{$table}'
221
SQL;
222
	}
223
224
	// --------------------------------------------------------------------------
225
226
	/**
227
	 * Get the list of indexes for the current table
228
	 *
229
	 * @param string $table
230
	 * @return array
231
	 */
232
	public function index_list($table)
233
	{
234
		return "SHOW INDEX IN {$table}";
235
	}
236
}
237
//End of mysql_sql.php