Skip to content

Commit a92ff64

Browse files
committed
Propagate context parameter.
1 parent cfde3c5 commit a92ff64

22 files changed

+61
-59
lines changed

enginetest/mysqlshim/table.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ var _ sql.CheckTable = Table{}
4747
var _ sql.StatisticsTable = Table{}
4848
var _ sql.PrimaryKeyAlterableTable = Table{}
4949

50-
func (t Table) IndexedAccess(sql.IndexLookup) sql.IndexedTable {
50+
func (t Table) IndexedAccess(*sql.Context, sql.IndexLookup) sql.IndexedTable {
5151
panic("not implemented")
5252
}
5353

enginetest/mysqlshim/table_editor.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ type tableEditor struct {
2929
sch sql.Schema
3030
}
3131

32-
func (t *tableEditor) IndexedAccess(lookup sql.IndexLookup) sql.IndexedTable {
32+
func (t *tableEditor) IndexedAccess(ctx *sql.Context, lookup sql.IndexLookup) sql.IndexedTable {
3333
//TODO implement me
3434
panic("implement me")
3535
}

memory/required_lookup_table.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func (s RequiredLookupTable) Database() sql.Database {
7373
return s.db
7474
}
7575

76-
func (s RequiredLookupTable) IndexedAccess(lookup sql.IndexLookup) sql.IndexedTable {
76+
func (s RequiredLookupTable) IndexedAccess(ctx *sql.Context, lookup sql.IndexLookup) sql.IndexedTable {
7777
return RequiredLookupTable{indexOk: true, IntSequenceTable: s.IntSequenceTable}
7878
}
7979

memory/sequence_table.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ func (s IntSequenceTable) LookupPartitions(context *sql.Context, lookup sql.Inde
212212
return sql.PartitionsToPartitionIter(&sequencePartition{min: min.(int64), max: max.(int64)}), nil
213213
}
214214

215-
func (s IntSequenceTable) IndexedAccess(lookup sql.IndexLookup) sql.IndexedTable {
215+
func (s IntSequenceTable) IndexedAccess(ctx *sql.Context, lookup sql.IndexLookup) sql.IndexedTable {
216216
return s
217217
}
218218

memory/table.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1734,7 +1734,7 @@ func (t *IndexedTable) PartitionRows(ctx *sql.Context, partition sql.Partition)
17341734
return iter, nil
17351735
}
17361736

1737-
func (t *Table) IndexedAccess(lookup sql.IndexLookup) sql.IndexedTable {
1737+
func (t *Table) IndexedAccess(ctx *sql.Context, lookup sql.IndexLookup) sql.IndexedTable {
17381738
return &IndexedTable{Table: t, Lookup: lookup}
17391739
}
17401740

memory/table_data.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ package memory
1616

1717
import (
1818
"fmt"
19+
"github.com/dolthub/go-mysql-server/sql/types"
1920
"sort"
2021
"strconv"
2122
"strings"
@@ -114,7 +115,7 @@ func (td TableData) copy() *TableData {
114115

115116
// partition returns the partition for the row given. Uses the primary key columns if they exist, or all columns
116117
// otherwise
117-
func (td TableData) partition(row sql.Row) (int, error) {
118+
func (td TableData) partition(ctx *sql.Context, row sql.Row) (int, error) {
118119
var keyColumns []int
119120
if len(td.schema.PkOrdinals) > 0 {
120121
keyColumns = td.schema.PkOrdinals
@@ -138,7 +139,7 @@ func (td TableData) partition(row sql.Row) (int, error) {
138139

139140
t, isStringType := td.schema.Schema[keyColumns[i]].Type.(sql.StringType)
140141
if isStringType && v != nil {
141-
v, _, err = t.Convert(v)
142+
v, err = types.ConvertToString(v, t, nil)
142143
if err == nil {
143144
err = t.Collation().WriteWeightString(hash, v.(string))
144145
}

memory/table_editor.go

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ func (t *tableEditor) Close(ctx *sql.Context) error {
100100

101101
// On the normal INSERT / UPDATE / DELETE path this happens at StatementComplete time, but for table rewrites it
102102
// only happens at Close
103-
err := t.ea.ApplyEdits(t.editedTable)
103+
err := t.ea.ApplyEdits(ctx, t.editedTable)
104104
if err != nil {
105105
return err
106106
}
@@ -127,7 +127,7 @@ func (t *tableEditor) DiscardChanges(ctx *sql.Context, errorEncountered error) e
127127
}
128128

129129
func (t *tableEditor) StatementComplete(ctx *sql.Context) error {
130-
err := t.ea.ApplyEdits(t.editedTable)
130+
err := t.ea.ApplyEdits(ctx, t.editedTable)
131131
if err != nil {
132132
return nil
133133
}
@@ -285,10 +285,10 @@ func (t *tableEditor) PreciseMatch() bool {
285285
return true
286286
}
287287

288-
func (t *tableEditor) IndexedAccess(lookup sql.IndexLookup) sql.IndexedTable {
288+
func (t *tableEditor) IndexedAccess(ctx *sql.Context, lookup sql.IndexLookup) sql.IndexedTable {
289289
// Before we return an indexed access for this table, we need to apply all the edits to the table
290290
// TODO: optimize this, should create some struct that encloses the tableEditor and filters based on the lookup
291-
err := t.ea.ApplyEdits(t.editedTable)
291+
err := t.ea.ApplyEdits(ctx, t.editedTable)
292292
if err != nil {
293293
return nil
294294
}
@@ -378,7 +378,7 @@ type tableEditAccumulator interface {
378378
Get(value sql.Row) (sql.Row, bool, error)
379379
// ApplyEdits updates the table provided with the inserts and deletes that have been added to the accumulator.
380380
// Does not clear the accumulator.
381-
ApplyEdits(table *Table) error
381+
ApplyEdits(ctx *sql.Context, table *Table) error
382382
// GetByCols returns the row in the table, or the pending edits, matching the ones given
383383
GetByCols(value sql.Row, cols []int, prefixLengths []uint16) (sql.Row, bool, error)
384384
// Clear wipes all of the stored inserts and deletes that may or may not have been applied.
@@ -487,7 +487,7 @@ func (pke *pkTableEditAccumulator) GetByCols(value sql.Row, cols []int, prefixLe
487487
}
488488

489489
// ApplyEdits implements the tableEditAccumulator interface.
490-
func (pke *pkTableEditAccumulator) ApplyEdits(table *Table) error {
490+
func (pke *pkTableEditAccumulator) ApplyEdits(ctx *sql.Context, table *Table) error {
491491

492492
if err := pke.deletes.Foreach(func(key string, val sql.Row) error {
493493
return pke.deleteHelper(pke.tableData, val)
@@ -497,7 +497,7 @@ func (pke *pkTableEditAccumulator) ApplyEdits(table *Table) error {
497497
}
498498

499499
if err := pke.adds.Foreach(func(key string, val sql.Row) error {
500-
return pke.insertHelper(pke.tableData, val)
500+
return pke.insertHelper(ctx, pke.tableData, val)
501501

502502
}); err != nil {
503503
return err
@@ -600,8 +600,8 @@ func deleteRowFromIndexes(table *TableData, partKey string, rowIdx int) {
600600
}
601601

602602
// insertHelper inserts the given row into the given tableData.
603-
func (pke *pkTableEditAccumulator) insertHelper(table *TableData, row sql.Row) error {
604-
partIdx, err := table.partition(row)
603+
func (pke *pkTableEditAccumulator) insertHelper(ctx *sql.Context, table *TableData, row sql.Row) error {
604+
partIdx, err := table.partition(ctx, row)
605605
if err != nil {
606606
return err
607607
}
@@ -748,7 +748,7 @@ func (k *keylessTableEditAccumulator) GetByCols(value sql.Row, cols []int, prefi
748748
}
749749

750750
// ApplyEdits implements the tableEditAccumulator interface.
751-
func (k *keylessTableEditAccumulator) ApplyEdits(table *Table) error {
751+
func (k *keylessTableEditAccumulator) ApplyEdits(ctx *sql.Context, table *Table) error {
752752
for _, val := range k.deletes {
753753
err := k.deleteHelper(k.tableData, val)
754754
if err != nil {
@@ -757,7 +757,7 @@ func (k *keylessTableEditAccumulator) ApplyEdits(table *Table) error {
757757
}
758758

759759
for _, val := range k.adds {
760-
err := k.insertHelper(k.tableData, val)
760+
err := k.insertHelper(ctx, k.tableData, val)
761761
if err != nil {
762762
return err
763763
}
@@ -814,8 +814,8 @@ func (k *keylessTableEditAccumulator) deleteHelper(table *TableData, row sql.Row
814814
}
815815

816816
// insertHelper inserts into a keyless tableData.
817-
func (k *keylessTableEditAccumulator) insertHelper(table *TableData, row sql.Row) error {
818-
partIdx, err := table.partition(row)
817+
func (k *keylessTableEditAccumulator) insertHelper(ctx *sql.Context, table *TableData, row sql.Row) error {
818+
partIdx, err := table.partition(ctx, row)
819819
if err != nil {
820820
return err
821821
}
@@ -866,8 +866,9 @@ func verifyRowTypes(row sql.Row, schema sql.Schema) error {
866866
if wrapper, isWrapper := rowVal.(sql.AnyWrapper); isWrapper {
867867
method, _ := reflect.TypeOf(wrapper).MethodByName("Unwrap")
868868
valType = method.Type.Out(0)
869+
} else {
870+
valType = reflect.TypeOf(rowVal)
869871
}
870-
valType = reflect.TypeOf(rowVal)
871872
expectedType := col.Type.ValueType()
872873
if valType != expectedType && rowVal != nil && !valType.AssignableTo(expectedType) {
873874
return fmt.Errorf("Actual Value Type: %s, Expected Value Type: %s", valType.String(), expectedType.String())

sql/analyzer/apply_indexes_from_outer_scope.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ func pushdownIndexToTable(ctx *sql.Context, a *Analyzer, tableNode sql.NameableN
105105
}
106106
a.Log("table %q transformed with pushdown of index", tableNode.Name())
107107
lb := plan.NewLookupBuilder(index, keyExpr, nullmask)
108-
ret, err := plan.NewIndexedAccessForTableNode(nn, lb)
108+
ret, err := plan.NewIndexedAccessForTableNode(ctx, nn, lb)
109109
if err != nil {
110110
return nil, transform.SameTree, err
111111
}

sql/analyzer/costed_index_scan.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ func costedIndexScans(ctx *sql.Context, a *Analyzer, n sql.Node, qFlags *sql.Que
7676
return n, transform.SameTree, err
7777
}
7878
if ok {
79-
return indexSearchableLookup(n, rt, lookup, filter.Expression, newFilter, lookupFds, qFlags)
79+
return indexSearchableLookup(ctx, n, rt, lookup, filter.Expression, newFilter, lookupFds, qFlags)
8080
} else if is.SkipIndexCosting() {
8181
return n, transform.SameTree, nil
8282
}
@@ -88,13 +88,13 @@ func costedIndexScans(ctx *sql.Context, a *Analyzer, n sql.Node, qFlags *sql.Que
8888
})
8989
}
9090

91-
func indexSearchableLookup(n sql.Node, rt sql.TableNode, lookup sql.IndexLookup, oldFilter, newFilter sql.Expression, fds *sql.FuncDepSet, qFlags *sql.QueryFlags) (sql.Node, transform.TreeIdentity, error) {
91+
func indexSearchableLookup(ctx *sql.Context, n sql.Node, rt sql.TableNode, lookup sql.IndexLookup, oldFilter, newFilter sql.Expression, fds *sql.FuncDepSet, qFlags *sql.QueryFlags) (sql.Node, transform.TreeIdentity, error) {
9292
if lookup.IsEmpty() {
9393
return n, transform.SameTree, nil
9494
}
9595
var ret sql.Node
9696
var err error
97-
ret, err = plan.NewStaticIndexedAccessForTableNode(rt, lookup)
97+
ret, err = plan.NewStaticIndexedAccessForTableNode(ctx, rt, lookup)
9898
if err != nil {
9999
return n, transform.SameTree, err
100100
}
@@ -290,7 +290,7 @@ func getCostedIndexScan(ctx *sql.Context, statsProv sql.StatsProvider, rt sql.Ta
290290
Table: rt,
291291
})
292292
} else {
293-
ret, err = plan.NewStaticIndexedAccessForTableNode(rt, lookup)
293+
ret, err = plan.NewStaticIndexedAccessForTableNode(ctx, rt, lookup)
294294
if err != nil {
295295
return nil, nil, nil, err
296296
}
@@ -326,7 +326,7 @@ func getCostedIndexScan(ctx *sql.Context, statsProv sql.StatsProvider, rt sql.Ta
326326
return ret, bestStat, retFilters, nil
327327
}
328328

329-
func addIndexScans(m *memo.Memo) error {
329+
func addIndexScans(ctx *sql.Context, m *memo.Memo) error {
330330
return memo.DfsRel(m.Root(), func(e memo.RelExpr) error {
331331
filter, ok := e.(*memo.Filter)
332332
if !ok {
@@ -359,7 +359,7 @@ func addIndexScans(m *memo.Memo) error {
359359
if lookup.IsEmpty() {
360360
return nil
361361
}
362-
ret, err := plan.NewStaticIndexedAccessForTableNode(rt, lookup)
362+
ret, err := plan.NewStaticIndexedAccessForTableNode(ctx, rt, lookup)
363363
if err != nil {
364364
m.HandleErr(err)
365365
}

sql/analyzer/costed_index_scan_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -921,7 +921,7 @@ func (i *indexSearchableTable) LookupForExpressions(ctx *sql.Context, exprs ...s
921921
return sql.IndexLookup{}, nil, nil, false, nil
922922
}
923923

924-
func (i *indexSearchableTable) IndexedAccess(lookup sql.IndexLookup) sql.IndexedTable {
924+
func (i *indexSearchableTable) IndexedAccess(ctx *sql.Context, lookup sql.IndexLookup) sql.IndexedTable {
925925
return i
926926
}
927927

0 commit comments

Comments
 (0)