diff --git a/grammar/FilterQuery.g4 b/grammar/FilterQuery.g4 index 405090510eb..e74cc691018 100644 --- a/grammar/FilterQuery.g4 +++ b/grammar/FilterQuery.g4 @@ -32,11 +32,12 @@ unaryExpression ; // Primary constructs: grouped expressions, a comparison (key op value), -// a function call, or a full-text string +// a function call, a search() full-text call, or a free-text string primary : LPAREN orExpression RPAREN | comparison | functionCall + | searchCall | fullText | key | value @@ -110,6 +111,18 @@ functionCall : (HASTOKEN | HAS | HASANY | HASALL) LPAREN functionParamList RPAREN ; +/* + * Full-text search call: search('needle') + * + * Uses the shared functionParamList so future scoped forms like + * search(body, 'abc') / search(attribute, 'abc') need no grammar change. Today + * only a single needle is supported. Unlike bare/quoted free text (`fullText`), + * which only targets the body column, search() fans out across every field. + */ +searchCall + : SEARCH LPAREN functionParamList RPAREN + ; + // Function parameters can be keys, single scalar values, or arrays functionParamList : functionParam ( COMMA functionParam )* @@ -184,6 +197,7 @@ HASTOKEN : [Hh][Aa][Ss][Tt][Oo][Kk][Ee][Nn]; HAS : [Hh][Aa][Ss] ; HASANY : [Hh][Aa][Ss][Aa][Nn][Yy] ; HASALL : [Hh][Aa][Ss][Aa][Ll][Ll] ; +SEARCH : [Ss][Ee][Aa][Rr][Cc][Hh] ; // Potential boolean constants BOOL diff --git a/pkg/contextlinks/alert_link_visitor.go b/pkg/contextlinks/alert_link_visitor.go index 6128830881d..e9b3f9d6d21 100644 --- a/pkg/contextlinks/alert_link_visitor.go +++ b/pkg/contextlinks/alert_link_visitor.go @@ -101,12 +101,12 @@ func PrepareFilterExpression(labels map[string]string, whereClause string, group } // Visit implements the visitor for the query rule. -func (r *WhereClauseRewriter) Visit(tree antlr.ParseTree) interface{} { +func (r *WhereClauseRewriter) Visit(tree antlr.ParseTree) any { return tree.Accept(r) } // VisitQuery visits the query node. -func (r *WhereClauseRewriter) VisitQuery(ctx *parser.QueryContext) interface{} { +func (r *WhereClauseRewriter) VisitQuery(ctx *parser.QueryContext) any { if ctx.Expression() != nil { ctx.Expression().Accept(r) } @@ -114,7 +114,7 @@ func (r *WhereClauseRewriter) VisitQuery(ctx *parser.QueryContext) interface{} { } // VisitExpression visits the expression node. -func (r *WhereClauseRewriter) VisitExpression(ctx *parser.ExpressionContext) interface{} { +func (r *WhereClauseRewriter) VisitExpression(ctx *parser.ExpressionContext) any { if ctx.OrExpression() != nil { ctx.OrExpression().Accept(r) } @@ -122,7 +122,7 @@ func (r *WhereClauseRewriter) VisitExpression(ctx *parser.ExpressionContext) int } // VisitOrExpression visits OR expressions. -func (r *WhereClauseRewriter) VisitOrExpression(ctx *parser.OrExpressionContext) interface{} { +func (r *WhereClauseRewriter) VisitOrExpression(ctx *parser.OrExpressionContext) any { for i, andExpr := range ctx.AllAndExpression() { if i > 0 { r.rewritten.WriteString(" OR ") @@ -133,7 +133,7 @@ func (r *WhereClauseRewriter) VisitOrExpression(ctx *parser.OrExpressionContext) } // VisitAndExpression visits AND expressions. -func (r *WhereClauseRewriter) VisitAndExpression(ctx *parser.AndExpressionContext) interface{} { +func (r *WhereClauseRewriter) VisitAndExpression(ctx *parser.AndExpressionContext) any { unaryExprs := ctx.AllUnaryExpression() for i, unaryExpr := range unaryExprs { if i > 0 { @@ -151,7 +151,7 @@ func (r *WhereClauseRewriter) VisitAndExpression(ctx *parser.AndExpressionContex } // VisitUnaryExpression visits unary expressions (with optional NOT). -func (r *WhereClauseRewriter) VisitUnaryExpression(ctx *parser.UnaryExpressionContext) interface{} { +func (r *WhereClauseRewriter) VisitUnaryExpression(ctx *parser.UnaryExpressionContext) any { if ctx.NOT() != nil { r.rewritten.WriteString("NOT ") } @@ -162,7 +162,7 @@ func (r *WhereClauseRewriter) VisitUnaryExpression(ctx *parser.UnaryExpressionCo } // VisitPrimary visits primary expressions. -func (r *WhereClauseRewriter) VisitPrimary(ctx *parser.PrimaryContext) interface{} { +func (r *WhereClauseRewriter) VisitPrimary(ctx *parser.PrimaryContext) any { if ctx.LPAREN() != nil && ctx.RPAREN() != nil { r.rewritten.WriteString("(") if ctx.OrExpression() != nil { @@ -173,6 +173,8 @@ func (r *WhereClauseRewriter) VisitPrimary(ctx *parser.PrimaryContext) interface ctx.Comparison().Accept(r) } else if ctx.FunctionCall() != nil { ctx.FunctionCall().Accept(r) + } else if ctx.SearchCall() != nil { + ctx.SearchCall().Accept(r) } else if ctx.FullText() != nil { ctx.FullText().Accept(r) } else if ctx.Key() != nil { @@ -184,7 +186,7 @@ func (r *WhereClauseRewriter) VisitPrimary(ctx *parser.PrimaryContext) interface } // VisitComparison visits comparison expressions. -func (r *WhereClauseRewriter) VisitComparison(ctx *parser.ComparisonContext) interface{} { +func (r *WhereClauseRewriter) VisitComparison(ctx *parser.ComparisonContext) any { if ctx.Key() == nil { return nil } @@ -197,7 +199,7 @@ func (r *WhereClauseRewriter) VisitComparison(ctx *parser.ComparisonContext) int if _, partOfGroup := r.groupBySet[key]; partOfGroup { // Case 1: Replace with actual value escapedValue := escapeValueIfNeeded(value) - r.rewritten.WriteString(fmt.Sprintf("%s=%s", key, escapedValue)) + fmt.Fprintf(&r.rewritten, "%s=%s", key, escapedValue) return nil } } @@ -305,7 +307,7 @@ func (r *WhereClauseRewriter) VisitComparison(ctx *parser.ComparisonContext) int } // VisitInClause visits IN clauses. -func (r *WhereClauseRewriter) VisitInClause(ctx *parser.InClauseContext) interface{} { +func (r *WhereClauseRewriter) VisitInClause(ctx *parser.InClauseContext) any { r.rewritten.WriteString("IN ") if ctx.LPAREN() != nil { r.rewritten.WriteString("(") @@ -326,7 +328,7 @@ func (r *WhereClauseRewriter) VisitInClause(ctx *parser.InClauseContext) interfa } // VisitNotInClause visits NOT IN clauses. -func (r *WhereClauseRewriter) VisitNotInClause(ctx *parser.NotInClauseContext) interface{} { +func (r *WhereClauseRewriter) VisitNotInClause(ctx *parser.NotInClauseContext) any { r.rewritten.WriteString("NOT IN ") if ctx.LPAREN() != nil { r.rewritten.WriteString("(") @@ -347,7 +349,7 @@ func (r *WhereClauseRewriter) VisitNotInClause(ctx *parser.NotInClauseContext) i } // VisitValueList visits value lists. -func (r *WhereClauseRewriter) VisitValueList(ctx *parser.ValueListContext) interface{} { +func (r *WhereClauseRewriter) VisitValueList(ctx *parser.ValueListContext) any { values := ctx.AllValue() for i, val := range values { if i > 0 { @@ -359,13 +361,20 @@ func (r *WhereClauseRewriter) VisitValueList(ctx *parser.ValueListContext) inter } // VisitFullText visits full text expressions. -func (r *WhereClauseRewriter) VisitFullText(ctx *parser.FullTextContext) interface{} { +func (r *WhereClauseRewriter) VisitFullText(ctx *parser.FullTextContext) any { + r.rewritten.WriteString(ctx.GetText()) + return nil +} + +// VisitSearchCall visits search() calls. It has no keys to rewrite, so it is +// preserved verbatim. +func (r *WhereClauseRewriter) VisitSearchCall(ctx *parser.SearchCallContext) any { r.rewritten.WriteString(ctx.GetText()) return nil } // VisitFunctionCall visits function calls. -func (r *WhereClauseRewriter) VisitFunctionCall(ctx *parser.FunctionCallContext) interface{} { +func (r *WhereClauseRewriter) VisitFunctionCall(ctx *parser.FunctionCallContext) any { // Write function name if ctx.HAS() != nil { r.rewritten.WriteString("has") @@ -386,7 +395,7 @@ func (r *WhereClauseRewriter) VisitFunctionCall(ctx *parser.FunctionCallContext) } // VisitFunctionParamList visits function parameter lists. -func (r *WhereClauseRewriter) VisitFunctionParamList(ctx *parser.FunctionParamListContext) interface{} { +func (r *WhereClauseRewriter) VisitFunctionParamList(ctx *parser.FunctionParamListContext) any { params := ctx.AllFunctionParam() for i, param := range params { if i > 0 { @@ -398,7 +407,7 @@ func (r *WhereClauseRewriter) VisitFunctionParamList(ctx *parser.FunctionParamLi } // VisitFunctionParam visits function parameters. -func (r *WhereClauseRewriter) VisitFunctionParam(ctx *parser.FunctionParamContext) interface{} { +func (r *WhereClauseRewriter) VisitFunctionParam(ctx *parser.FunctionParamContext) any { if ctx.Key() != nil { ctx.Key().Accept(r) } else if ctx.Value() != nil { @@ -410,7 +419,7 @@ func (r *WhereClauseRewriter) VisitFunctionParam(ctx *parser.FunctionParamContex } // VisitArray visits array expressions. -func (r *WhereClauseRewriter) VisitArray(ctx *parser.ArrayContext) interface{} { +func (r *WhereClauseRewriter) VisitArray(ctx *parser.ArrayContext) any { r.rewritten.WriteString("[") if ctx.ValueList() != nil { ctx.ValueList().Accept(r) @@ -420,13 +429,13 @@ func (r *WhereClauseRewriter) VisitArray(ctx *parser.ArrayContext) interface{} { } // VisitValue visits value expressions. -func (r *WhereClauseRewriter) VisitValue(ctx *parser.ValueContext) interface{} { +func (r *WhereClauseRewriter) VisitValue(ctx *parser.ValueContext) any { r.rewritten.WriteString(ctx.GetText()) return nil } // VisitKey visits key expressions. -func (r *WhereClauseRewriter) VisitKey(ctx *parser.KeyContext) interface{} { +func (r *WhereClauseRewriter) VisitKey(ctx *parser.KeyContext) any { r.keysSeen[ctx.GetText()] = struct{}{} r.rewritten.WriteString(ctx.GetText()) return nil diff --git a/pkg/parser/filterquery/grammar/FilterQuery.interp b/pkg/parser/filterquery/grammar/FilterQuery.interp index 3c22ad32449..353cf35e403 100644 --- a/pkg/parser/filterquery/grammar/FilterQuery.interp +++ b/pkg/parser/filterquery/grammar/FilterQuery.interp @@ -32,6 +32,7 @@ null null null null +null token symbolic names: null @@ -61,6 +62,7 @@ HASTOKEN HAS HASANY HASALL +SEARCH BOOL NUMBER QUOTED_TEXT @@ -81,6 +83,7 @@ notInClause valueList fullText functionCall +searchCall functionParamList functionParam array @@ -89,4 +92,4 @@ key atn: -[4, 1, 32, 219, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 5, 2, 43, 8, 2, 10, 2, 12, 2, 46, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 52, 8, 3, 10, 3, 12, 3, 55, 9, 3, 1, 4, 3, 4, 58, 8, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 71, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 150, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 164, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 181, 8, 8, 1, 9, 1, 9, 1, 9, 5, 9, 186, 8, 9, 10, 9, 12, 9, 189, 9, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 5, 12, 201, 8, 12, 10, 12, 12, 12, 204, 9, 12, 1, 13, 1, 13, 1, 13, 3, 13, 209, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 0, 0, 17, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 0, 5, 1, 0, 7, 8, 1, 0, 13, 14, 2, 0, 29, 29, 32, 32, 1, 0, 23, 26, 1, 0, 27, 30, 235, 0, 34, 1, 0, 0, 0, 2, 37, 1, 0, 0, 0, 4, 39, 1, 0, 0, 0, 6, 47, 1, 0, 0, 0, 8, 57, 1, 0, 0, 0, 10, 70, 1, 0, 0, 0, 12, 149, 1, 0, 0, 0, 14, 163, 1, 0, 0, 0, 16, 180, 1, 0, 0, 0, 18, 182, 1, 0, 0, 0, 20, 190, 1, 0, 0, 0, 22, 192, 1, 0, 0, 0, 24, 197, 1, 0, 0, 0, 26, 208, 1, 0, 0, 0, 28, 210, 1, 0, 0, 0, 30, 214, 1, 0, 0, 0, 32, 216, 1, 0, 0, 0, 34, 35, 3, 2, 1, 0, 35, 36, 5, 0, 0, 1, 36, 1, 1, 0, 0, 0, 37, 38, 3, 4, 2, 0, 38, 3, 1, 0, 0, 0, 39, 44, 3, 6, 3, 0, 40, 41, 5, 22, 0, 0, 41, 43, 3, 6, 3, 0, 42, 40, 1, 0, 0, 0, 43, 46, 1, 0, 0, 0, 44, 42, 1, 0, 0, 0, 44, 45, 1, 0, 0, 0, 45, 5, 1, 0, 0, 0, 46, 44, 1, 0, 0, 0, 47, 53, 3, 8, 4, 0, 48, 49, 5, 21, 0, 0, 49, 52, 3, 8, 4, 0, 50, 52, 3, 8, 4, 0, 51, 48, 1, 0, 0, 0, 51, 50, 1, 0, 0, 0, 52, 55, 1, 0, 0, 0, 53, 51, 1, 0, 0, 0, 53, 54, 1, 0, 0, 0, 54, 7, 1, 0, 0, 0, 55, 53, 1, 0, 0, 0, 56, 58, 5, 20, 0, 0, 57, 56, 1, 0, 0, 0, 57, 58, 1, 0, 0, 0, 58, 59, 1, 0, 0, 0, 59, 60, 3, 10, 5, 0, 60, 9, 1, 0, 0, 0, 61, 62, 5, 1, 0, 0, 62, 63, 3, 4, 2, 0, 63, 64, 5, 2, 0, 0, 64, 71, 1, 0, 0, 0, 65, 71, 3, 12, 6, 0, 66, 71, 3, 22, 11, 0, 67, 71, 3, 20, 10, 0, 68, 71, 3, 32, 16, 0, 69, 71, 3, 30, 15, 0, 70, 61, 1, 0, 0, 0, 70, 65, 1, 0, 0, 0, 70, 66, 1, 0, 0, 0, 70, 67, 1, 0, 0, 0, 70, 68, 1, 0, 0, 0, 70, 69, 1, 0, 0, 0, 71, 11, 1, 0, 0, 0, 72, 73, 3, 32, 16, 0, 73, 74, 5, 6, 0, 0, 74, 75, 3, 30, 15, 0, 75, 150, 1, 0, 0, 0, 76, 77, 3, 32, 16, 0, 77, 78, 7, 0, 0, 0, 78, 79, 3, 30, 15, 0, 79, 150, 1, 0, 0, 0, 80, 81, 3, 32, 16, 0, 81, 82, 5, 9, 0, 0, 82, 83, 3, 30, 15, 0, 83, 150, 1, 0, 0, 0, 84, 85, 3, 32, 16, 0, 85, 86, 5, 10, 0, 0, 86, 87, 3, 30, 15, 0, 87, 150, 1, 0, 0, 0, 88, 89, 3, 32, 16, 0, 89, 90, 5, 11, 0, 0, 90, 91, 3, 30, 15, 0, 91, 150, 1, 0, 0, 0, 92, 93, 3, 32, 16, 0, 93, 94, 5, 12, 0, 0, 94, 95, 3, 30, 15, 0, 95, 150, 1, 0, 0, 0, 96, 97, 3, 32, 16, 0, 97, 98, 7, 1, 0, 0, 98, 99, 3, 30, 15, 0, 99, 150, 1, 0, 0, 0, 100, 101, 3, 32, 16, 0, 101, 102, 5, 20, 0, 0, 102, 103, 7, 1, 0, 0, 103, 104, 3, 30, 15, 0, 104, 150, 1, 0, 0, 0, 105, 106, 3, 32, 16, 0, 106, 107, 5, 15, 0, 0, 107, 108, 3, 30, 15, 0, 108, 109, 5, 21, 0, 0, 109, 110, 3, 30, 15, 0, 110, 150, 1, 0, 0, 0, 111, 112, 3, 32, 16, 0, 112, 113, 5, 20, 0, 0, 113, 114, 5, 15, 0, 0, 114, 115, 3, 30, 15, 0, 115, 116, 5, 21, 0, 0, 116, 117, 3, 30, 15, 0, 117, 150, 1, 0, 0, 0, 118, 119, 3, 32, 16, 0, 119, 120, 3, 14, 7, 0, 120, 150, 1, 0, 0, 0, 121, 122, 3, 32, 16, 0, 122, 123, 3, 16, 8, 0, 123, 150, 1, 0, 0, 0, 124, 125, 3, 32, 16, 0, 125, 126, 5, 16, 0, 0, 126, 150, 1, 0, 0, 0, 127, 128, 3, 32, 16, 0, 128, 129, 5, 20, 0, 0, 129, 130, 5, 16, 0, 0, 130, 150, 1, 0, 0, 0, 131, 132, 3, 32, 16, 0, 132, 133, 5, 17, 0, 0, 133, 134, 3, 30, 15, 0, 134, 150, 1, 0, 0, 0, 135, 136, 3, 32, 16, 0, 136, 137, 5, 20, 0, 0, 137, 138, 5, 17, 0, 0, 138, 139, 3, 30, 15, 0, 139, 150, 1, 0, 0, 0, 140, 141, 3, 32, 16, 0, 141, 142, 5, 18, 0, 0, 142, 143, 3, 30, 15, 0, 143, 150, 1, 0, 0, 0, 144, 145, 3, 32, 16, 0, 145, 146, 5, 20, 0, 0, 146, 147, 5, 18, 0, 0, 147, 148, 3, 30, 15, 0, 148, 150, 1, 0, 0, 0, 149, 72, 1, 0, 0, 0, 149, 76, 1, 0, 0, 0, 149, 80, 1, 0, 0, 0, 149, 84, 1, 0, 0, 0, 149, 88, 1, 0, 0, 0, 149, 92, 1, 0, 0, 0, 149, 96, 1, 0, 0, 0, 149, 100, 1, 0, 0, 0, 149, 105, 1, 0, 0, 0, 149, 111, 1, 0, 0, 0, 149, 118, 1, 0, 0, 0, 149, 121, 1, 0, 0, 0, 149, 124, 1, 0, 0, 0, 149, 127, 1, 0, 0, 0, 149, 131, 1, 0, 0, 0, 149, 135, 1, 0, 0, 0, 149, 140, 1, 0, 0, 0, 149, 144, 1, 0, 0, 0, 150, 13, 1, 0, 0, 0, 151, 152, 5, 19, 0, 0, 152, 153, 5, 1, 0, 0, 153, 154, 3, 18, 9, 0, 154, 155, 5, 2, 0, 0, 155, 164, 1, 0, 0, 0, 156, 157, 5, 19, 0, 0, 157, 158, 5, 3, 0, 0, 158, 159, 3, 18, 9, 0, 159, 160, 5, 4, 0, 0, 160, 164, 1, 0, 0, 0, 161, 162, 5, 19, 0, 0, 162, 164, 3, 30, 15, 0, 163, 151, 1, 0, 0, 0, 163, 156, 1, 0, 0, 0, 163, 161, 1, 0, 0, 0, 164, 15, 1, 0, 0, 0, 165, 166, 5, 20, 0, 0, 166, 167, 5, 19, 0, 0, 167, 168, 5, 1, 0, 0, 168, 169, 3, 18, 9, 0, 169, 170, 5, 2, 0, 0, 170, 181, 1, 0, 0, 0, 171, 172, 5, 20, 0, 0, 172, 173, 5, 19, 0, 0, 173, 174, 5, 3, 0, 0, 174, 175, 3, 18, 9, 0, 175, 176, 5, 4, 0, 0, 176, 181, 1, 0, 0, 0, 177, 178, 5, 20, 0, 0, 178, 179, 5, 19, 0, 0, 179, 181, 3, 30, 15, 0, 180, 165, 1, 0, 0, 0, 180, 171, 1, 0, 0, 0, 180, 177, 1, 0, 0, 0, 181, 17, 1, 0, 0, 0, 182, 187, 3, 30, 15, 0, 183, 184, 5, 5, 0, 0, 184, 186, 3, 30, 15, 0, 185, 183, 1, 0, 0, 0, 186, 189, 1, 0, 0, 0, 187, 185, 1, 0, 0, 0, 187, 188, 1, 0, 0, 0, 188, 19, 1, 0, 0, 0, 189, 187, 1, 0, 0, 0, 190, 191, 7, 2, 0, 0, 191, 21, 1, 0, 0, 0, 192, 193, 7, 3, 0, 0, 193, 194, 5, 1, 0, 0, 194, 195, 3, 24, 12, 0, 195, 196, 5, 2, 0, 0, 196, 23, 1, 0, 0, 0, 197, 202, 3, 26, 13, 0, 198, 199, 5, 5, 0, 0, 199, 201, 3, 26, 13, 0, 200, 198, 1, 0, 0, 0, 201, 204, 1, 0, 0, 0, 202, 200, 1, 0, 0, 0, 202, 203, 1, 0, 0, 0, 203, 25, 1, 0, 0, 0, 204, 202, 1, 0, 0, 0, 205, 209, 3, 32, 16, 0, 206, 209, 3, 30, 15, 0, 207, 209, 3, 28, 14, 0, 208, 205, 1, 0, 0, 0, 208, 206, 1, 0, 0, 0, 208, 207, 1, 0, 0, 0, 209, 27, 1, 0, 0, 0, 210, 211, 5, 3, 0, 0, 211, 212, 3, 18, 9, 0, 212, 213, 5, 4, 0, 0, 213, 29, 1, 0, 0, 0, 214, 215, 7, 4, 0, 0, 215, 31, 1, 0, 0, 0, 216, 217, 5, 30, 0, 0, 217, 33, 1, 0, 0, 0, 11, 44, 51, 53, 57, 70, 149, 163, 180, 187, 202, 208] \ No newline at end of file +[4, 1, 33, 227, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 5, 2, 45, 8, 2, 10, 2, 12, 2, 48, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 54, 8, 3, 10, 3, 12, 3, 57, 9, 3, 1, 4, 3, 4, 60, 8, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 74, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 153, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 167, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 184, 8, 8, 1, 9, 1, 9, 1, 9, 5, 9, 189, 8, 9, 10, 9, 12, 9, 192, 9, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 5, 13, 209, 8, 13, 10, 13, 12, 13, 212, 9, 13, 1, 14, 1, 14, 1, 14, 3, 14, 217, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 0, 0, 18, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 0, 5, 1, 0, 7, 8, 1, 0, 13, 14, 2, 0, 30, 30, 33, 33, 1, 0, 23, 26, 1, 0, 28, 31, 243, 0, 36, 1, 0, 0, 0, 2, 39, 1, 0, 0, 0, 4, 41, 1, 0, 0, 0, 6, 49, 1, 0, 0, 0, 8, 59, 1, 0, 0, 0, 10, 73, 1, 0, 0, 0, 12, 152, 1, 0, 0, 0, 14, 166, 1, 0, 0, 0, 16, 183, 1, 0, 0, 0, 18, 185, 1, 0, 0, 0, 20, 193, 1, 0, 0, 0, 22, 195, 1, 0, 0, 0, 24, 200, 1, 0, 0, 0, 26, 205, 1, 0, 0, 0, 28, 216, 1, 0, 0, 0, 30, 218, 1, 0, 0, 0, 32, 222, 1, 0, 0, 0, 34, 224, 1, 0, 0, 0, 36, 37, 3, 2, 1, 0, 37, 38, 5, 0, 0, 1, 38, 1, 1, 0, 0, 0, 39, 40, 3, 4, 2, 0, 40, 3, 1, 0, 0, 0, 41, 46, 3, 6, 3, 0, 42, 43, 5, 22, 0, 0, 43, 45, 3, 6, 3, 0, 44, 42, 1, 0, 0, 0, 45, 48, 1, 0, 0, 0, 46, 44, 1, 0, 0, 0, 46, 47, 1, 0, 0, 0, 47, 5, 1, 0, 0, 0, 48, 46, 1, 0, 0, 0, 49, 55, 3, 8, 4, 0, 50, 51, 5, 21, 0, 0, 51, 54, 3, 8, 4, 0, 52, 54, 3, 8, 4, 0, 53, 50, 1, 0, 0, 0, 53, 52, 1, 0, 0, 0, 54, 57, 1, 0, 0, 0, 55, 53, 1, 0, 0, 0, 55, 56, 1, 0, 0, 0, 56, 7, 1, 0, 0, 0, 57, 55, 1, 0, 0, 0, 58, 60, 5, 20, 0, 0, 59, 58, 1, 0, 0, 0, 59, 60, 1, 0, 0, 0, 60, 61, 1, 0, 0, 0, 61, 62, 3, 10, 5, 0, 62, 9, 1, 0, 0, 0, 63, 64, 5, 1, 0, 0, 64, 65, 3, 4, 2, 0, 65, 66, 5, 2, 0, 0, 66, 74, 1, 0, 0, 0, 67, 74, 3, 12, 6, 0, 68, 74, 3, 22, 11, 0, 69, 74, 3, 24, 12, 0, 70, 74, 3, 20, 10, 0, 71, 74, 3, 34, 17, 0, 72, 74, 3, 32, 16, 0, 73, 63, 1, 0, 0, 0, 73, 67, 1, 0, 0, 0, 73, 68, 1, 0, 0, 0, 73, 69, 1, 0, 0, 0, 73, 70, 1, 0, 0, 0, 73, 71, 1, 0, 0, 0, 73, 72, 1, 0, 0, 0, 74, 11, 1, 0, 0, 0, 75, 76, 3, 34, 17, 0, 76, 77, 5, 6, 0, 0, 77, 78, 3, 32, 16, 0, 78, 153, 1, 0, 0, 0, 79, 80, 3, 34, 17, 0, 80, 81, 7, 0, 0, 0, 81, 82, 3, 32, 16, 0, 82, 153, 1, 0, 0, 0, 83, 84, 3, 34, 17, 0, 84, 85, 5, 9, 0, 0, 85, 86, 3, 32, 16, 0, 86, 153, 1, 0, 0, 0, 87, 88, 3, 34, 17, 0, 88, 89, 5, 10, 0, 0, 89, 90, 3, 32, 16, 0, 90, 153, 1, 0, 0, 0, 91, 92, 3, 34, 17, 0, 92, 93, 5, 11, 0, 0, 93, 94, 3, 32, 16, 0, 94, 153, 1, 0, 0, 0, 95, 96, 3, 34, 17, 0, 96, 97, 5, 12, 0, 0, 97, 98, 3, 32, 16, 0, 98, 153, 1, 0, 0, 0, 99, 100, 3, 34, 17, 0, 100, 101, 7, 1, 0, 0, 101, 102, 3, 32, 16, 0, 102, 153, 1, 0, 0, 0, 103, 104, 3, 34, 17, 0, 104, 105, 5, 20, 0, 0, 105, 106, 7, 1, 0, 0, 106, 107, 3, 32, 16, 0, 107, 153, 1, 0, 0, 0, 108, 109, 3, 34, 17, 0, 109, 110, 5, 15, 0, 0, 110, 111, 3, 32, 16, 0, 111, 112, 5, 21, 0, 0, 112, 113, 3, 32, 16, 0, 113, 153, 1, 0, 0, 0, 114, 115, 3, 34, 17, 0, 115, 116, 5, 20, 0, 0, 116, 117, 5, 15, 0, 0, 117, 118, 3, 32, 16, 0, 118, 119, 5, 21, 0, 0, 119, 120, 3, 32, 16, 0, 120, 153, 1, 0, 0, 0, 121, 122, 3, 34, 17, 0, 122, 123, 3, 14, 7, 0, 123, 153, 1, 0, 0, 0, 124, 125, 3, 34, 17, 0, 125, 126, 3, 16, 8, 0, 126, 153, 1, 0, 0, 0, 127, 128, 3, 34, 17, 0, 128, 129, 5, 16, 0, 0, 129, 153, 1, 0, 0, 0, 130, 131, 3, 34, 17, 0, 131, 132, 5, 20, 0, 0, 132, 133, 5, 16, 0, 0, 133, 153, 1, 0, 0, 0, 134, 135, 3, 34, 17, 0, 135, 136, 5, 17, 0, 0, 136, 137, 3, 32, 16, 0, 137, 153, 1, 0, 0, 0, 138, 139, 3, 34, 17, 0, 139, 140, 5, 20, 0, 0, 140, 141, 5, 17, 0, 0, 141, 142, 3, 32, 16, 0, 142, 153, 1, 0, 0, 0, 143, 144, 3, 34, 17, 0, 144, 145, 5, 18, 0, 0, 145, 146, 3, 32, 16, 0, 146, 153, 1, 0, 0, 0, 147, 148, 3, 34, 17, 0, 148, 149, 5, 20, 0, 0, 149, 150, 5, 18, 0, 0, 150, 151, 3, 32, 16, 0, 151, 153, 1, 0, 0, 0, 152, 75, 1, 0, 0, 0, 152, 79, 1, 0, 0, 0, 152, 83, 1, 0, 0, 0, 152, 87, 1, 0, 0, 0, 152, 91, 1, 0, 0, 0, 152, 95, 1, 0, 0, 0, 152, 99, 1, 0, 0, 0, 152, 103, 1, 0, 0, 0, 152, 108, 1, 0, 0, 0, 152, 114, 1, 0, 0, 0, 152, 121, 1, 0, 0, 0, 152, 124, 1, 0, 0, 0, 152, 127, 1, 0, 0, 0, 152, 130, 1, 0, 0, 0, 152, 134, 1, 0, 0, 0, 152, 138, 1, 0, 0, 0, 152, 143, 1, 0, 0, 0, 152, 147, 1, 0, 0, 0, 153, 13, 1, 0, 0, 0, 154, 155, 5, 19, 0, 0, 155, 156, 5, 1, 0, 0, 156, 157, 3, 18, 9, 0, 157, 158, 5, 2, 0, 0, 158, 167, 1, 0, 0, 0, 159, 160, 5, 19, 0, 0, 160, 161, 5, 3, 0, 0, 161, 162, 3, 18, 9, 0, 162, 163, 5, 4, 0, 0, 163, 167, 1, 0, 0, 0, 164, 165, 5, 19, 0, 0, 165, 167, 3, 32, 16, 0, 166, 154, 1, 0, 0, 0, 166, 159, 1, 0, 0, 0, 166, 164, 1, 0, 0, 0, 167, 15, 1, 0, 0, 0, 168, 169, 5, 20, 0, 0, 169, 170, 5, 19, 0, 0, 170, 171, 5, 1, 0, 0, 171, 172, 3, 18, 9, 0, 172, 173, 5, 2, 0, 0, 173, 184, 1, 0, 0, 0, 174, 175, 5, 20, 0, 0, 175, 176, 5, 19, 0, 0, 176, 177, 5, 3, 0, 0, 177, 178, 3, 18, 9, 0, 178, 179, 5, 4, 0, 0, 179, 184, 1, 0, 0, 0, 180, 181, 5, 20, 0, 0, 181, 182, 5, 19, 0, 0, 182, 184, 3, 32, 16, 0, 183, 168, 1, 0, 0, 0, 183, 174, 1, 0, 0, 0, 183, 180, 1, 0, 0, 0, 184, 17, 1, 0, 0, 0, 185, 190, 3, 32, 16, 0, 186, 187, 5, 5, 0, 0, 187, 189, 3, 32, 16, 0, 188, 186, 1, 0, 0, 0, 189, 192, 1, 0, 0, 0, 190, 188, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 19, 1, 0, 0, 0, 192, 190, 1, 0, 0, 0, 193, 194, 7, 2, 0, 0, 194, 21, 1, 0, 0, 0, 195, 196, 7, 3, 0, 0, 196, 197, 5, 1, 0, 0, 197, 198, 3, 26, 13, 0, 198, 199, 5, 2, 0, 0, 199, 23, 1, 0, 0, 0, 200, 201, 5, 27, 0, 0, 201, 202, 5, 1, 0, 0, 202, 203, 3, 26, 13, 0, 203, 204, 5, 2, 0, 0, 204, 25, 1, 0, 0, 0, 205, 210, 3, 28, 14, 0, 206, 207, 5, 5, 0, 0, 207, 209, 3, 28, 14, 0, 208, 206, 1, 0, 0, 0, 209, 212, 1, 0, 0, 0, 210, 208, 1, 0, 0, 0, 210, 211, 1, 0, 0, 0, 211, 27, 1, 0, 0, 0, 212, 210, 1, 0, 0, 0, 213, 217, 3, 34, 17, 0, 214, 217, 3, 32, 16, 0, 215, 217, 3, 30, 15, 0, 216, 213, 1, 0, 0, 0, 216, 214, 1, 0, 0, 0, 216, 215, 1, 0, 0, 0, 217, 29, 1, 0, 0, 0, 218, 219, 5, 3, 0, 0, 219, 220, 3, 18, 9, 0, 220, 221, 5, 4, 0, 0, 221, 31, 1, 0, 0, 0, 222, 223, 7, 4, 0, 0, 223, 33, 1, 0, 0, 0, 224, 225, 5, 31, 0, 0, 225, 35, 1, 0, 0, 0, 11, 46, 53, 55, 59, 73, 152, 166, 183, 190, 210, 216] \ No newline at end of file diff --git a/pkg/parser/filterquery/grammar/FilterQuery.tokens b/pkg/parser/filterquery/grammar/FilterQuery.tokens index 615858f4967..8337dd509ec 100644 --- a/pkg/parser/filterquery/grammar/FilterQuery.tokens +++ b/pkg/parser/filterquery/grammar/FilterQuery.tokens @@ -24,12 +24,13 @@ HASTOKEN=23 HAS=24 HASANY=25 HASALL=26 -BOOL=27 -NUMBER=28 -QUOTED_TEXT=29 -KEY=30 -WS=31 -FREETEXT=32 +SEARCH=27 +BOOL=28 +NUMBER=29 +QUOTED_TEXT=30 +KEY=31 +WS=32 +FREETEXT=33 '('=1 ')'=2 '['=3 diff --git a/pkg/parser/filterquery/grammar/FilterQueryLexer.interp b/pkg/parser/filterquery/grammar/FilterQueryLexer.interp index bb681c90913..5db7c375a1d 100644 --- a/pkg/parser/filterquery/grammar/FilterQueryLexer.interp +++ b/pkg/parser/filterquery/grammar/FilterQueryLexer.interp @@ -32,6 +32,7 @@ null null null null +null token symbolic names: null @@ -61,6 +62,7 @@ HASTOKEN HAS HASANY HASALL +SEARCH BOOL NUMBER QUOTED_TEXT @@ -95,6 +97,7 @@ HASTOKEN HAS HASANY HASALL +SEARCH BOOL SIGN NUMBER @@ -115,4 +118,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 32, 320, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 3, 5, 89, 8, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 132, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 149, 8, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 201, 8, 26, 1, 27, 1, 27, 1, 28, 3, 28, 206, 8, 28, 1, 28, 4, 28, 209, 8, 28, 11, 28, 12, 28, 210, 1, 28, 1, 28, 5, 28, 215, 8, 28, 10, 28, 12, 28, 218, 9, 28, 3, 28, 220, 8, 28, 1, 28, 1, 28, 3, 28, 224, 8, 28, 1, 28, 4, 28, 227, 8, 28, 11, 28, 12, 28, 228, 3, 28, 231, 8, 28, 1, 28, 3, 28, 234, 8, 28, 1, 28, 1, 28, 4, 28, 238, 8, 28, 11, 28, 12, 28, 239, 1, 28, 1, 28, 3, 28, 244, 8, 28, 1, 28, 4, 28, 247, 8, 28, 11, 28, 12, 28, 248, 3, 28, 251, 8, 28, 3, 28, 253, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 259, 8, 29, 10, 29, 12, 29, 262, 9, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 269, 8, 29, 10, 29, 12, 29, 272, 9, 29, 1, 29, 3, 29, 275, 8, 29, 1, 30, 1, 30, 5, 30, 279, 8, 30, 10, 30, 12, 30, 282, 9, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 4, 33, 298, 8, 33, 11, 33, 12, 33, 299, 5, 33, 302, 8, 33, 10, 33, 12, 33, 305, 9, 33, 1, 34, 4, 34, 308, 8, 34, 11, 34, 12, 34, 309, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 4, 36, 317, 8, 36, 11, 36, 12, 36, 318, 0, 0, 37, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 0, 57, 28, 59, 29, 61, 0, 63, 0, 65, 0, 67, 30, 69, 31, 71, 0, 73, 32, 1, 0, 29, 2, 0, 76, 76, 108, 108, 2, 0, 73, 73, 105, 105, 2, 0, 75, 75, 107, 107, 2, 0, 69, 69, 101, 101, 2, 0, 66, 66, 98, 98, 2, 0, 84, 84, 116, 116, 2, 0, 87, 87, 119, 119, 2, 0, 78, 78, 110, 110, 2, 0, 88, 88, 120, 120, 2, 0, 83, 83, 115, 115, 2, 0, 82, 82, 114, 114, 2, 0, 71, 71, 103, 103, 2, 0, 80, 80, 112, 112, 2, 0, 67, 67, 99, 99, 2, 0, 79, 79, 111, 111, 2, 0, 65, 65, 97, 97, 2, 0, 68, 68, 100, 100, 2, 0, 72, 72, 104, 104, 2, 0, 89, 89, 121, 121, 2, 0, 85, 85, 117, 117, 2, 0, 70, 70, 102, 102, 2, 0, 43, 43, 45, 45, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 4, 0, 35, 36, 64, 90, 95, 95, 97, 123, 7, 0, 35, 36, 45, 45, 47, 58, 64, 90, 95, 95, 97, 123, 125, 125, 3, 0, 9, 10, 13, 13, 32, 32, 1, 0, 48, 57, 8, 0, 9, 10, 13, 13, 32, 34, 39, 41, 44, 44, 60, 62, 91, 91, 93, 93, 344, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 1, 75, 1, 0, 0, 0, 3, 77, 1, 0, 0, 0, 5, 79, 1, 0, 0, 0, 7, 81, 1, 0, 0, 0, 9, 83, 1, 0, 0, 0, 11, 88, 1, 0, 0, 0, 13, 90, 1, 0, 0, 0, 15, 93, 1, 0, 0, 0, 17, 96, 1, 0, 0, 0, 19, 98, 1, 0, 0, 0, 21, 101, 1, 0, 0, 0, 23, 103, 1, 0, 0, 0, 25, 106, 1, 0, 0, 0, 27, 111, 1, 0, 0, 0, 29, 117, 1, 0, 0, 0, 31, 125, 1, 0, 0, 0, 33, 133, 1, 0, 0, 0, 35, 140, 1, 0, 0, 0, 37, 150, 1, 0, 0, 0, 39, 153, 1, 0, 0, 0, 41, 157, 1, 0, 0, 0, 43, 161, 1, 0, 0, 0, 45, 164, 1, 0, 0, 0, 47, 173, 1, 0, 0, 0, 49, 177, 1, 0, 0, 0, 51, 184, 1, 0, 0, 0, 53, 200, 1, 0, 0, 0, 55, 202, 1, 0, 0, 0, 57, 252, 1, 0, 0, 0, 59, 274, 1, 0, 0, 0, 61, 276, 1, 0, 0, 0, 63, 283, 1, 0, 0, 0, 65, 286, 1, 0, 0, 0, 67, 290, 1, 0, 0, 0, 69, 307, 1, 0, 0, 0, 71, 313, 1, 0, 0, 0, 73, 316, 1, 0, 0, 0, 75, 76, 5, 40, 0, 0, 76, 2, 1, 0, 0, 0, 77, 78, 5, 41, 0, 0, 78, 4, 1, 0, 0, 0, 79, 80, 5, 91, 0, 0, 80, 6, 1, 0, 0, 0, 81, 82, 5, 93, 0, 0, 82, 8, 1, 0, 0, 0, 83, 84, 5, 44, 0, 0, 84, 10, 1, 0, 0, 0, 85, 89, 5, 61, 0, 0, 86, 87, 5, 61, 0, 0, 87, 89, 5, 61, 0, 0, 88, 85, 1, 0, 0, 0, 88, 86, 1, 0, 0, 0, 89, 12, 1, 0, 0, 0, 90, 91, 5, 33, 0, 0, 91, 92, 5, 61, 0, 0, 92, 14, 1, 0, 0, 0, 93, 94, 5, 60, 0, 0, 94, 95, 5, 62, 0, 0, 95, 16, 1, 0, 0, 0, 96, 97, 5, 60, 0, 0, 97, 18, 1, 0, 0, 0, 98, 99, 5, 60, 0, 0, 99, 100, 5, 61, 0, 0, 100, 20, 1, 0, 0, 0, 101, 102, 5, 62, 0, 0, 102, 22, 1, 0, 0, 0, 103, 104, 5, 62, 0, 0, 104, 105, 5, 61, 0, 0, 105, 24, 1, 0, 0, 0, 106, 107, 7, 0, 0, 0, 107, 108, 7, 1, 0, 0, 108, 109, 7, 2, 0, 0, 109, 110, 7, 3, 0, 0, 110, 26, 1, 0, 0, 0, 111, 112, 7, 1, 0, 0, 112, 113, 7, 0, 0, 0, 113, 114, 7, 1, 0, 0, 114, 115, 7, 2, 0, 0, 115, 116, 7, 3, 0, 0, 116, 28, 1, 0, 0, 0, 117, 118, 7, 4, 0, 0, 118, 119, 7, 3, 0, 0, 119, 120, 7, 5, 0, 0, 120, 121, 7, 6, 0, 0, 121, 122, 7, 3, 0, 0, 122, 123, 7, 3, 0, 0, 123, 124, 7, 7, 0, 0, 124, 30, 1, 0, 0, 0, 125, 126, 7, 3, 0, 0, 126, 127, 7, 8, 0, 0, 127, 128, 7, 1, 0, 0, 128, 129, 7, 9, 0, 0, 129, 131, 7, 5, 0, 0, 130, 132, 7, 9, 0, 0, 131, 130, 1, 0, 0, 0, 131, 132, 1, 0, 0, 0, 132, 32, 1, 0, 0, 0, 133, 134, 7, 10, 0, 0, 134, 135, 7, 3, 0, 0, 135, 136, 7, 11, 0, 0, 136, 137, 7, 3, 0, 0, 137, 138, 7, 8, 0, 0, 138, 139, 7, 12, 0, 0, 139, 34, 1, 0, 0, 0, 140, 141, 7, 13, 0, 0, 141, 142, 7, 14, 0, 0, 142, 143, 7, 7, 0, 0, 143, 144, 7, 5, 0, 0, 144, 145, 7, 15, 0, 0, 145, 146, 7, 1, 0, 0, 146, 148, 7, 7, 0, 0, 147, 149, 7, 9, 0, 0, 148, 147, 1, 0, 0, 0, 148, 149, 1, 0, 0, 0, 149, 36, 1, 0, 0, 0, 150, 151, 7, 1, 0, 0, 151, 152, 7, 7, 0, 0, 152, 38, 1, 0, 0, 0, 153, 154, 7, 7, 0, 0, 154, 155, 7, 14, 0, 0, 155, 156, 7, 5, 0, 0, 156, 40, 1, 0, 0, 0, 157, 158, 7, 15, 0, 0, 158, 159, 7, 7, 0, 0, 159, 160, 7, 16, 0, 0, 160, 42, 1, 0, 0, 0, 161, 162, 7, 14, 0, 0, 162, 163, 7, 10, 0, 0, 163, 44, 1, 0, 0, 0, 164, 165, 7, 17, 0, 0, 165, 166, 7, 15, 0, 0, 166, 167, 7, 9, 0, 0, 167, 168, 7, 5, 0, 0, 168, 169, 7, 14, 0, 0, 169, 170, 7, 2, 0, 0, 170, 171, 7, 3, 0, 0, 171, 172, 7, 7, 0, 0, 172, 46, 1, 0, 0, 0, 173, 174, 7, 17, 0, 0, 174, 175, 7, 15, 0, 0, 175, 176, 7, 9, 0, 0, 176, 48, 1, 0, 0, 0, 177, 178, 7, 17, 0, 0, 178, 179, 7, 15, 0, 0, 179, 180, 7, 9, 0, 0, 180, 181, 7, 15, 0, 0, 181, 182, 7, 7, 0, 0, 182, 183, 7, 18, 0, 0, 183, 50, 1, 0, 0, 0, 184, 185, 7, 17, 0, 0, 185, 186, 7, 15, 0, 0, 186, 187, 7, 9, 0, 0, 187, 188, 7, 15, 0, 0, 188, 189, 7, 0, 0, 0, 189, 190, 7, 0, 0, 0, 190, 52, 1, 0, 0, 0, 191, 192, 7, 5, 0, 0, 192, 193, 7, 10, 0, 0, 193, 194, 7, 19, 0, 0, 194, 201, 7, 3, 0, 0, 195, 196, 7, 20, 0, 0, 196, 197, 7, 15, 0, 0, 197, 198, 7, 0, 0, 0, 198, 199, 7, 9, 0, 0, 199, 201, 7, 3, 0, 0, 200, 191, 1, 0, 0, 0, 200, 195, 1, 0, 0, 0, 201, 54, 1, 0, 0, 0, 202, 203, 7, 21, 0, 0, 203, 56, 1, 0, 0, 0, 204, 206, 3, 55, 27, 0, 205, 204, 1, 0, 0, 0, 205, 206, 1, 0, 0, 0, 206, 208, 1, 0, 0, 0, 207, 209, 3, 71, 35, 0, 208, 207, 1, 0, 0, 0, 209, 210, 1, 0, 0, 0, 210, 208, 1, 0, 0, 0, 210, 211, 1, 0, 0, 0, 211, 219, 1, 0, 0, 0, 212, 216, 5, 46, 0, 0, 213, 215, 3, 71, 35, 0, 214, 213, 1, 0, 0, 0, 215, 218, 1, 0, 0, 0, 216, 214, 1, 0, 0, 0, 216, 217, 1, 0, 0, 0, 217, 220, 1, 0, 0, 0, 218, 216, 1, 0, 0, 0, 219, 212, 1, 0, 0, 0, 219, 220, 1, 0, 0, 0, 220, 230, 1, 0, 0, 0, 221, 223, 7, 3, 0, 0, 222, 224, 3, 55, 27, 0, 223, 222, 1, 0, 0, 0, 223, 224, 1, 0, 0, 0, 224, 226, 1, 0, 0, 0, 225, 227, 3, 71, 35, 0, 226, 225, 1, 0, 0, 0, 227, 228, 1, 0, 0, 0, 228, 226, 1, 0, 0, 0, 228, 229, 1, 0, 0, 0, 229, 231, 1, 0, 0, 0, 230, 221, 1, 0, 0, 0, 230, 231, 1, 0, 0, 0, 231, 253, 1, 0, 0, 0, 232, 234, 3, 55, 27, 0, 233, 232, 1, 0, 0, 0, 233, 234, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 237, 5, 46, 0, 0, 236, 238, 3, 71, 35, 0, 237, 236, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 237, 1, 0, 0, 0, 239, 240, 1, 0, 0, 0, 240, 250, 1, 0, 0, 0, 241, 243, 7, 3, 0, 0, 242, 244, 3, 55, 27, 0, 243, 242, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 246, 1, 0, 0, 0, 245, 247, 3, 71, 35, 0, 246, 245, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 246, 1, 0, 0, 0, 248, 249, 1, 0, 0, 0, 249, 251, 1, 0, 0, 0, 250, 241, 1, 0, 0, 0, 250, 251, 1, 0, 0, 0, 251, 253, 1, 0, 0, 0, 252, 205, 1, 0, 0, 0, 252, 233, 1, 0, 0, 0, 253, 58, 1, 0, 0, 0, 254, 260, 5, 34, 0, 0, 255, 259, 8, 22, 0, 0, 256, 257, 5, 92, 0, 0, 257, 259, 9, 0, 0, 0, 258, 255, 1, 0, 0, 0, 258, 256, 1, 0, 0, 0, 259, 262, 1, 0, 0, 0, 260, 258, 1, 0, 0, 0, 260, 261, 1, 0, 0, 0, 261, 263, 1, 0, 0, 0, 262, 260, 1, 0, 0, 0, 263, 275, 5, 34, 0, 0, 264, 270, 5, 39, 0, 0, 265, 269, 8, 23, 0, 0, 266, 267, 5, 92, 0, 0, 267, 269, 9, 0, 0, 0, 268, 265, 1, 0, 0, 0, 268, 266, 1, 0, 0, 0, 269, 272, 1, 0, 0, 0, 270, 268, 1, 0, 0, 0, 270, 271, 1, 0, 0, 0, 271, 273, 1, 0, 0, 0, 272, 270, 1, 0, 0, 0, 273, 275, 5, 39, 0, 0, 274, 254, 1, 0, 0, 0, 274, 264, 1, 0, 0, 0, 275, 60, 1, 0, 0, 0, 276, 280, 7, 24, 0, 0, 277, 279, 7, 25, 0, 0, 278, 277, 1, 0, 0, 0, 279, 282, 1, 0, 0, 0, 280, 278, 1, 0, 0, 0, 280, 281, 1, 0, 0, 0, 281, 62, 1, 0, 0, 0, 282, 280, 1, 0, 0, 0, 283, 284, 5, 91, 0, 0, 284, 285, 5, 93, 0, 0, 285, 64, 1, 0, 0, 0, 286, 287, 5, 91, 0, 0, 287, 288, 5, 42, 0, 0, 288, 289, 5, 93, 0, 0, 289, 66, 1, 0, 0, 0, 290, 303, 3, 61, 30, 0, 291, 292, 5, 46, 0, 0, 292, 302, 3, 61, 30, 0, 293, 302, 3, 63, 31, 0, 294, 302, 3, 65, 32, 0, 295, 297, 5, 46, 0, 0, 296, 298, 3, 71, 35, 0, 297, 296, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, 299, 297, 1, 0, 0, 0, 299, 300, 1, 0, 0, 0, 300, 302, 1, 0, 0, 0, 301, 291, 1, 0, 0, 0, 301, 293, 1, 0, 0, 0, 301, 294, 1, 0, 0, 0, 301, 295, 1, 0, 0, 0, 302, 305, 1, 0, 0, 0, 303, 301, 1, 0, 0, 0, 303, 304, 1, 0, 0, 0, 304, 68, 1, 0, 0, 0, 305, 303, 1, 0, 0, 0, 306, 308, 7, 26, 0, 0, 307, 306, 1, 0, 0, 0, 308, 309, 1, 0, 0, 0, 309, 307, 1, 0, 0, 0, 309, 310, 1, 0, 0, 0, 310, 311, 1, 0, 0, 0, 311, 312, 6, 34, 0, 0, 312, 70, 1, 0, 0, 0, 313, 314, 7, 27, 0, 0, 314, 72, 1, 0, 0, 0, 315, 317, 8, 28, 0, 0, 316, 315, 1, 0, 0, 0, 317, 318, 1, 0, 0, 0, 318, 316, 1, 0, 0, 0, 318, 319, 1, 0, 0, 0, 319, 74, 1, 0, 0, 0, 29, 0, 88, 131, 148, 200, 205, 210, 216, 219, 223, 228, 230, 233, 239, 243, 248, 250, 252, 258, 260, 268, 270, 274, 280, 299, 301, 303, 309, 318, 1, 6, 0, 0] \ No newline at end of file +[4, 0, 33, 329, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 3, 5, 91, 8, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 134, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 151, 8, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 210, 8, 27, 1, 28, 1, 28, 1, 29, 3, 29, 215, 8, 29, 1, 29, 4, 29, 218, 8, 29, 11, 29, 12, 29, 219, 1, 29, 1, 29, 5, 29, 224, 8, 29, 10, 29, 12, 29, 227, 9, 29, 3, 29, 229, 8, 29, 1, 29, 1, 29, 3, 29, 233, 8, 29, 1, 29, 4, 29, 236, 8, 29, 11, 29, 12, 29, 237, 3, 29, 240, 8, 29, 1, 29, 3, 29, 243, 8, 29, 1, 29, 1, 29, 4, 29, 247, 8, 29, 11, 29, 12, 29, 248, 1, 29, 1, 29, 3, 29, 253, 8, 29, 1, 29, 4, 29, 256, 8, 29, 11, 29, 12, 29, 257, 3, 29, 260, 8, 29, 3, 29, 262, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 268, 8, 30, 10, 30, 12, 30, 271, 9, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 278, 8, 30, 10, 30, 12, 30, 281, 9, 30, 1, 30, 3, 30, 284, 8, 30, 1, 31, 1, 31, 5, 31, 288, 8, 31, 10, 31, 12, 31, 291, 9, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 4, 34, 307, 8, 34, 11, 34, 12, 34, 308, 5, 34, 311, 8, 34, 10, 34, 12, 34, 314, 9, 34, 1, 35, 4, 35, 317, 8, 35, 11, 35, 12, 35, 318, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 4, 37, 326, 8, 37, 11, 37, 12, 37, 327, 0, 0, 38, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 0, 59, 29, 61, 30, 63, 0, 65, 0, 67, 0, 69, 31, 71, 32, 73, 0, 75, 33, 1, 0, 29, 2, 0, 76, 76, 108, 108, 2, 0, 73, 73, 105, 105, 2, 0, 75, 75, 107, 107, 2, 0, 69, 69, 101, 101, 2, 0, 66, 66, 98, 98, 2, 0, 84, 84, 116, 116, 2, 0, 87, 87, 119, 119, 2, 0, 78, 78, 110, 110, 2, 0, 88, 88, 120, 120, 2, 0, 83, 83, 115, 115, 2, 0, 82, 82, 114, 114, 2, 0, 71, 71, 103, 103, 2, 0, 80, 80, 112, 112, 2, 0, 67, 67, 99, 99, 2, 0, 79, 79, 111, 111, 2, 0, 65, 65, 97, 97, 2, 0, 68, 68, 100, 100, 2, 0, 72, 72, 104, 104, 2, 0, 89, 89, 121, 121, 2, 0, 85, 85, 117, 117, 2, 0, 70, 70, 102, 102, 2, 0, 43, 43, 45, 45, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 4, 0, 35, 36, 64, 90, 95, 95, 97, 123, 7, 0, 35, 36, 45, 45, 47, 58, 64, 90, 95, 95, 97, 123, 125, 125, 3, 0, 9, 10, 13, 13, 32, 32, 1, 0, 48, 57, 8, 0, 9, 10, 13, 13, 32, 34, 39, 41, 44, 44, 60, 62, 91, 91, 93, 93, 353, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 1, 77, 1, 0, 0, 0, 3, 79, 1, 0, 0, 0, 5, 81, 1, 0, 0, 0, 7, 83, 1, 0, 0, 0, 9, 85, 1, 0, 0, 0, 11, 90, 1, 0, 0, 0, 13, 92, 1, 0, 0, 0, 15, 95, 1, 0, 0, 0, 17, 98, 1, 0, 0, 0, 19, 100, 1, 0, 0, 0, 21, 103, 1, 0, 0, 0, 23, 105, 1, 0, 0, 0, 25, 108, 1, 0, 0, 0, 27, 113, 1, 0, 0, 0, 29, 119, 1, 0, 0, 0, 31, 127, 1, 0, 0, 0, 33, 135, 1, 0, 0, 0, 35, 142, 1, 0, 0, 0, 37, 152, 1, 0, 0, 0, 39, 155, 1, 0, 0, 0, 41, 159, 1, 0, 0, 0, 43, 163, 1, 0, 0, 0, 45, 166, 1, 0, 0, 0, 47, 175, 1, 0, 0, 0, 49, 179, 1, 0, 0, 0, 51, 186, 1, 0, 0, 0, 53, 193, 1, 0, 0, 0, 55, 209, 1, 0, 0, 0, 57, 211, 1, 0, 0, 0, 59, 261, 1, 0, 0, 0, 61, 283, 1, 0, 0, 0, 63, 285, 1, 0, 0, 0, 65, 292, 1, 0, 0, 0, 67, 295, 1, 0, 0, 0, 69, 299, 1, 0, 0, 0, 71, 316, 1, 0, 0, 0, 73, 322, 1, 0, 0, 0, 75, 325, 1, 0, 0, 0, 77, 78, 5, 40, 0, 0, 78, 2, 1, 0, 0, 0, 79, 80, 5, 41, 0, 0, 80, 4, 1, 0, 0, 0, 81, 82, 5, 91, 0, 0, 82, 6, 1, 0, 0, 0, 83, 84, 5, 93, 0, 0, 84, 8, 1, 0, 0, 0, 85, 86, 5, 44, 0, 0, 86, 10, 1, 0, 0, 0, 87, 91, 5, 61, 0, 0, 88, 89, 5, 61, 0, 0, 89, 91, 5, 61, 0, 0, 90, 87, 1, 0, 0, 0, 90, 88, 1, 0, 0, 0, 91, 12, 1, 0, 0, 0, 92, 93, 5, 33, 0, 0, 93, 94, 5, 61, 0, 0, 94, 14, 1, 0, 0, 0, 95, 96, 5, 60, 0, 0, 96, 97, 5, 62, 0, 0, 97, 16, 1, 0, 0, 0, 98, 99, 5, 60, 0, 0, 99, 18, 1, 0, 0, 0, 100, 101, 5, 60, 0, 0, 101, 102, 5, 61, 0, 0, 102, 20, 1, 0, 0, 0, 103, 104, 5, 62, 0, 0, 104, 22, 1, 0, 0, 0, 105, 106, 5, 62, 0, 0, 106, 107, 5, 61, 0, 0, 107, 24, 1, 0, 0, 0, 108, 109, 7, 0, 0, 0, 109, 110, 7, 1, 0, 0, 110, 111, 7, 2, 0, 0, 111, 112, 7, 3, 0, 0, 112, 26, 1, 0, 0, 0, 113, 114, 7, 1, 0, 0, 114, 115, 7, 0, 0, 0, 115, 116, 7, 1, 0, 0, 116, 117, 7, 2, 0, 0, 117, 118, 7, 3, 0, 0, 118, 28, 1, 0, 0, 0, 119, 120, 7, 4, 0, 0, 120, 121, 7, 3, 0, 0, 121, 122, 7, 5, 0, 0, 122, 123, 7, 6, 0, 0, 123, 124, 7, 3, 0, 0, 124, 125, 7, 3, 0, 0, 125, 126, 7, 7, 0, 0, 126, 30, 1, 0, 0, 0, 127, 128, 7, 3, 0, 0, 128, 129, 7, 8, 0, 0, 129, 130, 7, 1, 0, 0, 130, 131, 7, 9, 0, 0, 131, 133, 7, 5, 0, 0, 132, 134, 7, 9, 0, 0, 133, 132, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, 134, 32, 1, 0, 0, 0, 135, 136, 7, 10, 0, 0, 136, 137, 7, 3, 0, 0, 137, 138, 7, 11, 0, 0, 138, 139, 7, 3, 0, 0, 139, 140, 7, 8, 0, 0, 140, 141, 7, 12, 0, 0, 141, 34, 1, 0, 0, 0, 142, 143, 7, 13, 0, 0, 143, 144, 7, 14, 0, 0, 144, 145, 7, 7, 0, 0, 145, 146, 7, 5, 0, 0, 146, 147, 7, 15, 0, 0, 147, 148, 7, 1, 0, 0, 148, 150, 7, 7, 0, 0, 149, 151, 7, 9, 0, 0, 150, 149, 1, 0, 0, 0, 150, 151, 1, 0, 0, 0, 151, 36, 1, 0, 0, 0, 152, 153, 7, 1, 0, 0, 153, 154, 7, 7, 0, 0, 154, 38, 1, 0, 0, 0, 155, 156, 7, 7, 0, 0, 156, 157, 7, 14, 0, 0, 157, 158, 7, 5, 0, 0, 158, 40, 1, 0, 0, 0, 159, 160, 7, 15, 0, 0, 160, 161, 7, 7, 0, 0, 161, 162, 7, 16, 0, 0, 162, 42, 1, 0, 0, 0, 163, 164, 7, 14, 0, 0, 164, 165, 7, 10, 0, 0, 165, 44, 1, 0, 0, 0, 166, 167, 7, 17, 0, 0, 167, 168, 7, 15, 0, 0, 168, 169, 7, 9, 0, 0, 169, 170, 7, 5, 0, 0, 170, 171, 7, 14, 0, 0, 171, 172, 7, 2, 0, 0, 172, 173, 7, 3, 0, 0, 173, 174, 7, 7, 0, 0, 174, 46, 1, 0, 0, 0, 175, 176, 7, 17, 0, 0, 176, 177, 7, 15, 0, 0, 177, 178, 7, 9, 0, 0, 178, 48, 1, 0, 0, 0, 179, 180, 7, 17, 0, 0, 180, 181, 7, 15, 0, 0, 181, 182, 7, 9, 0, 0, 182, 183, 7, 15, 0, 0, 183, 184, 7, 7, 0, 0, 184, 185, 7, 18, 0, 0, 185, 50, 1, 0, 0, 0, 186, 187, 7, 17, 0, 0, 187, 188, 7, 15, 0, 0, 188, 189, 7, 9, 0, 0, 189, 190, 7, 15, 0, 0, 190, 191, 7, 0, 0, 0, 191, 192, 7, 0, 0, 0, 192, 52, 1, 0, 0, 0, 193, 194, 7, 9, 0, 0, 194, 195, 7, 3, 0, 0, 195, 196, 7, 15, 0, 0, 196, 197, 7, 10, 0, 0, 197, 198, 7, 13, 0, 0, 198, 199, 7, 17, 0, 0, 199, 54, 1, 0, 0, 0, 200, 201, 7, 5, 0, 0, 201, 202, 7, 10, 0, 0, 202, 203, 7, 19, 0, 0, 203, 210, 7, 3, 0, 0, 204, 205, 7, 20, 0, 0, 205, 206, 7, 15, 0, 0, 206, 207, 7, 0, 0, 0, 207, 208, 7, 9, 0, 0, 208, 210, 7, 3, 0, 0, 209, 200, 1, 0, 0, 0, 209, 204, 1, 0, 0, 0, 210, 56, 1, 0, 0, 0, 211, 212, 7, 21, 0, 0, 212, 58, 1, 0, 0, 0, 213, 215, 3, 57, 28, 0, 214, 213, 1, 0, 0, 0, 214, 215, 1, 0, 0, 0, 215, 217, 1, 0, 0, 0, 216, 218, 3, 73, 36, 0, 217, 216, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 217, 1, 0, 0, 0, 219, 220, 1, 0, 0, 0, 220, 228, 1, 0, 0, 0, 221, 225, 5, 46, 0, 0, 222, 224, 3, 73, 36, 0, 223, 222, 1, 0, 0, 0, 224, 227, 1, 0, 0, 0, 225, 223, 1, 0, 0, 0, 225, 226, 1, 0, 0, 0, 226, 229, 1, 0, 0, 0, 227, 225, 1, 0, 0, 0, 228, 221, 1, 0, 0, 0, 228, 229, 1, 0, 0, 0, 229, 239, 1, 0, 0, 0, 230, 232, 7, 3, 0, 0, 231, 233, 3, 57, 28, 0, 232, 231, 1, 0, 0, 0, 232, 233, 1, 0, 0, 0, 233, 235, 1, 0, 0, 0, 234, 236, 3, 73, 36, 0, 235, 234, 1, 0, 0, 0, 236, 237, 1, 0, 0, 0, 237, 235, 1, 0, 0, 0, 237, 238, 1, 0, 0, 0, 238, 240, 1, 0, 0, 0, 239, 230, 1, 0, 0, 0, 239, 240, 1, 0, 0, 0, 240, 262, 1, 0, 0, 0, 241, 243, 3, 57, 28, 0, 242, 241, 1, 0, 0, 0, 242, 243, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 246, 5, 46, 0, 0, 245, 247, 3, 73, 36, 0, 246, 245, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 246, 1, 0, 0, 0, 248, 249, 1, 0, 0, 0, 249, 259, 1, 0, 0, 0, 250, 252, 7, 3, 0, 0, 251, 253, 3, 57, 28, 0, 252, 251, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, 253, 255, 1, 0, 0, 0, 254, 256, 3, 73, 36, 0, 255, 254, 1, 0, 0, 0, 256, 257, 1, 0, 0, 0, 257, 255, 1, 0, 0, 0, 257, 258, 1, 0, 0, 0, 258, 260, 1, 0, 0, 0, 259, 250, 1, 0, 0, 0, 259, 260, 1, 0, 0, 0, 260, 262, 1, 0, 0, 0, 261, 214, 1, 0, 0, 0, 261, 242, 1, 0, 0, 0, 262, 60, 1, 0, 0, 0, 263, 269, 5, 34, 0, 0, 264, 268, 8, 22, 0, 0, 265, 266, 5, 92, 0, 0, 266, 268, 9, 0, 0, 0, 267, 264, 1, 0, 0, 0, 267, 265, 1, 0, 0, 0, 268, 271, 1, 0, 0, 0, 269, 267, 1, 0, 0, 0, 269, 270, 1, 0, 0, 0, 270, 272, 1, 0, 0, 0, 271, 269, 1, 0, 0, 0, 272, 284, 5, 34, 0, 0, 273, 279, 5, 39, 0, 0, 274, 278, 8, 23, 0, 0, 275, 276, 5, 92, 0, 0, 276, 278, 9, 0, 0, 0, 277, 274, 1, 0, 0, 0, 277, 275, 1, 0, 0, 0, 278, 281, 1, 0, 0, 0, 279, 277, 1, 0, 0, 0, 279, 280, 1, 0, 0, 0, 280, 282, 1, 0, 0, 0, 281, 279, 1, 0, 0, 0, 282, 284, 5, 39, 0, 0, 283, 263, 1, 0, 0, 0, 283, 273, 1, 0, 0, 0, 284, 62, 1, 0, 0, 0, 285, 289, 7, 24, 0, 0, 286, 288, 7, 25, 0, 0, 287, 286, 1, 0, 0, 0, 288, 291, 1, 0, 0, 0, 289, 287, 1, 0, 0, 0, 289, 290, 1, 0, 0, 0, 290, 64, 1, 0, 0, 0, 291, 289, 1, 0, 0, 0, 292, 293, 5, 91, 0, 0, 293, 294, 5, 93, 0, 0, 294, 66, 1, 0, 0, 0, 295, 296, 5, 91, 0, 0, 296, 297, 5, 42, 0, 0, 297, 298, 5, 93, 0, 0, 298, 68, 1, 0, 0, 0, 299, 312, 3, 63, 31, 0, 300, 301, 5, 46, 0, 0, 301, 311, 3, 63, 31, 0, 302, 311, 3, 65, 32, 0, 303, 311, 3, 67, 33, 0, 304, 306, 5, 46, 0, 0, 305, 307, 3, 73, 36, 0, 306, 305, 1, 0, 0, 0, 307, 308, 1, 0, 0, 0, 308, 306, 1, 0, 0, 0, 308, 309, 1, 0, 0, 0, 309, 311, 1, 0, 0, 0, 310, 300, 1, 0, 0, 0, 310, 302, 1, 0, 0, 0, 310, 303, 1, 0, 0, 0, 310, 304, 1, 0, 0, 0, 311, 314, 1, 0, 0, 0, 312, 310, 1, 0, 0, 0, 312, 313, 1, 0, 0, 0, 313, 70, 1, 0, 0, 0, 314, 312, 1, 0, 0, 0, 315, 317, 7, 26, 0, 0, 316, 315, 1, 0, 0, 0, 317, 318, 1, 0, 0, 0, 318, 316, 1, 0, 0, 0, 318, 319, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 321, 6, 35, 0, 0, 321, 72, 1, 0, 0, 0, 322, 323, 7, 27, 0, 0, 323, 74, 1, 0, 0, 0, 324, 326, 8, 28, 0, 0, 325, 324, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 325, 1, 0, 0, 0, 327, 328, 1, 0, 0, 0, 328, 76, 1, 0, 0, 0, 29, 0, 90, 133, 150, 209, 214, 219, 225, 228, 232, 237, 239, 242, 248, 252, 257, 259, 261, 267, 269, 277, 279, 283, 289, 308, 310, 312, 318, 327, 1, 6, 0, 0] \ No newline at end of file diff --git a/pkg/parser/filterquery/grammar/FilterQueryLexer.tokens b/pkg/parser/filterquery/grammar/FilterQueryLexer.tokens index 615858f4967..8337dd509ec 100644 --- a/pkg/parser/filterquery/grammar/FilterQueryLexer.tokens +++ b/pkg/parser/filterquery/grammar/FilterQueryLexer.tokens @@ -24,12 +24,13 @@ HASTOKEN=23 HAS=24 HASANY=25 HASALL=26 -BOOL=27 -NUMBER=28 -QUOTED_TEXT=29 -KEY=30 -WS=31 -FREETEXT=32 +SEARCH=27 +BOOL=28 +NUMBER=29 +QUOTED_TEXT=30 +KEY=31 +WS=32 +FREETEXT=33 '('=1 ')'=2 '['=3 diff --git a/pkg/parser/filterquery/grammar/filterquery_base_listener.go b/pkg/parser/filterquery/grammar/filterquery_base_listener.go index 5bf4d4671c0..7945d5c93e5 100644 --- a/pkg/parser/filterquery/grammar/filterquery_base_listener.go +++ b/pkg/parser/filterquery/grammar/filterquery_base_listener.go @@ -1,4 +1,4 @@ -// Code generated from grammar/FilterQuery.g4 by ANTLR 4.13.2. DO NOT EDIT. +// Code generated from FilterQuery.g4 by ANTLR 4.13.2. DO NOT EDIT. package parser // FilterQuery @@ -93,6 +93,12 @@ func (s *BaseFilterQueryListener) EnterFunctionCall(ctx *FunctionCallContext) {} // ExitFunctionCall is called when production functionCall is exited. func (s *BaseFilterQueryListener) ExitFunctionCall(ctx *FunctionCallContext) {} +// EnterSearchCall is called when production searchCall is entered. +func (s *BaseFilterQueryListener) EnterSearchCall(ctx *SearchCallContext) {} + +// ExitSearchCall is called when production searchCall is exited. +func (s *BaseFilterQueryListener) ExitSearchCall(ctx *SearchCallContext) {} + // EnterFunctionParamList is called when production functionParamList is entered. func (s *BaseFilterQueryListener) EnterFunctionParamList(ctx *FunctionParamListContext) {} diff --git a/pkg/parser/filterquery/grammar/filterquery_base_visitor.go b/pkg/parser/filterquery/grammar/filterquery_base_visitor.go index dad34525513..adb7b9a37c5 100644 --- a/pkg/parser/filterquery/grammar/filterquery_base_visitor.go +++ b/pkg/parser/filterquery/grammar/filterquery_base_visitor.go @@ -1,4 +1,4 @@ -// Code generated from grammar/FilterQuery.g4 by ANTLR 4.13.2. DO NOT EDIT. +// Code generated from FilterQuery.g4 by ANTLR 4.13.2. DO NOT EDIT. package parser // FilterQuery @@ -56,6 +56,10 @@ func (v *BaseFilterQueryVisitor) VisitFunctionCall(ctx *FunctionCallContext) int return v.VisitChildren(ctx) } +func (v *BaseFilterQueryVisitor) VisitSearchCall(ctx *SearchCallContext) interface{} { + return v.VisitChildren(ctx) +} + func (v *BaseFilterQueryVisitor) VisitFunctionParamList(ctx *FunctionParamListContext) interface{} { return v.VisitChildren(ctx) } diff --git a/pkg/parser/filterquery/grammar/filterquery_lexer.go b/pkg/parser/filterquery/grammar/filterquery_lexer.go index 98d3562d476..903d2402800 100644 --- a/pkg/parser/filterquery/grammar/filterquery_lexer.go +++ b/pkg/parser/filterquery/grammar/filterquery_lexer.go @@ -1,13 +1,12 @@ -// Code generated from grammar/FilterQuery.g4 by ANTLR 4.13.2. DO NOT EDIT. +// Code generated from FilterQuery.g4 by ANTLR 4.13.2. DO NOT EDIT. package parser import ( "fmt" + "github.com/antlr4-go/antlr/v4" "sync" "unicode" - - "github.com/antlr4-go/antlr/v4" ) // Suppress unused import error @@ -51,170 +50,174 @@ func filterquerylexerLexerInit() { "", "LPAREN", "RPAREN", "LBRACK", "RBRACK", "COMMA", "EQUALS", "NOT_EQUALS", "NEQ", "LT", "LE", "GT", "GE", "LIKE", "ILIKE", "BETWEEN", "EXISTS", "REGEXP", "CONTAINS", "IN", "NOT", "AND", "OR", "HASTOKEN", "HAS", "HASANY", - "HASALL", "BOOL", "NUMBER", "QUOTED_TEXT", "KEY", "WS", "FREETEXT", + "HASALL", "SEARCH", "BOOL", "NUMBER", "QUOTED_TEXT", "KEY", "WS", "FREETEXT", } staticData.RuleNames = []string{ "LPAREN", "RPAREN", "LBRACK", "RBRACK", "COMMA", "EQUALS", "NOT_EQUALS", "NEQ", "LT", "LE", "GT", "GE", "LIKE", "ILIKE", "BETWEEN", "EXISTS", "REGEXP", "CONTAINS", "IN", "NOT", "AND", "OR", "HASTOKEN", "HAS", "HASANY", - "HASALL", "BOOL", "SIGN", "NUMBER", "QUOTED_TEXT", "SEGMENT", "EMPTY_BRACKS", - "OLD_JSON_BRACKS", "KEY", "WS", "DIGIT", "FREETEXT", + "HASALL", "SEARCH", "BOOL", "SIGN", "NUMBER", "QUOTED_TEXT", "SEGMENT", + "EMPTY_BRACKS", "OLD_JSON_BRACKS", "KEY", "WS", "DIGIT", "FREETEXT", } staticData.PredictionContextCache = antlr.NewPredictionContextCache() staticData.serializedATN = []int32{ - 4, 0, 32, 320, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, + 4, 0, 33, 329, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, - 7, 36, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, - 1, 5, 1, 5, 3, 5, 89, 8, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, - 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, - 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, - 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, - 15, 1, 15, 3, 15, 132, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, - 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 149, - 8, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, - 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, - 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, - 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, - 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 201, - 8, 26, 1, 27, 1, 27, 1, 28, 3, 28, 206, 8, 28, 1, 28, 4, 28, 209, 8, 28, - 11, 28, 12, 28, 210, 1, 28, 1, 28, 5, 28, 215, 8, 28, 10, 28, 12, 28, 218, - 9, 28, 3, 28, 220, 8, 28, 1, 28, 1, 28, 3, 28, 224, 8, 28, 1, 28, 4, 28, - 227, 8, 28, 11, 28, 12, 28, 228, 3, 28, 231, 8, 28, 1, 28, 3, 28, 234, - 8, 28, 1, 28, 1, 28, 4, 28, 238, 8, 28, 11, 28, 12, 28, 239, 1, 28, 1, - 28, 3, 28, 244, 8, 28, 1, 28, 4, 28, 247, 8, 28, 11, 28, 12, 28, 248, 3, - 28, 251, 8, 28, 3, 28, 253, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 259, - 8, 29, 10, 29, 12, 29, 262, 9, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, - 29, 269, 8, 29, 10, 29, 12, 29, 272, 9, 29, 1, 29, 3, 29, 275, 8, 29, 1, - 30, 1, 30, 5, 30, 279, 8, 30, 10, 30, 12, 30, 282, 9, 30, 1, 31, 1, 31, - 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, - 33, 1, 33, 4, 33, 298, 8, 33, 11, 33, 12, 33, 299, 5, 33, 302, 8, 33, 10, - 33, 12, 33, 305, 9, 33, 1, 34, 4, 34, 308, 8, 34, 11, 34, 12, 34, 309, - 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 4, 36, 317, 8, 36, 11, 36, 12, 36, 318, - 0, 0, 37, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, + 7, 36, 2, 37, 7, 37, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, + 4, 1, 4, 1, 5, 1, 5, 1, 5, 3, 5, 91, 8, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, + 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, + 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, + 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, + 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 134, 8, 15, 1, 16, 1, 16, 1, 16, 1, + 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, + 1, 17, 3, 17, 151, 8, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, + 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, + 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, + 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, + 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, + 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 210, + 8, 27, 1, 28, 1, 28, 1, 29, 3, 29, 215, 8, 29, 1, 29, 4, 29, 218, 8, 29, + 11, 29, 12, 29, 219, 1, 29, 1, 29, 5, 29, 224, 8, 29, 10, 29, 12, 29, 227, + 9, 29, 3, 29, 229, 8, 29, 1, 29, 1, 29, 3, 29, 233, 8, 29, 1, 29, 4, 29, + 236, 8, 29, 11, 29, 12, 29, 237, 3, 29, 240, 8, 29, 1, 29, 3, 29, 243, + 8, 29, 1, 29, 1, 29, 4, 29, 247, 8, 29, 11, 29, 12, 29, 248, 1, 29, 1, + 29, 3, 29, 253, 8, 29, 1, 29, 4, 29, 256, 8, 29, 11, 29, 12, 29, 257, 3, + 29, 260, 8, 29, 3, 29, 262, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 268, + 8, 30, 10, 30, 12, 30, 271, 9, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, + 30, 278, 8, 30, 10, 30, 12, 30, 281, 9, 30, 1, 30, 3, 30, 284, 8, 30, 1, + 31, 1, 31, 5, 31, 288, 8, 31, 10, 31, 12, 31, 291, 9, 31, 1, 32, 1, 32, + 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, + 34, 1, 34, 4, 34, 307, 8, 34, 11, 34, 12, 34, 308, 5, 34, 311, 8, 34, 10, + 34, 12, 34, 314, 9, 34, 1, 35, 4, 35, 317, 8, 35, 11, 35, 12, 35, 318, + 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 4, 37, 326, 8, 37, 11, 37, 12, 37, 327, + 0, 0, 38, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, - 0, 57, 28, 59, 29, 61, 0, 63, 0, 65, 0, 67, 30, 69, 31, 71, 0, 73, 32, - 1, 0, 29, 2, 0, 76, 76, 108, 108, 2, 0, 73, 73, 105, 105, 2, 0, 75, 75, - 107, 107, 2, 0, 69, 69, 101, 101, 2, 0, 66, 66, 98, 98, 2, 0, 84, 84, 116, - 116, 2, 0, 87, 87, 119, 119, 2, 0, 78, 78, 110, 110, 2, 0, 88, 88, 120, - 120, 2, 0, 83, 83, 115, 115, 2, 0, 82, 82, 114, 114, 2, 0, 71, 71, 103, - 103, 2, 0, 80, 80, 112, 112, 2, 0, 67, 67, 99, 99, 2, 0, 79, 79, 111, 111, - 2, 0, 65, 65, 97, 97, 2, 0, 68, 68, 100, 100, 2, 0, 72, 72, 104, 104, 2, - 0, 89, 89, 121, 121, 2, 0, 85, 85, 117, 117, 2, 0, 70, 70, 102, 102, 2, - 0, 43, 43, 45, 45, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 4, 0, 35, - 36, 64, 90, 95, 95, 97, 123, 7, 0, 35, 36, 45, 45, 47, 58, 64, 90, 95, - 95, 97, 123, 125, 125, 3, 0, 9, 10, 13, 13, 32, 32, 1, 0, 48, 57, 8, 0, - 9, 10, 13, 13, 32, 34, 39, 41, 44, 44, 60, 62, 91, 91, 93, 93, 344, 0, - 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, - 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, - 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, - 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, - 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, - 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, - 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, - 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, - 0, 73, 1, 0, 0, 0, 1, 75, 1, 0, 0, 0, 3, 77, 1, 0, 0, 0, 5, 79, 1, 0, 0, - 0, 7, 81, 1, 0, 0, 0, 9, 83, 1, 0, 0, 0, 11, 88, 1, 0, 0, 0, 13, 90, 1, - 0, 0, 0, 15, 93, 1, 0, 0, 0, 17, 96, 1, 0, 0, 0, 19, 98, 1, 0, 0, 0, 21, - 101, 1, 0, 0, 0, 23, 103, 1, 0, 0, 0, 25, 106, 1, 0, 0, 0, 27, 111, 1, - 0, 0, 0, 29, 117, 1, 0, 0, 0, 31, 125, 1, 0, 0, 0, 33, 133, 1, 0, 0, 0, - 35, 140, 1, 0, 0, 0, 37, 150, 1, 0, 0, 0, 39, 153, 1, 0, 0, 0, 41, 157, - 1, 0, 0, 0, 43, 161, 1, 0, 0, 0, 45, 164, 1, 0, 0, 0, 47, 173, 1, 0, 0, - 0, 49, 177, 1, 0, 0, 0, 51, 184, 1, 0, 0, 0, 53, 200, 1, 0, 0, 0, 55, 202, - 1, 0, 0, 0, 57, 252, 1, 0, 0, 0, 59, 274, 1, 0, 0, 0, 61, 276, 1, 0, 0, - 0, 63, 283, 1, 0, 0, 0, 65, 286, 1, 0, 0, 0, 67, 290, 1, 0, 0, 0, 69, 307, - 1, 0, 0, 0, 71, 313, 1, 0, 0, 0, 73, 316, 1, 0, 0, 0, 75, 76, 5, 40, 0, - 0, 76, 2, 1, 0, 0, 0, 77, 78, 5, 41, 0, 0, 78, 4, 1, 0, 0, 0, 79, 80, 5, - 91, 0, 0, 80, 6, 1, 0, 0, 0, 81, 82, 5, 93, 0, 0, 82, 8, 1, 0, 0, 0, 83, - 84, 5, 44, 0, 0, 84, 10, 1, 0, 0, 0, 85, 89, 5, 61, 0, 0, 86, 87, 5, 61, - 0, 0, 87, 89, 5, 61, 0, 0, 88, 85, 1, 0, 0, 0, 88, 86, 1, 0, 0, 0, 89, - 12, 1, 0, 0, 0, 90, 91, 5, 33, 0, 0, 91, 92, 5, 61, 0, 0, 92, 14, 1, 0, - 0, 0, 93, 94, 5, 60, 0, 0, 94, 95, 5, 62, 0, 0, 95, 16, 1, 0, 0, 0, 96, - 97, 5, 60, 0, 0, 97, 18, 1, 0, 0, 0, 98, 99, 5, 60, 0, 0, 99, 100, 5, 61, - 0, 0, 100, 20, 1, 0, 0, 0, 101, 102, 5, 62, 0, 0, 102, 22, 1, 0, 0, 0, - 103, 104, 5, 62, 0, 0, 104, 105, 5, 61, 0, 0, 105, 24, 1, 0, 0, 0, 106, - 107, 7, 0, 0, 0, 107, 108, 7, 1, 0, 0, 108, 109, 7, 2, 0, 0, 109, 110, - 7, 3, 0, 0, 110, 26, 1, 0, 0, 0, 111, 112, 7, 1, 0, 0, 112, 113, 7, 0, - 0, 0, 113, 114, 7, 1, 0, 0, 114, 115, 7, 2, 0, 0, 115, 116, 7, 3, 0, 0, - 116, 28, 1, 0, 0, 0, 117, 118, 7, 4, 0, 0, 118, 119, 7, 3, 0, 0, 119, 120, - 7, 5, 0, 0, 120, 121, 7, 6, 0, 0, 121, 122, 7, 3, 0, 0, 122, 123, 7, 3, - 0, 0, 123, 124, 7, 7, 0, 0, 124, 30, 1, 0, 0, 0, 125, 126, 7, 3, 0, 0, - 126, 127, 7, 8, 0, 0, 127, 128, 7, 1, 0, 0, 128, 129, 7, 9, 0, 0, 129, - 131, 7, 5, 0, 0, 130, 132, 7, 9, 0, 0, 131, 130, 1, 0, 0, 0, 131, 132, - 1, 0, 0, 0, 132, 32, 1, 0, 0, 0, 133, 134, 7, 10, 0, 0, 134, 135, 7, 3, - 0, 0, 135, 136, 7, 11, 0, 0, 136, 137, 7, 3, 0, 0, 137, 138, 7, 8, 0, 0, - 138, 139, 7, 12, 0, 0, 139, 34, 1, 0, 0, 0, 140, 141, 7, 13, 0, 0, 141, - 142, 7, 14, 0, 0, 142, 143, 7, 7, 0, 0, 143, 144, 7, 5, 0, 0, 144, 145, - 7, 15, 0, 0, 145, 146, 7, 1, 0, 0, 146, 148, 7, 7, 0, 0, 147, 149, 7, 9, - 0, 0, 148, 147, 1, 0, 0, 0, 148, 149, 1, 0, 0, 0, 149, 36, 1, 0, 0, 0, - 150, 151, 7, 1, 0, 0, 151, 152, 7, 7, 0, 0, 152, 38, 1, 0, 0, 0, 153, 154, - 7, 7, 0, 0, 154, 155, 7, 14, 0, 0, 155, 156, 7, 5, 0, 0, 156, 40, 1, 0, - 0, 0, 157, 158, 7, 15, 0, 0, 158, 159, 7, 7, 0, 0, 159, 160, 7, 16, 0, - 0, 160, 42, 1, 0, 0, 0, 161, 162, 7, 14, 0, 0, 162, 163, 7, 10, 0, 0, 163, - 44, 1, 0, 0, 0, 164, 165, 7, 17, 0, 0, 165, 166, 7, 15, 0, 0, 166, 167, - 7, 9, 0, 0, 167, 168, 7, 5, 0, 0, 168, 169, 7, 14, 0, 0, 169, 170, 7, 2, - 0, 0, 170, 171, 7, 3, 0, 0, 171, 172, 7, 7, 0, 0, 172, 46, 1, 0, 0, 0, - 173, 174, 7, 17, 0, 0, 174, 175, 7, 15, 0, 0, 175, 176, 7, 9, 0, 0, 176, - 48, 1, 0, 0, 0, 177, 178, 7, 17, 0, 0, 178, 179, 7, 15, 0, 0, 179, 180, - 7, 9, 0, 0, 180, 181, 7, 15, 0, 0, 181, 182, 7, 7, 0, 0, 182, 183, 7, 18, - 0, 0, 183, 50, 1, 0, 0, 0, 184, 185, 7, 17, 0, 0, 185, 186, 7, 15, 0, 0, - 186, 187, 7, 9, 0, 0, 187, 188, 7, 15, 0, 0, 188, 189, 7, 0, 0, 0, 189, - 190, 7, 0, 0, 0, 190, 52, 1, 0, 0, 0, 191, 192, 7, 5, 0, 0, 192, 193, 7, - 10, 0, 0, 193, 194, 7, 19, 0, 0, 194, 201, 7, 3, 0, 0, 195, 196, 7, 20, - 0, 0, 196, 197, 7, 15, 0, 0, 197, 198, 7, 0, 0, 0, 198, 199, 7, 9, 0, 0, - 199, 201, 7, 3, 0, 0, 200, 191, 1, 0, 0, 0, 200, 195, 1, 0, 0, 0, 201, - 54, 1, 0, 0, 0, 202, 203, 7, 21, 0, 0, 203, 56, 1, 0, 0, 0, 204, 206, 3, - 55, 27, 0, 205, 204, 1, 0, 0, 0, 205, 206, 1, 0, 0, 0, 206, 208, 1, 0, - 0, 0, 207, 209, 3, 71, 35, 0, 208, 207, 1, 0, 0, 0, 209, 210, 1, 0, 0, - 0, 210, 208, 1, 0, 0, 0, 210, 211, 1, 0, 0, 0, 211, 219, 1, 0, 0, 0, 212, - 216, 5, 46, 0, 0, 213, 215, 3, 71, 35, 0, 214, 213, 1, 0, 0, 0, 215, 218, - 1, 0, 0, 0, 216, 214, 1, 0, 0, 0, 216, 217, 1, 0, 0, 0, 217, 220, 1, 0, - 0, 0, 218, 216, 1, 0, 0, 0, 219, 212, 1, 0, 0, 0, 219, 220, 1, 0, 0, 0, - 220, 230, 1, 0, 0, 0, 221, 223, 7, 3, 0, 0, 222, 224, 3, 55, 27, 0, 223, - 222, 1, 0, 0, 0, 223, 224, 1, 0, 0, 0, 224, 226, 1, 0, 0, 0, 225, 227, - 3, 71, 35, 0, 226, 225, 1, 0, 0, 0, 227, 228, 1, 0, 0, 0, 228, 226, 1, - 0, 0, 0, 228, 229, 1, 0, 0, 0, 229, 231, 1, 0, 0, 0, 230, 221, 1, 0, 0, - 0, 230, 231, 1, 0, 0, 0, 231, 253, 1, 0, 0, 0, 232, 234, 3, 55, 27, 0, - 233, 232, 1, 0, 0, 0, 233, 234, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, - 237, 5, 46, 0, 0, 236, 238, 3, 71, 35, 0, 237, 236, 1, 0, 0, 0, 238, 239, - 1, 0, 0, 0, 239, 237, 1, 0, 0, 0, 239, 240, 1, 0, 0, 0, 240, 250, 1, 0, - 0, 0, 241, 243, 7, 3, 0, 0, 242, 244, 3, 55, 27, 0, 243, 242, 1, 0, 0, - 0, 243, 244, 1, 0, 0, 0, 244, 246, 1, 0, 0, 0, 245, 247, 3, 71, 35, 0, - 246, 245, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 246, 1, 0, 0, 0, 248, - 249, 1, 0, 0, 0, 249, 251, 1, 0, 0, 0, 250, 241, 1, 0, 0, 0, 250, 251, - 1, 0, 0, 0, 251, 253, 1, 0, 0, 0, 252, 205, 1, 0, 0, 0, 252, 233, 1, 0, - 0, 0, 253, 58, 1, 0, 0, 0, 254, 260, 5, 34, 0, 0, 255, 259, 8, 22, 0, 0, - 256, 257, 5, 92, 0, 0, 257, 259, 9, 0, 0, 0, 258, 255, 1, 0, 0, 0, 258, - 256, 1, 0, 0, 0, 259, 262, 1, 0, 0, 0, 260, 258, 1, 0, 0, 0, 260, 261, - 1, 0, 0, 0, 261, 263, 1, 0, 0, 0, 262, 260, 1, 0, 0, 0, 263, 275, 5, 34, - 0, 0, 264, 270, 5, 39, 0, 0, 265, 269, 8, 23, 0, 0, 266, 267, 5, 92, 0, - 0, 267, 269, 9, 0, 0, 0, 268, 265, 1, 0, 0, 0, 268, 266, 1, 0, 0, 0, 269, - 272, 1, 0, 0, 0, 270, 268, 1, 0, 0, 0, 270, 271, 1, 0, 0, 0, 271, 273, - 1, 0, 0, 0, 272, 270, 1, 0, 0, 0, 273, 275, 5, 39, 0, 0, 274, 254, 1, 0, - 0, 0, 274, 264, 1, 0, 0, 0, 275, 60, 1, 0, 0, 0, 276, 280, 7, 24, 0, 0, - 277, 279, 7, 25, 0, 0, 278, 277, 1, 0, 0, 0, 279, 282, 1, 0, 0, 0, 280, - 278, 1, 0, 0, 0, 280, 281, 1, 0, 0, 0, 281, 62, 1, 0, 0, 0, 282, 280, 1, - 0, 0, 0, 283, 284, 5, 91, 0, 0, 284, 285, 5, 93, 0, 0, 285, 64, 1, 0, 0, - 0, 286, 287, 5, 91, 0, 0, 287, 288, 5, 42, 0, 0, 288, 289, 5, 93, 0, 0, - 289, 66, 1, 0, 0, 0, 290, 303, 3, 61, 30, 0, 291, 292, 5, 46, 0, 0, 292, - 302, 3, 61, 30, 0, 293, 302, 3, 63, 31, 0, 294, 302, 3, 65, 32, 0, 295, - 297, 5, 46, 0, 0, 296, 298, 3, 71, 35, 0, 297, 296, 1, 0, 0, 0, 298, 299, - 1, 0, 0, 0, 299, 297, 1, 0, 0, 0, 299, 300, 1, 0, 0, 0, 300, 302, 1, 0, - 0, 0, 301, 291, 1, 0, 0, 0, 301, 293, 1, 0, 0, 0, 301, 294, 1, 0, 0, 0, - 301, 295, 1, 0, 0, 0, 302, 305, 1, 0, 0, 0, 303, 301, 1, 0, 0, 0, 303, - 304, 1, 0, 0, 0, 304, 68, 1, 0, 0, 0, 305, 303, 1, 0, 0, 0, 306, 308, 7, - 26, 0, 0, 307, 306, 1, 0, 0, 0, 308, 309, 1, 0, 0, 0, 309, 307, 1, 0, 0, - 0, 309, 310, 1, 0, 0, 0, 310, 311, 1, 0, 0, 0, 311, 312, 6, 34, 0, 0, 312, - 70, 1, 0, 0, 0, 313, 314, 7, 27, 0, 0, 314, 72, 1, 0, 0, 0, 315, 317, 8, - 28, 0, 0, 316, 315, 1, 0, 0, 0, 317, 318, 1, 0, 0, 0, 318, 316, 1, 0, 0, - 0, 318, 319, 1, 0, 0, 0, 319, 74, 1, 0, 0, 0, 29, 0, 88, 131, 148, 200, - 205, 210, 216, 219, 223, 228, 230, 233, 239, 243, 248, 250, 252, 258, 260, - 268, 270, 274, 280, 299, 301, 303, 309, 318, 1, 6, 0, 0, + 28, 57, 0, 59, 29, 61, 30, 63, 0, 65, 0, 67, 0, 69, 31, 71, 32, 73, 0, + 75, 33, 1, 0, 29, 2, 0, 76, 76, 108, 108, 2, 0, 73, 73, 105, 105, 2, 0, + 75, 75, 107, 107, 2, 0, 69, 69, 101, 101, 2, 0, 66, 66, 98, 98, 2, 0, 84, + 84, 116, 116, 2, 0, 87, 87, 119, 119, 2, 0, 78, 78, 110, 110, 2, 0, 88, + 88, 120, 120, 2, 0, 83, 83, 115, 115, 2, 0, 82, 82, 114, 114, 2, 0, 71, + 71, 103, 103, 2, 0, 80, 80, 112, 112, 2, 0, 67, 67, 99, 99, 2, 0, 79, 79, + 111, 111, 2, 0, 65, 65, 97, 97, 2, 0, 68, 68, 100, 100, 2, 0, 72, 72, 104, + 104, 2, 0, 89, 89, 121, 121, 2, 0, 85, 85, 117, 117, 2, 0, 70, 70, 102, + 102, 2, 0, 43, 43, 45, 45, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, + 4, 0, 35, 36, 64, 90, 95, 95, 97, 123, 7, 0, 35, 36, 45, 45, 47, 58, 64, + 90, 95, 95, 97, 123, 125, 125, 3, 0, 9, 10, 13, 13, 32, 32, 1, 0, 48, 57, + 8, 0, 9, 10, 13, 13, 32, 34, 39, 41, 44, 44, 60, 62, 91, 91, 93, 93, 353, + 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, + 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, + 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, + 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, + 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, + 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, + 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, + 0, 55, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 69, 1, 0, 0, + 0, 0, 71, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 1, 77, 1, 0, 0, 0, 3, 79, 1, 0, + 0, 0, 5, 81, 1, 0, 0, 0, 7, 83, 1, 0, 0, 0, 9, 85, 1, 0, 0, 0, 11, 90, + 1, 0, 0, 0, 13, 92, 1, 0, 0, 0, 15, 95, 1, 0, 0, 0, 17, 98, 1, 0, 0, 0, + 19, 100, 1, 0, 0, 0, 21, 103, 1, 0, 0, 0, 23, 105, 1, 0, 0, 0, 25, 108, + 1, 0, 0, 0, 27, 113, 1, 0, 0, 0, 29, 119, 1, 0, 0, 0, 31, 127, 1, 0, 0, + 0, 33, 135, 1, 0, 0, 0, 35, 142, 1, 0, 0, 0, 37, 152, 1, 0, 0, 0, 39, 155, + 1, 0, 0, 0, 41, 159, 1, 0, 0, 0, 43, 163, 1, 0, 0, 0, 45, 166, 1, 0, 0, + 0, 47, 175, 1, 0, 0, 0, 49, 179, 1, 0, 0, 0, 51, 186, 1, 0, 0, 0, 53, 193, + 1, 0, 0, 0, 55, 209, 1, 0, 0, 0, 57, 211, 1, 0, 0, 0, 59, 261, 1, 0, 0, + 0, 61, 283, 1, 0, 0, 0, 63, 285, 1, 0, 0, 0, 65, 292, 1, 0, 0, 0, 67, 295, + 1, 0, 0, 0, 69, 299, 1, 0, 0, 0, 71, 316, 1, 0, 0, 0, 73, 322, 1, 0, 0, + 0, 75, 325, 1, 0, 0, 0, 77, 78, 5, 40, 0, 0, 78, 2, 1, 0, 0, 0, 79, 80, + 5, 41, 0, 0, 80, 4, 1, 0, 0, 0, 81, 82, 5, 91, 0, 0, 82, 6, 1, 0, 0, 0, + 83, 84, 5, 93, 0, 0, 84, 8, 1, 0, 0, 0, 85, 86, 5, 44, 0, 0, 86, 10, 1, + 0, 0, 0, 87, 91, 5, 61, 0, 0, 88, 89, 5, 61, 0, 0, 89, 91, 5, 61, 0, 0, + 90, 87, 1, 0, 0, 0, 90, 88, 1, 0, 0, 0, 91, 12, 1, 0, 0, 0, 92, 93, 5, + 33, 0, 0, 93, 94, 5, 61, 0, 0, 94, 14, 1, 0, 0, 0, 95, 96, 5, 60, 0, 0, + 96, 97, 5, 62, 0, 0, 97, 16, 1, 0, 0, 0, 98, 99, 5, 60, 0, 0, 99, 18, 1, + 0, 0, 0, 100, 101, 5, 60, 0, 0, 101, 102, 5, 61, 0, 0, 102, 20, 1, 0, 0, + 0, 103, 104, 5, 62, 0, 0, 104, 22, 1, 0, 0, 0, 105, 106, 5, 62, 0, 0, 106, + 107, 5, 61, 0, 0, 107, 24, 1, 0, 0, 0, 108, 109, 7, 0, 0, 0, 109, 110, + 7, 1, 0, 0, 110, 111, 7, 2, 0, 0, 111, 112, 7, 3, 0, 0, 112, 26, 1, 0, + 0, 0, 113, 114, 7, 1, 0, 0, 114, 115, 7, 0, 0, 0, 115, 116, 7, 1, 0, 0, + 116, 117, 7, 2, 0, 0, 117, 118, 7, 3, 0, 0, 118, 28, 1, 0, 0, 0, 119, 120, + 7, 4, 0, 0, 120, 121, 7, 3, 0, 0, 121, 122, 7, 5, 0, 0, 122, 123, 7, 6, + 0, 0, 123, 124, 7, 3, 0, 0, 124, 125, 7, 3, 0, 0, 125, 126, 7, 7, 0, 0, + 126, 30, 1, 0, 0, 0, 127, 128, 7, 3, 0, 0, 128, 129, 7, 8, 0, 0, 129, 130, + 7, 1, 0, 0, 130, 131, 7, 9, 0, 0, 131, 133, 7, 5, 0, 0, 132, 134, 7, 9, + 0, 0, 133, 132, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, 134, 32, 1, 0, 0, 0, + 135, 136, 7, 10, 0, 0, 136, 137, 7, 3, 0, 0, 137, 138, 7, 11, 0, 0, 138, + 139, 7, 3, 0, 0, 139, 140, 7, 8, 0, 0, 140, 141, 7, 12, 0, 0, 141, 34, + 1, 0, 0, 0, 142, 143, 7, 13, 0, 0, 143, 144, 7, 14, 0, 0, 144, 145, 7, + 7, 0, 0, 145, 146, 7, 5, 0, 0, 146, 147, 7, 15, 0, 0, 147, 148, 7, 1, 0, + 0, 148, 150, 7, 7, 0, 0, 149, 151, 7, 9, 0, 0, 150, 149, 1, 0, 0, 0, 150, + 151, 1, 0, 0, 0, 151, 36, 1, 0, 0, 0, 152, 153, 7, 1, 0, 0, 153, 154, 7, + 7, 0, 0, 154, 38, 1, 0, 0, 0, 155, 156, 7, 7, 0, 0, 156, 157, 7, 14, 0, + 0, 157, 158, 7, 5, 0, 0, 158, 40, 1, 0, 0, 0, 159, 160, 7, 15, 0, 0, 160, + 161, 7, 7, 0, 0, 161, 162, 7, 16, 0, 0, 162, 42, 1, 0, 0, 0, 163, 164, + 7, 14, 0, 0, 164, 165, 7, 10, 0, 0, 165, 44, 1, 0, 0, 0, 166, 167, 7, 17, + 0, 0, 167, 168, 7, 15, 0, 0, 168, 169, 7, 9, 0, 0, 169, 170, 7, 5, 0, 0, + 170, 171, 7, 14, 0, 0, 171, 172, 7, 2, 0, 0, 172, 173, 7, 3, 0, 0, 173, + 174, 7, 7, 0, 0, 174, 46, 1, 0, 0, 0, 175, 176, 7, 17, 0, 0, 176, 177, + 7, 15, 0, 0, 177, 178, 7, 9, 0, 0, 178, 48, 1, 0, 0, 0, 179, 180, 7, 17, + 0, 0, 180, 181, 7, 15, 0, 0, 181, 182, 7, 9, 0, 0, 182, 183, 7, 15, 0, + 0, 183, 184, 7, 7, 0, 0, 184, 185, 7, 18, 0, 0, 185, 50, 1, 0, 0, 0, 186, + 187, 7, 17, 0, 0, 187, 188, 7, 15, 0, 0, 188, 189, 7, 9, 0, 0, 189, 190, + 7, 15, 0, 0, 190, 191, 7, 0, 0, 0, 191, 192, 7, 0, 0, 0, 192, 52, 1, 0, + 0, 0, 193, 194, 7, 9, 0, 0, 194, 195, 7, 3, 0, 0, 195, 196, 7, 15, 0, 0, + 196, 197, 7, 10, 0, 0, 197, 198, 7, 13, 0, 0, 198, 199, 7, 17, 0, 0, 199, + 54, 1, 0, 0, 0, 200, 201, 7, 5, 0, 0, 201, 202, 7, 10, 0, 0, 202, 203, + 7, 19, 0, 0, 203, 210, 7, 3, 0, 0, 204, 205, 7, 20, 0, 0, 205, 206, 7, + 15, 0, 0, 206, 207, 7, 0, 0, 0, 207, 208, 7, 9, 0, 0, 208, 210, 7, 3, 0, + 0, 209, 200, 1, 0, 0, 0, 209, 204, 1, 0, 0, 0, 210, 56, 1, 0, 0, 0, 211, + 212, 7, 21, 0, 0, 212, 58, 1, 0, 0, 0, 213, 215, 3, 57, 28, 0, 214, 213, + 1, 0, 0, 0, 214, 215, 1, 0, 0, 0, 215, 217, 1, 0, 0, 0, 216, 218, 3, 73, + 36, 0, 217, 216, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 217, 1, 0, 0, 0, + 219, 220, 1, 0, 0, 0, 220, 228, 1, 0, 0, 0, 221, 225, 5, 46, 0, 0, 222, + 224, 3, 73, 36, 0, 223, 222, 1, 0, 0, 0, 224, 227, 1, 0, 0, 0, 225, 223, + 1, 0, 0, 0, 225, 226, 1, 0, 0, 0, 226, 229, 1, 0, 0, 0, 227, 225, 1, 0, + 0, 0, 228, 221, 1, 0, 0, 0, 228, 229, 1, 0, 0, 0, 229, 239, 1, 0, 0, 0, + 230, 232, 7, 3, 0, 0, 231, 233, 3, 57, 28, 0, 232, 231, 1, 0, 0, 0, 232, + 233, 1, 0, 0, 0, 233, 235, 1, 0, 0, 0, 234, 236, 3, 73, 36, 0, 235, 234, + 1, 0, 0, 0, 236, 237, 1, 0, 0, 0, 237, 235, 1, 0, 0, 0, 237, 238, 1, 0, + 0, 0, 238, 240, 1, 0, 0, 0, 239, 230, 1, 0, 0, 0, 239, 240, 1, 0, 0, 0, + 240, 262, 1, 0, 0, 0, 241, 243, 3, 57, 28, 0, 242, 241, 1, 0, 0, 0, 242, + 243, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 246, 5, 46, 0, 0, 245, 247, + 3, 73, 36, 0, 246, 245, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 246, 1, + 0, 0, 0, 248, 249, 1, 0, 0, 0, 249, 259, 1, 0, 0, 0, 250, 252, 7, 3, 0, + 0, 251, 253, 3, 57, 28, 0, 252, 251, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, + 253, 255, 1, 0, 0, 0, 254, 256, 3, 73, 36, 0, 255, 254, 1, 0, 0, 0, 256, + 257, 1, 0, 0, 0, 257, 255, 1, 0, 0, 0, 257, 258, 1, 0, 0, 0, 258, 260, + 1, 0, 0, 0, 259, 250, 1, 0, 0, 0, 259, 260, 1, 0, 0, 0, 260, 262, 1, 0, + 0, 0, 261, 214, 1, 0, 0, 0, 261, 242, 1, 0, 0, 0, 262, 60, 1, 0, 0, 0, + 263, 269, 5, 34, 0, 0, 264, 268, 8, 22, 0, 0, 265, 266, 5, 92, 0, 0, 266, + 268, 9, 0, 0, 0, 267, 264, 1, 0, 0, 0, 267, 265, 1, 0, 0, 0, 268, 271, + 1, 0, 0, 0, 269, 267, 1, 0, 0, 0, 269, 270, 1, 0, 0, 0, 270, 272, 1, 0, + 0, 0, 271, 269, 1, 0, 0, 0, 272, 284, 5, 34, 0, 0, 273, 279, 5, 39, 0, + 0, 274, 278, 8, 23, 0, 0, 275, 276, 5, 92, 0, 0, 276, 278, 9, 0, 0, 0, + 277, 274, 1, 0, 0, 0, 277, 275, 1, 0, 0, 0, 278, 281, 1, 0, 0, 0, 279, + 277, 1, 0, 0, 0, 279, 280, 1, 0, 0, 0, 280, 282, 1, 0, 0, 0, 281, 279, + 1, 0, 0, 0, 282, 284, 5, 39, 0, 0, 283, 263, 1, 0, 0, 0, 283, 273, 1, 0, + 0, 0, 284, 62, 1, 0, 0, 0, 285, 289, 7, 24, 0, 0, 286, 288, 7, 25, 0, 0, + 287, 286, 1, 0, 0, 0, 288, 291, 1, 0, 0, 0, 289, 287, 1, 0, 0, 0, 289, + 290, 1, 0, 0, 0, 290, 64, 1, 0, 0, 0, 291, 289, 1, 0, 0, 0, 292, 293, 5, + 91, 0, 0, 293, 294, 5, 93, 0, 0, 294, 66, 1, 0, 0, 0, 295, 296, 5, 91, + 0, 0, 296, 297, 5, 42, 0, 0, 297, 298, 5, 93, 0, 0, 298, 68, 1, 0, 0, 0, + 299, 312, 3, 63, 31, 0, 300, 301, 5, 46, 0, 0, 301, 311, 3, 63, 31, 0, + 302, 311, 3, 65, 32, 0, 303, 311, 3, 67, 33, 0, 304, 306, 5, 46, 0, 0, + 305, 307, 3, 73, 36, 0, 306, 305, 1, 0, 0, 0, 307, 308, 1, 0, 0, 0, 308, + 306, 1, 0, 0, 0, 308, 309, 1, 0, 0, 0, 309, 311, 1, 0, 0, 0, 310, 300, + 1, 0, 0, 0, 310, 302, 1, 0, 0, 0, 310, 303, 1, 0, 0, 0, 310, 304, 1, 0, + 0, 0, 311, 314, 1, 0, 0, 0, 312, 310, 1, 0, 0, 0, 312, 313, 1, 0, 0, 0, + 313, 70, 1, 0, 0, 0, 314, 312, 1, 0, 0, 0, 315, 317, 7, 26, 0, 0, 316, + 315, 1, 0, 0, 0, 317, 318, 1, 0, 0, 0, 318, 316, 1, 0, 0, 0, 318, 319, + 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 321, 6, 35, 0, 0, 321, 72, 1, 0, + 0, 0, 322, 323, 7, 27, 0, 0, 323, 74, 1, 0, 0, 0, 324, 326, 8, 28, 0, 0, + 325, 324, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 325, 1, 0, 0, 0, 327, + 328, 1, 0, 0, 0, 328, 76, 1, 0, 0, 0, 29, 0, 90, 133, 150, 209, 214, 219, + 225, 228, 232, 237, 239, 242, 248, 252, 257, 259, 261, 267, 269, 277, 279, + 283, 289, 308, 310, 312, 318, 327, 1, 6, 0, 0, } deserializer := antlr.NewATNDeserializer(nil) staticData.atn = deserializer.Deserialize(staticData.serializedATN) @@ -281,10 +284,11 @@ const ( FilterQueryLexerHAS = 24 FilterQueryLexerHASANY = 25 FilterQueryLexerHASALL = 26 - FilterQueryLexerBOOL = 27 - FilterQueryLexerNUMBER = 28 - FilterQueryLexerQUOTED_TEXT = 29 - FilterQueryLexerKEY = 30 - FilterQueryLexerWS = 31 - FilterQueryLexerFREETEXT = 32 + FilterQueryLexerSEARCH = 27 + FilterQueryLexerBOOL = 28 + FilterQueryLexerNUMBER = 29 + FilterQueryLexerQUOTED_TEXT = 30 + FilterQueryLexerKEY = 31 + FilterQueryLexerWS = 32 + FilterQueryLexerFREETEXT = 33 ) diff --git a/pkg/parser/filterquery/grammar/filterquery_listener.go b/pkg/parser/filterquery/grammar/filterquery_listener.go index 8eb79b63e17..836530e7a51 100644 --- a/pkg/parser/filterquery/grammar/filterquery_listener.go +++ b/pkg/parser/filterquery/grammar/filterquery_listener.go @@ -1,4 +1,4 @@ -// Code generated from grammar/FilterQuery.g4 by ANTLR 4.13.2. DO NOT EDIT. +// Code generated from FilterQuery.g4 by ANTLR 4.13.2. DO NOT EDIT. package parser // FilterQuery @@ -44,6 +44,9 @@ type FilterQueryListener interface { // EnterFunctionCall is called when entering the functionCall production. EnterFunctionCall(c *FunctionCallContext) + // EnterSearchCall is called when entering the searchCall production. + EnterSearchCall(c *SearchCallContext) + // EnterFunctionParamList is called when entering the functionParamList production. EnterFunctionParamList(c *FunctionParamListContext) @@ -95,6 +98,9 @@ type FilterQueryListener interface { // ExitFunctionCall is called when exiting the functionCall production. ExitFunctionCall(c *FunctionCallContext) + // ExitSearchCall is called when exiting the searchCall production. + ExitSearchCall(c *SearchCallContext) + // ExitFunctionParamList is called when exiting the functionParamList production. ExitFunctionParamList(c *FunctionParamListContext) diff --git a/pkg/parser/filterquery/grammar/filterquery_parser.go b/pkg/parser/filterquery/grammar/filterquery_parser.go index 38b27a1642e..1c53e59f6e5 100644 --- a/pkg/parser/filterquery/grammar/filterquery_parser.go +++ b/pkg/parser/filterquery/grammar/filterquery_parser.go @@ -1,4 +1,4 @@ -// Code generated from grammar/FilterQuery.g4 by ANTLR 4.13.2. DO NOT EDIT. +// Code generated from FilterQuery.g4 by ANTLR 4.13.2. DO NOT EDIT. package parser // FilterQuery @@ -40,110 +40,113 @@ func filterqueryParserInit() { "", "LPAREN", "RPAREN", "LBRACK", "RBRACK", "COMMA", "EQUALS", "NOT_EQUALS", "NEQ", "LT", "LE", "GT", "GE", "LIKE", "ILIKE", "BETWEEN", "EXISTS", "REGEXP", "CONTAINS", "IN", "NOT", "AND", "OR", "HASTOKEN", "HAS", "HASANY", - "HASALL", "BOOL", "NUMBER", "QUOTED_TEXT", "KEY", "WS", "FREETEXT", + "HASALL", "SEARCH", "BOOL", "NUMBER", "QUOTED_TEXT", "KEY", "WS", "FREETEXT", } staticData.RuleNames = []string{ "query", "expression", "orExpression", "andExpression", "unaryExpression", "primary", "comparison", "inClause", "notInClause", "valueList", "fullText", - "functionCall", "functionParamList", "functionParam", "array", "value", - "key", + "functionCall", "searchCall", "functionParamList", "functionParam", + "array", "value", "key", } staticData.PredictionContextCache = antlr.NewPredictionContextCache() staticData.serializedATN = []int32{ - 4, 1, 32, 219, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, + 4, 1, 33, 227, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, - 2, 16, 7, 16, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 5, 2, 43, - 8, 2, 10, 2, 12, 2, 46, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 52, 8, 3, 10, - 3, 12, 3, 55, 9, 3, 1, 4, 3, 4, 58, 8, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, - 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 71, 8, 5, 1, 6, 1, 6, 1, 6, 1, - 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, - 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, - 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, - 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, - 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, - 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, - 6, 1, 6, 3, 6, 150, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, - 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 164, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, - 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 181, - 8, 8, 1, 9, 1, 9, 1, 9, 5, 9, 186, 8, 9, 10, 9, 12, 9, 189, 9, 9, 1, 10, - 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 5, 12, 201, - 8, 12, 10, 12, 12, 12, 204, 9, 12, 1, 13, 1, 13, 1, 13, 3, 13, 209, 8, - 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 0, 0, - 17, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 0, 5, - 1, 0, 7, 8, 1, 0, 13, 14, 2, 0, 29, 29, 32, 32, 1, 0, 23, 26, 1, 0, 27, - 30, 235, 0, 34, 1, 0, 0, 0, 2, 37, 1, 0, 0, 0, 4, 39, 1, 0, 0, 0, 6, 47, - 1, 0, 0, 0, 8, 57, 1, 0, 0, 0, 10, 70, 1, 0, 0, 0, 12, 149, 1, 0, 0, 0, - 14, 163, 1, 0, 0, 0, 16, 180, 1, 0, 0, 0, 18, 182, 1, 0, 0, 0, 20, 190, - 1, 0, 0, 0, 22, 192, 1, 0, 0, 0, 24, 197, 1, 0, 0, 0, 26, 208, 1, 0, 0, - 0, 28, 210, 1, 0, 0, 0, 30, 214, 1, 0, 0, 0, 32, 216, 1, 0, 0, 0, 34, 35, - 3, 2, 1, 0, 35, 36, 5, 0, 0, 1, 36, 1, 1, 0, 0, 0, 37, 38, 3, 4, 2, 0, - 38, 3, 1, 0, 0, 0, 39, 44, 3, 6, 3, 0, 40, 41, 5, 22, 0, 0, 41, 43, 3, - 6, 3, 0, 42, 40, 1, 0, 0, 0, 43, 46, 1, 0, 0, 0, 44, 42, 1, 0, 0, 0, 44, - 45, 1, 0, 0, 0, 45, 5, 1, 0, 0, 0, 46, 44, 1, 0, 0, 0, 47, 53, 3, 8, 4, - 0, 48, 49, 5, 21, 0, 0, 49, 52, 3, 8, 4, 0, 50, 52, 3, 8, 4, 0, 51, 48, - 1, 0, 0, 0, 51, 50, 1, 0, 0, 0, 52, 55, 1, 0, 0, 0, 53, 51, 1, 0, 0, 0, - 53, 54, 1, 0, 0, 0, 54, 7, 1, 0, 0, 0, 55, 53, 1, 0, 0, 0, 56, 58, 5, 20, - 0, 0, 57, 56, 1, 0, 0, 0, 57, 58, 1, 0, 0, 0, 58, 59, 1, 0, 0, 0, 59, 60, - 3, 10, 5, 0, 60, 9, 1, 0, 0, 0, 61, 62, 5, 1, 0, 0, 62, 63, 3, 4, 2, 0, - 63, 64, 5, 2, 0, 0, 64, 71, 1, 0, 0, 0, 65, 71, 3, 12, 6, 0, 66, 71, 3, - 22, 11, 0, 67, 71, 3, 20, 10, 0, 68, 71, 3, 32, 16, 0, 69, 71, 3, 30, 15, - 0, 70, 61, 1, 0, 0, 0, 70, 65, 1, 0, 0, 0, 70, 66, 1, 0, 0, 0, 70, 67, - 1, 0, 0, 0, 70, 68, 1, 0, 0, 0, 70, 69, 1, 0, 0, 0, 71, 11, 1, 0, 0, 0, - 72, 73, 3, 32, 16, 0, 73, 74, 5, 6, 0, 0, 74, 75, 3, 30, 15, 0, 75, 150, - 1, 0, 0, 0, 76, 77, 3, 32, 16, 0, 77, 78, 7, 0, 0, 0, 78, 79, 3, 30, 15, - 0, 79, 150, 1, 0, 0, 0, 80, 81, 3, 32, 16, 0, 81, 82, 5, 9, 0, 0, 82, 83, - 3, 30, 15, 0, 83, 150, 1, 0, 0, 0, 84, 85, 3, 32, 16, 0, 85, 86, 5, 10, - 0, 0, 86, 87, 3, 30, 15, 0, 87, 150, 1, 0, 0, 0, 88, 89, 3, 32, 16, 0, - 89, 90, 5, 11, 0, 0, 90, 91, 3, 30, 15, 0, 91, 150, 1, 0, 0, 0, 92, 93, - 3, 32, 16, 0, 93, 94, 5, 12, 0, 0, 94, 95, 3, 30, 15, 0, 95, 150, 1, 0, - 0, 0, 96, 97, 3, 32, 16, 0, 97, 98, 7, 1, 0, 0, 98, 99, 3, 30, 15, 0, 99, - 150, 1, 0, 0, 0, 100, 101, 3, 32, 16, 0, 101, 102, 5, 20, 0, 0, 102, 103, - 7, 1, 0, 0, 103, 104, 3, 30, 15, 0, 104, 150, 1, 0, 0, 0, 105, 106, 3, - 32, 16, 0, 106, 107, 5, 15, 0, 0, 107, 108, 3, 30, 15, 0, 108, 109, 5, - 21, 0, 0, 109, 110, 3, 30, 15, 0, 110, 150, 1, 0, 0, 0, 111, 112, 3, 32, - 16, 0, 112, 113, 5, 20, 0, 0, 113, 114, 5, 15, 0, 0, 114, 115, 3, 30, 15, - 0, 115, 116, 5, 21, 0, 0, 116, 117, 3, 30, 15, 0, 117, 150, 1, 0, 0, 0, - 118, 119, 3, 32, 16, 0, 119, 120, 3, 14, 7, 0, 120, 150, 1, 0, 0, 0, 121, - 122, 3, 32, 16, 0, 122, 123, 3, 16, 8, 0, 123, 150, 1, 0, 0, 0, 124, 125, - 3, 32, 16, 0, 125, 126, 5, 16, 0, 0, 126, 150, 1, 0, 0, 0, 127, 128, 3, - 32, 16, 0, 128, 129, 5, 20, 0, 0, 129, 130, 5, 16, 0, 0, 130, 150, 1, 0, - 0, 0, 131, 132, 3, 32, 16, 0, 132, 133, 5, 17, 0, 0, 133, 134, 3, 30, 15, - 0, 134, 150, 1, 0, 0, 0, 135, 136, 3, 32, 16, 0, 136, 137, 5, 20, 0, 0, - 137, 138, 5, 17, 0, 0, 138, 139, 3, 30, 15, 0, 139, 150, 1, 0, 0, 0, 140, - 141, 3, 32, 16, 0, 141, 142, 5, 18, 0, 0, 142, 143, 3, 30, 15, 0, 143, - 150, 1, 0, 0, 0, 144, 145, 3, 32, 16, 0, 145, 146, 5, 20, 0, 0, 146, 147, - 5, 18, 0, 0, 147, 148, 3, 30, 15, 0, 148, 150, 1, 0, 0, 0, 149, 72, 1, - 0, 0, 0, 149, 76, 1, 0, 0, 0, 149, 80, 1, 0, 0, 0, 149, 84, 1, 0, 0, 0, - 149, 88, 1, 0, 0, 0, 149, 92, 1, 0, 0, 0, 149, 96, 1, 0, 0, 0, 149, 100, - 1, 0, 0, 0, 149, 105, 1, 0, 0, 0, 149, 111, 1, 0, 0, 0, 149, 118, 1, 0, - 0, 0, 149, 121, 1, 0, 0, 0, 149, 124, 1, 0, 0, 0, 149, 127, 1, 0, 0, 0, - 149, 131, 1, 0, 0, 0, 149, 135, 1, 0, 0, 0, 149, 140, 1, 0, 0, 0, 149, - 144, 1, 0, 0, 0, 150, 13, 1, 0, 0, 0, 151, 152, 5, 19, 0, 0, 152, 153, - 5, 1, 0, 0, 153, 154, 3, 18, 9, 0, 154, 155, 5, 2, 0, 0, 155, 164, 1, 0, - 0, 0, 156, 157, 5, 19, 0, 0, 157, 158, 5, 3, 0, 0, 158, 159, 3, 18, 9, - 0, 159, 160, 5, 4, 0, 0, 160, 164, 1, 0, 0, 0, 161, 162, 5, 19, 0, 0, 162, - 164, 3, 30, 15, 0, 163, 151, 1, 0, 0, 0, 163, 156, 1, 0, 0, 0, 163, 161, - 1, 0, 0, 0, 164, 15, 1, 0, 0, 0, 165, 166, 5, 20, 0, 0, 166, 167, 5, 19, - 0, 0, 167, 168, 5, 1, 0, 0, 168, 169, 3, 18, 9, 0, 169, 170, 5, 2, 0, 0, - 170, 181, 1, 0, 0, 0, 171, 172, 5, 20, 0, 0, 172, 173, 5, 19, 0, 0, 173, - 174, 5, 3, 0, 0, 174, 175, 3, 18, 9, 0, 175, 176, 5, 4, 0, 0, 176, 181, - 1, 0, 0, 0, 177, 178, 5, 20, 0, 0, 178, 179, 5, 19, 0, 0, 179, 181, 3, - 30, 15, 0, 180, 165, 1, 0, 0, 0, 180, 171, 1, 0, 0, 0, 180, 177, 1, 0, - 0, 0, 181, 17, 1, 0, 0, 0, 182, 187, 3, 30, 15, 0, 183, 184, 5, 5, 0, 0, - 184, 186, 3, 30, 15, 0, 185, 183, 1, 0, 0, 0, 186, 189, 1, 0, 0, 0, 187, - 185, 1, 0, 0, 0, 187, 188, 1, 0, 0, 0, 188, 19, 1, 0, 0, 0, 189, 187, 1, - 0, 0, 0, 190, 191, 7, 2, 0, 0, 191, 21, 1, 0, 0, 0, 192, 193, 7, 3, 0, - 0, 193, 194, 5, 1, 0, 0, 194, 195, 3, 24, 12, 0, 195, 196, 5, 2, 0, 0, - 196, 23, 1, 0, 0, 0, 197, 202, 3, 26, 13, 0, 198, 199, 5, 5, 0, 0, 199, - 201, 3, 26, 13, 0, 200, 198, 1, 0, 0, 0, 201, 204, 1, 0, 0, 0, 202, 200, - 1, 0, 0, 0, 202, 203, 1, 0, 0, 0, 203, 25, 1, 0, 0, 0, 204, 202, 1, 0, - 0, 0, 205, 209, 3, 32, 16, 0, 206, 209, 3, 30, 15, 0, 207, 209, 3, 28, - 14, 0, 208, 205, 1, 0, 0, 0, 208, 206, 1, 0, 0, 0, 208, 207, 1, 0, 0, 0, - 209, 27, 1, 0, 0, 0, 210, 211, 5, 3, 0, 0, 211, 212, 3, 18, 9, 0, 212, - 213, 5, 4, 0, 0, 213, 29, 1, 0, 0, 0, 214, 215, 7, 4, 0, 0, 215, 31, 1, - 0, 0, 0, 216, 217, 5, 30, 0, 0, 217, 33, 1, 0, 0, 0, 11, 44, 51, 53, 57, - 70, 149, 163, 180, 187, 202, 208, + 2, 16, 7, 16, 2, 17, 7, 17, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, + 2, 5, 2, 45, 8, 2, 10, 2, 12, 2, 48, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, + 54, 8, 3, 10, 3, 12, 3, 57, 9, 3, 1, 4, 3, 4, 60, 8, 4, 1, 4, 1, 4, 1, + 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 74, 8, 5, + 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, + 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, + 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, + 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, + 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, + 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, + 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 153, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, + 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 167, 8, 7, 1, 8, + 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, + 1, 8, 1, 8, 3, 8, 184, 8, 8, 1, 9, 1, 9, 1, 9, 5, 9, 189, 8, 9, 10, 9, + 12, 9, 192, 9, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, + 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 5, 13, 209, 8, 13, 10, + 13, 12, 13, 212, 9, 13, 1, 14, 1, 14, 1, 14, 3, 14, 217, 8, 14, 1, 15, + 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 0, 0, 18, 0, 2, + 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 0, 5, 1, 0, + 7, 8, 1, 0, 13, 14, 2, 0, 30, 30, 33, 33, 1, 0, 23, 26, 1, 0, 28, 31, 243, + 0, 36, 1, 0, 0, 0, 2, 39, 1, 0, 0, 0, 4, 41, 1, 0, 0, 0, 6, 49, 1, 0, 0, + 0, 8, 59, 1, 0, 0, 0, 10, 73, 1, 0, 0, 0, 12, 152, 1, 0, 0, 0, 14, 166, + 1, 0, 0, 0, 16, 183, 1, 0, 0, 0, 18, 185, 1, 0, 0, 0, 20, 193, 1, 0, 0, + 0, 22, 195, 1, 0, 0, 0, 24, 200, 1, 0, 0, 0, 26, 205, 1, 0, 0, 0, 28, 216, + 1, 0, 0, 0, 30, 218, 1, 0, 0, 0, 32, 222, 1, 0, 0, 0, 34, 224, 1, 0, 0, + 0, 36, 37, 3, 2, 1, 0, 37, 38, 5, 0, 0, 1, 38, 1, 1, 0, 0, 0, 39, 40, 3, + 4, 2, 0, 40, 3, 1, 0, 0, 0, 41, 46, 3, 6, 3, 0, 42, 43, 5, 22, 0, 0, 43, + 45, 3, 6, 3, 0, 44, 42, 1, 0, 0, 0, 45, 48, 1, 0, 0, 0, 46, 44, 1, 0, 0, + 0, 46, 47, 1, 0, 0, 0, 47, 5, 1, 0, 0, 0, 48, 46, 1, 0, 0, 0, 49, 55, 3, + 8, 4, 0, 50, 51, 5, 21, 0, 0, 51, 54, 3, 8, 4, 0, 52, 54, 3, 8, 4, 0, 53, + 50, 1, 0, 0, 0, 53, 52, 1, 0, 0, 0, 54, 57, 1, 0, 0, 0, 55, 53, 1, 0, 0, + 0, 55, 56, 1, 0, 0, 0, 56, 7, 1, 0, 0, 0, 57, 55, 1, 0, 0, 0, 58, 60, 5, + 20, 0, 0, 59, 58, 1, 0, 0, 0, 59, 60, 1, 0, 0, 0, 60, 61, 1, 0, 0, 0, 61, + 62, 3, 10, 5, 0, 62, 9, 1, 0, 0, 0, 63, 64, 5, 1, 0, 0, 64, 65, 3, 4, 2, + 0, 65, 66, 5, 2, 0, 0, 66, 74, 1, 0, 0, 0, 67, 74, 3, 12, 6, 0, 68, 74, + 3, 22, 11, 0, 69, 74, 3, 24, 12, 0, 70, 74, 3, 20, 10, 0, 71, 74, 3, 34, + 17, 0, 72, 74, 3, 32, 16, 0, 73, 63, 1, 0, 0, 0, 73, 67, 1, 0, 0, 0, 73, + 68, 1, 0, 0, 0, 73, 69, 1, 0, 0, 0, 73, 70, 1, 0, 0, 0, 73, 71, 1, 0, 0, + 0, 73, 72, 1, 0, 0, 0, 74, 11, 1, 0, 0, 0, 75, 76, 3, 34, 17, 0, 76, 77, + 5, 6, 0, 0, 77, 78, 3, 32, 16, 0, 78, 153, 1, 0, 0, 0, 79, 80, 3, 34, 17, + 0, 80, 81, 7, 0, 0, 0, 81, 82, 3, 32, 16, 0, 82, 153, 1, 0, 0, 0, 83, 84, + 3, 34, 17, 0, 84, 85, 5, 9, 0, 0, 85, 86, 3, 32, 16, 0, 86, 153, 1, 0, + 0, 0, 87, 88, 3, 34, 17, 0, 88, 89, 5, 10, 0, 0, 89, 90, 3, 32, 16, 0, + 90, 153, 1, 0, 0, 0, 91, 92, 3, 34, 17, 0, 92, 93, 5, 11, 0, 0, 93, 94, + 3, 32, 16, 0, 94, 153, 1, 0, 0, 0, 95, 96, 3, 34, 17, 0, 96, 97, 5, 12, + 0, 0, 97, 98, 3, 32, 16, 0, 98, 153, 1, 0, 0, 0, 99, 100, 3, 34, 17, 0, + 100, 101, 7, 1, 0, 0, 101, 102, 3, 32, 16, 0, 102, 153, 1, 0, 0, 0, 103, + 104, 3, 34, 17, 0, 104, 105, 5, 20, 0, 0, 105, 106, 7, 1, 0, 0, 106, 107, + 3, 32, 16, 0, 107, 153, 1, 0, 0, 0, 108, 109, 3, 34, 17, 0, 109, 110, 5, + 15, 0, 0, 110, 111, 3, 32, 16, 0, 111, 112, 5, 21, 0, 0, 112, 113, 3, 32, + 16, 0, 113, 153, 1, 0, 0, 0, 114, 115, 3, 34, 17, 0, 115, 116, 5, 20, 0, + 0, 116, 117, 5, 15, 0, 0, 117, 118, 3, 32, 16, 0, 118, 119, 5, 21, 0, 0, + 119, 120, 3, 32, 16, 0, 120, 153, 1, 0, 0, 0, 121, 122, 3, 34, 17, 0, 122, + 123, 3, 14, 7, 0, 123, 153, 1, 0, 0, 0, 124, 125, 3, 34, 17, 0, 125, 126, + 3, 16, 8, 0, 126, 153, 1, 0, 0, 0, 127, 128, 3, 34, 17, 0, 128, 129, 5, + 16, 0, 0, 129, 153, 1, 0, 0, 0, 130, 131, 3, 34, 17, 0, 131, 132, 5, 20, + 0, 0, 132, 133, 5, 16, 0, 0, 133, 153, 1, 0, 0, 0, 134, 135, 3, 34, 17, + 0, 135, 136, 5, 17, 0, 0, 136, 137, 3, 32, 16, 0, 137, 153, 1, 0, 0, 0, + 138, 139, 3, 34, 17, 0, 139, 140, 5, 20, 0, 0, 140, 141, 5, 17, 0, 0, 141, + 142, 3, 32, 16, 0, 142, 153, 1, 0, 0, 0, 143, 144, 3, 34, 17, 0, 144, 145, + 5, 18, 0, 0, 145, 146, 3, 32, 16, 0, 146, 153, 1, 0, 0, 0, 147, 148, 3, + 34, 17, 0, 148, 149, 5, 20, 0, 0, 149, 150, 5, 18, 0, 0, 150, 151, 3, 32, + 16, 0, 151, 153, 1, 0, 0, 0, 152, 75, 1, 0, 0, 0, 152, 79, 1, 0, 0, 0, + 152, 83, 1, 0, 0, 0, 152, 87, 1, 0, 0, 0, 152, 91, 1, 0, 0, 0, 152, 95, + 1, 0, 0, 0, 152, 99, 1, 0, 0, 0, 152, 103, 1, 0, 0, 0, 152, 108, 1, 0, + 0, 0, 152, 114, 1, 0, 0, 0, 152, 121, 1, 0, 0, 0, 152, 124, 1, 0, 0, 0, + 152, 127, 1, 0, 0, 0, 152, 130, 1, 0, 0, 0, 152, 134, 1, 0, 0, 0, 152, + 138, 1, 0, 0, 0, 152, 143, 1, 0, 0, 0, 152, 147, 1, 0, 0, 0, 153, 13, 1, + 0, 0, 0, 154, 155, 5, 19, 0, 0, 155, 156, 5, 1, 0, 0, 156, 157, 3, 18, + 9, 0, 157, 158, 5, 2, 0, 0, 158, 167, 1, 0, 0, 0, 159, 160, 5, 19, 0, 0, + 160, 161, 5, 3, 0, 0, 161, 162, 3, 18, 9, 0, 162, 163, 5, 4, 0, 0, 163, + 167, 1, 0, 0, 0, 164, 165, 5, 19, 0, 0, 165, 167, 3, 32, 16, 0, 166, 154, + 1, 0, 0, 0, 166, 159, 1, 0, 0, 0, 166, 164, 1, 0, 0, 0, 167, 15, 1, 0, + 0, 0, 168, 169, 5, 20, 0, 0, 169, 170, 5, 19, 0, 0, 170, 171, 5, 1, 0, + 0, 171, 172, 3, 18, 9, 0, 172, 173, 5, 2, 0, 0, 173, 184, 1, 0, 0, 0, 174, + 175, 5, 20, 0, 0, 175, 176, 5, 19, 0, 0, 176, 177, 5, 3, 0, 0, 177, 178, + 3, 18, 9, 0, 178, 179, 5, 4, 0, 0, 179, 184, 1, 0, 0, 0, 180, 181, 5, 20, + 0, 0, 181, 182, 5, 19, 0, 0, 182, 184, 3, 32, 16, 0, 183, 168, 1, 0, 0, + 0, 183, 174, 1, 0, 0, 0, 183, 180, 1, 0, 0, 0, 184, 17, 1, 0, 0, 0, 185, + 190, 3, 32, 16, 0, 186, 187, 5, 5, 0, 0, 187, 189, 3, 32, 16, 0, 188, 186, + 1, 0, 0, 0, 189, 192, 1, 0, 0, 0, 190, 188, 1, 0, 0, 0, 190, 191, 1, 0, + 0, 0, 191, 19, 1, 0, 0, 0, 192, 190, 1, 0, 0, 0, 193, 194, 7, 2, 0, 0, + 194, 21, 1, 0, 0, 0, 195, 196, 7, 3, 0, 0, 196, 197, 5, 1, 0, 0, 197, 198, + 3, 26, 13, 0, 198, 199, 5, 2, 0, 0, 199, 23, 1, 0, 0, 0, 200, 201, 5, 27, + 0, 0, 201, 202, 5, 1, 0, 0, 202, 203, 3, 26, 13, 0, 203, 204, 5, 2, 0, + 0, 204, 25, 1, 0, 0, 0, 205, 210, 3, 28, 14, 0, 206, 207, 5, 5, 0, 0, 207, + 209, 3, 28, 14, 0, 208, 206, 1, 0, 0, 0, 209, 212, 1, 0, 0, 0, 210, 208, + 1, 0, 0, 0, 210, 211, 1, 0, 0, 0, 211, 27, 1, 0, 0, 0, 212, 210, 1, 0, + 0, 0, 213, 217, 3, 34, 17, 0, 214, 217, 3, 32, 16, 0, 215, 217, 3, 30, + 15, 0, 216, 213, 1, 0, 0, 0, 216, 214, 1, 0, 0, 0, 216, 215, 1, 0, 0, 0, + 217, 29, 1, 0, 0, 0, 218, 219, 5, 3, 0, 0, 219, 220, 3, 18, 9, 0, 220, + 221, 5, 4, 0, 0, 221, 31, 1, 0, 0, 0, 222, 223, 7, 4, 0, 0, 223, 33, 1, + 0, 0, 0, 224, 225, 5, 31, 0, 0, 225, 35, 1, 0, 0, 0, 11, 46, 53, 55, 59, + 73, 152, 166, 183, 190, 210, 216, } deserializer := antlr.NewATNDeserializer(nil) staticData.atn = deserializer.Deserialize(staticData.serializedATN) @@ -208,12 +211,13 @@ const ( FilterQueryParserHAS = 24 FilterQueryParserHASANY = 25 FilterQueryParserHASALL = 26 - FilterQueryParserBOOL = 27 - FilterQueryParserNUMBER = 28 - FilterQueryParserQUOTED_TEXT = 29 - FilterQueryParserKEY = 30 - FilterQueryParserWS = 31 - FilterQueryParserFREETEXT = 32 + FilterQueryParserSEARCH = 27 + FilterQueryParserBOOL = 28 + FilterQueryParserNUMBER = 29 + FilterQueryParserQUOTED_TEXT = 30 + FilterQueryParserKEY = 31 + FilterQueryParserWS = 32 + FilterQueryParserFREETEXT = 33 ) // FilterQueryParser rules. @@ -230,11 +234,12 @@ const ( FilterQueryParserRULE_valueList = 9 FilterQueryParserRULE_fullText = 10 FilterQueryParserRULE_functionCall = 11 - FilterQueryParserRULE_functionParamList = 12 - FilterQueryParserRULE_functionParam = 13 - FilterQueryParserRULE_array = 14 - FilterQueryParserRULE_value = 15 - FilterQueryParserRULE_key = 16 + FilterQueryParserRULE_searchCall = 12 + FilterQueryParserRULE_functionParamList = 13 + FilterQueryParserRULE_functionParam = 14 + FilterQueryParserRULE_array = 15 + FilterQueryParserRULE_value = 16 + FilterQueryParserRULE_key = 17 ) // IQueryContext is an interface to support dynamic dispatch. @@ -339,11 +344,11 @@ func (p *FilterQueryParser) Query() (localctx IQueryContext) { p.EnterRule(localctx, 0, FilterQueryParserRULE_query) p.EnterOuterAlt(localctx, 1) { - p.SetState(34) + p.SetState(36) p.Expression() } { - p.SetState(35) + p.SetState(37) p.Match(FilterQueryParserEOF) if p.HasError() { // Recognition error - abort rule @@ -461,7 +466,7 @@ func (p *FilterQueryParser) Expression() (localctx IExpressionContext) { p.EnterRule(localctx, 2, FilterQueryParserRULE_expression) p.EnterOuterAlt(localctx, 1) { - p.SetState(37) + p.SetState(39) p.OrExpression() } @@ -613,10 +618,10 @@ func (p *FilterQueryParser) OrExpression() (localctx IOrExpressionContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(39) + p.SetState(41) p.AndExpression() } - p.SetState(44) + p.SetState(46) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -625,7 +630,7 @@ func (p *FilterQueryParser) OrExpression() (localctx IOrExpressionContext) { for _la == FilterQueryParserOR { { - p.SetState(40) + p.SetState(42) p.Match(FilterQueryParserOR) if p.HasError() { // Recognition error - abort rule @@ -633,11 +638,11 @@ func (p *FilterQueryParser) OrExpression() (localctx IOrExpressionContext) { } } { - p.SetState(41) + p.SetState(43) p.AndExpression() } - p.SetState(46) + p.SetState(48) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -793,18 +798,18 @@ func (p *FilterQueryParser) AndExpression() (localctx IAndExpressionContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(47) + p.SetState(49) p.UnaryExpression() } - p.SetState(53) + p.SetState(55) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) - for (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&6437208066) != 0 { - p.SetState(51) + for (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&12879659010) != 0 { + p.SetState(53) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -813,7 +818,7 @@ func (p *FilterQueryParser) AndExpression() (localctx IAndExpressionContext) { switch p.GetTokenStream().LA(1) { case FilterQueryParserAND: { - p.SetState(48) + p.SetState(50) p.Match(FilterQueryParserAND) if p.HasError() { // Recognition error - abort rule @@ -821,13 +826,13 @@ func (p *FilterQueryParser) AndExpression() (localctx IAndExpressionContext) { } } { - p.SetState(49) + p.SetState(51) p.UnaryExpression() } - case FilterQueryParserLPAREN, FilterQueryParserNOT, FilterQueryParserHASTOKEN, FilterQueryParserHAS, FilterQueryParserHASANY, FilterQueryParserHASALL, FilterQueryParserBOOL, FilterQueryParserNUMBER, FilterQueryParserQUOTED_TEXT, FilterQueryParserKEY, FilterQueryParserFREETEXT: + case FilterQueryParserLPAREN, FilterQueryParserNOT, FilterQueryParserHASTOKEN, FilterQueryParserHAS, FilterQueryParserHASANY, FilterQueryParserHASALL, FilterQueryParserSEARCH, FilterQueryParserBOOL, FilterQueryParserNUMBER, FilterQueryParserQUOTED_TEXT, FilterQueryParserKEY, FilterQueryParserFREETEXT: { - p.SetState(50) + p.SetState(52) p.UnaryExpression() } @@ -836,7 +841,7 @@ func (p *FilterQueryParser) AndExpression() (localctx IAndExpressionContext) { goto errorExit } - p.SetState(55) + p.SetState(57) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -960,7 +965,7 @@ func (p *FilterQueryParser) UnaryExpression() (localctx IUnaryExpressionContext) var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(57) + p.SetState(59) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -969,7 +974,7 @@ func (p *FilterQueryParser) UnaryExpression() (localctx IUnaryExpressionContext) if _la == FilterQueryParserNOT { { - p.SetState(56) + p.SetState(58) p.Match(FilterQueryParserNOT) if p.HasError() { // Recognition error - abort rule @@ -979,7 +984,7 @@ func (p *FilterQueryParser) UnaryExpression() (localctx IUnaryExpressionContext) } { - p.SetState(59) + p.SetState(61) p.Primary() } @@ -1009,6 +1014,7 @@ type IPrimaryContext interface { RPAREN() antlr.TerminalNode Comparison() IComparisonContext FunctionCall() IFunctionCallContext + SearchCall() ISearchCallContext FullText() IFullTextContext Key() IKeyContext Value() IValueContext @@ -1105,6 +1111,22 @@ func (s *PrimaryContext) FunctionCall() IFunctionCallContext { return t.(IFunctionCallContext) } +func (s *PrimaryContext) SearchCall() ISearchCallContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(ISearchCallContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(ISearchCallContext) +} + func (s *PrimaryContext) FullText() IFullTextContext { var t antlr.RuleContext for _, ctx := range s.GetChildren() { @@ -1186,7 +1208,7 @@ func (s *PrimaryContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FilterQueryParser) Primary() (localctx IPrimaryContext) { localctx = NewPrimaryContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 10, FilterQueryParserRULE_primary) - p.SetState(70) + p.SetState(73) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1196,7 +1218,7 @@ func (p *FilterQueryParser) Primary() (localctx IPrimaryContext) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(61) + p.SetState(63) p.Match(FilterQueryParserLPAREN) if p.HasError() { // Recognition error - abort rule @@ -1204,11 +1226,11 @@ func (p *FilterQueryParser) Primary() (localctx IPrimaryContext) { } } { - p.SetState(62) + p.SetState(64) p.OrExpression() } { - p.SetState(63) + p.SetState(65) p.Match(FilterQueryParserRPAREN) if p.HasError() { // Recognition error - abort rule @@ -1219,35 +1241,42 @@ func (p *FilterQueryParser) Primary() (localctx IPrimaryContext) { case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(65) + p.SetState(67) p.Comparison() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(66) + p.SetState(68) p.FunctionCall() } case 4: p.EnterOuterAlt(localctx, 4) { - p.SetState(67) - p.FullText() + p.SetState(69) + p.SearchCall() } case 5: p.EnterOuterAlt(localctx, 5) { - p.SetState(68) - p.Key() + p.SetState(70) + p.FullText() } case 6: p.EnterOuterAlt(localctx, 6) { - p.SetState(69) + p.SetState(71) + p.Key() + } + + case 7: + p.EnterOuterAlt(localctx, 7) + { + p.SetState(72) p.Value() } @@ -1517,7 +1546,7 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { p.EnterRule(localctx, 12, FilterQueryParserRULE_comparison) var _la int - p.SetState(149) + p.SetState(152) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1527,11 +1556,11 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(72) + p.SetState(75) p.Key() } { - p.SetState(73) + p.SetState(76) p.Match(FilterQueryParserEQUALS) if p.HasError() { // Recognition error - abort rule @@ -1539,18 +1568,18 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { } } { - p.SetState(74) + p.SetState(77) p.Value() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(76) + p.SetState(79) p.Key() } { - p.SetState(77) + p.SetState(80) _la = p.GetTokenStream().LA(1) if !(_la == FilterQueryParserNOT_EQUALS || _la == FilterQueryParserNEQ) { @@ -1561,18 +1590,18 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { } } { - p.SetState(78) + p.SetState(81) p.Value() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(80) + p.SetState(83) p.Key() } { - p.SetState(81) + p.SetState(84) p.Match(FilterQueryParserLT) if p.HasError() { // Recognition error - abort rule @@ -1580,18 +1609,18 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { } } { - p.SetState(82) + p.SetState(85) p.Value() } case 4: p.EnterOuterAlt(localctx, 4) { - p.SetState(84) + p.SetState(87) p.Key() } { - p.SetState(85) + p.SetState(88) p.Match(FilterQueryParserLE) if p.HasError() { // Recognition error - abort rule @@ -1599,18 +1628,18 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { } } { - p.SetState(86) + p.SetState(89) p.Value() } case 5: p.EnterOuterAlt(localctx, 5) { - p.SetState(88) + p.SetState(91) p.Key() } { - p.SetState(89) + p.SetState(92) p.Match(FilterQueryParserGT) if p.HasError() { // Recognition error - abort rule @@ -1618,18 +1647,18 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { } } { - p.SetState(90) + p.SetState(93) p.Value() } case 6: p.EnterOuterAlt(localctx, 6) { - p.SetState(92) + p.SetState(95) p.Key() } { - p.SetState(93) + p.SetState(96) p.Match(FilterQueryParserGE) if p.HasError() { // Recognition error - abort rule @@ -1637,18 +1666,18 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { } } { - p.SetState(94) + p.SetState(97) p.Value() } case 7: p.EnterOuterAlt(localctx, 7) { - p.SetState(96) + p.SetState(99) p.Key() } { - p.SetState(97) + p.SetState(100) _la = p.GetTokenStream().LA(1) if !(_la == FilterQueryParserLIKE || _la == FilterQueryParserILIKE) { @@ -1659,18 +1688,18 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { } } { - p.SetState(98) + p.SetState(101) p.Value() } case 8: p.EnterOuterAlt(localctx, 8) { - p.SetState(100) + p.SetState(103) p.Key() } { - p.SetState(101) + p.SetState(104) p.Match(FilterQueryParserNOT) if p.HasError() { // Recognition error - abort rule @@ -1678,7 +1707,7 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { } } { - p.SetState(102) + p.SetState(105) _la = p.GetTokenStream().LA(1) if !(_la == FilterQueryParserLIKE || _la == FilterQueryParserILIKE) { @@ -1689,18 +1718,18 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { } } { - p.SetState(103) + p.SetState(106) p.Value() } case 9: p.EnterOuterAlt(localctx, 9) { - p.SetState(105) + p.SetState(108) p.Key() } { - p.SetState(106) + p.SetState(109) p.Match(FilterQueryParserBETWEEN) if p.HasError() { // Recognition error - abort rule @@ -1708,11 +1737,11 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { } } { - p.SetState(107) + p.SetState(110) p.Value() } { - p.SetState(108) + p.SetState(111) p.Match(FilterQueryParserAND) if p.HasError() { // Recognition error - abort rule @@ -1720,18 +1749,18 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { } } { - p.SetState(109) + p.SetState(112) p.Value() } case 10: p.EnterOuterAlt(localctx, 10) { - p.SetState(111) + p.SetState(114) p.Key() } { - p.SetState(112) + p.SetState(115) p.Match(FilterQueryParserNOT) if p.HasError() { // Recognition error - abort rule @@ -1739,7 +1768,7 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { } } { - p.SetState(113) + p.SetState(116) p.Match(FilterQueryParserBETWEEN) if p.HasError() { // Recognition error - abort rule @@ -1747,11 +1776,11 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { } } { - p.SetState(114) + p.SetState(117) p.Value() } { - p.SetState(115) + p.SetState(118) p.Match(FilterQueryParserAND) if p.HasError() { // Recognition error - abort rule @@ -1759,40 +1788,40 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { } } { - p.SetState(116) + p.SetState(119) p.Value() } case 11: p.EnterOuterAlt(localctx, 11) { - p.SetState(118) + p.SetState(121) p.Key() } { - p.SetState(119) + p.SetState(122) p.InClause() } case 12: p.EnterOuterAlt(localctx, 12) { - p.SetState(121) + p.SetState(124) p.Key() } { - p.SetState(122) + p.SetState(125) p.NotInClause() } case 13: p.EnterOuterAlt(localctx, 13) { - p.SetState(124) + p.SetState(127) p.Key() } { - p.SetState(125) + p.SetState(128) p.Match(FilterQueryParserEXISTS) if p.HasError() { // Recognition error - abort rule @@ -1803,11 +1832,11 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { case 14: p.EnterOuterAlt(localctx, 14) { - p.SetState(127) + p.SetState(130) p.Key() } { - p.SetState(128) + p.SetState(131) p.Match(FilterQueryParserNOT) if p.HasError() { // Recognition error - abort rule @@ -1815,7 +1844,7 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { } } { - p.SetState(129) + p.SetState(132) p.Match(FilterQueryParserEXISTS) if p.HasError() { // Recognition error - abort rule @@ -1826,11 +1855,11 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { case 15: p.EnterOuterAlt(localctx, 15) { - p.SetState(131) + p.SetState(134) p.Key() } { - p.SetState(132) + p.SetState(135) p.Match(FilterQueryParserREGEXP) if p.HasError() { // Recognition error - abort rule @@ -1838,18 +1867,18 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { } } { - p.SetState(133) + p.SetState(136) p.Value() } case 16: p.EnterOuterAlt(localctx, 16) { - p.SetState(135) + p.SetState(138) p.Key() } { - p.SetState(136) + p.SetState(139) p.Match(FilterQueryParserNOT) if p.HasError() { // Recognition error - abort rule @@ -1857,7 +1886,7 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { } } { - p.SetState(137) + p.SetState(140) p.Match(FilterQueryParserREGEXP) if p.HasError() { // Recognition error - abort rule @@ -1865,18 +1894,18 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { } } { - p.SetState(138) + p.SetState(141) p.Value() } case 17: p.EnterOuterAlt(localctx, 17) { - p.SetState(140) + p.SetState(143) p.Key() } { - p.SetState(141) + p.SetState(144) p.Match(FilterQueryParserCONTAINS) if p.HasError() { // Recognition error - abort rule @@ -1884,18 +1913,18 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { } } { - p.SetState(142) + p.SetState(145) p.Value() } case 18: p.EnterOuterAlt(localctx, 18) { - p.SetState(144) + p.SetState(147) p.Key() } { - p.SetState(145) + p.SetState(148) p.Match(FilterQueryParserNOT) if p.HasError() { // Recognition error - abort rule @@ -1903,7 +1932,7 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { } } { - p.SetState(146) + p.SetState(149) p.Match(FilterQueryParserCONTAINS) if p.HasError() { // Recognition error - abort rule @@ -1911,7 +1940,7 @@ func (p *FilterQueryParser) Comparison() (localctx IComparisonContext) { } } { - p.SetState(147) + p.SetState(150) p.Value() } @@ -2069,7 +2098,7 @@ func (s *InClauseContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FilterQueryParser) InClause() (localctx IInClauseContext) { localctx = NewInClauseContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 14, FilterQueryParserRULE_inClause) - p.SetState(163) + p.SetState(166) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2079,7 +2108,7 @@ func (p *FilterQueryParser) InClause() (localctx IInClauseContext) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(151) + p.SetState(154) p.Match(FilterQueryParserIN) if p.HasError() { // Recognition error - abort rule @@ -2087,7 +2116,7 @@ func (p *FilterQueryParser) InClause() (localctx IInClauseContext) { } } { - p.SetState(152) + p.SetState(155) p.Match(FilterQueryParserLPAREN) if p.HasError() { // Recognition error - abort rule @@ -2095,11 +2124,11 @@ func (p *FilterQueryParser) InClause() (localctx IInClauseContext) { } } { - p.SetState(153) + p.SetState(156) p.ValueList() } { - p.SetState(154) + p.SetState(157) p.Match(FilterQueryParserRPAREN) if p.HasError() { // Recognition error - abort rule @@ -2110,7 +2139,7 @@ func (p *FilterQueryParser) InClause() (localctx IInClauseContext) { case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(156) + p.SetState(159) p.Match(FilterQueryParserIN) if p.HasError() { // Recognition error - abort rule @@ -2118,7 +2147,7 @@ func (p *FilterQueryParser) InClause() (localctx IInClauseContext) { } } { - p.SetState(157) + p.SetState(160) p.Match(FilterQueryParserLBRACK) if p.HasError() { // Recognition error - abort rule @@ -2126,11 +2155,11 @@ func (p *FilterQueryParser) InClause() (localctx IInClauseContext) { } } { - p.SetState(158) + p.SetState(161) p.ValueList() } { - p.SetState(159) + p.SetState(162) p.Match(FilterQueryParserRBRACK) if p.HasError() { // Recognition error - abort rule @@ -2141,7 +2170,7 @@ func (p *FilterQueryParser) InClause() (localctx IInClauseContext) { case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(161) + p.SetState(164) p.Match(FilterQueryParserIN) if p.HasError() { // Recognition error - abort rule @@ -2149,7 +2178,7 @@ func (p *FilterQueryParser) InClause() (localctx IInClauseContext) { } } { - p.SetState(162) + p.SetState(165) p.Value() } @@ -2312,7 +2341,7 @@ func (s *NotInClauseContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FilterQueryParser) NotInClause() (localctx INotInClauseContext) { localctx = NewNotInClauseContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 16, FilterQueryParserRULE_notInClause) - p.SetState(180) + p.SetState(183) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2322,7 +2351,7 @@ func (p *FilterQueryParser) NotInClause() (localctx INotInClauseContext) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(165) + p.SetState(168) p.Match(FilterQueryParserNOT) if p.HasError() { // Recognition error - abort rule @@ -2330,7 +2359,7 @@ func (p *FilterQueryParser) NotInClause() (localctx INotInClauseContext) { } } { - p.SetState(166) + p.SetState(169) p.Match(FilterQueryParserIN) if p.HasError() { // Recognition error - abort rule @@ -2338,7 +2367,7 @@ func (p *FilterQueryParser) NotInClause() (localctx INotInClauseContext) { } } { - p.SetState(167) + p.SetState(170) p.Match(FilterQueryParserLPAREN) if p.HasError() { // Recognition error - abort rule @@ -2346,11 +2375,11 @@ func (p *FilterQueryParser) NotInClause() (localctx INotInClauseContext) { } } { - p.SetState(168) + p.SetState(171) p.ValueList() } { - p.SetState(169) + p.SetState(172) p.Match(FilterQueryParserRPAREN) if p.HasError() { // Recognition error - abort rule @@ -2361,7 +2390,7 @@ func (p *FilterQueryParser) NotInClause() (localctx INotInClauseContext) { case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(171) + p.SetState(174) p.Match(FilterQueryParserNOT) if p.HasError() { // Recognition error - abort rule @@ -2369,7 +2398,7 @@ func (p *FilterQueryParser) NotInClause() (localctx INotInClauseContext) { } } { - p.SetState(172) + p.SetState(175) p.Match(FilterQueryParserIN) if p.HasError() { // Recognition error - abort rule @@ -2377,7 +2406,7 @@ func (p *FilterQueryParser) NotInClause() (localctx INotInClauseContext) { } } { - p.SetState(173) + p.SetState(176) p.Match(FilterQueryParserLBRACK) if p.HasError() { // Recognition error - abort rule @@ -2385,11 +2414,11 @@ func (p *FilterQueryParser) NotInClause() (localctx INotInClauseContext) { } } { - p.SetState(174) + p.SetState(177) p.ValueList() } { - p.SetState(175) + p.SetState(178) p.Match(FilterQueryParserRBRACK) if p.HasError() { // Recognition error - abort rule @@ -2400,7 +2429,7 @@ func (p *FilterQueryParser) NotInClause() (localctx INotInClauseContext) { case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(177) + p.SetState(180) p.Match(FilterQueryParserNOT) if p.HasError() { // Recognition error - abort rule @@ -2408,7 +2437,7 @@ func (p *FilterQueryParser) NotInClause() (localctx INotInClauseContext) { } } { - p.SetState(178) + p.SetState(181) p.Match(FilterQueryParserIN) if p.HasError() { // Recognition error - abort rule @@ -2416,7 +2445,7 @@ func (p *FilterQueryParser) NotInClause() (localctx INotInClauseContext) { } } { - p.SetState(179) + p.SetState(182) p.Value() } @@ -2572,10 +2601,10 @@ func (p *FilterQueryParser) ValueList() (localctx IValueListContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(182) + p.SetState(185) p.Value() } - p.SetState(187) + p.SetState(190) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2584,7 +2613,7 @@ func (p *FilterQueryParser) ValueList() (localctx IValueListContext) { for _la == FilterQueryParserCOMMA { { - p.SetState(183) + p.SetState(186) p.Match(FilterQueryParserCOMMA) if p.HasError() { // Recognition error - abort rule @@ -2592,11 +2621,11 @@ func (p *FilterQueryParser) ValueList() (localctx IValueListContext) { } } { - p.SetState(184) + p.SetState(187) p.Value() } - p.SetState(189) + p.SetState(192) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2709,7 +2738,7 @@ func (p *FilterQueryParser) FullText() (localctx IFullTextContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(190) + p.SetState(193) _la = p.GetTokenStream().LA(1) if !(_la == FilterQueryParserQUOTED_TEXT || _la == FilterQueryParserFREETEXT) { @@ -2862,7 +2891,7 @@ func (p *FilterQueryParser) FunctionCall() (localctx IFunctionCallContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(192) + p.SetState(195) _la = p.GetTokenStream().LA(1) if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&125829120) != 0) { @@ -2873,7 +2902,7 @@ func (p *FilterQueryParser) FunctionCall() (localctx IFunctionCallContext) { } } { - p.SetState(193) + p.SetState(196) p.Match(FilterQueryParserLPAREN) if p.HasError() { // Recognition error - abort rule @@ -2881,11 +2910,164 @@ func (p *FilterQueryParser) FunctionCall() (localctx IFunctionCallContext) { } } { - p.SetState(194) + p.SetState(197) p.FunctionParamList() } { - p.SetState(195) + p.SetState(198) + p.Match(FilterQueryParserRPAREN) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + +errorExit: + if p.HasError() { + v := p.GetError() + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + p.SetError(nil) + } + p.ExitRule() + return localctx + goto errorExit // Trick to prevent compiler error if the label is not used +} + +// ISearchCallContext is an interface to support dynamic dispatch. +type ISearchCallContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // Getter signatures + SEARCH() antlr.TerminalNode + LPAREN() antlr.TerminalNode + FunctionParamList() IFunctionParamListContext + RPAREN() antlr.TerminalNode + + // IsSearchCallContext differentiates from other interfaces. + IsSearchCallContext() +} + +type SearchCallContext struct { + antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptySearchCallContext() *SearchCallContext { + var p = new(SearchCallContext) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = FilterQueryParserRULE_searchCall + return p +} + +func InitEmptySearchCallContext(p *SearchCallContext) { + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = FilterQueryParserRULE_searchCall +} + +func (*SearchCallContext) IsSearchCallContext() {} + +func NewSearchCallContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *SearchCallContext { + var p = new(SearchCallContext) + + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) + + p.parser = parser + p.RuleIndex = FilterQueryParserRULE_searchCall + + return p +} + +func (s *SearchCallContext) GetParser() antlr.Parser { return s.parser } + +func (s *SearchCallContext) SEARCH() antlr.TerminalNode { + return s.GetToken(FilterQueryParserSEARCH, 0) +} + +func (s *SearchCallContext) LPAREN() antlr.TerminalNode { + return s.GetToken(FilterQueryParserLPAREN, 0) +} + +func (s *SearchCallContext) FunctionParamList() IFunctionParamListContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IFunctionParamListContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IFunctionParamListContext) +} + +func (s *SearchCallContext) RPAREN() antlr.TerminalNode { + return s.GetToken(FilterQueryParserRPAREN, 0) +} + +func (s *SearchCallContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *SearchCallContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *SearchCallContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(FilterQueryListener); ok { + listenerT.EnterSearchCall(s) + } +} + +func (s *SearchCallContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(FilterQueryListener); ok { + listenerT.ExitSearchCall(s) + } +} + +func (s *SearchCallContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case FilterQueryVisitor: + return t.VisitSearchCall(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *FilterQueryParser) SearchCall() (localctx ISearchCallContext) { + localctx = NewSearchCallContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 24, FilterQueryParserRULE_searchCall) + p.EnterOuterAlt(localctx, 1) + { + p.SetState(200) + p.Match(FilterQueryParserSEARCH) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(201) + p.Match(FilterQueryParserLPAREN) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(202) + p.FunctionParamList() + } + { + p.SetState(203) p.Match(FilterQueryParserRPAREN) if p.HasError() { // Recognition error - abort rule @@ -3036,15 +3218,15 @@ func (s *FunctionParamListContext) Accept(visitor antlr.ParseTreeVisitor) interf func (p *FilterQueryParser) FunctionParamList() (localctx IFunctionParamListContext) { localctx = NewFunctionParamListContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 24, FilterQueryParserRULE_functionParamList) + p.EnterRule(localctx, 26, FilterQueryParserRULE_functionParamList) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(197) + p.SetState(205) p.FunctionParam() } - p.SetState(202) + p.SetState(210) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3053,7 +3235,7 @@ func (p *FilterQueryParser) FunctionParamList() (localctx IFunctionParamListCont for _la == FilterQueryParserCOMMA { { - p.SetState(198) + p.SetState(206) p.Match(FilterQueryParserCOMMA) if p.HasError() { // Recognition error - abort rule @@ -3061,11 +3243,11 @@ func (p *FilterQueryParser) FunctionParamList() (localctx IFunctionParamListCont } } { - p.SetState(199) + p.SetState(207) p.FunctionParam() } - p.SetState(204) + p.SetState(212) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3214,8 +3396,8 @@ func (s *FunctionParamContext) Accept(visitor antlr.ParseTreeVisitor) interface{ func (p *FilterQueryParser) FunctionParam() (localctx IFunctionParamContext) { localctx = NewFunctionParamContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 26, FilterQueryParserRULE_functionParam) - p.SetState(208) + p.EnterRule(localctx, 28, FilterQueryParserRULE_functionParam) + p.SetState(216) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3225,21 +3407,21 @@ func (p *FilterQueryParser) FunctionParam() (localctx IFunctionParamContext) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(205) + p.SetState(213) p.Key() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(206) + p.SetState(214) p.Value() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(207) + p.SetState(215) p.Array() } @@ -3364,10 +3546,10 @@ func (s *ArrayContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FilterQueryParser) Array() (localctx IArrayContext) { localctx = NewArrayContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 28, FilterQueryParserRULE_array) + p.EnterRule(localctx, 30, FilterQueryParserRULE_array) p.EnterOuterAlt(localctx, 1) { - p.SetState(210) + p.SetState(218) p.Match(FilterQueryParserLBRACK) if p.HasError() { // Recognition error - abort rule @@ -3375,11 +3557,11 @@ func (p *FilterQueryParser) Array() (localctx IArrayContext) { } } { - p.SetState(211) + p.SetState(219) p.ValueList() } { - p.SetState(212) + p.SetState(220) p.Match(FilterQueryParserRBRACK) if p.HasError() { // Recognition error - abort rule @@ -3497,15 +3679,15 @@ func (s *ValueContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FilterQueryParser) Value() (localctx IValueContext) { localctx = NewValueContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 30, FilterQueryParserRULE_value) + p.EnterRule(localctx, 32, FilterQueryParserRULE_value) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(214) + p.SetState(222) _la = p.GetTokenStream().LA(1) - if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&2013265920) != 0) { + if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&4026531840) != 0) { p.GetErrorHandler().RecoverInline(p) } else { p.GetErrorHandler().ReportMatch(p) @@ -3608,10 +3790,10 @@ func (s *KeyContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FilterQueryParser) Key() (localctx IKeyContext) { localctx = NewKeyContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 32, FilterQueryParserRULE_key) + p.EnterRule(localctx, 34, FilterQueryParserRULE_key) p.EnterOuterAlt(localctx, 1) { - p.SetState(216) + p.SetState(224) p.Match(FilterQueryParserKEY) if p.HasError() { // Recognition error - abort rule diff --git a/pkg/parser/filterquery/grammar/filterquery_visitor.go b/pkg/parser/filterquery/grammar/filterquery_visitor.go index 50d61ea8d5f..4e76da2aa5e 100644 --- a/pkg/parser/filterquery/grammar/filterquery_visitor.go +++ b/pkg/parser/filterquery/grammar/filterquery_visitor.go @@ -1,4 +1,4 @@ -// Code generated from grammar/FilterQuery.g4 by ANTLR 4.13.2. DO NOT EDIT. +// Code generated from FilterQuery.g4 by ANTLR 4.13.2. DO NOT EDIT. package parser // FilterQuery @@ -44,6 +44,9 @@ type FilterQueryVisitor interface { // Visit a parse tree produced by FilterQueryParser#functionCall. VisitFunctionCall(ctx *FunctionCallContext) interface{} + // Visit a parse tree produced by FilterQueryParser#searchCall. + VisitSearchCall(ctx *SearchCallContext) interface{} + // Visit a parse tree produced by FilterQueryParser#functionParamList. VisitFunctionParamList(ctx *FunctionParamListContext) interface{} diff --git a/pkg/querybuilder/filter_error_listener.go b/pkg/querybuilder/filter_error_listener.go index 5affddae495..13ac4228f43 100644 --- a/pkg/querybuilder/filter_error_listener.go +++ b/pkg/querybuilder/filter_error_listener.go @@ -32,7 +32,7 @@ var friendly = map[string]string{ "BETWEEN": "BETWEEN", "IN": "IN", "EXISTS": "EXISTS", "REGEXP": "REGEXP", "CONTAINS": "CONTAINS", "HAS": "has()", "HASANY": "hasAny()", "HASALL": "hasAll()", - "HASTOKEN": "hasToken()", + "HASTOKEN": "hasToken()", "SEARCH": "search()", // literals / identifiers "NUMBER": "number", diff --git a/pkg/querybuilder/never_true.go b/pkg/querybuilder/never_true.go index 0b00a6c897d..ee5349d48ef 100644 --- a/pkg/querybuilder/never_true.go +++ b/pkg/querybuilder/never_true.go @@ -15,8 +15,8 @@ import ( type FieldConstraint struct { Field string Operator qbtypes.FilterOperator - Value interface{} - Values []interface{} // For IN, NOT IN operations + Value any + Values []any // For IN, NOT IN operations } // ConstraintSet represents a set of constraints that must all be true (AND). @@ -103,7 +103,7 @@ func (d *LogicalContradictionDetector) popNotContext() { } // Visit dispatches to the appropriate visit method. -func (d *LogicalContradictionDetector) Visit(tree antlr.ParseTree) interface{} { +func (d *LogicalContradictionDetector) Visit(tree antlr.ParseTree) any { if tree == nil { return nil } @@ -111,7 +111,7 @@ func (d *LogicalContradictionDetector) Visit(tree antlr.ParseTree) interface{} { } // VisitQuery is the entry point. -func (d *LogicalContradictionDetector) VisitQuery(ctx *grammar.QueryContext) interface{} { +func (d *LogicalContradictionDetector) VisitQuery(ctx *grammar.QueryContext) any { d.Visit(ctx.Expression()) // Check final constraints d.checkContradictions(d.currentConstraints()) @@ -119,12 +119,12 @@ func (d *LogicalContradictionDetector) VisitQuery(ctx *grammar.QueryContext) int } // VisitExpression just passes through to OrExpression. -func (d *LogicalContradictionDetector) VisitExpression(ctx *grammar.ExpressionContext) interface{} { +func (d *LogicalContradictionDetector) VisitExpression(ctx *grammar.ExpressionContext) any { return d.Visit(ctx.OrExpression()) } // VisitOrExpression handles OR logic. -func (d *LogicalContradictionDetector) VisitOrExpression(ctx *grammar.OrExpressionContext) interface{} { +func (d *LogicalContradictionDetector) VisitOrExpression(ctx *grammar.OrExpressionContext) any { andExpressions := ctx.AllAndExpression() if len(andExpressions) == 1 { @@ -149,7 +149,7 @@ func (d *LogicalContradictionDetector) VisitOrExpression(ctx *grammar.OrExpressi } // VisitAndExpression handles AND logic (including implicit AND). -func (d *LogicalContradictionDetector) VisitAndExpression(ctx *grammar.AndExpressionContext) interface{} { +func (d *LogicalContradictionDetector) VisitAndExpression(ctx *grammar.AndExpressionContext) any { unaryExpressions := ctx.AllUnaryExpression() // Visit each unary expression, accumulating constraints @@ -161,7 +161,7 @@ func (d *LogicalContradictionDetector) VisitAndExpression(ctx *grammar.AndExpres } // VisitUnaryExpression handles NOT operator. -func (d *LogicalContradictionDetector) VisitUnaryExpression(ctx *grammar.UnaryExpressionContext) interface{} { +func (d *LogicalContradictionDetector) VisitUnaryExpression(ctx *grammar.UnaryExpressionContext) any { hasNot := ctx.NOT() != nil if hasNot { @@ -180,7 +180,7 @@ func (d *LogicalContradictionDetector) VisitUnaryExpression(ctx *grammar.UnaryEx } // VisitPrimary handles different primary expressions. -func (d *LogicalContradictionDetector) VisitPrimary(ctx *grammar.PrimaryContext) interface{} { +func (d *LogicalContradictionDetector) VisitPrimary(ctx *grammar.PrimaryContext) any { if ctx.OrExpression() != nil { // Parenthesized expression // If we're in an AND context, we continue with the same constraint set @@ -191,6 +191,9 @@ func (d *LogicalContradictionDetector) VisitPrimary(ctx *grammar.PrimaryContext) } else if ctx.FunctionCall() != nil { // Handle function calls if needed return nil + } else if ctx.SearchCall() != nil { + // search() spans all fields; it can never be a logical contradiction + return nil } else if ctx.FullText() != nil { // Handle full text search if needed return nil @@ -200,7 +203,7 @@ func (d *LogicalContradictionDetector) VisitPrimary(ctx *grammar.PrimaryContext) } // VisitComparison extracts constraints from comparisons. -func (d *LogicalContradictionDetector) VisitComparison(ctx *grammar.ComparisonContext) interface{} { +func (d *LogicalContradictionDetector) VisitComparison(ctx *grammar.ComparisonContext) any { if ctx.Key() == nil { return nil } @@ -274,7 +277,7 @@ func (d *LogicalContradictionDetector) VisitComparison(ctx *grammar.ComparisonCo constraint := FieldConstraint{ Field: field, Operator: operator, - Values: []interface{}{val1, val2}, + Values: []any{val1, val2}, } d.addConstraint(constraint) } @@ -343,7 +346,7 @@ func (d *LogicalContradictionDetector) VisitComparison(ctx *grammar.ComparisonCo } // extractValue extracts the actual value from a ValueContext. -func (d *LogicalContradictionDetector) extractValue(ctx grammar.IValueContext) interface{} { +func (d *LogicalContradictionDetector) extractValue(ctx grammar.IValueContext) any { if ctx.QUOTED_TEXT() != nil { text := ctx.QUOTED_TEXT().GetText() // Remove quotes @@ -362,12 +365,12 @@ func (d *LogicalContradictionDetector) extractValue(ctx grammar.IValueContext) i } // extractValueList extracts values from a ValueListContext. -func (d *LogicalContradictionDetector) extractValueList(ctx grammar.IValueListContext) []interface{} { +func (d *LogicalContradictionDetector) extractValueList(ctx grammar.IValueListContext) []any { if ctx == nil { return nil } - values := []interface{}{} + values := []any{} for _, val := range ctx.AllValue() { values = append(values, d.extractValue(val)) } @@ -763,7 +766,7 @@ func (d *LogicalContradictionDetector) checkRangeContradictions(constraints []Fi } // valuesSatisfyRanges checks if a value satisfies all range constraints. -func (d *LogicalContradictionDetector) valuesSatisfyRanges(value interface{}, constraints []FieldConstraint) bool { +func (d *LogicalContradictionDetector) valuesSatisfyRanges(value any, constraints []FieldConstraint) bool { val, err := parseNumericValue(value) if err != nil { return true // If not numeric, we can't check @@ -799,7 +802,7 @@ func (d *LogicalContradictionDetector) valuesSatisfyRanges(value interface{}, co } // valueSatisfiesBetween checks if a value is within a BETWEEN range. -func (d *LogicalContradictionDetector) valueSatisfiesBetween(value interface{}, between FieldConstraint) bool { +func (d *LogicalContradictionDetector) valueSatisfiesBetween(value any, between FieldConstraint) bool { if len(between.Values) != 2 { return false } @@ -848,7 +851,7 @@ func (d *LogicalContradictionDetector) cloneConstraintSet(set *ConstraintSet) *C } // parseNumericValue attempts to parse a value as a number. -func parseNumericValue(value interface{}) (float64, error) { +func parseNumericValue(value any) (float64, error) { switch v := value.(type) { case float64: return v, nil diff --git a/pkg/querybuilder/where_clause_visitor.go b/pkg/querybuilder/where_clause_visitor.go index f3dda70c249..798e2fe18b4 100644 --- a/pkg/querybuilder/where_clause_visitor.go +++ b/pkg/querybuilder/where_clause_visitor.go @@ -203,6 +203,8 @@ func (v *filterExpressionVisitor) Visit(tree antlr.ParseTree) any { return v.VisitValueList(t) case *grammar.FullTextContext: return v.VisitFullText(t) + case *grammar.SearchCallContext: + return v.VisitSearchCall(t) case *grammar.FunctionCallContext: return v.VisitFunctionCall(t) case *grammar.FunctionParamListContext: @@ -317,6 +319,8 @@ func (v *filterExpressionVisitor) VisitPrimary(ctx *grammar.PrimaryContext) any return v.Visit(ctx.Comparison()) } else if ctx.FunctionCall() != nil { return v.Visit(ctx.FunctionCall()) + } else if ctx.SearchCall() != nil { + return v.Visit(ctx.SearchCall()) } else if ctx.FullText() != nil { return v.Visit(ctx.FullText()) } @@ -772,6 +776,13 @@ func normalizeFunctionValue(operator qbtypes.FilterOperator, functionName string return valueParams, nil } +// VisitSearchCall handles search('needle'). The search() function is parsed but +// not yet implemented; reject it with a clear invalid-input error. +func (v *filterExpressionVisitor) VisitSearchCall(ctx *grammar.SearchCallContext) any { + v.errors = append(v.errors, "function `search` is not yet supported") + return ErrorConditionLiteral +} + // VisitFunctionParamList handles the parameter list for function calls. func (v *filterExpressionVisitor) VisitFunctionParamList(ctx *grammar.FunctionParamListContext) any { params := ctx.AllFunctionParam() diff --git a/pkg/telemetrylogs/filter_expr_logs_test.go b/pkg/telemetrylogs/filter_expr_logs_test.go index f56fdd7b1cf..3ea1a2612e5 100644 --- a/pkg/telemetrylogs/filter_expr_logs_test.go +++ b/pkg/telemetrylogs/filter_expr_logs_test.go @@ -115,7 +115,7 @@ func TestFilterExprLogs(t *testing.T) { category: "Single word", query: "", shouldPass: false, - expectedErrorContains: "expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text} but got '<'", + expectedErrorContains: "expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text, search()} but got '<'", }, // Single word searches with spaces @@ -181,7 +181,7 @@ func TestFilterExprLogs(t *testing.T) { category: "Special characters", query: "[tracing]", shouldPass: false, - expectedErrorContains: "expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text} but got '['", + expectedErrorContains: "expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text, search()} but got '['", }, { category: "Special characters", @@ -211,7 +211,7 @@ func TestFilterExprLogs(t *testing.T) { category: "Special characters", query: "ERROR: cannot execute update() in a read-only context", shouldPass: false, - expectedErrorContains: "expecting one of {(, AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text} but got ')'", + expectedErrorContains: "expecting one of {(, AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text, search()} but got ')'", }, { category: "Special characters", @@ -633,7 +633,7 @@ func TestFilterExprLogs(t *testing.T) { shouldPass: false, expectedQuery: "", expectedArgs: nil, - expectedErrorContains: "expecting one of {(, ), FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text} but got 'and'", + expectedErrorContains: "expecting one of {(, ), FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text, search()} but got 'and'", }, { category: "Keyword conflict", @@ -641,7 +641,7 @@ func TestFilterExprLogs(t *testing.T) { shouldPass: false, expectedQuery: "", expectedArgs: nil, - expectedErrorContains: "expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text} but got 'or'", + expectedErrorContains: "expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text, search()} but got 'or'", }, { category: "Keyword conflict", @@ -649,7 +649,7 @@ func TestFilterExprLogs(t *testing.T) { shouldPass: false, expectedQuery: "", expectedArgs: nil, - expectedErrorContains: "expecting one of {(, ), FREETEXT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text} but got EOF", + expectedErrorContains: "expecting one of {(, ), FREETEXT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text, search()} but got EOF", }, { category: "Keyword conflict", @@ -657,7 +657,7 @@ func TestFilterExprLogs(t *testing.T) { shouldPass: false, expectedQuery: "", expectedArgs: nil, - expectedErrorContains: "expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text} but got 'like'", + expectedErrorContains: "expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text, search()} but got 'like'", }, { category: "Keyword conflict", @@ -665,7 +665,7 @@ func TestFilterExprLogs(t *testing.T) { shouldPass: false, expectedQuery: "", expectedArgs: nil, - expectedErrorContains: "expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text} but got 'between'", + expectedErrorContains: "expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text, search()} but got 'between'", }, { category: "Keyword conflict", @@ -673,7 +673,7 @@ func TestFilterExprLogs(t *testing.T) { shouldPass: false, expectedQuery: "", expectedArgs: nil, - expectedErrorContains: "expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text} but got 'in'", + expectedErrorContains: "expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text, search()} but got 'in'", }, { category: "Keyword conflict", @@ -681,7 +681,7 @@ func TestFilterExprLogs(t *testing.T) { shouldPass: false, expectedQuery: "", expectedArgs: nil, - expectedErrorContains: "expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text} but got 'exists'", + expectedErrorContains: "expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text, search()} but got 'exists'", }, { category: "Keyword conflict", @@ -689,7 +689,7 @@ func TestFilterExprLogs(t *testing.T) { shouldPass: false, expectedQuery: "", expectedArgs: nil, - expectedErrorContains: "expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text} but got 'regexp'", + expectedErrorContains: "expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text, search()} but got 'regexp'", }, { category: "Keyword conflict", @@ -697,7 +697,7 @@ func TestFilterExprLogs(t *testing.T) { shouldPass: false, expectedQuery: "", expectedArgs: nil, - expectedErrorContains: "expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text} but got 'contains'", + expectedErrorContains: "expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text, search()} but got 'contains'", }, { category: "Keyword conflict", @@ -2052,9 +2052,9 @@ func TestFilterExprLogs(t *testing.T) { expectedErrorContains: "", }, - {category: "Only keywords", query: "AND", shouldPass: false, expectedErrorContains: "expecting one of {(, ), FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text} but got 'AND'"}, - {category: "Only keywords", query: "OR", shouldPass: false, expectedErrorContains: "expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text} but got 'OR'"}, - {category: "Only keywords", query: "NOT", shouldPass: false, expectedErrorContains: "expecting one of {(, ), FREETEXT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text} but got EOF"}, + {category: "Only keywords", query: "AND", shouldPass: false, expectedErrorContains: "expecting one of {(, ), FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text, search()} but got 'AND'"}, + {category: "Only keywords", query: "OR", shouldPass: false, expectedErrorContains: "expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text, search()} but got 'OR'"}, + {category: "Only keywords", query: "NOT", shouldPass: false, expectedErrorContains: "expecting one of {(, ), FREETEXT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text, search()} but got EOF"}, {category: "Only functions", query: "has", shouldPass: false, expectedErrorContains: "expecting one of {(, )} but got EOF"}, {category: "Only functions", query: "hasAny", shouldPass: false, expectedErrorContains: "expecting one of {(, )} but got EOF"}, @@ -2196,7 +2196,7 @@ func TestFilterExprLogs(t *testing.T) { shouldPass: false, expectedQuery: "", expectedArgs: nil, - expectedErrorContains: "line 1:0 expecting one of {(, ), FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text} but got 'and'", + expectedErrorContains: "line 1:0 expecting one of {(, ), FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text, search()} but got 'and'", }, { category: "Operator keywords as keys", @@ -2204,7 +2204,7 @@ func TestFilterExprLogs(t *testing.T) { shouldPass: false, expectedQuery: "", expectedArgs: nil, - expectedErrorContains: "line 1:0 expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text} but got 'or'", + expectedErrorContains: "line 1:0 expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text, search()} but got 'or'", }, { category: "Operator keywords as keys", @@ -2212,7 +2212,7 @@ func TestFilterExprLogs(t *testing.T) { shouldPass: false, expectedQuery: "", expectedArgs: nil, - expectedErrorContains: "line 1:3 expecting one of {(, ), FREETEXT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text} but got '='", + expectedErrorContains: "line 1:3 expecting one of {(, ), FREETEXT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text, search()} but got '='", }, { category: "Operator keywords as keys", @@ -2220,7 +2220,7 @@ func TestFilterExprLogs(t *testing.T) { shouldPass: false, expectedQuery: "", expectedArgs: nil, - expectedErrorContains: "line 1:0 expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text} but got 'between'", + expectedErrorContains: "line 1:0 expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text, search()} but got 'between'", }, { category: "Operator keywords as keys", @@ -2228,7 +2228,7 @@ func TestFilterExprLogs(t *testing.T) { shouldPass: false, expectedQuery: "", expectedArgs: nil, - expectedErrorContains: "line 1:0 expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text} but got 'in'", + expectedErrorContains: "line 1:0 expecting one of {(, ), AND, FREETEXT, NOT, boolean, has(), hasAll(), hasAny(), hasToken(), number, quoted text, search()} but got 'in'", }, // Using function keywords as keys diff --git a/pkg/variables/variable_replace_visitor.go b/pkg/variables/variable_replace_visitor.go index a62d48acbf8..2d5b26e568f 100644 --- a/pkg/variables/variable_replace_visitor.go +++ b/pkg/variables/variable_replace_visitor.go @@ -109,6 +109,8 @@ func (v *variableReplacementVisitor) Visit(tree antlr.ParseTree) any { return v.VisitValueList(t) case *grammar.FullTextContext: return v.VisitFullText(t) + case *grammar.SearchCallContext: + return v.VisitSearchCall(t) case *grammar.FunctionCallContext: return v.VisitFunctionCall(t) case *grammar.FunctionParamListContext: @@ -203,6 +205,8 @@ func (v *variableReplacementVisitor) VisitPrimary(ctx *grammar.PrimaryContext) a return v.Visit(ctx.Comparison()) } else if ctx.FunctionCall() != nil { return v.Visit(ctx.FunctionCall()) + } else if ctx.SearchCall() != nil { + return v.Visit(ctx.SearchCall()) } else if ctx.FullText() != nil { return v.Visit(ctx.FullText()) } @@ -407,6 +411,13 @@ func (v *variableReplacementVisitor) VisitFunctionCall(ctx *grammar.FunctionCall return functionName + "(" + params + ")" } +func (v *variableReplacementVisitor) VisitSearchCall(ctx *grammar.SearchCallContext) any { + if ctx.FunctionParamList() == nil { + return "search()" + } + return "search(" + v.Visit(ctx.FunctionParamList()).(string) + ")" +} + func (v *variableReplacementVisitor) VisitFunctionParamList(ctx *grammar.FunctionParamListContext) any { params := ctx.AllFunctionParam() parts := make([]string, 0, len(params))