Skip to content

Commit 3315821

Browse files
authored
Merge pull request m-novikov#53 from DerekStride/derek/various-bugfixes
Count & IS / IS NOT fixes
2 parents d2ddcba + 0bb9942 commit 3315821

File tree

5 files changed

+69598
-68968
lines changed

5 files changed

+69598
-68968
lines changed

grammar.js

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ module.exports = grammar({
150150

151151
_similar_to: $ => seq($.keyword_similar, $.keyword_to),
152152
_not_similar_to: $ => seq($.keyword_not, $.keyword_similar, $.keyword_to),
153+
is_not: $ => seq($.keyword_is, $.keyword_not),
153154
_not_like: $ => seq($.keyword_not, $.keyword_like),
154155
_temporary: $ => choice($.keyword_temp, $.keyword_temporary),
155156
_not_null: $ => seq($.keyword_not, $.keyword_null),
@@ -1008,7 +1009,7 @@ module.exports = grammar({
10081009
'(',
10091010
seq(
10101011
optional($.keyword_distinct),
1011-
field('parameter', $._expression),
1012+
field('parameter', choice($._expression, $.all_fields)),
10121013
),
10131014
')',
10141015
),
@@ -1377,6 +1378,8 @@ module.exports = grammar({
13771378
[$._not_similar_to, 'pattern_matching'],
13781379
[seq($.keyword_is, $.keyword_distinct, $.keyword_from), 'binary_relation'],
13791380
[seq($.keyword_is, $.keyword_not, $.keyword_distinct, $.keyword_from), 'binary_relation'],
1381+
[$.keyword_is, 'binary_relation'],
1382+
[$.is_not, 'binary_relation'],
13801383
[$.keyword_and, 'clause_connective'],
13811384
[$.keyword_or, 'clause_connective'],
13821385
[$.keyword_in, 'binary_in'],
@@ -1387,17 +1390,6 @@ module.exports = grammar({
13871390
field('right', $._expression)
13881391
))
13891392
),
1390-
seq(
1391-
$._expression,
1392-
$.keyword_is,
1393-
choice(
1394-
$.keyword_null,
1395-
$._not_null,
1396-
$.keyword_true,
1397-
$.keyword_false,
1398-
),
1399-
),
1400-
// TODO exists/not exists (subquery)
14011393
),
14021394

14031395
_expression: $ => choice(

src/grammar.json

Lines changed: 89 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,19 @@
509509
}
510510
]
511511
},
512+
"is_not": {
513+
"type": "SEQ",
514+
"members": [
515+
{
516+
"type": "SYMBOL",
517+
"name": "keyword_is"
518+
},
519+
{
520+
"type": "SYMBOL",
521+
"name": "keyword_not"
522+
}
523+
]
524+
},
512525
"_not_like": {
513526
"type": "SEQ",
514527
"members": [
@@ -4303,8 +4316,17 @@
43034316
"type": "FIELD",
43044317
"name": "parameter",
43054318
"content": {
4306-
"type": "SYMBOL",
4307-
"name": "_expression"
4319+
"type": "CHOICE",
4320+
"members": [
4321+
{
4322+
"type": "SYMBOL",
4323+
"name": "_expression"
4324+
},
4325+
{
4326+
"type": "SYMBOL",
4327+
"name": "all_fields"
4328+
}
4329+
]
43084330
}
43094331
}
43104332
]
@@ -5997,7 +6019,7 @@
59976019
},
59986020
{
59996021
"type": "PREC_LEFT",
6000-
"value": "clause_connective",
6022+
"value": "binary_relation",
60016023
"content": {
60026024
"type": "SEQ",
60036025
"members": [
@@ -6014,7 +6036,7 @@
60146036
"name": "operator",
60156037
"content": {
60166038
"type": "SYMBOL",
6017-
"name": "keyword_and"
6039+
"name": "keyword_is"
60186040
}
60196041
},
60206042
{
@@ -6030,7 +6052,7 @@
60306052
},
60316053
{
60326054
"type": "PREC_LEFT",
6033-
"value": "clause_connective",
6055+
"value": "binary_relation",
60346056
"content": {
60356057
"type": "SEQ",
60366058
"members": [
@@ -6047,7 +6069,7 @@
60476069
"name": "operator",
60486070
"content": {
60496071
"type": "SYMBOL",
6050-
"name": "keyword_or"
6072+
"name": "is_not"
60516073
}
60526074
},
60536075
{
@@ -6063,7 +6085,7 @@
60636085
},
60646086
{
60656087
"type": "PREC_LEFT",
6066-
"value": "binary_in",
6088+
"value": "clause_connective",
60676089
"content": {
60686090
"type": "SEQ",
60696091
"members": [
@@ -6080,7 +6102,7 @@
60806102
"name": "operator",
60816103
"content": {
60826104
"type": "SYMBOL",
6083-
"name": "keyword_in"
6105+
"name": "keyword_and"
60846106
}
60856107
},
60866108
{
@@ -6095,38 +6117,70 @@
60956117
}
60966118
},
60976119
{
6098-
"type": "SEQ",
6099-
"members": [
6100-
{
6101-
"type": "SYMBOL",
6102-
"name": "_expression"
6103-
},
6104-
{
6105-
"type": "SYMBOL",
6106-
"name": "keyword_is"
6107-
},
6108-
{
6109-
"type": "CHOICE",
6110-
"members": [
6111-
{
6120+
"type": "PREC_LEFT",
6121+
"value": "clause_connective",
6122+
"content": {
6123+
"type": "SEQ",
6124+
"members": [
6125+
{
6126+
"type": "FIELD",
6127+
"name": "left",
6128+
"content": {
61126129
"type": "SYMBOL",
6113-
"name": "keyword_null"
6114-
},
6115-
{
6130+
"name": "_expression"
6131+
}
6132+
},
6133+
{
6134+
"type": "FIELD",
6135+
"name": "operator",
6136+
"content": {
61166137
"type": "SYMBOL",
6117-
"name": "_not_null"
6118-
},
6119-
{
6138+
"name": "keyword_or"
6139+
}
6140+
},
6141+
{
6142+
"type": "FIELD",
6143+
"name": "right",
6144+
"content": {
61206145
"type": "SYMBOL",
6121-
"name": "keyword_true"
6122-
},
6123-
{
6146+
"name": "_expression"
6147+
}
6148+
}
6149+
]
6150+
}
6151+
},
6152+
{
6153+
"type": "PREC_LEFT",
6154+
"value": "binary_in",
6155+
"content": {
6156+
"type": "SEQ",
6157+
"members": [
6158+
{
6159+
"type": "FIELD",
6160+
"name": "left",
6161+
"content": {
61246162
"type": "SYMBOL",
6125-
"name": "keyword_false"
6163+
"name": "_expression"
61266164
}
6127-
]
6128-
}
6129-
]
6165+
},
6166+
{
6167+
"type": "FIELD",
6168+
"name": "operator",
6169+
"content": {
6170+
"type": "SYMBOL",
6171+
"name": "keyword_in"
6172+
}
6173+
},
6174+
{
6175+
"type": "FIELD",
6176+
"name": "right",
6177+
"content": {
6178+
"type": "SYMBOL",
6179+
"name": "_expression"
6180+
}
6181+
}
6182+
]
6183+
}
61306184
}
61316185
]
61326186
},

src/node-types.json

Lines changed: 27 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1360,6 +1360,10 @@
13601360
"multiple": false,
13611361
"required": true,
13621362
"types": [
1363+
{
1364+
"type": "all_fields",
1365+
"named": true
1366+
},
13631367
{
13641368
"type": "binary_expression",
13651369
"named": true
@@ -2369,6 +2373,25 @@
23692373
}
23702374
}
23712375
},
2376+
{
2377+
"type": "is_not",
2378+
"named": true,
2379+
"fields": {},
2380+
"children": {
2381+
"multiple": true,
2382+
"required": true,
2383+
"types": [
2384+
{
2385+
"type": "keyword_is",
2386+
"named": true
2387+
},
2388+
{
2389+
"type": "keyword_not",
2390+
"named": true
2391+
}
2392+
]
2393+
}
2394+
},
23722395
{
23732396
"type": "join",
23742397
"named": true,
@@ -2981,6 +3004,10 @@
29813004
"type": ">=",
29823005
"named": false
29833006
},
3007+
{
3008+
"type": "is_not",
3009+
"named": true
3010+
},
29843011
{
29853012
"type": "keyword_and",
29863013
"named": true
@@ -3077,80 +3104,6 @@
30773104
}
30783105
]
30793106
}
3080-
},
3081-
"children": {
3082-
"multiple": true,
3083-
"required": false,
3084-
"types": [
3085-
{
3086-
"type": "binary_expression",
3087-
"named": true
3088-
},
3089-
{
3090-
"type": "case",
3091-
"named": true
3092-
},
3093-
{
3094-
"type": "cast",
3095-
"named": true
3096-
},
3097-
{
3098-
"type": "count",
3099-
"named": true
3100-
},
3101-
{
3102-
"type": "field",
3103-
"named": true
3104-
},
3105-
{
3106-
"type": "invocation",
3107-
"named": true
3108-
},
3109-
{
3110-
"type": "keyword_false",
3111-
"named": true
3112-
},
3113-
{
3114-
"type": "keyword_is",
3115-
"named": true
3116-
},
3117-
{
3118-
"type": "keyword_not",
3119-
"named": true
3120-
},
3121-
{
3122-
"type": "keyword_null",
3123-
"named": true
3124-
},
3125-
{
3126-
"type": "keyword_true",
3127-
"named": true
3128-
},
3129-
{
3130-
"type": "list",
3131-
"named": true
3132-
},
3133-
{
3134-
"type": "literal",
3135-
"named": true
3136-
},
3137-
{
3138-
"type": "parameter",
3139-
"named": true
3140-
},
3141-
{
3142-
"type": "predicate",
3143-
"named": true
3144-
},
3145-
{
3146-
"type": "subquery",
3147-
"named": true
3148-
},
3149-
{
3150-
"type": "window_function",
3151-
"named": true
3152-
}
3153-
]
31543107
}
31553108
},
31563109
{

0 commit comments

Comments
 (0)