diff --git a/src/cql2_lexer.l b/src/cql2_lexer.l index c97129d..61e7df0 100644 --- a/src/cql2_lexer.l +++ b/src/cql2_lexer.l @@ -145,6 +145,12 @@ IN { return Cql2ParserBase::token::ID; } +A_EQUALS|A_CONTAINS|A_CONTAINEDBY|A_OVERLAPS { + print("ARRAY", yytext); + yylval_->emplace(yytext); + return Cql2ParserBase::token::arrayFunction; +} + "+" { print("OP", yytext); return Cql2ParserBase::token::PLUS; } "-" { print("OP", yytext); return Cql2ParserBase::token::MINUS;} "*" { print("OP", yytext); return Cql2ParserBase::token::MULT; } diff --git a/src/cql2_parser.y b/src/cql2_parser.y index 402688d..603b32d 100644 --- a/src/cql2_parser.y +++ b/src/cql2_parser.y @@ -240,7 +240,7 @@ arrayElement: | numericLiteral // | temporalInstance | spatialInstance - | array // shift/reduce conflict + // | array // shift/reduce conflict // | arithmeticExpression | booleanExpression | propertyName diff --git a/test/indoorjson/array.txt b/test/indoorjson/array.txt new file mode 100644 index 0000000..875c6bc --- /dev/null +++ b/test/indoorjson/array.txt @@ -0,0 +1 @@ +A_CONTAINS(array_field, ('value_1', 'value_2')) diff --git a/test/test_parse.cc b/test/test_parse.cc index 78e0b38..5567963 100644 --- a/test/test_parse.cc +++ b/test/test_parse.cc @@ -52,6 +52,7 @@ TEST_F(ParseTest, binary ) { EXPECT_TRUE(Parse(case_name_)); } TEST_F(ParseTest, is_in_list ) { EXPECT_TRUE(Parse(case_name_)); } TEST_F(ParseTest, is_not_in_list) { EXPECT_TRUE(Parse(case_name_)); } TEST_F(ParseTest, localization ) { EXPECT_TRUE(Parse(case_name_)); } +TEST_F(ParseTest, array ) { EXPECT_TRUE(Parse(case_name_)); } // TEST_F(ParseTest, binlocations ) { EXPECT_TRUE(Parse(case_name_)); } // function // TEST_F(ParseTest, labels ) { EXPECT_TRUE(Parse(case_name_)); } // clang-format on