1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
<?php namespace Illuminate\Database\Query\Grammars;
use Illuminate\Database\Query\Builder;
class MySqlGrammar extends Grammar {
/** * The components that make up a select clause. * * @var array */ protected $selectComponents = array( 'aggregate', 'columns', 'from', 'joins', 'wheres', 'groups', 'havings', 'orders', 'limit', 'offset', 'lock', );
/** * Compile a select query into SQL. * * @param \Illuminate\Database\Query\Builder * @return string */ public function compileSelect(Builder $query) { $sql = parent::compileSelect($query);
if ($query->unions) { $sql = '('.$sql.') '.$this->compileUnions($query); }
return $sql; }
/** * Compile a single union statement. * * @param array $union * @return string */ protected function compileUnion(array $union) { $joiner = $union['all'] ? ' union all ' : ' union ';
return $joiner.'('.$union['query']->toSql().')'; }
/** * Compile the lock into SQL. * * @param \Illuminate\Database\Query\Builder $query * @param bool|string $value * @return string */ protected function compileLock(Builder $query, $value) { if (is_string($value)) return $value;
return $value ? 'for update' : 'lock in share mode'; }
/** * Compile an update statement into SQL. * * @param \Illuminate\Database\Query\Builder $query * @param array $values * @return string */ public function compileUpdate(Builder $query, $values) { $sql = parent::compileUpdate($query, $values);
if (isset($query->orders)) { $sql .= ' '.$this->compileOrders($query, $query->orders); }
if (isset($query->limit)) { $sql .= ' '.$this->compileLimit($query, $query->limit); }
return rtrim($sql); }
/** * Wrap a single string in keyword identifiers. * * @param string $value * @return string */ protected function wrapValue($value) { if ($value === '*') return $value;
return '`'.str_replace('`', '``', $value).'`'; }
}
|