Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ action code {:
:};

/* Punctuation. */
terminal SEMICOLON, PLUS, MINUS, STAR;
terminal SEMICOLON, PLUS, MINUS, UMINUS, STAR;
terminal LPAREN, RPAREN, LBRACKET, RBRACKET, LBRACE, RBRACE;
terminal COLON, SLASH, PERCENT, DOT;
terminal BIT_AND, BIT_OR, BIT_XOR, BIT_NOT, RSHIFT, LSHIFT;
Expand Down Expand Up @@ -166,26 +166,30 @@ non terminal EnumValueAlteration Set_Value_Name;

/* Precedences */
precedence left SEMICOLON;
precedence left COMMA;
precedence left UNION;
precedence left DISTINCT, SELECT, RECORD, FROM, WHERE, HAVING, GROUP, ARRAY, JOIN, LEFT, TYPE, WITH;
precedence left SELECT, RECORD, FROM, WHERE, HAVING, GROUP, ARRAY, JOIN, LEFT, TYPE, WITH, DISTINCT;
precedence left TRIGGER, RESET, OVER, EVERY, OFFSET, LIMIT;
precedence left COMMA;
precedence left IF, CASE, WHEN, THEN, ELSE, END, EXISTS;
precedence right ASSIGN;
precedence right AS, FIELD;
precedence left COLON;
precedence left OR, AND;
precedence left BETWEEN;
precedence right NOT, BIT_NOT;
precedence left IN;
precedence left EQ, NEQ, STRICT_EQ, STRICT_NEQ, ASSIGN, LE, GE, LT, GT;
precedence left LIKE;
precedence left OR;
precedence left AND;
precedence right NOT;
precedence nonassoc BETWEEN;
precedence nonassoc IN;
precedence nonassoc LIKE;
precedence nonassoc IS;
precedence nonassoc EQ, NEQ, STRICT_EQ, STRICT_NEQ, LE, GE, LT, GT;
precedence left PLUS, MINUS;
precedence left STAR, SLASH, PERCENT;
precedence left BIT_OR;
precedence left BIT_XOR;
precedence left BIT_AND;
precedence right BIT_NOT;
precedence left RSHIFT, LSHIFT;
precedence left STAR, SLASH, PERCENT;
precedence left IS;
precedence right UMINUS;
precedence left DOT, QUESTION;
precedence left LPAREN, LBRACKET;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ action code {:
:};

/* Punctuation. */
terminal SEMICOLON, PLUS, MINUS, STAR;
terminal SEMICOLON, PLUS, MINUS, UMINUS, STAR;
terminal LPAREN, RPAREN, LBRACKET, RBRACKET, LBRACE, RBRACE;
terminal COLON, SLASH, PERCENT, DOT;
terminal BIT_AND, BIT_OR, BIT_XOR, BIT_NOT, RSHIFT, LSHIFT;
Expand Down Expand Up @@ -150,26 +150,30 @@ non terminal Expression[] Selector;

/* Precedences */
precedence left SEMICOLON;
precedence left COMMA;
precedence left UNION;
precedence left DISTINCT, SELECT, RECORD, FROM, WHERE, HAVING, GROUP, ARRAY, JOIN, LEFT, TYPE, WITH;
precedence left SELECT, RECORD, FROM, WHERE, HAVING, GROUP, ARRAY, JOIN, LEFT, TYPE, WITH, DISTINCT;
precedence left TRIGGER, RESET, OVER, EVERY, OFFSET, LIMIT;
precedence left COMMA;
precedence left IF, CASE, WHEN, THEN, ELSE, END, EXISTS;
precedence right ASSIGN;
precedence right AS, FIELD;
precedence left COLON;
precedence left OR, AND;
precedence left BETWEEN;
precedence right NOT, BIT_NOT;
precedence left IN;
precedence left EQ, NEQ, STRICT_EQ, STRICT_NEQ, ASSIGN, LE, GE, LT, GT;
precedence left LIKE;
precedence left OR;
precedence left AND;
precedence right NOT;
precedence nonassoc BETWEEN;
precedence nonassoc IN;
precedence nonassoc LIKE;
precedence nonassoc IS;
precedence nonassoc EQ, NEQ, STRICT_EQ, STRICT_NEQ, LE, GE, LT, GT;
precedence left PLUS, MINUS;
precedence left STAR, SLASH, PERCENT;
precedence left BIT_OR;
precedence left BIT_XOR;
precedence left BIT_AND;
precedence right BIT_NOT;
precedence left RSHIFT, LSHIFT;
precedence left STAR, SLASH, PERCENT;
precedence left IS;
precedence right UMINUS;
precedence left DOT, QUESTION;
precedence left LPAREN, LBRACKET;

