Skip to content

Commit c9e6547

Browse files
committed
feat: Add simple WHILE
1 parent ec9e527 commit c9e6547

File tree

2 files changed

+83
-1
lines changed

2 files changed

+83
-1
lines changed

grammar.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,7 @@ module.exports = grammar({
265265
keyword_main: _ => make_keyword("main"),
266266
keyword_storage: _ => make_keyword("storage"),
267267
keyword_compression: _ => make_keyword("compression"),
268+
keyword_while: _ => make_keyword("while"),
268269

269270
keyword_trigger: _ => make_keyword('trigger'),
270271
keyword_function: _ => make_keyword("function"),
@@ -696,9 +697,16 @@ module.exports = grammar({
696697
$._ddl_statement,
697698
$._dml_write,
698699
optional_parenthesis($._dml_read),
700+
$.while_statement,
699701
),
700702
),
701703

704+
while_statement: $ => seq(
705+
$.keyword_while,
706+
optional_parenthesis($._expression),
707+
$.statement,
708+
),
709+
702710
var_declarations: $ => seq($.keyword_declare, repeat1($.var_declaration)),
703711
var_declaration: $ => seq(
704712
$.identifier,
@@ -712,7 +720,6 @@ module.exports = grammar({
712720
optional(','),
713721
),
714722

715-
716723
_ddl_statement: $ => choice(
717724
$._create_statement,
718725
$._alter_statement,

test/corpus/while.txt

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
================================================================================
2+
While in TSQL
3+
================================================================================
4+
5+
WHILE @par < 1
6+
SELECT endless FROM TABLE
7+
--------------------------------------------------------------------------------
8+
9+
(program
10+
(statement
11+
(while_statement
12+
(keyword_while)
13+
(binary_expression
14+
(field
15+
(identifier))
16+
(literal))
17+
(statement
18+
(select
19+
(keyword_select)
20+
(select_expression
21+
(term
22+
(field
23+
(identifier)))))
24+
(from
25+
(keyword_from)
26+
(relation
27+
(object_reference
28+
(identifier))))))))
29+
30+
================================================================================
31+
While in TSQL with SELECT condition
32+
================================================================================
33+
34+
WHILE (
35+
SELECT AVG(ListPrice)
36+
FROM Production.Product
37+
) < $300
38+
SELECT endless FROM TABLE
39+
--------------------------------------------------------------------------------
40+
41+
(program
42+
(statement
43+
(while_statement
44+
(keyword_while)
45+
(binary_expression
46+
(subquery
47+
(select
48+
(keyword_select)
49+
(select_expression
50+
(term
51+
(invocation
52+
(object_reference
53+
(identifier))
54+
(term
55+
(field
56+
(identifier)))))))
57+
(from
58+
(keyword_from)
59+
(relation
60+
(object_reference
61+
(identifier)
62+
(identifier)))))
63+
(parameter))
64+
(statement
65+
(select
66+
(keyword_select)
67+
(select_expression
68+
(term
69+
(field
70+
(identifier)))))
71+
(from
72+
(keyword_from)
73+
(relation
74+
(object_reference
75+
(identifier))))))))

0 commit comments

Comments
 (0)