chore: move visitor impl out of generated files (#7956)

This commit is contained in:
Srikanth Chekuri 2025-05-16 20:17:23 +05:30 committed by GitHub
parent c5d5c84a0e
commit 6821efeb99
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 44 additions and 43 deletions

View File

@ -1 +0,0 @@
package parser

View File

@ -1,6 +1,7 @@
package parser package querybuilder
import ( import (
grammar "github.com/SigNoz/signoz/pkg/parser/grammar"
"github.com/SigNoz/signoz/pkg/types/telemetrytypes" "github.com/SigNoz/signoz/pkg/types/telemetrytypes"
"github.com/antlr4-go/antlr/v4" "github.com/antlr4-go/antlr/v4"
) )
@ -25,7 +26,7 @@ import (
// }, // },
// } // }
func QueryStringToKeysSelectors(query string) ([]*telemetrytypes.FieldKeySelector, error) { func QueryStringToKeysSelectors(query string) ([]*telemetrytypes.FieldKeySelector, error) {
lexer := NewFilterQueryLexer(antlr.NewInputStream(query)) lexer := grammar.NewFilterQueryLexer(antlr.NewInputStream(query))
keys := []*telemetrytypes.FieldKeySelector{} keys := []*telemetrytypes.FieldKeySelector{}
for { for {
tok := lexer.NextToken() tok := lexer.NextToken()
@ -33,7 +34,7 @@ func QueryStringToKeysSelectors(query string) ([]*telemetrytypes.FieldKeySelecto
break break
} }
if tok.GetTokenType() == FilterQueryLexerKEY { if tok.GetTokenType() == grammar.FilterQueryLexerKEY {
key := telemetrytypes.GetFieldKeyFromKeyText(tok.GetText()) key := telemetrytypes.GetFieldKeyFromKeyText(tok.GetText())
keys = append(keys, &telemetrytypes.FieldKeySelector{ keys = append(keys, &telemetrytypes.FieldKeySelector{
Name: key.Name, Name: key.Name,

View File

@ -1,4 +1,4 @@
package parser package querybuilder
import ( import (
"testing" "testing"

View File

@ -1,4 +1,4 @@
package parser package querybuilder
import ( import (
"context" "context"
@ -7,6 +7,7 @@ import (
"strings" "strings"
"github.com/SigNoz/signoz/pkg/errors" "github.com/SigNoz/signoz/pkg/errors"
grammar "github.com/SigNoz/signoz/pkg/parser/grammar"
"github.com/SigNoz/signoz/pkg/telemetrylogs" "github.com/SigNoz/signoz/pkg/telemetrylogs"
qbtypes "github.com/SigNoz/signoz/pkg/types/querybuildertypes/querybuildertypesv5" qbtypes "github.com/SigNoz/signoz/pkg/types/querybuildertypes/querybuildertypesv5"
"github.com/SigNoz/signoz/pkg/types/telemetrytypes" "github.com/SigNoz/signoz/pkg/types/telemetrytypes"
@ -79,7 +80,7 @@ func PrepareWhereClause(
) (*sqlbuilder.WhereClause, []error, error) { ) (*sqlbuilder.WhereClause, []error, error) {
// Setup the ANTLR parsing pipeline // Setup the ANTLR parsing pipeline
input := antlr.NewInputStream(query) input := antlr.NewInputStream(query)
lexer := NewFilterQueryLexer(input) lexer := grammar.NewFilterQueryLexer(input)
sb := sqlbuilder.NewSelectBuilder() sb := sqlbuilder.NewSelectBuilder()
@ -92,7 +93,7 @@ func PrepareWhereClause(
tokens := antlr.NewCommonTokenStream(lexer, 0) tokens := antlr.NewCommonTokenStream(lexer, 0)
parserErrorListener := NewErrorListener() parserErrorListener := NewErrorListener()
parser := NewFilterQueryParser(tokens) parser := grammar.NewFilterQueryParser(tokens)
parser.RemoveErrorListeners() parser.RemoveErrorListeners()
parser.AddErrorListener(parserErrorListener) parser.AddErrorListener(parserErrorListener)
@ -139,57 +140,57 @@ func (v *WhereClauseVisitor) Visit(tree antlr.ParseTree) any {
} }
switch t := tree.(type) { switch t := tree.(type) {
case *QueryContext: case *grammar.QueryContext:
return v.VisitQuery(t) return v.VisitQuery(t)
case *ExpressionContext: case *grammar.ExpressionContext:
return v.VisitExpression(t) return v.VisitExpression(t)
case *OrExpressionContext: case *grammar.OrExpressionContext:
return v.VisitOrExpression(t) return v.VisitOrExpression(t)
case *AndExpressionContext: case *grammar.AndExpressionContext:
return v.VisitAndExpression(t) return v.VisitAndExpression(t)
case *UnaryExpressionContext: case *grammar.UnaryExpressionContext:
return v.VisitUnaryExpression(t) return v.VisitUnaryExpression(t)
case *PrimaryContext: case *grammar.PrimaryContext:
return v.VisitPrimary(t) return v.VisitPrimary(t)
case *ComparisonContext: case *grammar.ComparisonContext:
return v.VisitComparison(t) return v.VisitComparison(t)
case *InClauseContext: case *grammar.InClauseContext:
return v.VisitInClause(t) return v.VisitInClause(t)
case *NotInClauseContext: case *grammar.NotInClauseContext:
return v.VisitNotInClause(t) return v.VisitNotInClause(t)
case *ValueListContext: case *grammar.ValueListContext:
return v.VisitValueList(t) return v.VisitValueList(t)
case *FullTextContext: case *grammar.FullTextContext:
return v.VisitFullText(t) return v.VisitFullText(t)
case *FunctionCallContext: case *grammar.FunctionCallContext:
return v.VisitFunctionCall(t) return v.VisitFunctionCall(t)
case *FunctionParamListContext: case *grammar.FunctionParamListContext:
return v.VisitFunctionParamList(t) return v.VisitFunctionParamList(t)
case *FunctionParamContext: case *grammar.FunctionParamContext:
return v.VisitFunctionParam(t) return v.VisitFunctionParam(t)
case *ArrayContext: case *grammar.ArrayContext:
return v.VisitArray(t) return v.VisitArray(t)
case *ValueContext: case *grammar.ValueContext:
return v.VisitValue(t) return v.VisitValue(t)
case *KeyContext: case *grammar.KeyContext:
return v.VisitKey(t) return v.VisitKey(t)
default: default:
return "" return ""
} }
} }
func (v *WhereClauseVisitor) VisitQuery(ctx *QueryContext) any { func (v *WhereClauseVisitor) VisitQuery(ctx *grammar.QueryContext) any {
return v.Visit(ctx.Expression()) return v.Visit(ctx.Expression())
} }
// VisitExpression passes through to the orExpression // 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()) return v.Visit(ctx.OrExpression())
} }
// VisitOrExpression handles OR expressions // VisitOrExpression handles OR expressions
func (v *WhereClauseVisitor) VisitOrExpression(ctx *OrExpressionContext) any { func (v *WhereClauseVisitor) VisitOrExpression(ctx *grammar.OrExpressionContext) any {
andExpressions := ctx.AllAndExpression() andExpressions := ctx.AllAndExpression()
andExpressionConditions := make([]string, len(andExpressions)) andExpressionConditions := make([]string, len(andExpressions))
@ -205,7 +206,7 @@ func (v *WhereClauseVisitor) VisitOrExpression(ctx *OrExpressionContext) any {
} }
// VisitAndExpression handles AND expressions // VisitAndExpression handles AND expressions
func (v *WhereClauseVisitor) VisitAndExpression(ctx *AndExpressionContext) any { func (v *WhereClauseVisitor) VisitAndExpression(ctx *grammar.AndExpressionContext) any {
unaryExpressions := ctx.AllUnaryExpression() unaryExpressions := ctx.AllUnaryExpression()
unaryExpressionConditions := make([]string, len(unaryExpressions)) unaryExpressionConditions := make([]string, len(unaryExpressions))
@ -221,7 +222,7 @@ func (v *WhereClauseVisitor) VisitAndExpression(ctx *AndExpressionContext) any {
} }
// VisitUnaryExpression handles NOT expressions // 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) result := v.Visit(ctx.Primary()).(string)
// Check if this is a NOT expression // 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 // 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 { if ctx.OrExpression() != nil {
// This is a parenthesized expression // This is a parenthesized expression
return fmt.Sprintf("(%s)", v.Visit(ctx.OrExpression()).(string)) 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 // Handle standalone key as a full text search term
if ctx.GetChildCount() == 1 { if ctx.GetChildCount() == 1 {
child := ctx.GetChild(0) 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 // create a full text search condition on the body field
keyText := keyCtx.GetText() keyText := keyCtx.GetText()
cond, err := v.conditionBuilder.ConditionFor(context.Background(), v.fullTextColumn, qbtypes.FilterOperatorRegexp, keyText, v.builder) 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 // 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) keys := v.Visit(ctx.Key()).([]*telemetrytypes.TelemetryFieldKey)
// Handle EXISTS specially // Handle EXISTS specially
@ -380,17 +381,17 @@ func (v *WhereClauseVisitor) VisitComparison(ctx *ComparisonContext) any {
} }
// VisitInClause handles IN expressions // VisitInClause handles IN expressions
func (v *WhereClauseVisitor) VisitInClause(ctx *InClauseContext) any { func (v *WhereClauseVisitor) VisitInClause(ctx *grammar.InClauseContext) any {
return v.Visit(ctx.ValueList()) return v.Visit(ctx.ValueList())
} }
// VisitNotInClause handles NOT IN expressions // 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()) return v.Visit(ctx.ValueList())
} }
// VisitValueList handles comma-separated value lists // VisitValueList handles comma-separated value lists
func (v *WhereClauseVisitor) VisitValueList(ctx *ValueListContext) any { func (v *WhereClauseVisitor) VisitValueList(ctx *grammar.ValueListContext) any {
values := ctx.AllValue() values := ctx.AllValue()
parts := []any{} parts := []any{}
@ -402,7 +403,7 @@ func (v *WhereClauseVisitor) VisitValueList(ctx *ValueListContext) any {
} }
// VisitFullText handles standalone quoted strings for full-text search // 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 // remove quotes from the quotedText
quotedText := strings.Trim(ctx.QUOTED_TEXT().GetText(), "\"'") quotedText := strings.Trim(ctx.QUOTED_TEXT().GetText(), "\"'")
cond, err := v.conditionBuilder.ConditionFor(context.Background(), v.fullTextColumn, qbtypes.FilterOperatorRegexp, quotedText, v.builder) 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. // 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 // Get function name based on which token is present
var functionName string var functionName string
if ctx.HAS() != nil { if ctx.HAS() != nil {
@ -482,7 +483,7 @@ func (v *WhereClauseVisitor) VisitFunctionCall(ctx *FunctionCallContext) any {
} }
// VisitFunctionParamList handles the parameter list for function calls // 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() params := ctx.AllFunctionParam()
parts := make([]any, len(params)) parts := make([]any, len(params))
@ -494,7 +495,7 @@ func (v *WhereClauseVisitor) VisitFunctionParamList(ctx *FunctionParamListContex
} }
// VisitFunctionParam handles individual parameters in function calls // 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 { if ctx.Key() != nil {
return v.Visit(ctx.Key()) return v.Visit(ctx.Key())
} else if ctx.Value() != nil { } else if ctx.Value() != nil {
@ -507,12 +508,12 @@ func (v *WhereClauseVisitor) VisitFunctionParam(ctx *FunctionParamContext) any {
} }
// VisitArray handles array literals // VisitArray handles array literals
func (v *WhereClauseVisitor) VisitArray(ctx *ArrayContext) any { func (v *WhereClauseVisitor) VisitArray(ctx *grammar.ArrayContext) any {
return v.Visit(ctx.ValueList()) return v.Visit(ctx.ValueList())
} }
// VisitValue handles literal values: strings, numbers, booleans // 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 { if ctx.QUOTED_TEXT() != nil {
txt := ctx.QUOTED_TEXT().GetText() txt := ctx.QUOTED_TEXT().GetText()
// trim quotes and return the value // trim quotes and return the value
@ -545,7 +546,7 @@ func (v *WhereClauseVisitor) VisitValue(ctx *ValueContext) any {
} }
// VisitKey handles field/column references // 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()) fieldKey := telemetrytypes.GetFieldKeyFromKeyText(ctx.KEY().GetText())