Query - grammar changed to support '1 IN [[1, 2]][0]'
Reviewers: mislav.bradac, teon.banek, buda Reviewed By: mislav.bradac Subscribers: pullbot Differential Revision: https://phabricator.memgraph.io/D381
This commit is contained in:
parent
6ee2be3a48
commit
97638d3327
@ -8,7 +8,7 @@ TODO
|
||||
|
||||
### Bug Fixes and Other Changes
|
||||
|
||||
TODO
|
||||
* List indexing supported with preceeding IN (for example in query `RETURN 1 IN [[1,2]][0]`)
|
||||
|
||||
## Build 825
|
||||
|
||||
|
@ -604,7 +604,7 @@ antlrcpp::Any CypherMainVisitor::visitExpression3a(
|
||||
storage_.Create<IsNullOperator>(expression));
|
||||
} else if (op->IN()) {
|
||||
expression = static_cast<Expression *>(storage_.Create<InListOperator>(
|
||||
expression, op->expression2a()->accept(this)));
|
||||
expression, op->expression3b()->accept(this)));
|
||||
} else {
|
||||
throw utils::NotYetImplemented();
|
||||
}
|
||||
|
@ -155,7 +155,7 @@ expression4 : ( ( '+' | '-' ) SP? )* expression3a ;
|
||||
|
||||
expression3a : expression3b ( stringAndNullOperators )* ;
|
||||
|
||||
stringAndNullOperators : ( ( ( ( SP? '=~' ) | ( SP IN ) | ( SP STARTS SP WITH ) | ( SP ENDS SP WITH ) | ( SP CONTAINS ) ) SP? expression2a ) | ( SP IS SP CYPHERNULL ) | ( SP IS SP NOT SP CYPHERNULL ) ) ;
|
||||
stringAndNullOperators : ( ( ( ( SP? '=~' ) | ( SP IN ) | ( SP STARTS SP WITH ) | ( SP ENDS SP WITH ) | ( SP CONTAINS ) ) SP? expression3b) | ( SP IS SP CYPHERNULL ) | ( SP IS SP NOT SP CYPHERNULL ) ) ;
|
||||
|
||||
expression3b : expression2a ( SP? listIndexingOrSlicing )* ;
|
||||
|
||||
|
@ -432,6 +432,25 @@ TEST(CypherMainVisitorTest, InListOperator) {
|
||||
ASSERT_TRUE(list);
|
||||
}
|
||||
|
||||
TEST(CypherMainVisitorTest, InWithListIndexing) {
|
||||
AstGenerator ast_generator("RETURN 1 IN [[1,2]][0]");
|
||||
auto *query = ast_generator.query_;
|
||||
auto *return_clause = dynamic_cast<Return *>(query->clauses_[0]);
|
||||
auto *in_list_operator = dynamic_cast<InListOperator *>(
|
||||
return_clause->body_.named_expressions[0]->expression_);
|
||||
ASSERT_TRUE(in_list_operator);
|
||||
auto *literal =
|
||||
dynamic_cast<PrimitiveLiteral *>(in_list_operator->expression1_);
|
||||
ASSERT_TRUE(literal);
|
||||
EXPECT_EQ(literal->value_.Value<int64_t>(), 1);
|
||||
auto *list_indexing = dynamic_cast<ListIndexingOperator *>(in_list_operator->expression2_);
|
||||
ASSERT_TRUE(list_indexing);
|
||||
auto *list = dynamic_cast<ListLiteral *>(list_indexing->expression1_);
|
||||
EXPECT_TRUE(list);
|
||||
auto *list_index = dynamic_cast<PrimitiveLiteral *>(list_indexing->expression2_);
|
||||
EXPECT_TRUE(list_index);
|
||||
}
|
||||
|
||||
TEST(CypherMainVisitorTest, IsNull) {
|
||||
AstGenerator ast_generator("RETURN 2 iS NulL");
|
||||
auto *query = ast_generator.query_;
|
||||
|
Loading…
Reference in New Issue
Block a user