From 6a9a3df34f1f9747205ec31697ddb6e8c4391583 Mon Sep 17 00:00:00 2001 From: Daniil Porokhnin Date: Tue, 21 Jul 2026 14:46:37 +0300 Subject: [PATCH] feat: support wilcard token `*` for complex queries --- frac/fraction_test.go | 1 + parser/seqql.go | 2 +- parser/seqql_filter_test.go | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/frac/fraction_test.go b/frac/fraction_test.go index 9a4f0b4c..1521d358 100644 --- a/frac/fraction_test.go +++ b/frac/fraction_test.go @@ -236,6 +236,7 @@ func (s *FractionTestSuite) TestWildcardSymbolsSearch() { s.insertDocuments(docs) + s.AssertSearch("((*) OR message:first) AND message:second", docs, []int{1}) s.AssertSearch(`message:*`, docs, []int{3, 2, 1, 0}) s.AssertSearch(`message:value`, docs, []int{1, 0}) s.AssertSearch(`message:value*`, docs, []int{2, 1, 0}) diff --git a/parser/seqql.go b/parser/seqql.go index 59a9a3a9..9af8d08f 100644 --- a/parser/seqql.go +++ b/parser/seqql.go @@ -388,7 +388,7 @@ func parseSeqQLSubexpr(lex *lexer, mapping seq.Mapping, depth int) (*ASTNode, er return nil, fmt.Errorf("unexpected end of query") } - if lex.IsKeyword(string(wildcardRune)) && depth == 0 { + if lex.IsKeyword(string(wildcardRune)) { lex.Next() // Query is `*`. return &ASTNode{ diff --git a/parser/seqql_filter_test.go b/parser/seqql_filter_test.go index 45c12df4..64902186 100644 --- a/parser/seqql_filter_test.go +++ b/parser/seqql_filter_test.go @@ -74,6 +74,8 @@ func TestSeqQLAll(t *testing.T) { test("", "*") test("*", "*") + test("((*))", "*") + test("((*) OR service:foo) AND service:bar", "((* or service:foo) and service:bar)") // Propagate "not". test(`NOT NOT text:a`, `text:a`)