Skip to content

Commit 9970976

Browse files
Merge pull request #1893 from taozhi8833998/fix-unary-operator-redshift
fix: unary operator in redshift
2 parents 36a01d7 + a6f931d commit 9970976

File tree

13 files changed

+149
-24
lines changed

13 files changed

+149
-24
lines changed

pegjs/athena.pegjs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1754,8 +1754,8 @@ additive_operator
17541754
= "+" / "-"
17551755

17561756
multiplicative_expr
1757-
= head:primary
1758-
tail:(__ (multiplicative_operator / LOGIC_OPERATOR) __ primary)* {
1757+
= head:unary_expr_or_primary
1758+
tail:(__ (multiplicative_operator / LOGIC_OPERATOR) __ unary_expr_or_primary)* {
17591759
return createBinaryExprChain(head, tail)
17601760
}
17611761

@@ -1782,6 +1782,16 @@ primary
17821782
}
17831783
/ var_decl
17841784

1785+
unary_expr_or_primary
1786+
= primary
1787+
/ op:(unary_operator) tail:(__ unary_expr_or_primary) {
1788+
// if (op === '!') op = 'NOT'
1789+
return createUnaryExpr(op, tail[1])
1790+
}
1791+
1792+
unary_operator
1793+
= '!' / '-' / '+' / '~'
1794+
17851795
column_ref
17861796
= tbl:ident __ DOT __ col:column {
17871797
columnList.add(`select::${tbl}::${col}`);

pegjs/bigquery.pegjs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2263,8 +2263,8 @@ additive_operator
22632263
= "+" / "-"
22642264

22652265
multiplicative_expr
2266-
= head:primary
2267-
tail:(__ (multiplicative_operator / LOGIC_OPERATOR) __ primary)* {
2266+
= head:unary_expr_or_primary
2267+
tail:(__ (multiplicative_operator / LOGIC_OPERATOR) __ unary_expr_or_primary)* {
22682268
return createBinaryExprChain(head, tail)
22692269
}
22702270

@@ -2288,6 +2288,16 @@ primary
22882288
return list;
22892289
}
22902290

2291+
unary_expr_or_primary
2292+
= primary
2293+
/ op:(unary_operator) tail:(__ unary_expr_or_primary) {
2294+
// if (op === '!') op = 'NOT'
2295+
return createUnaryExpr(op, tail[1])
2296+
}
2297+
2298+
unary_operator
2299+
= '!' / '-' / '+' / '~'
2300+
22912301
interval_expr
22922302
= KW_INTERVAL __
22932303
e:expr __

pegjs/db2.pegjs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1770,8 +1770,8 @@ additive_operator
17701770
= "+" / "-"
17711771

17721772
multiplicative_expr
1773-
= head:primary
1774-
tail:(__ (multiplicative_operator / LOGIC_OPERATOR) __ primary)* {
1773+
= head:unary_expr_or_primary
1774+
tail:(__ (multiplicative_operator / LOGIC_OPERATOR) __ unary_expr_or_primary)* {
17751775
return createBinaryExprChain(head, tail)
17761776
}
17771777

@@ -1793,6 +1793,16 @@ primary
17931793
}
17941794
/ var_decl
17951795

1796+
unary_expr_or_primary
1797+
= primary
1798+
/ op:(unary_operator) tail:(__ unary_expr_or_primary) {
1799+
// if (op === '!') op = 'NOT'
1800+
return createUnaryExpr(op, tail[1])
1801+
}
1802+
1803+
unary_operator
1804+
= '!' / '-' / '+' / '~'
1805+
17961806
column_ref
17971807
= tbl:(ident __ DOT __)? col:column __ a:((DOUBLE_ARROW / SINGLE_ARROW) __ (literal_string / literal_numeric))+ __ ca:collate_expr? {
17981808
const tableName = tbl && tbl[0] || null

pegjs/flinksql.pegjs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2577,8 +2577,8 @@ additive_operator
25772577
= "+" / "-"
25782578

25792579
multiplicative_expr
2580-
= head:primary
2581-
tail:(__ (multiplicative_operator / LOGIC_OPERATOR) __ primary)* {
2580+
= head:unary_expr_or_primary
2581+
tail:(__ (multiplicative_operator / LOGIC_OPERATOR) __ unary_expr_or_primary)* {
25822582
// => binary_expr
25832583
return createBinaryExprChain(head, tail)
25842584
}
@@ -2608,6 +2608,16 @@ primary
26082608
}
26092609
}
26102610

2611+
unary_expr_or_primary
2612+
= primary
2613+
/ op:(unary_operator) tail:(__ unary_expr_or_primary) {
2614+
// if (op === '!') op = 'NOT'
2615+
return createUnaryExpr(op, tail[1])
2616+
}
2617+
2618+
unary_operator
2619+
= '!' / '-' / '+' / '~'
2620+
26112621
map_expr_item
26122622
= k:literal_string __ COMMA __ v:ident_without_kw_type {
26132623
columnList.add(`select::null::${v.value}`);

pegjs/hive.pegjs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1758,8 +1758,8 @@ additive_operator
17581758
= "+" / "-"
17591759

17601760
multiplicative_expr
1761-
= head:primary
1762-
tail:(__ (multiplicative_operator / LOGIC_OPERATOR) __ primary)* {
1761+
= head:unary_expr_or_primary
1762+
tail:(__ (multiplicative_operator / LOGIC_OPERATOR) __ unary_expr_or_primary)* {
17631763
return createBinaryExprChain(head, tail)
17641764
}
17651765

@@ -1786,6 +1786,16 @@ primary
17861786
}
17871787
/ var_decl
17881788

1789+
unary_expr_or_primary
1790+
= primary
1791+
/ op:(unary_operator) tail:(__ unary_expr_or_primary) {
1792+
// if (op === '!') op = 'NOT'
1793+
return createUnaryExpr(op, tail[1])
1794+
}
1795+
1796+
unary_operator
1797+
= '!' / '-' / '+' / '~'
1798+
17891799
column_ref
17901800
= tbl:ident __ DOT __ col:column {
17911801
columnList.add(`select::${tbl}::${col}`);

pegjs/noql.pegjs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3905,8 +3905,8 @@ additive_operator
39053905
= "+" / "-"
39063906

39073907
multiplicative_expr
3908-
= head:primary
3909-
tail:(__ (multiplicative_operator / LOGIC_OPERATOR) __ primary)* {
3908+
= head:unary_expr_or_primary
3909+
tail:(__ (multiplicative_operator / LOGIC_OPERATOR) __ unary_expr_or_primary)* {
39103910
// => binary_expr
39113911
return createBinaryExprChain(head, tail)
39123912
}
@@ -3936,6 +3936,16 @@ primary
39363936
}
39373937
}
39383938

3939+
unary_expr_or_primary
3940+
= primary
3941+
/ op:(unary_operator) tail:(__ unary_expr_or_primary) {
3942+
// if (op === '!') op = 'NOT'
3943+
return createUnaryExpr(op, tail[1])
3944+
}
3945+
3946+
unary_operator
3947+
= '!' / '-' / '+' / '~'
3948+
39393949
string_constants_escape
39403950
= 'E'i"'" __ n:single_char* __ "'" {
39413951
// => { type: 'origin'; value: string; }

pegjs/postgresql.pegjs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4087,8 +4087,8 @@ additive_operator
40874087
= "+" / "-"
40884088

40894089
multiplicative_expr
4090-
= head:primary
4091-
tail:(__ (multiplicative_operator / LOGIC_OPERATOR) __ primary)* {
4090+
= head:unary_expr_or_primary
4091+
tail:(__ (multiplicative_operator / LOGIC_OPERATOR) __ unary_expr_or_primary)* {
40924092
// => binary_expr
40934093
return createBinaryExprChain(head, tail)
40944094
}
@@ -4118,6 +4118,16 @@ primary
41184118
}
41194119
}
41204120

4121+
unary_expr_or_primary
4122+
= primary
4123+
/ op:(unary_operator) tail:(__ unary_expr_or_primary) {
4124+
// if (op === '!') op = 'NOT'
4125+
return createUnaryExpr(op, tail[1])
4126+
}
4127+
4128+
unary_operator
4129+
= '!' / '-' / '+' / '~'
4130+
41214131
string_constants_escape
41224132
= 'E'i"'" __ n:single_char* __ "'" {
41234133
// => { type: 'origin'; value: string; }

pegjs/redshift.pegjs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3941,8 +3941,8 @@ additive_operator
39413941
= "+" / "-"
39423942

39433943
multiplicative_expr
3944-
= head:primary
3945-
tail:(__ (multiplicative_operator / LOGIC_OPERATOR) __ primary)* {
3944+
= head:unary_expr_or_primary
3945+
tail:(__ (multiplicative_operator / LOGIC_OPERATOR) __ unary_expr_or_primary)* {
39463946
// => binary_expr
39473947
return createBinaryExprChain(head, tail)
39483948
}
@@ -3972,6 +3972,16 @@ primary
39723972
}
39733973
}
39743974

3975+
unary_expr_or_primary
3976+
= primary
3977+
/ op:(unary_operator) tail:(__ unary_expr_or_primary) {
3978+
// if (op === '!') op = 'NOT'
3979+
return createUnaryExpr(op, tail[1])
3980+
}
3981+
3982+
unary_operator
3983+
= '!' / '-' / '+' / '~'
3984+
39753985
string_constants_escape
39763986
= 'E'i"'" __ n:single_char* __ "'" {
39773987
// => { type: 'origin'; value: string; }

pegjs/snowflake.pegjs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3296,8 +3296,8 @@ additive_operator
32963296
= "+" / "-"
32973297

32983298
multiplicative_expr
3299-
= head:primary
3300-
tail:(__ (multiplicative_operator / LOGIC_OPERATOR) __ primary)* {
3299+
= head:unary_expr_or_primary
3300+
tail:(__ (multiplicative_operator / LOGIC_OPERATOR) __ unary_expr_or_primary)* {
33013301
// => binary_expr
33023302
return createBinaryExprChain(head, tail)
33033303
}
@@ -3327,6 +3327,16 @@ primary
33273327
}
33283328
}
33293329

3330+
unary_expr_or_primary
3331+
= primary
3332+
/ op:(unary_operator) tail:(__ unary_expr_or_primary) {
3333+
// if (op === '!') op = 'NOT'
3334+
return createUnaryExpr(op, tail[1])
3335+
}
3336+
3337+
unary_operator
3338+
= '!' / '-' / '+' / '~'
3339+
33303340
string_constants_escape
33313341
= 'E'i"'" __ n:single_char* __ "'" {
33323342
// => { type: 'origin'; value: string; }

pegjs/sqlite.pegjs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1934,8 +1934,8 @@ additive_operator
19341934
= "+" / "-"
19351935

19361936
multiplicative_expr
1937-
= head:primary
1938-
tail:(__ (multiplicative_operator / LOGIC_OPERATOR) __ primary)* {
1937+
= head:unary_expr_or_primary
1938+
tail:(__ (multiplicative_operator / LOGIC_OPERATOR) __ unary_expr_or_primary)* {
19391939
return createBinaryExprChain(head, tail)
19401940
}
19411941

@@ -1963,6 +1963,16 @@ primary
19631963
}
19641964
}
19651965

1966+
unary_expr_or_primary
1967+
= primary
1968+
/ op:(unary_operator) tail:(__ unary_expr_or_primary) {
1969+
// if (op === '!') op = 'NOT'
1970+
return createUnaryExpr(op, tail[1])
1971+
}
1972+
1973+
unary_operator
1974+
= '!' / '-' / '+' / '~'
1975+
19661976
column_ref
19671977
= tbl:(ident __ DOT __)? col:column __ a:((DOUBLE_ARROW / SINGLE_ARROW) __ (literal_string / literal_numeric))+ __ ca:collate_expr? {
19681978
const tableName = tbl && tbl[0] || null

0 commit comments

Comments
 (0)