diff --git a/sql/analyzer/indexed_joins.go b/sql/analyzer/indexed_joins.go index 75f7897ffd..948e7393ab 100644 --- a/sql/analyzer/indexed_joins.go +++ b/sql/analyzer/indexed_joins.go @@ -135,7 +135,7 @@ func recSchemaToGetFields(n sql.Node, sch sql.Schema) []sql.Expression { } func replanJoin(ctx *sql.Context, n *plan.JoinNode, a *Analyzer, scope *plan.Scope, qFlags *sql.QueryFlags) (ret sql.Node, err error) { - m := memo.NewMemo(ctx, a.Catalog, scope, len(scope.Schema()), a.Coster, qFlags) + m := memo.NewMemo(ctx, a.Catalog, scope, a.Coster, qFlags) m.Debug = a.Debug m.EnableTrace(a.Trace) diff --git a/sql/analyzer/indexed_joins_test.go b/sql/analyzer/indexed_joins_test.go index 0d1fb9cdf2..468b796ec9 100644 --- a/sql/analyzer/indexed_joins_test.go +++ b/sql/analyzer/indexed_joins_test.go @@ -59,7 +59,7 @@ func TestHashJoins(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - m := memo.NewMemo(ctx, newTestCatalog(db), nil, 0, memo.NewDefaultCoster(), nil) + m := memo.NewMemo(ctx, newTestCatalog(db), nil, memo.NewDefaultCoster(), nil) j := memo.NewJoinOrderBuilder(m) j.ReorderJoin(tt.plan) addHashJoins(m) diff --git a/sql/memo/exec_builder.go b/sql/memo/exec_builder.go index 2ef263b22d..305a707745 100644 --- a/sql/memo/exec_builder.go +++ b/sql/memo/exec_builder.go @@ -66,7 +66,7 @@ func (b *ExecBuilder) buildLookupJoin(j *LookupJoin, children ...sql.Node) (sql. return nil, err } filters := b.buildFilterConjunction(j.Filter...) - return plan.NewJoin(left, right, j.Op, filters).WithScopeLen(j.g.m.scopeLen), nil + return plan.NewJoin(left, right, j.Op, filters), nil } func (b *ExecBuilder) buildRangeHeap(sr *RangeHeap, children ...sql.Node) (ret sql.Node, err error) { @@ -146,7 +146,7 @@ func (b *ExecBuilder) buildRangeHeapJoin(j *RangeHeapJoin, children ...sql.Node) return nil, err } filters := b.buildFilterConjunction(j.Filter...) - return plan.NewJoin(left, right, j.Op, filters).WithScopeLen(j.g.m.scopeLen), nil + return plan.NewJoin(left, right, j.Op, filters), nil } func (b *ExecBuilder) buildConcatJoin(j *ConcatJoin, children ...sql.Node) (sql.Node, error) { @@ -181,7 +181,7 @@ func (b *ExecBuilder) buildConcatJoin(j *ConcatJoin, children ...sql.Node) (sql. filters := b.buildFilterConjunction(j.Filter...) - return plan.NewJoin(children[0], right, j.Op, filters).WithScopeLen(j.g.m.scopeLen), nil + return plan.NewJoin(children[0], right, j.Op, filters), nil } func (b *ExecBuilder) buildHashJoin(j *HashJoin, children ...sql.Node) (sql.Node, error) { @@ -206,7 +206,7 @@ func (b *ExecBuilder) buildHashJoin(j *HashJoin, children ...sql.Node) (sql.Node outer := plan.NewHashLookup(children[1], rightEntryKey, leftProbeKey, j.Op) inner := children[0] - return plan.NewJoin(inner, outer, j.Op, filters).WithScopeLen(j.g.m.scopeLen), nil + return plan.NewJoin(inner, outer, j.Op, filters), nil } func (b *ExecBuilder) buildIndexScan(i *IndexScan, children ...sql.Node) (sql.Node, error) { @@ -294,7 +294,7 @@ func (b *ExecBuilder) buildMergeJoin(j *MergeJoin, children ...sql.Node) (sql.No } } filters := b.buildFilterConjunction(j.Filter...) - return plan.NewJoin(inner, outer, j.Op, filters).WithScopeLen(j.g.m.scopeLen), nil + return plan.NewJoin(inner, outer, j.Op, filters), nil } func (b *ExecBuilder) buildLateralJoin(j *LateralJoin, children ...sql.Node) (sql.Node, error) { diff --git a/sql/memo/join_order_builder_test.go b/sql/memo/join_order_builder_test.go index 0e63b9cd83..1b2e7ce068 100644 --- a/sql/memo/join_order_builder_test.go +++ b/sql/memo/join_order_builder_test.go @@ -185,7 +185,7 @@ func TestJoinOrderBuilder(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - j := NewJoinOrderBuilder(NewMemo(newContext(pro), nil, nil, 0, NewDefaultCoster(), nil)) + j := NewJoinOrderBuilder(NewMemo(newContext(pro), nil, nil, NewDefaultCoster(), nil)) j.forceFastDFSLookupForTest = tt.forceFastReorder j.ReorderJoin(tt.in) require.Equal(t, tt.plans, j.m.String()) @@ -367,7 +367,7 @@ func TestJoinOrderBuilder_populateSubgraph(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - b := NewJoinOrderBuilder(NewMemo(newContext(pro), nil, nil, 0, NewDefaultCoster(), nil)) + b := NewJoinOrderBuilder(NewMemo(newContext(pro), nil, nil, NewDefaultCoster(), nil)) b.populateSubgraph(tt.join) edgesEq(t, tt.expEdges, b.edges) }) @@ -671,7 +671,7 @@ func TestEnsureClosure(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - b := NewJoinOrderBuilder(NewMemo(newContext(pro), nil, nil, 0, NewDefaultCoster(), nil)) + b := NewJoinOrderBuilder(NewMemo(newContext(pro), nil, nil, NewDefaultCoster(), nil)) b.populateSubgraph(tt.in) beforeLen := len(b.edges) b.ensureClosure(b.m.Root()) diff --git a/sql/memo/memo.go b/sql/memo/memo.go index e496ee67a6..b553b6575b 100644 --- a/sql/memo/memo.go +++ b/sql/memo/memo.go @@ -48,19 +48,17 @@ type Memo struct { scope *plan.Scope TableProps *tableProps QFlags *sql.QueryFlags - scopeLen int cnt uint16 Debug bool Tracer *TraceLogger } -func NewMemo(ctx *sql.Context, stats sql.StatsProvider, s *plan.Scope, scopeLen int, cost Coster, qFlags *sql.QueryFlags) *Memo { +func NewMemo(ctx *sql.Context, stats sql.StatsProvider, s *plan.Scope, cost Coster, qFlags *sql.QueryFlags) *Memo { return &Memo{ Ctx: ctx, c: cost, statsProv: stats, scope: s, - scopeLen: scopeLen, TableProps: newTableProps(), hints: &joinHints{}, QFlags: qFlags, diff --git a/sql/memo/rel_props_test.go b/sql/memo/rel_props_test.go index a5034768c8..0f04c637c5 100644 --- a/sql/memo/rel_props_test.go +++ b/sql/memo/rel_props_test.go @@ -87,7 +87,7 @@ func TestPopulateFDs(t *testing.T) { name: "max1Row", in: &Max1Row{ relBase: &relBase{}, - Child: newExprGroup(NewMemo(nil, nil, nil, 0, nil, nil), 0, &TableScan{ + Child: newExprGroup(NewMemo(nil, nil, nil, nil, nil), 0, &TableScan{ sourceBase: &sourceBase{relBase: &relBase{}}, Table: plan.NewResolvedTable( &dummyTable{ @@ -117,7 +117,7 @@ func TestPopulateFDs(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - tt.in.SetGroup(&ExprGroup{First: tt.in, m: NewMemo(nil, nil, nil, 0, nil, nil)}) + tt.in.SetGroup(&ExprGroup{First: tt.in, m: NewMemo(nil, nil, nil, nil, nil)}) props := newRelProps(tt.in) require.Equal(t, tt.all, props.fds.All()) require.Equal(t, tt.notNull, props.fds.NotNull()) diff --git a/sql/memo/select_hints_test.go b/sql/memo/select_hints_test.go index 45ba45de32..f8fb662b7b 100644 --- a/sql/memo/select_hints_test.go +++ b/sql/memo/select_hints_test.go @@ -236,7 +236,7 @@ func TestOrderHintBuilding(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - j := NewJoinOrderBuilder(NewMemo(newContext(pro), nil, nil, 0, NewDefaultCoster(), nil)) + j := NewJoinOrderBuilder(NewMemo(newContext(pro), nil, nil, NewDefaultCoster(), nil)) j.ReorderJoin(tt.plan) j.m.SetJoinOrder(tt.hint) if tt.invalid { diff --git a/sql/plan/bindvar.go b/sql/plan/bindvar.go index d4b2c54381..22a5c2beae 100644 --- a/sql/plan/bindvar.go +++ b/sql/plan/bindvar.go @@ -20,6 +20,9 @@ import ( "github.com/dolthub/go-mysql-server/sql/transform" ) +// TODO: ApplyBindings is only ever called for testing purposes and the other functions in this file are either never +// called or only called by each other. Consider deleting this file. + // ApplyBindings replaces all `BindVar` expressions in the given sql.Node with // their corresponding sql.Expression entries in the provided |bindings| map. // If a binding for a |BindVar| expression is not found in the map, no error is