Skip to content

Commit d1f0294

Browse files
authored
Merge pull request #327 from matthias-Q/mysql_extract_functions
feat: parse mysql extract function
2 parents 333ff92 + b9a1ead commit d1f0294

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed

grammar.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2988,6 +2988,17 @@ module.exports = grammar({
29882988
optional($.order_by)
29892989
)
29902990
),
2991+
// https://dev.mysql.com/doc/refman/8.4/en/date-and-time-functions.html#function_extract
2992+
paren_list(
2993+
seq(
2994+
field(
2995+
'unit',
2996+
$.object_reference,
2997+
),
2998+
$.keyword_from,
2999+
$.term
3000+
)
3001+
),
29913002
// _aggregate_function, e.g. group_concat
29923003
wrapped_in_parenthesis(
29933004
seq(

test/corpus/functions.txt

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,58 @@ FROM table_a;
192192
(object_reference
193193
name: (identifier))))))
194194

195+
================================================================================
196+
MYSQL period_diff
197+
================================================================================
198+
199+
SELECT
200+
PERIOD_DIFF (
201+
EXTRACT (YEAR_MONTH FROM NOW()), EXTRACT(YEAR_MONTH FROM t.a)
202+
) AS diffA
203+
FROM mytable;
204+
205+
--------------------------------------------------------------------------------
206+
207+
(program
208+
(statement
209+
(select
210+
(keyword_select)
211+
(select_expression
212+
(term
213+
(invocation
214+
(object_reference
215+
(identifier))
216+
(term
217+
(invocation
218+
(object_reference
219+
(identifier))
220+
(object_reference
221+
(identifier))
222+
(keyword_from)
223+
(term
224+
(invocation
225+
(object_reference
226+
(identifier))))))
227+
(term
228+
(invocation
229+
(object_reference
230+
(identifier))
231+
(object_reference
232+
(identifier))
233+
(keyword_from)
234+
(term
235+
(field
236+
(object_reference
237+
(identifier))
238+
(identifier))))))
239+
(keyword_as)
240+
(identifier))))
241+
(from
242+
(keyword_from)
243+
(relation
244+
(object_reference
245+
(identifier))))))
246+
195247
================================================================================
196248
GROUP CONCAT
197249
================================================================================

0 commit comments

Comments
 (0)