Expand Down Expand Up @@ -200,8 +204,17 @@ Select_Union_Expression ::=
Expression ::=
Arithmetic_Expression:s
{: RESULT = s; :} |

Expression:e1 BETWEEN Arithmetic_Expression:e2 AND Arithmetic_Expression:e3
{: RESULT = new BetweenExpression (lx (e1left, e3right), e1, e2, e3); :} |
Expression:e NOT IN LPAREN Expression_List:args RPAREN:rp
{: RESULT = new InExpression (lx (eleft, rpright), false, e, args); :} |
Expression:e IN LPAREN Expression_List:args RPAREN:rp
{: RESULT = new InExpression (lx (eleft, rpright), true, e, args); :} |
Expression:e1 LIKE Expression:e2
{: RESULT = new LikeExpression (lx (e1left, e2right), e1, e2, false); :} |
Expression:e1 NOT LIKE Expression:e2
{: RESULT = new LikeExpression (lx (e1left, e2right), e1, e2, true); :} |

// cast and named expressions
Expression:e1 AS Cast_Type_Expression:ct
Expand Down Expand Up @@ -231,14 +244,6 @@ Expression ::=
{: RESULT = new RelationExpression (lx (e1left, e2right), OrderRelation.LT, e1, e2); :} |
Expression:e1 LE Expression:e2
{: RESULT = new RelationExpression (lx (e1left, e2right), OrderRelation.LE, e1, e2); :} |
Expression:e NOT IN LPAREN Expression_List:args RPAREN:rp
{: RESULT = new InExpression (lx (eleft, rpright), false, e, args); :} |
Expression:e IN LPAREN Expression_List:args RPAREN:rp
{: RESULT = new InExpression (lx (eleft, rpright), true, e, args); :} |
Expression:e1 LIKE Expression:e2
{: RESULT = new LikeExpression (lx (e1left, e2right), e1, e2, false); :} |
Expression:e1 NOT LIKE Expression:e2
{: RESULT = new LikeExpression (lx (e1left, e2right), e1, e2, true); :} |
Expression:e1 IF Expression:cond [ ELSE Expression:e {: RESULT = e; :} ]:e2
{: RESULT = new IfExpression(lx(e1left, e2right), cond, e1, (Expression) e2); :} |
CASE [ Expression:e1 {: RESULT = e1; :} ]:case_expr
Expand Down Expand Up @@ -271,6 +276,11 @@ Arithmetic_Expression ::=
Arithmetic_Expression:e1 LBRACKET Array_Slicing_Expression:e2 RBRACKET
{: RESULT = new PredicateExpression(lx(e1left, e2right + 1), e1, e2); :} |

MINUS:m Arithmetic_Expression:e
{: RESULT = new UnaryMinusExpression (lx (mleft, eright), e); :} %prec UMINUS |
BIT_NOT:m Arithmetic_Expression:e
{: RESULT = new BitwiseNotExpression(lx(mleft, eright), e); :} |

Arithmetic_Expression:e1 PLUS Arithmetic_Expression:e2
{: RESULT = new ArithmeticExpression (lx (e1left, e2right), ArithmeticFunction.ADD, e1, e2); :} |
Arithmetic_Expression:e1 MINUS Arithmetic_Expression:e2
Expand All @@ -284,10 +294,10 @@ Arithmetic_Expression ::=

Arithmetic_Expression:e1 BIT_AND Arithmetic_Expression:e2
{: RESULT = new BitwiseExpression(lx (e1left, e2right), BitwiseFunction.AND, e1, e2); :} |
Arithmetic_Expression:e1 BIT_OR Arithmetic_Expression:e2
{: RESULT = new BitwiseExpression(lx (e1left, e2right), BitwiseFunction.OR, e1, e2); :} |
Arithmetic_Expression:e1 BIT_XOR Arithmetic_Expression:e2
{: RESULT = new BitwiseExpression(lx (e1left, e2right), BitwiseFunction.XOR, e1, e2); :} |
Arithmetic_Expression:e1 BIT_OR Arithmetic_Expression:e2
{: RESULT = new BitwiseExpression(lx (e1left, e2right), BitwiseFunction.OR, e1, e2); :} |
Arithmetic_Expression:e1 RSHIFT Arithmetic_Expression:e2
{: RESULT = new BitwiseExpression(lx (e1left, e2right), BitwiseFunction.RSHIFT, e1, e2); :} |
Arithmetic_Expression:e1 LSHIFT Arithmetic_Expression:e2
Expand All @@ -298,11 +308,6 @@ Arithmetic_Expression ::=
Call_Expression:c
{: RESULT = c; :} |

