diff --git a/go/vt/vtgate/planbuilder/operators/route_planning.go b/go/vt/vtgate/planbuilder/operators/route_planning.go index 926ca5bb2b6..b5bcf37c127 100644 --- a/go/vt/vtgate/planbuilder/operators/route_planning.go +++ b/go/vt/vtgate/planbuilder/operators/route_planning.go @@ -375,12 +375,14 @@ func findColumnVindex(ctx *plancontext.PlanningContext, a Operator, exp sqlparse // can be solved by any table in our routeTree. If an equality expression can be solved, // we check if the equality expression and our table share the same vindex, if they do: // the method will return the associated vindexes.SingleColumn. - _ = ctx.SemTable.ForEachExprEquality(exp, func(e sqlparser.Expr) error { - col, isCol := e.(*sqlparser.ColName) + for _, expr := range ctx.SemTable.GetExprAndEqualities(exp) { + col, isCol := expr.(*sqlparser.ColName) if !isCol { - return nil + continue } - deps := ctx.SemTable.RecursiveDeps(col) + + deps := ctx.SemTable.RecursiveDeps(expr) + _ = Visit(a, func(rel Operator) error { to, isTableOp := rel.(tableIDIntroducer) if !isTableOp { @@ -406,12 +408,10 @@ func findColumnVindex(ctx *plancontext.PlanningContext, a Operator, exp sqlparse } return nil }) - if singCol != nil { - return io.EOF + return singCol } - return nil - }) + } return singCol } diff --git a/go/vt/vtgate/planbuilder/operators/sharded_routing.go b/go/vt/vtgate/planbuilder/operators/sharded_routing.go index bf6a5aa2a55..0cc828a7ae2 100644 --- a/go/vt/vtgate/planbuilder/operators/sharded_routing.go +++ b/go/vt/vtgate/planbuilder/operators/sharded_routing.go @@ -18,7 +18,6 @@ package operators import ( "fmt" - "io" "slices" "vitess.io/vitess/go/mysql/collations" @@ -722,18 +721,17 @@ func tryMergeShardedRouting( } // makeEvalEngineExpr transforms the given sqlparser.Expr into an evalengine expression -func makeEvalEngineExpr(ctx *plancontext.PlanningContext, n sqlparser.Expr) (result evalengine.Expr) { - _ = ctx.SemTable.ForEachExprEquality(n, func(expr sqlparser.Expr) error { - result, _ = evalengine.Translate(expr, &evalengine.Config{ +func makeEvalEngineExpr(ctx *plancontext.PlanningContext, n sqlparser.Expr) evalengine.Expr { + for _, expr := range ctx.SemTable.GetExprAndEqualities(n) { + ee, _ := evalengine.Translate(expr, &evalengine.Config{ Collation: ctx.SemTable.Collation, ResolveType: ctx.TypeForExpr, Environment: ctx.VSchema.Environment(), }) - if result != nil { - return io.EOF + if ee != nil { + return ee } - return nil - }) + } - return + return nil } diff --git a/go/vt/vtgate/semantics/analyzer.go b/go/vt/vtgate/semantics/analyzer.go index e8c5312f284..46de35323ad 100644 --- a/go/vt/vtgate/semantics/analyzer.go +++ b/go/vt/vtgate/semantics/analyzer.go @@ -386,7 +386,7 @@ func (a *analyzer) analyze(statement sqlparser.Statement) error { } func (a *analyzer) lateAnalyze(statement sqlparser.SQLNode) error { - _ = sqlparser.RewriteWithPath(statement, a.analyzeDown, a.analyzeUp) + _ = sqlparser.Rewrite(statement, a.analyzeDown, a.analyzeUp) return a.err }