Skip to content

Commit 3ee7c18

Browse files
authored
fix(search): Allow colon in tag values for query syntax (#6014)
fix: lexer
1 parent 15226e1 commit 3ee7c18

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

src/core/search/lexer.lex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ sq \'
3737
esc_chars ['"\?\\abfnrtv]
3838
esc_seq \\{esc_chars}
3939
term_ch \w
40-
tag_val_ch [^,.<>{}\[\]\\\"\?':;!@#$%^&*()\-+=~\/| ]|\\.
40+
tag_val_base_ch [^,.<>{}\[\]\\\"\?':;!@#$%^&*()\-+=~\/| ]|\\.
41+
tag_val_ch {tag_val_base_ch}+(:+{tag_val_base_ch}*)*
4142
astrsk_ch \*
4243

4344

src/core/search/search_parser_test.cc

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,14 @@ TEST_F(SearchParserTest, Scanner) {
153153
NEXT_EQ(TOK_TAG_VAL, string, "blue]1#-");
154154
NEXT_TOK(TOK_RCURLBR);
155155

156+
// Colon in tag value (unescaped)
157+
SetInput("@t:{Tag:value}");
158+
NEXT_EQ(TOK_FIELD, string, "@t");
159+
NEXT_TOK(TOK_COLON);
160+
NEXT_TOK(TOK_LCURLBR);
161+
NEXT_EQ(TOK_TAG_VAL, string, "Tag:value");
162+
NEXT_TOK(TOK_RCURLBR);
163+
156164
// Prefix simple
157165
SetInput("pre*");
158166
NEXT_EQ(TOK_PREFIX, string, "pre");
@@ -232,6 +240,11 @@ TEST_F(SearchParserTest, Parse) {
232240

233241
EXPECT_EQ(0, Parse("@name:{escape\\-err*}"));
234242

243+
// Colon in tag value
244+
EXPECT_EQ(0, Parse("@t:{Tag:value}"));
245+
EXPECT_EQ(0, Parse("@t:{Tag:*}"));
246+
EXPECT_EQ(0, Parse("@category:{Product:Electronics}"));
247+
235248
EXPECT_EQ(1, Parse(" -(foo "));
236249
EXPECT_EQ(1, Parse(" foo:bar "));
237250
EXPECT_EQ(1, Parse(" @foo:@bar "));

0 commit comments

Comments
 (0)