MINUS:m Arithmetic_Expression:e
{: RESULT = new UnaryMinusExpression (lx (mleft, eright), e); :} |
BIT_NOT:m Arithmetic_Expression:e
{: RESULT = new BitwiseNotExpression(lx(mleft, eright), e); :} |

Arithmetic_Expression:e IS Type_Id:t
{: RESULT = new TypeCheckExpression (lx (eleft, tright), e, t); :} |
Arithmetic_Expression:e IS NULL:n
Expand Down Expand Up @@ -408,7 +413,21 @@ Int_Constant ::=
Int_Literal:c
{: RESULT = c; :} |
MINUS:m Int_Constant:n
{: RESULT = new UnaryMinusExpression(lx(mleft, nright), n); :} |
{: RESULT = new UnaryMinusExpression(lx(mleft, nright), n); :} %prec UMINUS |
BIT_NOT:m Int_Constant:n
{: RESULT = new BitwiseNotExpression(lx(mleft, nright), n); :} |

Int_Constant:e1 RSHIFT Int_Constant:e2
{: RESULT = new BitwiseExpression(lx(e1left, e2right), BitwiseFunction.RSHIFT, e1, e2); :} |
Int_Constant:e1 LSHIFT Int_Constant:e2
{: RESULT = new BitwiseExpression(lx(e1left, e2right), BitwiseFunction.LSHIFT, e1, e2); :} |
Int_Constant:e1 BIT_AND Int_Constant:e2
{: RESULT = new BitwiseExpression(lx(e1left, e2right), BitwiseFunction.AND, e1, e2); :} |
Int_Constant:e1 BIT_XOR Int_Constant:e2
{: RESULT = new BitwiseExpression(lx(e1left, e2right), BitwiseFunction.XOR, e1, e2); :} |
Int_Constant:e1 BIT_OR Int_Constant:e2
{: RESULT = new BitwiseExpression(lx(e1left, e2right), BitwiseFunction.OR, e1, e2); :} |

Int_Constant:e1 PLUS Int_Constant:e2
{: RESULT = new ArithmeticExpression (lx (e1left, e2right), ArithmeticFunction.ADD, e1, e2); :} |
Int_Constant:e1 MINUS Int_Constant:e2
Expand All @@ -420,19 +439,6 @@ Int_Constant ::=
Int_Constant:e1 PERCENT Int_Constant:e2
{: RESULT = new ArithmeticExpression (lx (e1left, e2right), ArithmeticFunction.MOD, e1, e2); :} |

BIT_NOT:m Int_Constant:n
{: RESULT = new BitwiseNotExpression(lx(mleft, nright), n); :} |
Int_Constant:e1 BIT_AND Int_Constant:e2
{: RESULT = new BitwiseExpression(lx(e1left, e2right), BitwiseFunction.AND, e1, e2); :} |
Int_Constant:e1 BIT_OR Int_Constant:e2
{: RESULT = new BitwiseExpression(lx(e1left, e2right), BitwiseFunction.OR, e1, e2); :} |
Int_Constant:e1 BIT_XOR Int_Constant:e2
{: RESULT = new BitwiseExpression(lx(e1left, e2right), BitwiseFunction.XOR, e1, e2); :} |
Int_Constant:e1 RSHIFT Int_Constant:e2
{: RESULT = new BitwiseExpression(lx(e1left, e2right), BitwiseFunction.RSHIFT, e1, e2); :} |
Int_Constant:e1 LSHIFT Int_Constant:e2
{: RESULT = new BitwiseExpression(lx(e1left, e2right), BitwiseFunction.LSHIFT, e1, e2); :} |

LPAREN Int_Constant:e RPAREN
{: RESULT = e; :};

