Skip to content

Commit ef7a40d

Browse files
committed
Merge #474 - Fix #450 - Parsing insert queries with functions trims commas
Pull-request: #474 Fixes: #450 Signed-off-by: William Desportes <[email protected]>
2 parents 5ac8e6f + 90a94fc commit ef7a40d

File tree

4 files changed

+309
-1
lines changed

4 files changed

+309
-1
lines changed

src/Components/ArrayObj.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,9 @@ public static function parse(Parser $parser, TokensList $list, array $options =
124124
$ret->values[] = trim($lastValue);
125125
$lastRaw = $lastValue = '';
126126
}
127+
continue;
127128
}
128129

129-
continue;
130130
}
131131
}
132132

tests/Parser/InsertStatementTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public function insertProvider(): array
2323
{
2424
return [
2525
['parser/parseInsert'],
26+
['parser/parseInsertFunction'],
2627
['parser/parseInsertSelect'],
2728
['parser/parseInsertOnDuplicateKey'],
2829
['parser/parseInsertSetOnDuplicateKey'],
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
INSERT INTO labels(`label`)
2+
VALUES (concat('A', ' ', 'label'));
Lines changed: 305 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,305 @@
1+
{
2+
"query": "INSERT INTO labels(`label`)\nVALUES (concat('A', ' ', 'label'));",
3+
"lexer": {
4+
"@type": "PhpMyAdmin\\SqlParser\\Lexer",
5+
"str": "INSERT INTO labels(`label`)\nVALUES (concat('A', ' ', 'label'));",
6+
"len": 63,
7+
"last": 63,
8+
"list": {
9+
"@type": "PhpMyAdmin\\SqlParser\\TokensList",
10+
"tokens": [
11+
{
12+
"@type": "PhpMyAdmin\\SqlParser\\Token",
13+
"token": "INSERT",
14+
"value": "INSERT",
15+
"keyword": "INSERT",
16+
"type": 1,
17+
"flags": 35,
18+
"position": 0
19+
},
20+
{
21+
"@type": "PhpMyAdmin\\SqlParser\\Token",
22+
"token": " ",
23+
"value": " ",
24+
"keyword": null,
25+
"type": 3,
26+
"flags": 0,
27+
"position": 6
28+
},
29+
{
30+
"@type": "PhpMyAdmin\\SqlParser\\Token",
31+
"token": "INTO",
32+
"value": "INTO",
33+
"keyword": "INTO",
34+
"type": 1,
35+
"flags": 3,
36+
"position": 7
37+
},
38+
{
39+
"@type": "PhpMyAdmin\\SqlParser\\Token",
40+
"token": " ",
41+
"value": " ",
42+
"keyword": null,
43+
"type": 3,
44+
"flags": 0,
45+
"position": 11
46+
},
47+
{
48+
"@type": "PhpMyAdmin\\SqlParser\\Token",
49+
"token": "labels",
50+
"value": "labels",
51+
"keyword": null,
52+
"type": 0,
53+
"flags": 0,
54+
"position": 12
55+
},
56+
{
57+
"@type": "PhpMyAdmin\\SqlParser\\Token",
58+
"token": "(",
59+
"value": "(",
60+
"keyword": null,
61+
"type": 2,
62+
"flags": 16,
63+
"position": 18
64+
},
65+
{
66+
"@type": "PhpMyAdmin\\SqlParser\\Token",
67+
"token": "`label`",
68+
"value": "label",
69+
"keyword": null,
70+
"type": 8,
71+
"flags": 2,
72+
"position": 19
73+
},
74+
{
75+
"@type": "PhpMyAdmin\\SqlParser\\Token",
76+
"token": ")",
77+
"value": ")",
78+
"keyword": null,
79+
"type": 2,
80+
"flags": 16,
81+
"position": 26
82+
},
83+
{
84+
"@type": "PhpMyAdmin\\SqlParser\\Token",
85+
"token": "\n",
86+
"value": " ",
87+
"keyword": null,
88+
"type": 3,
89+
"flags": 0,
90+
"position": 27
91+
},
92+
{
93+
"@type": "PhpMyAdmin\\SqlParser\\Token",
94+
"token": "VALUES",
95+
"value": "VALUES",
96+
"keyword": "VALUES",
97+
"type": 1,
98+
"flags": 35,
99+
"position": 28
100+
},
101+
{
102+
"@type": "PhpMyAdmin\\SqlParser\\Token",
103+
"token": " ",
104+
"value": " ",
105+
"keyword": null,
106+
"type": 3,
107+
"flags": 0,
108+
"position": 34
109+
},
110+
{
111+
"@type": "PhpMyAdmin\\SqlParser\\Token",
112+
"token": "(",
113+
"value": "(",
114+
"keyword": null,
115+
"type": 2,
116+
"flags": 16,
117+
"position": 35
118+
},
119+
{
120+
"@type": "PhpMyAdmin\\SqlParser\\Token",
121+
"token": "concat",
122+
"value": "concat",
123+
"keyword": "CONCAT",
124+
"type": 1,
125+
"flags": 33,
126+
"position": 36
127+
},
128+
{
129+
"@type": "PhpMyAdmin\\SqlParser\\Token",
130+
"token": "(",
131+
"value": "(",
132+
"keyword": null,
133+
"type": 2,
134+
"flags": 16,
135+
"position": 42
136+
},
137+
{
138+
"@type": "PhpMyAdmin\\SqlParser\\Token",
139+
"token": "'A'",
140+
"value": "A",
141+
"keyword": null,
142+
"type": 7,
143+
"flags": 1,
144+
"position": 43
145+
},
146+
{
147+
"@type": "PhpMyAdmin\\SqlParser\\Token",
148+
"token": ",",
149+
"value": ",",
150+
"keyword": null,
151+
"type": 2,
152+
"flags": 16,
153+
"position": 46
154+
},
155+
{
156+
"@type": "PhpMyAdmin\\SqlParser\\Token",
157+
"token": " ",
158+
"value": " ",
159+
"keyword": null,
160+
"type": 3,
161+
"flags": 0,
162+
"position": 47
163+
},
164+
{
165+
"@type": "PhpMyAdmin\\SqlParser\\Token",
166+
"token": "' '",
167+
"value": " ",
168+
"keyword": null,
169+
"type": 7,
170+
"flags": 1,
171+
"position": 48
172+
},
173+
{
174+
"@type": "PhpMyAdmin\\SqlParser\\Token",
175+
"token": ",",
176+
"value": ",",
177+
"keyword": null,
178+
"type": 2,
179+
"flags": 16,
180+
"position": 51
181+
},
182+
{
183+
"@type": "PhpMyAdmin\\SqlParser\\Token",
184+
"token": " ",
185+
"value": " ",
186+
"keyword": null,
187+
"type": 3,
188+
"flags": 0,
189+
"position": 52
190+
},
191+
{
192+
"@type": "PhpMyAdmin\\SqlParser\\Token",
193+
"token": "'label'",
194+
"value": "label",
195+
"keyword": null,
196+
"type": 7,
197+
"flags": 1,
198+
"position": 53
199+
},
200+
{
201+
"@type": "PhpMyAdmin\\SqlParser\\Token",
202+
"token": ")",
203+
"value": ")",
204+
"keyword": null,
205+
"type": 2,
206+
"flags": 16,
207+
"position": 60
208+
},
209+
{
210+
"@type": "PhpMyAdmin\\SqlParser\\Token",
211+
"token": ")",
212+
"value": ")",
213+
"keyword": null,
214+
"type": 2,
215+
"flags": 16,
216+
"position": 61
217+
},
218+
{
219+
"@type": "PhpMyAdmin\\SqlParser\\Token",
220+
"token": ";",
221+
"value": ";",
222+
"keyword": null,
223+
"type": 9,
224+
"flags": 0,
225+
"position": 62
226+
},
227+
{
228+
"@type": "PhpMyAdmin\\SqlParser\\Token",
229+
"token": null,
230+
"value": null,
231+
"keyword": null,
232+
"type": 9,
233+
"flags": 0,
234+
"position": null
235+
}
236+
],
237+
"count": 25,
238+
"idx": 25
239+
},
240+
"delimiter": ";",
241+
"delimiterLen": 1,
242+
"strict": false,
243+
"errors": []
244+
},
245+
"parser": {
246+
"@type": "PhpMyAdmin\\SqlParser\\Parser",
247+
"list": {
248+
"@type": "@1"
249+
},
250+
"statements": [
251+
{
252+
"@type": "PhpMyAdmin\\SqlParser\\Statements\\InsertStatement",
253+
"into": {
254+
"@type": "PhpMyAdmin\\SqlParser\\Components\\IntoKeyword",
255+
"type": null,
256+
"dest": {
257+
"@type": "PhpMyAdmin\\SqlParser\\Components\\Expression",
258+
"database": null,
259+
"table": "labels",
260+
"column": null,
261+
"expr": "labels",
262+
"alias": null,
263+
"function": null,
264+
"subquery": null
265+
},
266+
"columns": [
267+
"label"
268+
],
269+
"values": null,
270+
"fields_options": null,
271+
"fields_keyword": null,
272+
"lines_options": null
273+
},
274+
"values": [
275+
{
276+
"@type": "PhpMyAdmin\\SqlParser\\Components\\ArrayObj",
277+
"raw": [
278+
"concat('A', ' ', 'label')"
279+
],
280+
"values": [
281+
"concat(A, , label)"
282+
]
283+
}
284+
],
285+
"set": null,
286+
"select": null,
287+
"with": null,
288+
"onDuplicateSet": null,
289+
"options": {
290+
"@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray",
291+
"options": []
292+
},
293+
"first": 0,
294+
"last": 22
295+
}
296+
],
297+
"brackets": 0,
298+
"strict": false,
299+
"errors": []
300+
},
301+
"errors": {
302+
"lexer": [],
303+
"parser": []
304+
}
305+
}

0 commit comments

Comments
 (0)