@@ -38,6 +38,19 @@ const addComments = (node: AstNode, { leading, trailing }: CommentAttachments):
38
38
return node;
39
39
};
40
40
41
+ const addCommentsToArray = (nodes: AstNode[], { leading, trailing }: CommentAttachments): AstNode[] => {
42
+ if (leading? .length ) {
43
+ const [first , ... rest ] = nodes;
44
+ nodes = [addComments (first, { leading }), ... rest];
45
+ }
46
+ if (trailing? .length ) {
47
+ const lead = nodes .slice (0 , - 1 );
48
+ const last = nodes[nodes .length - 1 ];
49
+ nodes = [... lead, addComments (last, { trailing })];
50
+ }
51
+ return nodes;
52
+ };
53
+
41
54
% }
42
55
@lexer lexer
43
56
@@ -137,10 +150,18 @@ set_operation -> %RESERVED_SET_OPERATION free_form_sql:* {%
137
150
138
151
expression_chain_ - > expression_with_comments_: + {% id % }
139
152
153
+ expression_chain - > expression _expression_with_comments: * {%
154
+ ([expr , chain ]) => [expr, ... chain]
155
+ % }
156
+
140
157
expression_with_comments_ - > expression _ {%
141
158
([expr , _ ]) => addComments (expr, { trailing: _ })
142
159
% }
143
160
161
+ _expression_with_comments - > _ expression {%
162
+ ([_ , expr ]) => addComments (expr, { leading: _ })
163
+ % }
164
+
144
165
free_form_sql - > ( asteriskless_free_form_sql | asterisk ) {% unwrap % }
145
166
146
167
asteriskless_free_form_sql - >
@@ -230,11 +251,11 @@ property_access -> expression _ %DOT _ (identifier | array_subscript | all_colum
230
251
}
231
252
% }
232
253
233
- between_predicate - > % BETWEEN _ expression _ % AND _ expression {%
254
+ between_predicate - > % BETWEEN _ expression_chain _ % AND _ expression {%
234
255
([betweenToken , _1 , expr1 , _2 , andToken , _3 , expr2 ]) => ({
235
256
type: NodeType .between_predicate ,
236
257
betweenKw: toKeywordNode (betweenToken),
237
- expr1: [ addComments (expr1, { leading: _1 , trailing: _2 })] ,
258
+ expr1: addCommentsToArray (expr1, { leading: _1 , trailing: _2 }),
238
259
andKw: toKeywordNode (andToken),
239
260
expr2: [addComments (expr2, { leading: _3 })],
240
261
})
0 commit comments