Expand All @@ -446,7 +452,7 @@ Float_Constant ::=
Float_Literal:c
{: RESULT = c; :} |
MINUS:m Float_Constant:n
{: RESULT = new UnaryMinusExpression(lx(mleft, nright), n); :} |
{: RESULT = new UnaryMinusExpression(lx(mleft, nright), n); :} %prec UMINUS |
Float_Constant:e1 PLUS Float_Constant:e2
{: RESULT = new ArithmeticExpression (lx (e1left, e2right), ArithmeticFunction.ADD, e1, e2); :} |
Float_Constant:e1 MINUS Float_Constant:e2
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -802,6 +802,25 @@ public MappingInfo() {

};

private static Pair<String, MappingInfo>[] QQL_ALL_MISC3 = new Pair[] {
QUERY_RAW("SELECT enumField, byteField, TestEnum:TWO, 33, ~33 FROM alltypesrand "),
QUERY_RAW("SELECT 33, ~33 | 5, (~33) | 5, ~(33 | 5) FROM alltypesrand "),
QUERY_RAW("SELECT byteField, ~byteField | 5, (~byteField) | 5, ~(byteField | 5) FROM alltypesrand"),
QUERY_RAW("SELECT enumField, byteField, TestEnum:THREE, TestEnum:THREE | 5, 5 | TestEnum:THREE, enumField | 5, 5 | enumField, byteField | 5, 5 | byteField FROM alltypesrand"),
QUERY_RAW("SELECT enumField, byteField, TestEnum:THREE, TestEnum:THREE | enumField, TestEnum:THREE | byteField, enumField | byteField FROM alltypesrand"),

QUERY_RAW("SELECT enumField, byteField, TestEnum:THREE, enumField | enumField, TestEnum:THREE | TestEnum:TWO FROM alltypesrand"),
QUERY_RAW("SELECT enumField, byteField, enumField | TestEnum:FIVE & byteField, enumField | 5 & byteField, 5 & byteField | enumField FROM alltypesrand"),
QUERY_RAW("SELECT enumField, byteField, enumField | TestEnum:FIVE & byteField, enumField | 5 & byteField, 5 & byteField | enumField, 5 & (byteField | enumField) FROM alltypesrand"),
QUERY_RAW("SELECT enumField, byteField, enumField | TestEnum:FIVE & byteField, enumField | 5 & byteField, 5 & byteField | enumField, 5 & (byteField | enumField) FROM alltypesrand"),
QUERY_RAW("SELECT enumField, byteField, enumField ^ TestEnum:FIVE & byteField, enumField ^ 5 & byteField, 5 & byteField ^ enumField, 5 & (byteField ^ enumField) FROM alltypesrand"),
QUERY_RAW("SELECT enumField, byteField, enumField | TestEnum:FIVE ^ byteField, byteField ^ enumField | TestEnum:FIVE, enumField | (TestEnum:FIVE ^ byteField), (enumField | TestEnum:FIVE) ^ byteField FROM alltypesrand"),
QUERY_RAW("SELECT enumField, enumField ^ -1, -1 ^ enumField, (-1) ^ enumField FROM alltypesrand"),
QUERY_RAW("SELECT byteField, byteField ^ -1, -1 ^ byteField, (-1) ^ byteField, -(1 ^ byteField) FROM alltypesrand"),
QUERY_RAW("SELECT byteField, byteField * -1, -1 * byteField, (-1) * byteField, -(1 * byteField) FROM alltypesrand"),

};

private static Pair<String, MappingInfo>[] QQL_ALL_UNIONS = new Pair[] {
QUERY_RAW("select * from (binance union bitfinex union kraken) limit 10 offset 30"),
QUERY_RAW("select this.entries from (binance union bitfinex union kraken) limit 10 offset 30"),
Expand Down Expand Up @@ -1112,6 +1131,21 @@ public void Test_AllMisc() throws Exception {
}
}

@Test
public void Test_AllMisc3() throws Exception {
if (!remote) {
throw new RuntimeException("Test is available only in remote mode: use -Drunner.remote=true");
}

if (GENERATE_EXPECTED) {
qqlWriteExpected(db, QQL_ALL_MISC3, Home.getPath(EXPECTED_GENERATE_PATH + "misc3.txt"));
} else {
Assert.assertTrue(
qql(db, QQL_ALL_MISC3, readExpectedResults(Home.getPath(EXPECTED_PATH + "misc3.txt")))
);
}
}

@Test
public void Test_AllMisc2() throws Exception {
if (!remote) {
Expand Down
Loading
Loading