From 4e4c29cc7141fd42482548acad5e528e1995791c Mon Sep 17 00:00:00 2001 From: Andres Taylor Date: Mon, 3 Feb 2025 16:42:13 +0100 Subject: [PATCH] operators now use the new type Signed-off-by: Andres Taylor --- go/vt/schemadiff/schema.go | 2 +- .../planbuilder/operators/SQL_builder.go | 3 +-- .../planbuilder/operators/aggregator.go | 2 +- .../planbuilder/operators/apply_join.go | 2 +- .../vtgate/planbuilder/operators/ast_to_op.go | 4 ++-- .../vtgate/planbuilder/operators/comments.go | 2 +- go/vt/vtgate/planbuilder/operators/delete.go | 8 +++---- .../vtgate/planbuilder/operators/distinct.go | 2 +- go/vt/vtgate/planbuilder/operators/filter.go | 2 +- .../vtgate/planbuilder/operators/hash_join.go | 2 +- go/vt/vtgate/planbuilder/operators/horizon.go | 8 +++---- .../operators/horizon_expanding.go | 2 +- go/vt/vtgate/planbuilder/operators/insert.go | 2 +- go/vt/vtgate/planbuilder/operators/limit.go | 2 +- go/vt/vtgate/planbuilder/operators/mirror.go | 2 +- .../vtgate/planbuilder/operators/operator.go | 2 +- .../vtgate/planbuilder/operators/ordering.go | 2 +- .../planbuilder/operators/plan_query.go | 7 +++--- .../planbuilder/operators/projection.go | 16 ++++++------- .../planbuilder/operators/query_planning.go | 10 ++++---- .../planbuilder/operators/queryprojection.go | 2 +- .../planbuilder/operators/recurse_cte.go | 2 +- go/vt/vtgate/planbuilder/operators/route.go | 2 +- .../vtgate/planbuilder/operators/subquery.go | 2 +- .../planbuilder/operators/subquery_builder.go | 2 +- .../operators/subquery_container.go | 2 +- .../operators/subquery_planning.go | 2 +- go/vt/vtgate/planbuilder/operators/table.go | 2 +- go/vt/vtgate/planbuilder/operators/union.go | 14 +++++------ .../planbuilder/operators/union_merging.go | 23 +++++++++---------- go/vt/vtgate/planbuilder/operators/update.go | 16 ++++++------- .../planbuilder/operators/utils_test.go | 3 +-- go/vt/vtgate/planbuilder/operators/vindex.go | 2 +- 33 files changed, 76 insertions(+), 80 deletions(-) diff --git a/go/vt/schemadiff/schema.go b/go/vt/schemadiff/schema.go index bbd1258070e..28d2b42c91f 100644 --- a/go/vt/schemadiff/schema.go +++ b/go/vt/schemadiff/schema.go @@ -1127,7 +1127,7 @@ func (s *Schema) getTableColumnNames(t *CreateTableEntity) (columnNames []*sqlpa // getViewColumnNames returns the names of aliased columns returned by a given view. func (s *Schema) getViewColumnNames(v *CreateViewEntity, schemaInformation *declarativeSchemaInformation) ([]*sqlparser.IdentifierCI, error) { var columnNames []*sqlparser.IdentifierCI - for _, node := range v.Select.GetColumns() { + for _, node := range v.Select.GetColumns().Exprs { switch node := node.(type) { case *sqlparser.StarExpr: if tableName := node.TableName.Name.String(); tableName != "" { diff --git a/go/vt/vtgate/planbuilder/operators/SQL_builder.go b/go/vt/vtgate/planbuilder/operators/SQL_builder.go index 15ed2e18aa9..888201200ca 100644 --- a/go/vt/vtgate/planbuilder/operators/SQL_builder.go +++ b/go/vt/vtgate/planbuilder/operators/SQL_builder.go @@ -600,8 +600,7 @@ func buildProjection(op *Projection, qb *queryBuilder) { } if !isSel { - cols := op.GetSelectExprs(qb.ctx) - for _, column := range cols { + for _, column := range op.GetSelectExprs(qb.ctx) { qb.addProjection(column) } } diff --git a/go/vt/vtgate/planbuilder/operators/aggregator.go b/go/vt/vtgate/planbuilder/operators/aggregator.go index 7b47180f965..1a96e81b66e 100644 --- a/go/vt/vtgate/planbuilder/operators/aggregator.go +++ b/go/vt/vtgate/planbuilder/operators/aggregator.go @@ -309,7 +309,7 @@ func (a *Aggregator) GetColumns(ctx *plancontext.PlanningContext) (res []*sqlpar return truncate(a, a.Columns) } -func (a *Aggregator) GetSelectExprs(ctx *plancontext.PlanningContext) sqlparser.SelectExprs { +func (a *Aggregator) GetSelectExprs(ctx *plancontext.PlanningContext) []sqlparser.SelectExpr { return transformColumnsToSelectExprs(ctx, a) } diff --git a/go/vt/vtgate/planbuilder/operators/apply_join.go b/go/vt/vtgate/planbuilder/operators/apply_join.go index 692351d0603..2297227a22d 100644 --- a/go/vt/vtgate/planbuilder/operators/apply_join.go +++ b/go/vt/vtgate/planbuilder/operators/apply_join.go @@ -180,7 +180,7 @@ func (aj *ApplyJoin) GetColumns(ctx *plancontext.PlanningContext) []*sqlparser.A return cols } -func (aj *ApplyJoin) GetSelectExprs(ctx *plancontext.PlanningContext) sqlparser.SelectExprs { +func (aj *ApplyJoin) GetSelectExprs(ctx *plancontext.PlanningContext) []sqlparser.SelectExpr { return transformColumnsToSelectExprs(ctx, aj) } diff --git a/go/vt/vtgate/planbuilder/operators/ast_to_op.go b/go/vt/vtgate/planbuilder/operators/ast_to_op.go index 44819b98ae6..38479e8a99a 100644 --- a/go/vt/vtgate/planbuilder/operators/ast_to_op.go +++ b/go/vt/vtgate/planbuilder/operators/ast_to_op.go @@ -174,7 +174,7 @@ func createOperatorFromUnion(ctx *plancontext.PlanningContext, node *sqlparser.U rexprs := ctx.SemTable.SelectExprs(node.Right) unionCols := ctx.SemTable.SelectExprs(node) - union := newUnion([]Operator{opLHS, opRHS}, []sqlparser.SelectExprs{lexprs, rexprs}, unionCols, node.Distinct) + union := newUnion([]Operator{opLHS, opRHS}, []*sqlparser.SelectExprs2{lexprs, rexprs}, unionCols.Exprs, node.Distinct) return newHorizon(union, node) } @@ -464,7 +464,7 @@ func createSelectionOp( lock sqlparser.Lock, ) Operator { selectionStmt := &sqlparser.Select{ - SelectExprs: selectExprs, + SelectExprs: &sqlparser.SelectExprs2{Exprs: selectExprs}, From: tableExprs, Where: where, OrderBy: orderBy, diff --git a/go/vt/vtgate/planbuilder/operators/comments.go b/go/vt/vtgate/planbuilder/operators/comments.go index 9f0202c250a..445160e3d40 100644 --- a/go/vt/vtgate/planbuilder/operators/comments.go +++ b/go/vt/vtgate/planbuilder/operators/comments.go @@ -66,7 +66,7 @@ func (l *LockAndComment) GetColumns(ctx *plancontext.PlanningContext) []*sqlpars return l.Source.GetColumns(ctx) } -func (l *LockAndComment) GetSelectExprs(ctx *plancontext.PlanningContext) sqlparser.SelectExprs { +func (l *LockAndComment) GetSelectExprs(ctx *plancontext.PlanningContext) []sqlparser.SelectExpr { return l.Source.GetSelectExprs(ctx) } diff --git a/go/vt/vtgate/planbuilder/operators/delete.go b/go/vt/vtgate/planbuilder/operators/delete.go index 015220470e0..197ce76223c 100644 --- a/go/vt/vtgate/planbuilder/operators/delete.go +++ b/go/vt/vtgate/planbuilder/operators/delete.go @@ -136,7 +136,7 @@ func createDeleteWithInputOp(ctx *plancontext.PlanningContext, del *sqlparser.De dmls := slice.Map(delOps, func(from dmlOp) Operator { colsList = append(colsList, from.cols) for _, col := range from.cols { - selectStmt.SelectExprs = append(selectStmt.SelectExprs, aeWrap(col)) + selectStmt.SelectExprs.Exprs = append(selectStmt.SelectExprs.Exprs, aeWrap(col)) } return from.op }) @@ -264,15 +264,15 @@ func createDeleteOperator(ctx *plancontext.PlanningContext, del *sqlparser.Delet } func generateOwnedVindexQuery(del *sqlparser.Delete, table TargetTable, ksidCols []sqlparser.IdentifierCI) *sqlparser.Select { - var selExprs sqlparser.SelectExprs + selExprs := &sqlparser.SelectExprs2{} for _, col := range ksidCols { colName := makeColName(col, table, sqlparser.MultiTable(del.TableExprs)) - selExprs = append(selExprs, aeWrap(colName)) + selExprs.Exprs = append(selExprs.Exprs, aeWrap(colName)) } for _, cv := range table.VTable.Owned { for _, col := range cv.Columns { colName := makeColName(col, table, sqlparser.MultiTable(del.TableExprs)) - selExprs = append(selExprs, aeWrap(colName)) + selExprs.Exprs = append(selExprs.Exprs, aeWrap(colName)) } } return &sqlparser.Select{ diff --git a/go/vt/vtgate/planbuilder/operators/distinct.go b/go/vt/vtgate/planbuilder/operators/distinct.go index 52221498eea..00c9512af58 100644 --- a/go/vt/vtgate/planbuilder/operators/distinct.go +++ b/go/vt/vtgate/planbuilder/operators/distinct.go @@ -100,7 +100,7 @@ func (d *Distinct) GetColumns(ctx *plancontext.PlanningContext) []*sqlparser.Ali return truncate(d, d.Source.GetColumns(ctx)) } -func (d *Distinct) GetSelectExprs(ctx *plancontext.PlanningContext) sqlparser.SelectExprs { +func (d *Distinct) GetSelectExprs(ctx *plancontext.PlanningContext) []sqlparser.SelectExpr { return truncate(d, d.Source.GetSelectExprs(ctx)) } diff --git a/go/vt/vtgate/planbuilder/operators/filter.go b/go/vt/vtgate/planbuilder/operators/filter.go index d58d218908e..431461d4ab1 100644 --- a/go/vt/vtgate/planbuilder/operators/filter.go +++ b/go/vt/vtgate/planbuilder/operators/filter.go @@ -92,7 +92,7 @@ func (f *Filter) GetColumns(ctx *plancontext.PlanningContext) []*sqlparser.Alias return truncate(f, f.Source.GetColumns(ctx)) } -func (f *Filter) GetSelectExprs(ctx *plancontext.PlanningContext) sqlparser.SelectExprs { +func (f *Filter) GetSelectExprs(ctx *plancontext.PlanningContext) []sqlparser.SelectExpr { return truncate(f, f.Source.GetSelectExprs(ctx)) } diff --git a/go/vt/vtgate/planbuilder/operators/hash_join.go b/go/vt/vtgate/planbuilder/operators/hash_join.go index 3761c4b87a6..f8724f5221b 100644 --- a/go/vt/vtgate/planbuilder/operators/hash_join.go +++ b/go/vt/vtgate/planbuilder/operators/hash_join.go @@ -196,7 +196,7 @@ func (hj *HashJoin) GetColumns(*plancontext.PlanningContext) []*sqlparser.Aliase }) } -func (hj *HashJoin) GetSelectExprs(ctx *plancontext.PlanningContext) sqlparser.SelectExprs { +func (hj *HashJoin) GetSelectExprs(ctx *plancontext.PlanningContext) []sqlparser.SelectExpr { return transformColumnsToSelectExprs(ctx, hj) } diff --git a/go/vt/vtgate/planbuilder/operators/horizon.go b/go/vt/vtgate/planbuilder/operators/horizon.go index aa7737001d6..34d7f4f6a39 100644 --- a/go/vt/vtgate/planbuilder/operators/horizon.go +++ b/go/vt/vtgate/planbuilder/operators/horizon.go @@ -148,7 +148,7 @@ func (h *Horizon) FindCol(ctx *plancontext.PlanningContext, expr sqlparser.Expr, return -1 } - for idx, se := range getFirstSelect(h.Query).SelectExprs { + for idx, se := range getFirstSelect(h.Query).SelectExprs.Exprs { ae, ok := se.(*sqlparser.AliasedExpr) if !ok { panic(vterrors.VT09015()) @@ -162,7 +162,7 @@ func (h *Horizon) FindCol(ctx *plancontext.PlanningContext, expr sqlparser.Expr, } func (h *Horizon) GetColumns(ctx *plancontext.PlanningContext) (exprs []*sqlparser.AliasedExpr) { - for _, expr := range ctx.SemTable.SelectExprs(h.Query) { + for _, expr := range ctx.SemTable.SelectExprs(h.Query).Exprs { ae, ok := expr.(*sqlparser.AliasedExpr) if !ok { panic(vterrors.VT09015()) @@ -173,8 +173,8 @@ func (h *Horizon) GetColumns(ctx *plancontext.PlanningContext) (exprs []*sqlpars return exprs } -func (h *Horizon) GetSelectExprs(*plancontext.PlanningContext) sqlparser.SelectExprs { - return getFirstSelect(h.Query).SelectExprs +func (h *Horizon) GetSelectExprs(*plancontext.PlanningContext) []sqlparser.SelectExpr { + return getFirstSelect(h.Query).SelectExprs.Exprs } func (h *Horizon) GetOrdering(ctx *plancontext.PlanningContext) []OrderBy { diff --git a/go/vt/vtgate/planbuilder/operators/horizon_expanding.go b/go/vt/vtgate/planbuilder/operators/horizon_expanding.go index 406f52c4042..f60b7996714 100644 --- a/go/vt/vtgate/planbuilder/operators/horizon_expanding.go +++ b/go/vt/vtgate/planbuilder/operators/horizon_expanding.go @@ -344,7 +344,7 @@ func createProjectionWithoutAggr(ctx *plancontext.PlanningContext, qp *QueryProj } func newStarProjection(src Operator, qp *QueryProjection) *Projection { - cols := sqlparser.SelectExprs{} + var cols []sqlparser.SelectExpr for _, expr := range qp.SelectExprs { _ = sqlparser.Walk(func(node sqlparser.SQLNode) (kontinue bool, err error) { diff --git a/go/vt/vtgate/planbuilder/operators/insert.go b/go/vt/vtgate/planbuilder/operators/insert.go index 60ca3798eac..a64d3889d27 100644 --- a/go/vt/vtgate/planbuilder/operators/insert.go +++ b/go/vt/vtgate/planbuilder/operators/insert.go @@ -470,7 +470,7 @@ func columnMismatch(gen *Generate, ins *sqlparser.Insert, sel sqlparser.TableSta if origColCount > sel.GetColumnCount() { sel := getFirstSelect(sel) var hasStarExpr bool - for _, sExpr := range sel.SelectExprs { + for _, sExpr := range sel.SelectExprs.Exprs { if _, hasStarExpr = sExpr.(*sqlparser.StarExpr); hasStarExpr { break } diff --git a/go/vt/vtgate/planbuilder/operators/limit.go b/go/vt/vtgate/planbuilder/operators/limit.go index 4549b85fcda..0a0525562eb 100644 --- a/go/vt/vtgate/planbuilder/operators/limit.go +++ b/go/vt/vtgate/planbuilder/operators/limit.go @@ -69,7 +69,7 @@ func (l *Limit) GetColumns(ctx *plancontext.PlanningContext) []*sqlparser.Aliase return l.Source.GetColumns(ctx) } -func (l *Limit) GetSelectExprs(ctx *plancontext.PlanningContext) sqlparser.SelectExprs { +func (l *Limit) GetSelectExprs(ctx *plancontext.PlanningContext) []sqlparser.SelectExpr { return l.Source.GetSelectExprs(ctx) } diff --git a/go/vt/vtgate/planbuilder/operators/mirror.go b/go/vt/vtgate/planbuilder/operators/mirror.go index 82a431af0a2..23448b3fad6 100644 --- a/go/vt/vtgate/planbuilder/operators/mirror.go +++ b/go/vt/vtgate/planbuilder/operators/mirror.go @@ -75,7 +75,7 @@ func (m *PercentBasedMirror) GetColumns(ctx *plancontext.PlanningContext) []*sql return m.Operator().GetColumns(ctx) } -func (m *PercentBasedMirror) GetSelectExprs(ctx *plancontext.PlanningContext) sqlparser.SelectExprs { +func (m *PercentBasedMirror) GetSelectExprs(ctx *plancontext.PlanningContext) []sqlparser.SelectExpr { return m.Operator().GetSelectExprs(ctx) } diff --git a/go/vt/vtgate/planbuilder/operators/operator.go b/go/vt/vtgate/planbuilder/operators/operator.go index 42658e4c52e..6e9c10ab951 100644 --- a/go/vt/vtgate/planbuilder/operators/operator.go +++ b/go/vt/vtgate/planbuilder/operators/operator.go @@ -72,7 +72,7 @@ type ( FindCol(ctx *plancontext.PlanningContext, expr sqlparser.Expr, underRoute bool) int GetColumns(ctx *plancontext.PlanningContext) []*sqlparser.AliasedExpr - GetSelectExprs(ctx *plancontext.PlanningContext) sqlparser.SelectExprs + GetSelectExprs(ctx *plancontext.PlanningContext) []sqlparser.SelectExpr ShortDescription() string diff --git a/go/vt/vtgate/planbuilder/operators/ordering.go b/go/vt/vtgate/planbuilder/operators/ordering.go index 7e40b420f9e..367cb3c75b1 100644 --- a/go/vt/vtgate/planbuilder/operators/ordering.go +++ b/go/vt/vtgate/planbuilder/operators/ordering.go @@ -72,7 +72,7 @@ func (o *Ordering) GetColumns(ctx *plancontext.PlanningContext) []*sqlparser.Ali return truncate(o, o.Source.GetColumns(ctx)) } -func (o *Ordering) GetSelectExprs(ctx *plancontext.PlanningContext) sqlparser.SelectExprs { +func (o *Ordering) GetSelectExprs(ctx *plancontext.PlanningContext) []sqlparser.SelectExpr { return truncate(o, o.Source.GetSelectExprs(ctx)) } diff --git a/go/vt/vtgate/planbuilder/operators/plan_query.go b/go/vt/vtgate/planbuilder/operators/plan_query.go index dc83c89c72c..1bb619e3503 100644 --- a/go/vt/vtgate/planbuilder/operators/plan_query.go +++ b/go/vt/vtgate/planbuilder/operators/plan_query.go @@ -147,7 +147,7 @@ func (noColumns) FindCol(*plancontext.PlanningContext, sqlparser.Expr, bool) int panic(vterrors.VT13001("noColumns operators have no column")) } -func (noColumns) GetSelectExprs(*plancontext.PlanningContext) sqlparser.SelectExprs { +func (noColumns) GetSelectExprs(*plancontext.PlanningContext) []sqlparser.SelectExpr { panic(vterrors.VT13001("noColumns operators have no column")) } @@ -192,7 +192,7 @@ func tryTruncateColumnsAt(op Operator, truncateAt int) bool { } } -func transformColumnsToSelectExprs(ctx *plancontext.PlanningContext, op Operator) sqlparser.SelectExprs { +func transformColumnsToSelectExprs(ctx *plancontext.PlanningContext, op Operator) []sqlparser.SelectExpr { columns := op.GetColumns(ctx) if trunc, ok := op.(columnTruncator); ok { count := trunc.getTruncateColumnCount() @@ -201,8 +201,7 @@ func transformColumnsToSelectExprs(ctx *plancontext.PlanningContext, op Operator } } - selExprs := slice.Map(columns, func(from *sqlparser.AliasedExpr) sqlparser.SelectExpr { + return slice.Map(columns, func(from *sqlparser.AliasedExpr) sqlparser.SelectExpr { return from }) - return selExprs } diff --git a/go/vt/vtgate/planbuilder/operators/projection.go b/go/vt/vtgate/planbuilder/operators/projection.go index e894ab433b4..0f59d445714 100644 --- a/go/vt/vtgate/planbuilder/operators/projection.go +++ b/go/vt/vtgate/planbuilder/operators/projection.go @@ -76,11 +76,11 @@ type ( // ProjCols is used to enable projections that are only valid if we can push them into a route, and we never need to ask it about offsets ProjCols interface { GetColumns() []*sqlparser.AliasedExpr - GetSelectExprs() sqlparser.SelectExprs + GetSelectExprs() []sqlparser.SelectExpr } // Used when there are stars in the expressions that we were unable to expand - StarProjections sqlparser.SelectExprs + StarProjections []sqlparser.SelectExpr // Used when we know all the columns AliasedProjections []*ProjExpr @@ -136,8 +136,8 @@ func (sp StarProjections) GetColumns() []*sqlparser.AliasedExpr { panic(vterrors.VT09015()) } -func (sp StarProjections) GetSelectExprs() sqlparser.SelectExprs { - return sqlparser.SelectExprs(sp) +func (sp StarProjections) GetSelectExprs() []sqlparser.SelectExpr { + return sp } func (ap AliasedProjections) GetColumns() []*sqlparser.AliasedExpr { @@ -146,7 +146,7 @@ func (ap AliasedProjections) GetColumns() []*sqlparser.AliasedExpr { }) } -func (ap AliasedProjections) GetSelectExprs() sqlparser.SelectExprs { +func (ap AliasedProjections) GetSelectExprs() []sqlparser.SelectExpr { return slice.Map(ap, func(from *ProjExpr) sqlparser.SelectExpr { return aeWrap(from.ColExpr) }) @@ -420,12 +420,12 @@ func (p *Projection) GetColumns(*plancontext.PlanningContext) []*sqlparser.Alias return p.Columns.GetColumns() } -func (p *Projection) GetSelectExprs(*plancontext.PlanningContext) sqlparser.SelectExprs { +func (p *Projection) GetSelectExprs(*plancontext.PlanningContext) []sqlparser.SelectExpr { switch cols := p.Columns.(type) { case StarProjections: - return sqlparser.SelectExprs(cols) + return cols case AliasedProjections: - var output sqlparser.SelectExprs + var output []sqlparser.SelectExpr for _, pe := range cols { ae := &sqlparser.AliasedExpr{Expr: pe.EvalExpr} if pe.Original.As.NotEmpty() { diff --git a/go/vt/vtgate/planbuilder/operators/query_planning.go b/go/vt/vtgate/planbuilder/operators/query_planning.go index db716966d47..c39ad245305 100644 --- a/go/vt/vtgate/planbuilder/operators/query_planning.go +++ b/go/vt/vtgate/planbuilder/operators/query_planning.go @@ -30,10 +30,10 @@ import ( ) func planQuery(ctx *plancontext.PlanningContext, root Operator) Operator { - var selExpr sqlparser.SelectExprs + var selExpr []sqlparser.SelectExpr if horizon, isHorizon := root.(*Horizon); isHorizon { sel := getFirstSelect(horizon.Query) - selExpr = sqlparser.Clone(sel.SelectExprs) + selExpr = sqlparser.Clone(sel.SelectExprs).Exprs } output := runPhases(ctx, root) @@ -805,7 +805,7 @@ func tryPushUnion(ctx *plancontext.PlanningContext, op *Union) (Operator, *Apply } var sources []Operator - var selects []sqlparser.SelectExprs + var selects []*sqlparser.SelectExprs2 if op.distinct { sources, selects = mergeUnionInputInAnyOrder(ctx, op) @@ -829,7 +829,7 @@ func tryPushUnion(ctx *plancontext.PlanningContext, op *Union) (Operator, *Apply } // addTruncationOrProjectionToReturnOutput uses the original Horizon to make sure that the output columns line up with what the user asked for -func addTruncationOrProjectionToReturnOutput(ctx *plancontext.PlanningContext, selExprs sqlparser.SelectExprs, output Operator) Operator { +func addTruncationOrProjectionToReturnOutput(ctx *plancontext.PlanningContext, selExprs []sqlparser.SelectExpr, output Operator) Operator { if len(selExprs) == 0 { return output } @@ -843,7 +843,7 @@ func addTruncationOrProjectionToReturnOutput(ctx *plancontext.PlanningContext, s return createSimpleProjection(ctx, selExprs, output) } -func colNamesAlign(expected, actual sqlparser.SelectExprs) bool { +func colNamesAlign(expected, actual []sqlparser.SelectExpr) bool { if len(expected) > len(actual) { // if we expect more columns than we have, we can't align return false diff --git a/go/vt/vtgate/planbuilder/operators/queryprojection.go b/go/vt/vtgate/planbuilder/operators/queryprojection.go index c66bf757dd8..de9ffd0e8cc 100644 --- a/go/vt/vtgate/planbuilder/operators/queryprojection.go +++ b/go/vt/vtgate/planbuilder/operators/queryprojection.go @@ -176,7 +176,7 @@ func createQPFromSelect(ctx *plancontext.PlanningContext, sel *sqlparser.Select) } func (qp *QueryProjection) addSelectExpressions(ctx *plancontext.PlanningContext, sel *sqlparser.Select) { - for _, selExp := range sel.SelectExprs { + for _, selExp := range sel.SelectExprs.Exprs { switch selExp := selExp.(type) { case *sqlparser.AliasedExpr: col := SelectExpr{ diff --git a/go/vt/vtgate/planbuilder/operators/recurse_cte.go b/go/vt/vtgate/planbuilder/operators/recurse_cte.go index 61474b663d6..cbd31897479 100644 --- a/go/vt/vtgate/planbuilder/operators/recurse_cte.go +++ b/go/vt/vtgate/planbuilder/operators/recurse_cte.go @@ -147,7 +147,7 @@ func (r *RecurseCTE) GetColumns(ctx *plancontext.PlanningContext) []*sqlparser.A return r.Seed().GetColumns(ctx) } -func (r *RecurseCTE) GetSelectExprs(ctx *plancontext.PlanningContext) sqlparser.SelectExprs { +func (r *RecurseCTE) GetSelectExprs(ctx *plancontext.PlanningContext) []sqlparser.SelectExpr { return r.Seed().GetSelectExprs(ctx) } diff --git a/go/vt/vtgate/planbuilder/operators/route.go b/go/vt/vtgate/planbuilder/operators/route.go index e398fb05607..bebb250f663 100644 --- a/go/vt/vtgate/planbuilder/operators/route.go +++ b/go/vt/vtgate/planbuilder/operators/route.go @@ -707,7 +707,7 @@ func (r *Route) GetColumns(ctx *plancontext.PlanningContext) []*sqlparser.Aliase return truncate(r, r.Source.GetColumns(ctx)) } -func (r *Route) GetSelectExprs(ctx *plancontext.PlanningContext) sqlparser.SelectExprs { +func (r *Route) GetSelectExprs(ctx *plancontext.PlanningContext) []sqlparser.SelectExpr { return truncate(r, r.Source.GetSelectExprs(ctx)) } diff --git a/go/vt/vtgate/planbuilder/operators/subquery.go b/go/vt/vtgate/planbuilder/operators/subquery.go index c791964b2c4..62b6e7a725e 100644 --- a/go/vt/vtgate/planbuilder/operators/subquery.go +++ b/go/vt/vtgate/planbuilder/operators/subquery.go @@ -195,7 +195,7 @@ func (sq *SubQuery) GetColumns(ctx *plancontext.PlanningContext) []*sqlparser.Al return sq.Outer.GetColumns(ctx) } -func (sq *SubQuery) GetSelectExprs(ctx *plancontext.PlanningContext) sqlparser.SelectExprs { +func (sq *SubQuery) GetSelectExprs(ctx *plancontext.PlanningContext) []sqlparser.SelectExpr { return sq.Outer.GetSelectExprs(ctx) } diff --git a/go/vt/vtgate/planbuilder/operators/subquery_builder.go b/go/vt/vtgate/planbuilder/operators/subquery_builder.go index cc7dc9afe69..572d54688f8 100644 --- a/go/vt/vtgate/planbuilder/operators/subquery_builder.go +++ b/go/vt/vtgate/planbuilder/operators/subquery_builder.go @@ -280,7 +280,7 @@ func createComparisonSubQuery( // if we are comparing with a column from the inner subquery, // we add this extra predicate to check if the two sides are mergable or not - if ae, ok := subq.Select.GetColumns()[0].(*sqlparser.AliasedExpr); ok { + if ae, ok := subq.Select.GetColumns().Exprs[0].(*sqlparser.AliasedExpr); ok { subquery.OuterPredicate = &sqlparser.ComparisonExpr{ Operator: sqlparser.EqualOp, Left: outside, diff --git a/go/vt/vtgate/planbuilder/operators/subquery_container.go b/go/vt/vtgate/planbuilder/operators/subquery_container.go index 3f5c3eed254..396dc1b3b62 100644 --- a/go/vt/vtgate/planbuilder/operators/subquery_container.go +++ b/go/vt/vtgate/planbuilder/operators/subquery_container.go @@ -91,7 +91,7 @@ func (sqc *SubQueryContainer) GetColumns(ctx *plancontext.PlanningContext) []*sq return sqc.Outer.GetColumns(ctx) } -func (sqc *SubQueryContainer) GetSelectExprs(ctx *plancontext.PlanningContext) sqlparser.SelectExprs { +func (sqc *SubQueryContainer) GetSelectExprs(ctx *plancontext.PlanningContext) []sqlparser.SelectExpr { return sqc.Outer.GetSelectExprs(ctx) } diff --git a/go/vt/vtgate/planbuilder/operators/subquery_planning.go b/go/vt/vtgate/planbuilder/operators/subquery_planning.go index 06ca69dd7f3..17d94a93531 100644 --- a/go/vt/vtgate/planbuilder/operators/subquery_planning.go +++ b/go/vt/vtgate/planbuilder/operators/subquery_planning.go @@ -415,7 +415,7 @@ func rewriteColNameToArgument( default: // for scalar value subqueries, the argument is typed based on the first expression in the subquery // so here we make an attempt at figuring out the type of the argument - ae, isAe := sq2.originalSubquery.Select.GetColumns()[0].(*sqlparser.AliasedExpr) + ae, isAe := sq2.originalSubquery.Select.GetColumns().Exprs[0].(*sqlparser.AliasedExpr) if !isAe { return sqlparser.NewArgument(s) } diff --git a/go/vt/vtgate/planbuilder/operators/table.go b/go/vt/vtgate/planbuilder/operators/table.go index 4391380480c..735ab0b04c7 100644 --- a/go/vt/vtgate/planbuilder/operators/table.go +++ b/go/vt/vtgate/planbuilder/operators/table.go @@ -91,7 +91,7 @@ func (to *Table) GetColumns(*plancontext.PlanningContext) []*sqlparser.AliasedEx return slice.Map(to.Columns, colNameToExpr) } -func (to *Table) GetSelectExprs(ctx *plancontext.PlanningContext) sqlparser.SelectExprs { +func (to *Table) GetSelectExprs(ctx *plancontext.PlanningContext) []sqlparser.SelectExpr { return transformColumnsToSelectExprs(ctx, to) } diff --git a/go/vt/vtgate/planbuilder/operators/union.go b/go/vt/vtgate/planbuilder/operators/union.go index 01a8f46c4c4..c288ac73c5d 100644 --- a/go/vt/vtgate/planbuilder/operators/union.go +++ b/go/vt/vtgate/planbuilder/operators/union.go @@ -33,11 +33,11 @@ type Union struct { Selects []*sqlparser.SelectExprs2 distinct bool - unionColumns *sqlparser.SelectExprs2 + unionColumns []sqlparser.SelectExpr unionColumnsAsAlisedExprs []*sqlparser.AliasedExpr } -func newUnion(srcs []Operator, sourceSelects []*sqlparser.SelectExprs2, columns *sqlparser.SelectExprs2, distinct bool) *Union { +func newUnion(srcs []Operator, sourceSelects []*sqlparser.SelectExprs2, columns []sqlparser.SelectExpr, distinct bool) *Union { if columns == nil { panic("rt") } @@ -247,7 +247,7 @@ func (u *Union) FindCol(ctx *plancontext.PlanningContext, expr sqlparser.Expr, u func (u *Union) GetColumns(ctx *plancontext.PlanningContext) (result []*sqlparser.AliasedExpr) { if u.unionColumnsAsAlisedExprs == nil { allOk := true - u.unionColumnsAsAlisedExprs = slice.Map(u.unionColumns.Exprs, func(from sqlparser.SelectExpr) *sqlparser.AliasedExpr { + u.unionColumnsAsAlisedExprs = slice.Map(u.unionColumns, func(from sqlparser.SelectExpr) *sqlparser.AliasedExpr { expr, ok := from.(*sqlparser.AliasedExpr) allOk = allOk && ok return expr @@ -269,17 +269,17 @@ func (u *Union) GetColumns(ctx *plancontext.PlanningContext) (result []*sqlparse return u.unionColumnsAsAlisedExprs } -func (u *Union) GetSelectExprs(ctx *plancontext.PlanningContext) sqlparser.SelectExprs { +func (u *Union) GetSelectExprs(ctx *plancontext.PlanningContext) []sqlparser.SelectExpr { // if any of the inputs has more columns that we expect, we want to show on top of UNION, so the results can // be truncated to the expected result columns and nothing else for _, src := range u.Sources { columns := src.GetSelectExprs(ctx) - for len(columns) > len(u.unionColumns.Exprs) { - u.unionColumns.Exprs = append(u.unionColumns.Exprs, aeWrap(sqlparser.NewIntLiteral("0"))) + for len(columns) > len(u.unionColumns) { + u.unionColumns = append(u.unionColumns, aeWrap(sqlparser.NewIntLiteral("0"))) } } - return u.unionColumns.Exprs + return u.unionColumns } func (u *Union) NoLHSTableSet() {} diff --git a/go/vt/vtgate/planbuilder/operators/union_merging.go b/go/vt/vtgate/planbuilder/operators/union_merging.go index ea32f0b8449..4529f1feb7f 100644 --- a/go/vt/vtgate/planbuilder/operators/union_merging.go +++ b/go/vt/vtgate/planbuilder/operators/union_merging.go @@ -25,7 +25,7 @@ import ( // mergeUnionInputInAnyOrder merges sources the sources of the union in any order // can be used for UNION DISTINCT -func mergeUnionInputInAnyOrder(ctx *plancontext.PlanningContext, op *Union) ([]Operator, []sqlparser.SelectExprs) { +func mergeUnionInputInAnyOrder(ctx *plancontext.PlanningContext, op *Union) ([]Operator, []*sqlparser.SelectExprs2) { sources := op.Sources selects := op.Selects @@ -57,7 +57,7 @@ func mergeUnionInputInAnyOrder(ctx *plancontext.PlanningContext, op *Union) ([]O } var newSources []Operator - var newSelects []sqlparser.SelectExprs + var newSelects []*sqlparser.SelectExprs2 for i, source := range sources { if keep[i] || i <= idx { newSources = append(newSources, source) @@ -72,7 +72,7 @@ func mergeUnionInputInAnyOrder(ctx *plancontext.PlanningContext, op *Union) ([]O return sources, selects } -func mergeUnionInputsInOrder(ctx *plancontext.PlanningContext, op *Union) ([]Operator, []sqlparser.SelectExprs) { +func mergeUnionInputsInOrder(ctx *plancontext.PlanningContext, op *Union) ([]Operator, []*sqlparser.SelectExprs2) { sources := op.Sources selects := op.Selects for { @@ -105,9 +105,9 @@ func mergeUnionInputsInOrder(ctx *plancontext.PlanningContext, op *Union) ([]Ope func mergeUnionInputs( ctx *plancontext.PlanningContext, lhs, rhs Operator, - lhsExprs, rhsExprs sqlparser.SelectExprs, + lhsExprs, rhsExprs *sqlparser.SelectExprs2, distinct bool, -) (Operator, sqlparser.SelectExprs) { +) (Operator, *sqlparser.SelectExprs2) { lhsRoute, rhsRoute, routingA, routingB, a, b, sameKeyspace := prepareInputRoutes(ctx, lhs, rhs) if lhsRoute == nil { return nil, nil @@ -138,9 +138,9 @@ func mergeUnionInputs( func tryMergeUnionShardedRouting( ctx *plancontext.PlanningContext, routeA, routeB *Route, - exprsA, exprsB sqlparser.SelectExprs, + exprsA, exprsB *sqlparser.SelectExprs2, distinct bool, -) (Operator, sqlparser.SelectExprs) { +) (Operator, *sqlparser.SelectExprs2) { tblA := routeA.Routing.(*ShardedRouting) tblB := routeB.Routing.(*ShardedRouting) @@ -178,18 +178,17 @@ func createMergedUnion( // if there are `*` on either side, or a different number of SelectExpr items, // we give up aligning the expressions and trust that we can push everything down - cols := new(sqlparser.SelectExprs2) - cols.Exprs = make(sqlparser.SelectExprs, len(lhsExprs.Exprs)) + cols := make([]sqlparser.SelectExpr, len(lhsExprs.Exprs)) noDeps := len(lhsExprs.Exprs) != len(rhsExprs.Exprs) for idx, col := range lhsExprs.Exprs { lae, ok := col.(*sqlparser.AliasedExpr) if !ok { - cols.Exprs[idx] = col + cols[idx] = col noDeps = true continue } col := sqlparser.NewColName(lae.ColumnName()) - cols.Exprs[idx] = aeWrap(col) + cols[idx] = aeWrap(col) if noDeps { continue } @@ -243,7 +242,7 @@ func compactUnion(u *Union) *ApplyResult { } var newSources []Operator - var newSelects []sqlparser.SelectExprs + var newSelects []*sqlparser.SelectExprs2 merged := false for idx, source := range u.Sources { diff --git a/go/vt/vtgate/planbuilder/operators/update.go b/go/vt/vtgate/planbuilder/operators/update.go index 18a81175f7b..1c91a926a78 100644 --- a/go/vt/vtgate/planbuilder/operators/update.go +++ b/go/vt/vtgate/planbuilder/operators/update.go @@ -186,7 +186,7 @@ func createUpdateWithInputOp(ctx *plancontext.PlanningContext, upd *sqlparser.Up colsList = append(colsList, from.cols) uList = append(uList, from.updList) for _, col := range from.cols { - selectStmt.SelectExprs = append(selectStmt.SelectExprs, aeWrap(col)) + selectStmt.SelectExprs.Exprs = append(selectStmt.SelectExprs.Exprs, aeWrap(col)) } return from.op }) @@ -889,7 +889,7 @@ func createFkVerifyOpForParentFKForUpdate(ctx *plancontext.PlanningContext, upda whereCond = &sqlparser.AndExpr{Left: whereCond, Right: prefixColNames(ctx, childTbl, updStmt.Where.Expr)} } return createSelectionOp(ctx, - sqlparser.SelectExprs{sqlparser.NewAliasedExpr(sqlparser.NewIntLiteral("1"), "")}, + []sqlparser.SelectExpr{sqlparser.NewAliasedExpr(sqlparser.NewIntLiteral("1"), "")}, []sqlparser.TableExpr{ sqlparser.NewJoinTableExpr( childTblExpr, @@ -973,7 +973,7 @@ func createFkVerifyOpForChildFKForUpdate(ctx *plancontext.PlanningContext, updat } return createSelectionOp(ctx, - sqlparser.SelectExprs{sqlparser.NewAliasedExpr(sqlparser.NewIntLiteral("1"), "")}, + []sqlparser.SelectExpr{sqlparser.NewAliasedExpr(sqlparser.NewIntLiteral("1"), "")}, []sqlparser.TableExpr{ sqlparser.NewJoinTableExpr( parentTblExpr, @@ -1056,7 +1056,7 @@ func buildChangedVindexesValues( } // Checks done, let's actually add the expressions and the vindex map - selExprs = append(selExprs, aeWrap(sqlparser.AndExpressions(compExprs...))) + selExprs.Exprs = append(selExprs.Exprs, aeWrap(sqlparser.AndExpressions(compExprs...))) changedVindexes[vindex.Name] = &engine.VindexValues{ EvalExprMap: vindexValueMap, Offset: offset, @@ -1076,16 +1076,16 @@ func buildChangedVindexesValues( return changedVindexes, ovq, subQueriesArgOnChangedVindex } -func initialQuery(ksidCols []sqlparser.IdentifierCI, table *vindexes.Table) (sqlparser.SelectExprs, int) { - var selExprs sqlparser.SelectExprs +func initialQuery(ksidCols []sqlparser.IdentifierCI, table *vindexes.Table) (*sqlparser.SelectExprs2, int) { + selExprs := new(sqlparser.SelectExprs2) offset := 0 for _, col := range ksidCols { - selExprs = append(selExprs, aeWrap(sqlparser.NewColName(col.String()))) + selExprs.Exprs = append(selExprs.Exprs, aeWrap(sqlparser.NewColName(col.String()))) offset++ } for _, cv := range table.Owned { for _, column := range cv.Columns { - selExprs = append(selExprs, aeWrap(sqlparser.NewColName(column.String()))) + selExprs.Exprs = append(selExprs.Exprs, aeWrap(sqlparser.NewColName(column.String()))) offset++ } } diff --git a/go/vt/vtgate/planbuilder/operators/utils_test.go b/go/vt/vtgate/planbuilder/operators/utils_test.go index 035a273e964..babf6c91afb 100644 --- a/go/vt/vtgate/planbuilder/operators/utils_test.go +++ b/go/vt/vtgate/planbuilder/operators/utils_test.go @@ -73,8 +73,7 @@ func (f *fakeOp) GetColumns(ctx *plancontext.PlanningContext) []*sqlparser.Alias panic("implement me") } -func (f *fakeOp) GetSelectExprs(ctx *plancontext.PlanningContext) sqlparser.SelectExprs { - // TODO implement me +func (f *fakeOp) GetSelectExprs(ctx *plancontext.PlanningContext) []sqlparser.SelectExpr { panic("implement me") } diff --git a/go/vt/vtgate/planbuilder/operators/vindex.go b/go/vt/vtgate/planbuilder/operators/vindex.go index 30f13701df6..312cb3553b9 100644 --- a/go/vt/vtgate/planbuilder/operators/vindex.go +++ b/go/vt/vtgate/planbuilder/operators/vindex.go @@ -100,7 +100,7 @@ func (v *Vindex) GetColumns(*plancontext.PlanningContext) []*sqlparser.AliasedEx return slice.Map(v.Columns, colNameToExpr) } -func (v *Vindex) GetSelectExprs(ctx *plancontext.PlanningContext) sqlparser.SelectExprs { +func (v *Vindex) GetSelectExprs(ctx *plancontext.PlanningContext) []sqlparser.SelectExpr { return transformColumnsToSelectExprs(ctx, v) }