Skip to content

Commit

Permalink
more tests and cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
max-hoffman committed Jul 15, 2024
1 parent 8a59480 commit 85ff8b4
Show file tree
Hide file tree
Showing 4 changed files with 181 additions and 170 deletions.
4 changes: 2 additions & 2 deletions go/libraries/doltcore/sqle/index/secondary_iter.go
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ func (c *coveringLaxSecondaryLookup) New(ctx context.Context, k val.Tuple) error

var err error
if c.prefixDesc.Count() == c.m.KeyDesc().Count() {
// key range optimization only works if prefix length
// key range optimization only works for full length key
start := k
stop, ok := prolly.IncrementTuple(start, c.prefixDesc.Count()-1, c.prefixDesc, c.m.Pool())
if ok {
Expand Down Expand Up @@ -281,7 +281,7 @@ func (c *nonCoveringLaxSecondaryLookup) Next(ctx context.Context) (k, v val.Tupl
ok = k != nil
return k, v, ok, nil
}
// get secondary key

idxKey, _, err := c.secIter.Next(ctx)
if err != nil {
if err != io.EOF {
Expand Down
78 changes: 27 additions & 51 deletions go/libraries/doltcore/sqle/rowexec/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ package rowexec

import (
"context"

"github.com/dolthub/go-mysql-server/sql"
"github.com/dolthub/go-mysql-server/sql/expression"
"github.com/dolthub/go-mysql-server/sql/plan"
Expand All @@ -43,7 +42,10 @@ func (b Builder) Build(ctx *sql.Context, n sql.Node, r sql.Row) (sql.RowIter, er
if _, _, dstIter, _, dstTags, dstFilter, err := getSourceKv(ctx, n.Right(), false); err == nil && dstIter != nil {
if srcMap, srcIter, _, srcSchema, srcTags, srcFilter, err := getSourceKv(ctx, n.Left(), true); err == nil && srcSchema != nil {
if keyLookupMapper := newLookupKeyMapping(ctx, srcSchema, srcMap, dstIter.InputKeyDesc(), ita.Expressions()); keyLookupMapper.valid() {
return rowIterTableLookupJoin(srcIter, dstIter, keyLookupMapper, srcSchema, srcTags, dstTags, srcFilter, dstFilter, n.Filter, n.Op.IsLeftOuter(), n.Op.IsExcludeNulls())
split := len(srcTags)
projections := append(srcTags, dstTags...)
rowJoiner := newRowJoiner([]schema.Schema{srcSchema, dstIter.Schema()}, []int{split}, projections, dstIter.NodeStore())
return rowIterTableLookupJoin(srcIter, dstIter, keyLookupMapper, rowJoiner, srcFilter, dstFilter, n.Filter, n.Op.IsLeftOuter(), n.Op.IsExcludeNulls())
}
}
}
Expand Down Expand Up @@ -250,85 +252,59 @@ func getSourceKv(ctx *sql.Context, n sql.Node, isSrc bool) (prolly.Map, prolly.M
}
return m, mIter, destIter, s, t, n.Expression, nil
case *plan.IndexedTableAccess:
var lb index.IndexScanBuilder
switch dt := n.UnderlyingTable().(type) {
case *sqle.WritableIndexedDoltTable:
tags = dt.ProjectedTags()
table, err = dt.DoltTable.DoltTable(ctx)
if err != nil {
return prolly.Map{}, nil, nil, nil, nil, nil, err
}

rowData, err := table.GetRowData(ctx)
lb, err = dt.LookupBuilder(ctx)
if err != nil {
return prolly.Map{}, nil, nil, nil, nil, nil, err
}
indexMap = durable.ProllyMapFromIndex(rowData)

lb, err := dt.LookupBuilder(ctx)
if err != nil {
return prolly.Map{}, nil, nil, nil, nil, nil, err
}

if isSrc {
l, err := n.GetLookup(ctx, nil)
if err != nil {
return prolly.Map{}, nil, nil, nil, nil, nil, err
}

prollyRanges, err := index.ProllyRangesForIndex(ctx, l.Index, l.Ranges)
if err != nil {
return prolly.Map{}, nil, nil, nil, nil, nil, err
}

srcIter, err = index.NewSequenceMapIter(ctx, lb, prollyRanges, l.IsReverse)
if err != nil {
return prolly.Map{}, nil, nil, nil, nil, nil, err
}
} else {
dstIter = lb.NewSecondaryIter(n.IsStrictLookup(), len(n.Expressions()), n.NullMask())
}

case *sqle.IndexedDoltTable:
tags = dt.ProjectedTags()
table, err = dt.DoltTable.DoltTable(ctx)
if err != nil {
return prolly.Map{}, nil, nil, nil, nil, nil, err
}

rowData, err := table.GetRowData(ctx)
lb, err = dt.LookupBuilder(ctx)
if err != nil {
return prolly.Map{}, nil, nil, nil, nil, nil, err
}
indexMap = durable.ProllyMapFromIndex(rowData)
//case *dtables.DiffTable:
// TODO: add interface to include system tables
default:
return prolly.Map{}, nil, nil, nil, nil, nil, nil
}

lb, err := dt.LookupBuilder(ctx)
rowData, err := table.GetRowData(ctx)
if err != nil {
return prolly.Map{}, nil, nil, nil, nil, nil, err
}
indexMap = durable.ProllyMapFromIndex(rowData)

if isSrc {
l, err := n.GetLookup(ctx, nil)
if err != nil {
return prolly.Map{}, nil, nil, nil, nil, nil, err
}

l, err := n.GetLookup(ctx, nil)
prollyRanges, err := index.ProllyRangesForIndex(ctx, l.Index, l.Ranges)
if err != nil {
return prolly.Map{}, nil, nil, nil, nil, nil, err
}

if isSrc {
prollyRanges, err := index.ProllyRangesForIndex(ctx, l.Index, l.Ranges)
if err != nil {
return prolly.Map{}, nil, nil, nil, nil, nil, err
}

srcIter, err = index.NewSequenceMapIter(ctx, lb, prollyRanges, l.IsReverse)
if err != nil {
return prolly.Map{}, nil, nil, nil, nil, nil, err
}
} else {
dstIter = lb.NewSecondaryIter(l.IsPointLookup, len(n.Expressions()), n.NullMask())
srcIter, err = index.NewSequenceMapIter(ctx, lb, prollyRanges, l.IsReverse)
if err != nil {
return prolly.Map{}, nil, nil, nil, nil, nil, err
}
//case *dtables.DiffTable:
// TODO: add interface to include system tables
default:
return prolly.Map{}, nil, nil, nil, nil, nil, nil
} else {
dstIter = lb.NewSecondaryIter(n.IsStrictLookup(), len(n.Expressions()), n.NullMask())
}

case *plan.ResolvedTable:
switch dt := n.UnderlyingTable().(type) {
case *sqle.WritableDoltTable:
Expand Down
Loading

0 comments on commit 85ff8b4

Please sign in to comment.