From 6821efeb999a87fecea5eafa819014cbe26731a0 Mon Sep 17 00:00:00 2001 From: Srikanth Chekuri Date: Fri, 16 May 2025 20:17:23 +0530 Subject: [PATCH] chore: move visitor impl out of generated files (#7956) --- .../grammar/where_clause_visitor_test.go | 1 - .../grammar => querybuilder}/query_to_keys.go | 7 +- .../query_to_keys_test.go | 2 +- .../where_clause_visitor.go | 77 ++++++++++--------- 4 files changed, 44 insertions(+), 43 deletions(-) delete mode 100644 pkg/parser/grammar/where_clause_visitor_test.go rename pkg/{parser/grammar => querybuilder}/query_to_keys.go (87%) rename pkg/{parser/grammar => querybuilder}/query_to_keys_test.go (99%) rename pkg/{parser/grammar => querybuilder}/where_clause_visitor.go (87%) diff --git a/pkg/parser/grammar/where_clause_visitor_test.go b/pkg/parser/grammar/where_clause_visitor_test.go deleted file mode 100644 index 0bfe2c257e..0000000000 --- a/pkg/parser/grammar/where_clause_visitor_test.go +++ /dev/null @@ -1 +0,0 @@ -package parser diff --git a/pkg/parser/grammar/query_to_keys.go b/pkg/querybuilder/query_to_keys.go similarity index 87% rename from pkg/parser/grammar/query_to_keys.go rename to pkg/querybuilder/query_to_keys.go index d0e2268f3d..ad97d10bf9 100644 --- a/pkg/parser/grammar/query_to_keys.go +++ b/pkg/querybuilder/query_to_keys.go @@ -1,6 +1,7 @@ -package parser +package querybuilder import ( + grammar "github.com/SigNoz/signoz/pkg/parser/grammar" "github.com/SigNoz/signoz/pkg/types/telemetrytypes" "github.com/antlr4-go/antlr/v4" ) @@ -25,7 +26,7 @@ import ( // }, // } func QueryStringToKeysSelectors(query string) ([]*telemetrytypes.FieldKeySelector, error) { - lexer := NewFilterQueryLexer(antlr.NewInputStream(query)) + lexer := grammar.NewFilterQueryLexer(antlr.NewInputStream(query)) keys := []*telemetrytypes.FieldKeySelector{} for { tok := lexer.NextToken() @@ -33,7 +34,7 @@ func QueryStringToKeysSelectors(query string) ([]*telemetrytypes.FieldKeySelecto break } - if tok.GetTokenType() == FilterQueryLexerKEY { + if tok.GetTokenType() == grammar.FilterQueryLexerKEY { key := telemetrytypes.GetFieldKeyFromKeyText(tok.GetText()) keys = append(keys, &telemetrytypes.FieldKeySelector{ Name: key.Name, diff --git a/pkg/parser/grammar/query_to_keys_test.go b/pkg/querybuilder/query_to_keys_test.go similarity index 99% rename from pkg/parser/grammar/query_to_keys_test.go rename to pkg/querybuilder/query_to_keys_test.go index 795401e1c4..8bf065f010 100644 --- a/pkg/parser/grammar/query_to_keys_test.go +++ b/pkg/querybuilder/query_to_keys_test.go @@ -1,4 +1,4 @@ -package parser +package querybuilder import ( "testing" diff --git a/pkg/parser/grammar/where_clause_visitor.go b/pkg/querybuilder/where_clause_visitor.go similarity index 87% rename from pkg/parser/grammar/where_clause_visitor.go rename to pkg/querybuilder/where_clause_visitor.go index 4bb45a84c3..2c8ba191d0 100644 --- a/pkg/parser/grammar/where_clause_visitor.go +++ b/pkg/querybuilder/where_clause_visitor.go @@ -1,4 +1,4 @@ -package parser +package querybuilder import ( "context" @@ -7,6 +7,7 @@ import ( "strings" "github.com/SigNoz/signoz/pkg/errors" + grammar "github.com/SigNoz/signoz/pkg/parser/grammar" "github.com/SigNoz/signoz/pkg/telemetrylogs" qbtypes "github.com/SigNoz/signoz/pkg/types/querybuildertypes/querybuildertypesv5" "github.com/SigNoz/signoz/pkg/types/telemetrytypes" @@ -79,7 +80,7 @@ func PrepareWhereClause( ) (*sqlbuilder.WhereClause, []error, error) { // Setup the ANTLR parsing pipeline input := antlr.NewInputStream(query) - lexer := NewFilterQueryLexer(input) + lexer := grammar.NewFilterQueryLexer(input) sb := sqlbuilder.NewSelectBuilder() @@ -92,7 +93,7 @@ func PrepareWhereClause( tokens := antlr.NewCommonTokenStream(lexer, 0) parserErrorListener := NewErrorListener() - parser := NewFilterQueryParser(tokens) + parser := grammar.NewFilterQueryParser(tokens) parser.RemoveErrorListeners() parser.AddErrorListener(parserErrorListener) @@ -139,57 +140,57 @@ func (v *WhereClauseVisitor) Visit(tree antlr.ParseTree) any { } switch t := tree.(type) { - case *QueryContext: + case *grammar.QueryContext: return v.VisitQuery(t) - case *ExpressionContext: + case *grammar.ExpressionContext: return v.VisitExpression(t) - case *OrExpressionContext: + case *grammar.OrExpressionContext: return v.VisitOrExpression(t) - case *AndExpressionContext: + case *grammar.AndExpressionContext: return v.VisitAndExpression(t) - case *UnaryExpressionContext: + case *grammar.UnaryExpressionContext: return v.VisitUnaryExpression(t) - case *PrimaryContext: + case *grammar.PrimaryContext: return v.VisitPrimary(t) - case *ComparisonContext: + case *grammar.ComparisonContext: return v.VisitComparison(t) - case *InClauseContext: + case *grammar.InClauseContext: return v.VisitInClause(t) - case *NotInClauseContext: + case *grammar.NotInClauseContext: return v.VisitNotInClause(t) - case *ValueListContext: + case *grammar.ValueListContext: return v.VisitValueList(t) - case *FullTextContext: + case *grammar.FullTextContext: return v.VisitFullText(t) - case *FunctionCallContext: + case *grammar.FunctionCallContext: return v.VisitFunctionCall(t) - case *FunctionParamListContext: + case *grammar.FunctionParamListContext: return v.VisitFunctionParamList(t) - case *FunctionParamContext: + case *grammar.FunctionParamContext: return v.VisitFunctionParam(t) - case *ArrayContext: + case *grammar.ArrayContext: return v.VisitArray(t) - case *ValueContext: + case *grammar.ValueContext: return v.VisitValue(t) - case *KeyContext: + case *grammar.KeyContext: return v.VisitKey(t) default: return "" } } -func (v *WhereClauseVisitor) VisitQuery(ctx *QueryContext) any { +func (v *WhereClauseVisitor) VisitQuery(ctx *grammar.QueryContext) any { return v.Visit(ctx.Expression()) } // VisitExpression passes through to the orExpression -func (v *WhereClauseVisitor) VisitExpression(ctx *ExpressionContext) any { +func (v *WhereClauseVisitor) VisitExpression(ctx *grammar.ExpressionContext) any { return v.Visit(ctx.OrExpression()) } // VisitOrExpression handles OR expressions -func (v *WhereClauseVisitor) VisitOrExpression(ctx *OrExpressionContext) any { +func (v *WhereClauseVisitor) VisitOrExpression(ctx *grammar.OrExpressionContext) any { andExpressions := ctx.AllAndExpression() andExpressionConditions := make([]string, len(andExpressions)) @@ -205,7 +206,7 @@ func (v *WhereClauseVisitor) VisitOrExpression(ctx *OrExpressionContext) any { } // VisitAndExpression handles AND expressions -func (v *WhereClauseVisitor) VisitAndExpression(ctx *AndExpressionContext) any { +func (v *WhereClauseVisitor) VisitAndExpression(ctx *grammar.AndExpressionContext) any { unaryExpressions := ctx.AllUnaryExpression() unaryExpressionConditions := make([]string, len(unaryExpressions)) @@ -221,7 +222,7 @@ func (v *WhereClauseVisitor) VisitAndExpression(ctx *AndExpressionContext) any { } // VisitUnaryExpression handles NOT expressions -func (v *WhereClauseVisitor) VisitUnaryExpression(ctx *UnaryExpressionContext) any { +func (v *WhereClauseVisitor) VisitUnaryExpression(ctx *grammar.UnaryExpressionContext) any { result := v.Visit(ctx.Primary()).(string) // Check if this is a NOT expression @@ -233,7 +234,7 @@ func (v *WhereClauseVisitor) VisitUnaryExpression(ctx *UnaryExpressionContext) a } // VisitPrimary handles grouped expressions, comparisons, function calls, and full-text search -func (v *WhereClauseVisitor) VisitPrimary(ctx *PrimaryContext) any { +func (v *WhereClauseVisitor) VisitPrimary(ctx *grammar.PrimaryContext) any { if ctx.OrExpression() != nil { // This is a parenthesized expression return fmt.Sprintf("(%s)", v.Visit(ctx.OrExpression()).(string)) @@ -248,7 +249,7 @@ func (v *WhereClauseVisitor) VisitPrimary(ctx *PrimaryContext) any { // Handle standalone key as a full text search term if ctx.GetChildCount() == 1 { child := ctx.GetChild(0) - if keyCtx, ok := child.(*KeyContext); ok { + if keyCtx, ok := child.(*grammar.KeyContext); ok { // create a full text search condition on the body field keyText := keyCtx.GetText() cond, err := v.conditionBuilder.ConditionFor(context.Background(), v.fullTextColumn, qbtypes.FilterOperatorRegexp, keyText, v.builder) @@ -263,7 +264,7 @@ func (v *WhereClauseVisitor) VisitPrimary(ctx *PrimaryContext) any { } // VisitComparison handles all comparison operators -func (v *WhereClauseVisitor) VisitComparison(ctx *ComparisonContext) any { +func (v *WhereClauseVisitor) VisitComparison(ctx *grammar.ComparisonContext) any { keys := v.Visit(ctx.Key()).([]*telemetrytypes.TelemetryFieldKey) // Handle EXISTS specially @@ -380,17 +381,17 @@ func (v *WhereClauseVisitor) VisitComparison(ctx *ComparisonContext) any { } // VisitInClause handles IN expressions -func (v *WhereClauseVisitor) VisitInClause(ctx *InClauseContext) any { +func (v *WhereClauseVisitor) VisitInClause(ctx *grammar.InClauseContext) any { return v.Visit(ctx.ValueList()) } // VisitNotInClause handles NOT IN expressions -func (v *WhereClauseVisitor) VisitNotInClause(ctx *NotInClauseContext) any { +func (v *WhereClauseVisitor) VisitNotInClause(ctx *grammar.NotInClauseContext) any { return v.Visit(ctx.ValueList()) } // VisitValueList handles comma-separated value lists -func (v *WhereClauseVisitor) VisitValueList(ctx *ValueListContext) any { +func (v *WhereClauseVisitor) VisitValueList(ctx *grammar.ValueListContext) any { values := ctx.AllValue() parts := []any{} @@ -402,7 +403,7 @@ func (v *WhereClauseVisitor) VisitValueList(ctx *ValueListContext) any { } // VisitFullText handles standalone quoted strings for full-text search -func (v *WhereClauseVisitor) VisitFullText(ctx *FullTextContext) any { +func (v *WhereClauseVisitor) VisitFullText(ctx *grammar.FullTextContext) any { // remove quotes from the quotedText quotedText := strings.Trim(ctx.QUOTED_TEXT().GetText(), "\"'") cond, err := v.conditionBuilder.ConditionFor(context.Background(), v.fullTextColumn, qbtypes.FilterOperatorRegexp, quotedText, v.builder) @@ -413,7 +414,7 @@ func (v *WhereClauseVisitor) VisitFullText(ctx *FullTextContext) any { } // VisitFunctionCall handles function calls like has(), hasAny(), etc. -func (v *WhereClauseVisitor) VisitFunctionCall(ctx *FunctionCallContext) any { +func (v *WhereClauseVisitor) VisitFunctionCall(ctx *grammar.FunctionCallContext) any { // Get function name based on which token is present var functionName string if ctx.HAS() != nil { @@ -482,7 +483,7 @@ func (v *WhereClauseVisitor) VisitFunctionCall(ctx *FunctionCallContext) any { } // VisitFunctionParamList handles the parameter list for function calls -func (v *WhereClauseVisitor) VisitFunctionParamList(ctx *FunctionParamListContext) any { +func (v *WhereClauseVisitor) VisitFunctionParamList(ctx *grammar.FunctionParamListContext) any { params := ctx.AllFunctionParam() parts := make([]any, len(params)) @@ -494,7 +495,7 @@ func (v *WhereClauseVisitor) VisitFunctionParamList(ctx *FunctionParamListContex } // VisitFunctionParam handles individual parameters in function calls -func (v *WhereClauseVisitor) VisitFunctionParam(ctx *FunctionParamContext) any { +func (v *WhereClauseVisitor) VisitFunctionParam(ctx *grammar.FunctionParamContext) any { if ctx.Key() != nil { return v.Visit(ctx.Key()) } else if ctx.Value() != nil { @@ -507,12 +508,12 @@ func (v *WhereClauseVisitor) VisitFunctionParam(ctx *FunctionParamContext) any { } // VisitArray handles array literals -func (v *WhereClauseVisitor) VisitArray(ctx *ArrayContext) any { +func (v *WhereClauseVisitor) VisitArray(ctx *grammar.ArrayContext) any { return v.Visit(ctx.ValueList()) } // VisitValue handles literal values: strings, numbers, booleans -func (v *WhereClauseVisitor) VisitValue(ctx *ValueContext) any { +func (v *WhereClauseVisitor) VisitValue(ctx *grammar.ValueContext) any { if ctx.QUOTED_TEXT() != nil { txt := ctx.QUOTED_TEXT().GetText() // trim quotes and return the value @@ -545,7 +546,7 @@ func (v *WhereClauseVisitor) VisitValue(ctx *ValueContext) any { } // VisitKey handles field/column references -func (v *WhereClauseVisitor) VisitKey(ctx *KeyContext) any { +func (v *WhereClauseVisitor) VisitKey(ctx *grammar.KeyContext) any { fieldKey := telemetrytypes.GetFieldKeyFromKeyText(ctx.KEY().GetText())