Skip to content

Commit 7331c03

Browse files
committed
Support both () and [] for array expression
Change-Id: I9b63a51fb1bc654230456be8fbca493f65e06cdd Signed-off-by: Kunlin Yu <yukunlin@syriusrobotics.com>
1 parent 63c0a27 commit 7331c03

File tree

7 files changed

+25
-3
lines changed

7 files changed

+25
-3
lines changed

src/cql2_lexer.l

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,16 @@ INTERVAL|interval {
100100
return Cql2ParserBase::token::RPT;
101101
}
102102

103+
"[" {
104+
print("LSB", yytext);
105+
return Cql2ParserBase::token::LSB;
106+
}
107+
108+
"]" {
109+
print("RSB", yytext);
110+
return Cql2ParserBase::token::RSB;
111+
}
112+
103113
"\"" {
104114
print("DQUOTE", yytext);
105115
return Cql2ParserBase::token::DQUOTE;

src/cql2_parser.y

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,9 @@ void cql2cpp::Cql2ParserBase::error(const std::string& msg) {
8484
%token IS_NULL
8585
%token IS_NOT_NULL
8686
%token BETWEEN NOT_BETWEEN
87-
%token <char> LPT RPT COMMA // ( ) ,
87+
%token <char> COMMA // ,
88+
%token <char> LPT RPT // parentheses ( )
89+
%token <char> LSB RSB // square brackets [ ]
8890
%token CASEI ACCENTI
8991
%token SQUOTE DQUOTE
9092
%token TIMESTAMP DATE INTERVAL
@@ -297,8 +299,10 @@ arrayExpression:
297299
| function
298300

299301
array:
300-
LPT RPT { PL; $$ = MakeAstNode(Array, NullOp, std::vector<AstNodePtr>()); }
301-
| LPT arrayList RPT { PL; $$ = $2; }
302+
LPT RPT { PL; $$ = MakeAstNode(Array, NullOp, std::vector<AstNodePtr>()); } // TODO remove in future version
303+
| LPT arrayList RPT { PL; $$ = $2; } // TODO remove in future version
304+
| LSB RSB { PL; $$ = MakeAstNode(Array, NullOp, std::vector<AstNodePtr>()); }
305+
| LSB arrayList RSB { PL; $$ = $2; }
302306

303307
arrayList:
304308
arrayElement { PL; $$ = MakeAstNode(Array, NullOp, std::vector({$1})); }

test/indoorjson/clause7_15.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
A_CONTAINS(layer:ids, ['layers-ca','layers-us'])

test/indoorjson/example79.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
A_CONTAINEDBY("values", ['a', 'b', 'c'])

test/indoorjson/example80.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
A_CONTAINS("values", ['a', 'b', 'c'])

test/indoorjson/example81.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
A_EQUALS(['a', TRUE, 1.0, 8], "values")

test/test_parse.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,10 @@ TEST_F(ParseTest, binlocations ) { EXPECT_TRUE(Parse(case_name_)); }
127127
TEST_F(ParseTest, related_bins ) { EXPECT_TRUE(Parse(case_name_)); }
128128
TEST_F(ParseTest, avg ) { EXPECT_TRUE(Parse(case_name_)); }
129129
TEST_F(ParseTest, spatial ) { EXPECT_TRUE(Parse(case_name_)); }
130+
TEST_F(ParseTest, clause7_15 ) { EXPECT_TRUE(Parse(case_name_)); }
131+
TEST_F(ParseTest, example79 ) { EXPECT_TRUE(Parse(case_name_)); }
132+
TEST_F(ParseTest, example80 ) { EXPECT_TRUE(Parse(case_name_)); }
133+
TEST_F(ParseTest, example81 ) { EXPECT_TRUE(Parse(case_name_)); }
130134
// TEST_F(ParseTest, labels ) { EXPECT_TRUE(Parse(case_name_)); } // standard unsupported
131135

132136
TEST_F(ParseExampleTest, clause6_01) {EXPECT_TRUE(Parse(case_name_)); }

0 commit comments

Comments
 (0)