Bug fix: need to make a row the length of the projections, not the length of physical columns

This commit is contained in:
Zach Musgrave
2023-11-09 15:28:09 -08:00
parent 54d718b179
commit 02078d32a2
3 changed files with 7 additions and 5 deletions
@@ -413,6 +413,7 @@ func (lb *coveringLookupBuilder) NewRowIter(ctx *sql.Context, part sql.Partition
valMap: lb.valMap,
ordMap: lb.ordMap,
sqlSch: lb.sch.Schema,
projections: lb.projections,
ns: lb.ns,
}, nil
}
@@ -446,6 +447,7 @@ func (lb *nonCoveringLookupBuilder) NewRowIter(ctx *sql.Context, part sql.Partit
valMap: lb.valMap,
ordMap: lb.ordMap,
sqlSch: lb.sch.Schema,
projections: lb.projections,
}, nil
}
@@ -44,6 +44,7 @@ type prollyIndexIter struct {
keyMap, valMap val.OrdinalMapping
//ordMap are output ordinals for |keyMap| and |valMap|
ordMap val.OrdinalMapping
projections []uint64
sqlSch sql.Schema
}
@@ -79,6 +80,7 @@ func newProllyIndexIter(
keyMap: keyProj,
valMap: valProj,
ordMap: ordProj,
projections: projections,
sqlSch: pkSch.Schema,
}
@@ -97,7 +99,7 @@ func (p prollyIndexIter) Next(ctx *sql.Context) (sql.Row, error) {
}
pk := p.pkBld.Build(sharePool)
r := make(sql.Row, len(p.keyMap)+len(p.valMap))
r := make(sql.Row, len(p.projections))
err = p.primary.Get(ctx, pk, func(key, value val.Tuple) error {
return p.rowFromTuples(ctx, key, value, r)
})
@@ -167,6 +169,7 @@ type prollyCoveringIndexIter struct {
// |keyMap| and |valMap| are both of len ==
keyMap, valMap, ordMap val.OrdinalMapping
projections []uint64
sqlSch sql.Schema
}
@@ -214,7 +217,7 @@ func (p prollyCoveringIndexIter) Next(ctx *sql.Context) (sql.Row, error) {
return nil, err
}
r := make(sql.Row, len(p.keyMap)+len(p.valMap))
r := make(sql.Row, len(p.projections))
if err := p.writeRowFromTuples(ctx, k, v, r); err != nil {
return nil, err
}
@@ -131,13 +131,10 @@ func projectionMappingsForIndex(sch schema.Schema, projections []uint64) (keyMap
nonPks := sch.GetNonPKCols()
numPhysicalColumns := len(projections)
physicalProjections := projections
if schema.IsVirtual(sch) {
numPhysicalColumns = 0
physicalProjections = make([]uint64, sch.GetAllCols().StoredSize())
for _, t := range projections {
if idx, ok := sch.GetAllCols().TagToIdx[t]; ok && !sch.GetAllCols().GetByIndex(idx).Virtual {
physicalProjections[numPhysicalColumns] = t
numPhysicalColumns++
}
}