This is an automated email from the ASF dual-hosted git repository.
zeroshade pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-go.git
The following commit(s) were added to refs/heads/main by this push:
new b16a5eea perf(compute): share logical row maps across aligned sorts
(#1234)
b16a5eea is described below
commit b16a5eeaf010a7d6c81ff250efc47275a07688ef
Author: Minh Vu <[email protected]>
AuthorDate: Fri Aug 28 18:26:21 2026 +0200
perf(compute): share logical row maps across aligned sorts (#1234)
### Rationale for this change
Aligned multi-key sorts build the same `logicalRowMap` once per physical
sort
column. The map only depends on the shared chunk boundaries, so the
extra maps
use memory without adding any lookup information.
### What changes are included in this PR?
- Detect aligned chunk boundaries before creating sort comparators.
- Build one `logicalRowMap` for aligned multi-key columns.
- Pass that map to each physical comparator.
- Keep the existing per-column maps for misaligned and single-key sorts.
### Benchmark
This uses the existing `BenchmarkSortIndices_Int64_TwoKeys` benchmark
with
65,536 rows and 64 aligned chunks.
Median of three runs on an Apple M1 Pro with Go 1.26.3:
| Case | Before | After |
| --- | ---: | ---: |
| Two aligned int64 keys | 12.65 ms/op, 3,165,232 B/op, 12 allocs/op |
12.39 ms/op, 2,116,656 B/op, 11 allocs/op |
Command:
```bash
go test ./arrow/compute/internal/kernels -run '^$' -bench
'^BenchmarkSortIndices_Int64_TwoKeys$' -benchmem -benchtime=200ms -count=3
-cpu=1
```
### Are these changes tested?
- `go test ./arrow/compute/internal/kernels -count=1`
- `go test ./arrow/compute -count=1`
- `go test -race ./arrow/compute/internal/kernels -count=1`
- `go vet -composites=false ./arrow/compute/internal/kernels`
---
arrow/compute/internal/kernels/vector_sort.go | 87 ++++++++------
.../internal/kernels/vector_sort_physical.go | 126 ++++++++++-----------
2 files changed, 113 insertions(+), 100 deletions(-)
diff --git a/arrow/compute/internal/kernels/vector_sort.go
b/arrow/compute/internal/kernels/vector_sort.go
index 26b13054..43d6d7a6 100644
--- a/arrow/compute/internal/kernels/vector_sort.go
+++ b/arrow/compute/internal/kernels/vector_sort.go
@@ -140,7 +140,7 @@ func extensionStorageFixedSizeBinaryChunks(chunks
[]arrow.Array) ([]arrow.Array,
return out, nil
}
-func newFixedSizeBinaryComparator(chunks []arrow.Array, numRows int, vn bool)
(columnComparator, error) {
+func newFixedSizeBinaryComparator(chunks []arrow.Array, numRows int, vn bool,
rowMap logicalRowMap) (columnComparator, error) {
f0, ok := chunks[0].(*array.FixedSizeBinary)
if !ok {
return nil, fmt.Errorf("%w: expected *array.FixedSizeBinary
chunk", arrow.ErrInvalid)
@@ -157,11 +157,12 @@ func newFixedSizeBinaryComparator(chunks []arrow.Array,
numRows int, vn bool) (c
arrow.ErrInvalid, w, wi)
}
}
- return newPhysicalSortFixedSizeBinaryColumn(chunks, numRows, vn), nil
+ return newPhysicalSortFixedSizeBinaryColumn(chunks, numRows, vn,
rowMap), nil
}
// createChunkedComparator builds a column comparator for these chunks (one
Arrow type for all chunks).
-func createChunkedComparator(chunks []arrow.Array, numRows int)
(columnComparator, error) {
+// rowMap may be shared by aligned multi-key columns.
+func createChunkedComparator(chunks []arrow.Array, numRows int, rowMap
logicalRowMap) (columnComparator, error) {
if len(chunks) == 0 {
return nil, fmt.Errorf("%w: cannot create comparator for empty
chunk list", arrow.ErrInvalid)
}
@@ -173,71 +174,71 @@ func createChunkedComparator(chunks []arrow.Array,
numRows int) (columnComparato
typeID := chunks[0].DataType().ID()
switch typeID {
case arrow.INT8:
- return newPhysicalSortInt8Column(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortInt8Column(chunks, numRows,
validityNulls, rowMap), nil
case arrow.INT16:
- return newPhysicalSortInt16Column(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortInt16Column(chunks, numRows,
validityNulls, rowMap), nil
case arrow.INT32:
- return newPhysicalSortInt32Column(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortInt32Column(chunks, numRows,
validityNulls, rowMap), nil
case arrow.DATE32:
- return newPhysicalSortDate32Column(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortDate32Column(chunks, numRows,
validityNulls, rowMap), nil
case arrow.TIME32:
- return newPhysicalSortTime32Column(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortTime32Column(chunks, numRows,
validityNulls, rowMap), nil
case arrow.INT64:
- return newPhysicalSortInt64Column(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortInt64Column(chunks, numRows,
validityNulls, rowMap), nil
case arrow.DATE64:
- return newPhysicalSortDate64Column(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortDate64Column(chunks, numRows,
validityNulls, rowMap), nil
case arrow.TIME64:
- return newPhysicalSortTime64Column(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortTime64Column(chunks, numRows,
validityNulls, rowMap), nil
case arrow.TIMESTAMP:
- return newPhysicalSortTimestampColumn(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortTimestampColumn(chunks, numRows,
validityNulls, rowMap), nil
case arrow.DURATION:
- return newPhysicalSortDurationColumn(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortDurationColumn(chunks, numRows,
validityNulls, rowMap), nil
case arrow.UINT8:
- return newPhysicalSortUint8Column(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortUint8Column(chunks, numRows,
validityNulls, rowMap), nil
case arrow.UINT16:
- return newPhysicalSortUint16Column(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortUint16Column(chunks, numRows,
validityNulls, rowMap), nil
case arrow.UINT32:
- return newPhysicalSortUint32Column(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortUint32Column(chunks, numRows,
validityNulls, rowMap), nil
case arrow.UINT64:
- return newPhysicalSortUint64Column(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortUint64Column(chunks, numRows,
validityNulls, rowMap), nil
case arrow.FLOAT16:
- return newPhysicalSortFloat16Column(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortFloat16Column(chunks, numRows,
validityNulls, rowMap), nil
case arrow.FLOAT32:
- return newPhysicalSortFloat32Column(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortFloat32Column(chunks, numRows,
validityNulls, rowMap), nil
case arrow.FLOAT64:
- return newPhysicalSortFloat64Column(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortFloat64Column(chunks, numRows,
validityNulls, rowMap), nil
case arrow.DECIMAL32:
- return newPhysicalSortDecimal32Column(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortDecimal32Column(chunks, numRows,
validityNulls, rowMap), nil
case arrow.DECIMAL64:
- return newPhysicalSortDecimal64Column(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortDecimal64Column(chunks, numRows,
validityNulls, rowMap), nil
case arrow.DECIMAL128:
- return newPhysicalSortDecimal128Column(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortDecimal128Column(chunks, numRows,
validityNulls, rowMap), nil
case arrow.DECIMAL256:
- return newPhysicalSortDecimal256Column(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortDecimal256Column(chunks, numRows,
validityNulls, rowMap), nil
case arrow.INTERVAL_MONTHS:
- return newPhysicalSortMonthIntervalColumn(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortMonthIntervalColumn(chunks, numRows,
validityNulls, rowMap), nil
case arrow.INTERVAL_DAY_TIME:
- return newPhysicalSortDayTimeColumn(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortDayTimeColumn(chunks, numRows,
validityNulls, rowMap), nil
case arrow.INTERVAL_MONTH_DAY_NANO:
- return newPhysicalSortMonthDayNanoColumn(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortMonthDayNanoColumn(chunks, numRows,
validityNulls, rowMap), nil
case arrow.BOOL:
- return newPhysicalSortBoolColumn(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortBoolColumn(chunks, numRows,
validityNulls, rowMap), nil
case arrow.STRING:
- return newPhysicalSortStringColumn(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortStringColumn(chunks, numRows,
validityNulls, rowMap), nil
case arrow.LARGE_STRING:
- return newPhysicalSortLargeStringColumn(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortLargeStringColumn(chunks, numRows,
validityNulls, rowMap), nil
case arrow.BINARY:
- return newPhysicalSortBinaryColumn(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortBinaryColumn(chunks, numRows,
validityNulls, rowMap), nil
case arrow.LARGE_BINARY:
- return newPhysicalSortLargeBinaryColumn(chunks, numRows,
validityNulls), nil
+ return newPhysicalSortLargeBinaryColumn(chunks, numRows,
validityNulls, rowMap), nil
case arrow.FIXED_SIZE_BINARY:
- return newFixedSizeBinaryComparator(chunks, numRows,
validityNulls)
+ return newFixedSizeBinaryComparator(chunks, numRows,
validityNulls, rowMap)
case arrow.EXTENSION:
storageChunks, err :=
extensionStorageFixedSizeBinaryChunks(chunks)
if err != nil {
return nil, err
}
- return newFixedSizeBinaryComparator(storageChunks, numRows,
validityNulls)
+ return newFixedSizeBinaryComparator(storageChunks, numRows,
validityNulls, rowMap)
default:
return nil, fmt.Errorf("%w: sorting not supported for type %s",
arrow.ErrNotImplemented, typeID)
}
@@ -404,10 +405,22 @@ func SortIndices(ctx *exec.KernelCtx, columns
[]*arrow.Chunked, keys []SortKey)
}
}
- comparators := make([]columnComparator, len(columns))
nRows := int(length)
+ var (
+ alignedOffsets []int
+ aligned bool
+ sharedRowMap logicalRowMap
+ )
+ if len(keys) > 1 {
+ alignedOffsets, aligned = alignedChunkBoundaries(columns)
+ if aligned && len(alignedOffsets) > 2 {
+ sharedRowMap = newLogicalRowMap(columns[0].Chunks(),
nRows)
+ }
+ }
+
+ comparators := make([]columnComparator, len(columns))
for i, col := range columns {
- comp, err := createChunkedComparator(col.Chunks(), nRows)
+ comp, err := createChunkedComparator(col.Chunks(), nRows,
sharedRowMap)
if err != nil {
return nil, err
}
@@ -451,7 +464,7 @@ func SortIndices(ctx *exec.KernelCtx, columns
[]*arrow.Chunked, keys []SortKey)
}
} else {
useRadix := len(keys) <= maxRadixSortKeys
- offs, aligned := alignedChunkBoundaries(columns)
+ offs := alignedOffsets
nSeg := 1
if aligned {
nSeg = len(offs) - 1
diff --git a/arrow/compute/internal/kernels/vector_sort_physical.go
b/arrow/compute/internal/kernels/vector_sort_physical.go
index 402c23c5..60d52b87 100644
--- a/arrow/compute/internal/kernels/vector_sort_physical.go
+++ b/arrow/compute/internal/kernels/vector_sort_physical.go
@@ -34,9 +34,9 @@ type physicalColumnBase struct {
validityNulls bool
}
-func newPhysicalColumnBase(chunks []arrow.Array, numRows int, validityNulls
bool) physicalColumnBase {
- var rowMap logicalRowMap
- if len(chunks) > 1 {
+func newPhysicalColumnBase(chunks []arrow.Array, numRows int, validityNulls
bool, rowMap logicalRowMap) physicalColumnBase {
+ // A non-nil row map can be shared by aligned multi-key columns.
+ if len(chunks) > 1 && rowMap.cells == nil {
rowMap = newLogicalRowMap(chunks, numRows)
}
return physicalColumnBase{chunks: chunks, rowMap: rowMap,
validityNulls: validityNulls}
@@ -81,8 +81,8 @@ func (b *physicalColumnBase) columnHasValidityNulls() bool {
return b.validityNu
type physicalSortInt8Column struct{ base physicalColumnBase }
-func newPhysicalSortInt8Column(chunks []arrow.Array, numRows int, vn bool)
*physicalSortInt8Column {
- return &physicalSortInt8Column{base: newPhysicalColumnBase(chunks,
numRows, vn)}
+func newPhysicalSortInt8Column(chunks []arrow.Array, numRows int, vn bool,
rowMap logicalRowMap) *physicalSortInt8Column {
+ return &physicalSortInt8Column{base: newPhysicalColumnBase(chunks,
numRows, vn, rowMap)}
}
func (c *physicalSortInt8Column) compareRowsForKey(i, j uint64, key SortKey)
int {
@@ -106,8 +106,8 @@ func (c *physicalSortInt8Column) columnHasValidityNulls()
bool {
type physicalSortInt16Column struct{ base physicalColumnBase }
-func newPhysicalSortInt16Column(chunks []arrow.Array, numRows int, vn bool)
*physicalSortInt16Column {
- return &physicalSortInt16Column{base: newPhysicalColumnBase(chunks,
numRows, vn)}
+func newPhysicalSortInt16Column(chunks []arrow.Array, numRows int, vn bool,
rowMap logicalRowMap) *physicalSortInt16Column {
+ return &physicalSortInt16Column{base: newPhysicalColumnBase(chunks,
numRows, vn, rowMap)}
}
func (c *physicalSortInt16Column) compareRowsForKey(i, j uint64, key SortKey)
int {
@@ -131,8 +131,8 @@ func (c *physicalSortInt16Column) columnHasValidityNulls()
bool {
type physicalSortInt32Column struct{ base physicalColumnBase }
-func newPhysicalSortInt32Column(chunks []arrow.Array, numRows int, vn bool)
*physicalSortInt32Column {
- return &physicalSortInt32Column{base: newPhysicalColumnBase(chunks,
numRows, vn)}
+func newPhysicalSortInt32Column(chunks []arrow.Array, numRows int, vn bool,
rowMap logicalRowMap) *physicalSortInt32Column {
+ return &physicalSortInt32Column{base: newPhysicalColumnBase(chunks,
numRows, vn, rowMap)}
}
func (c *physicalSortInt32Column) compareRowsForKey(i, j uint64, key SortKey)
int {
@@ -156,8 +156,8 @@ func (c *physicalSortInt32Column) columnHasValidityNulls()
bool {
type physicalSortDate32Column struct{ base physicalColumnBase }
-func newPhysicalSortDate32Column(chunks []arrow.Array, numRows int, vn bool)
*physicalSortDate32Column {
- return &physicalSortDate32Column{base: newPhysicalColumnBase(chunks,
numRows, vn)}
+func newPhysicalSortDate32Column(chunks []arrow.Array, numRows int, vn bool,
rowMap logicalRowMap) *physicalSortDate32Column {
+ return &physicalSortDate32Column{base: newPhysicalColumnBase(chunks,
numRows, vn, rowMap)}
}
func (c *physicalSortDate32Column) compareRowsForKey(i, j uint64, key SortKey)
int {
@@ -181,8 +181,8 @@ func (c *physicalSortDate32Column) columnHasValidityNulls()
bool {
type physicalSortTime32Column struct{ base physicalColumnBase }
-func newPhysicalSortTime32Column(chunks []arrow.Array, numRows int, vn bool)
*physicalSortTime32Column {
- return &physicalSortTime32Column{base: newPhysicalColumnBase(chunks,
numRows, vn)}
+func newPhysicalSortTime32Column(chunks []arrow.Array, numRows int, vn bool,
rowMap logicalRowMap) *physicalSortTime32Column {
+ return &physicalSortTime32Column{base: newPhysicalColumnBase(chunks,
numRows, vn, rowMap)}
}
func (c *physicalSortTime32Column) compareRowsForKey(i, j uint64, key SortKey)
int {
@@ -206,8 +206,8 @@ func (c *physicalSortTime32Column) columnHasValidityNulls()
bool {
type physicalSortInt64Column struct{ base physicalColumnBase }
-func newPhysicalSortInt64Column(chunks []arrow.Array, numRows int, vn bool)
*physicalSortInt64Column {
- return &physicalSortInt64Column{base: newPhysicalColumnBase(chunks,
numRows, vn)}
+func newPhysicalSortInt64Column(chunks []arrow.Array, numRows int, vn bool,
rowMap logicalRowMap) *physicalSortInt64Column {
+ return &physicalSortInt64Column{base: newPhysicalColumnBase(chunks,
numRows, vn, rowMap)}
}
func (c *physicalSortInt64Column) compareRowsForKey(i, j uint64, key SortKey)
int {
@@ -231,8 +231,8 @@ func (c *physicalSortInt64Column) columnHasValidityNulls()
bool {
type physicalSortDate64Column struct{ base physicalColumnBase }
-func newPhysicalSortDate64Column(chunks []arrow.Array, numRows int, vn bool)
*physicalSortDate64Column {
- return &physicalSortDate64Column{base: newPhysicalColumnBase(chunks,
numRows, vn)}
+func newPhysicalSortDate64Column(chunks []arrow.Array, numRows int, vn bool,
rowMap logicalRowMap) *physicalSortDate64Column {
+ return &physicalSortDate64Column{base: newPhysicalColumnBase(chunks,
numRows, vn, rowMap)}
}
func (c *physicalSortDate64Column) compareRowsForKey(i, j uint64, key SortKey)
int {
@@ -256,8 +256,8 @@ func (c *physicalSortDate64Column) columnHasValidityNulls()
bool {
type physicalSortTime64Column struct{ base physicalColumnBase }
-func newPhysicalSortTime64Column(chunks []arrow.Array, numRows int, vn bool)
*physicalSortTime64Column {
- return &physicalSortTime64Column{base: newPhysicalColumnBase(chunks,
numRows, vn)}
+func newPhysicalSortTime64Column(chunks []arrow.Array, numRows int, vn bool,
rowMap logicalRowMap) *physicalSortTime64Column {
+ return &physicalSortTime64Column{base: newPhysicalColumnBase(chunks,
numRows, vn, rowMap)}
}
func (c *physicalSortTime64Column) compareRowsForKey(i, j uint64, key SortKey)
int {
@@ -281,8 +281,8 @@ func (c *physicalSortTime64Column) columnHasValidityNulls()
bool {
type physicalSortTimestampColumn struct{ base physicalColumnBase }
-func newPhysicalSortTimestampColumn(chunks []arrow.Array, numRows int, vn
bool) *physicalSortTimestampColumn {
- return &physicalSortTimestampColumn{base: newPhysicalColumnBase(chunks,
numRows, vn)}
+func newPhysicalSortTimestampColumn(chunks []arrow.Array, numRows int, vn
bool, rowMap logicalRowMap) *physicalSortTimestampColumn {
+ return &physicalSortTimestampColumn{base: newPhysicalColumnBase(chunks,
numRows, vn, rowMap)}
}
func (c *physicalSortTimestampColumn) compareRowsForKey(i, j uint64, key
SortKey) int {
@@ -306,8 +306,8 @@ func (c *physicalSortTimestampColumn)
columnHasValidityNulls() bool {
type physicalSortDurationColumn struct{ base physicalColumnBase }
-func newPhysicalSortDurationColumn(chunks []arrow.Array, numRows int, vn bool)
*physicalSortDurationColumn {
- return &physicalSortDurationColumn{base: newPhysicalColumnBase(chunks,
numRows, vn)}
+func newPhysicalSortDurationColumn(chunks []arrow.Array, numRows int, vn bool,
rowMap logicalRowMap) *physicalSortDurationColumn {
+ return &physicalSortDurationColumn{base: newPhysicalColumnBase(chunks,
numRows, vn, rowMap)}
}
func (c *physicalSortDurationColumn) compareRowsForKey(i, j uint64, key
SortKey) int {
@@ -331,8 +331,8 @@ func (c *physicalSortDurationColumn)
columnHasValidityNulls() bool {
type physicalSortUint8Column struct{ base physicalColumnBase }
-func newPhysicalSortUint8Column(chunks []arrow.Array, numRows int, vn bool)
*physicalSortUint8Column {
- return &physicalSortUint8Column{base: newPhysicalColumnBase(chunks,
numRows, vn)}
+func newPhysicalSortUint8Column(chunks []arrow.Array, numRows int, vn bool,
rowMap logicalRowMap) *physicalSortUint8Column {
+ return &physicalSortUint8Column{base: newPhysicalColumnBase(chunks,
numRows, vn, rowMap)}
}
func (c *physicalSortUint8Column) compareRowsForKey(i, j uint64, key SortKey)
int {
@@ -356,8 +356,8 @@ func (c *physicalSortUint8Column) columnHasValidityNulls()
bool {
type physicalSortUint16Column struct{ base physicalColumnBase }
-func newPhysicalSortUint16Column(chunks []arrow.Array, numRows int, vn bool)
*physicalSortUint16Column {
- return &physicalSortUint16Column{base: newPhysicalColumnBase(chunks,
numRows, vn)}
+func newPhysicalSortUint16Column(chunks []arrow.Array, numRows int, vn bool,
rowMap logicalRowMap) *physicalSortUint16Column {
+ return &physicalSortUint16Column{base: newPhysicalColumnBase(chunks,
numRows, vn, rowMap)}
}
func (c *physicalSortUint16Column) compareRowsForKey(i, j uint64, key SortKey)
int {
@@ -381,8 +381,8 @@ func (c *physicalSortUint16Column) columnHasValidityNulls()
bool {
type physicalSortUint32Column struct{ base physicalColumnBase }
-func newPhysicalSortUint32Column(chunks []arrow.Array, numRows int, vn bool)
*physicalSortUint32Column {
- return &physicalSortUint32Column{base: newPhysicalColumnBase(chunks,
numRows, vn)}
+func newPhysicalSortUint32Column(chunks []arrow.Array, numRows int, vn bool,
rowMap logicalRowMap) *physicalSortUint32Column {
+ return &physicalSortUint32Column{base: newPhysicalColumnBase(chunks,
numRows, vn, rowMap)}
}
func (c *physicalSortUint32Column) compareRowsForKey(i, j uint64, key SortKey)
int {
@@ -406,8 +406,8 @@ func (c *physicalSortUint32Column) columnHasValidityNulls()
bool {
type physicalSortUint64Column struct{ base physicalColumnBase }
-func newPhysicalSortUint64Column(chunks []arrow.Array, numRows int, vn bool)
*physicalSortUint64Column {
- return &physicalSortUint64Column{base: newPhysicalColumnBase(chunks,
numRows, vn)}
+func newPhysicalSortUint64Column(chunks []arrow.Array, numRows int, vn bool,
rowMap logicalRowMap) *physicalSortUint64Column {
+ return &physicalSortUint64Column{base: newPhysicalColumnBase(chunks,
numRows, vn, rowMap)}
}
func (c *physicalSortUint64Column) compareRowsForKey(i, j uint64, key SortKey)
int {
@@ -431,8 +431,8 @@ func (c *physicalSortUint64Column) columnHasValidityNulls()
bool {
type physicalSortFloat16Column struct{ base physicalColumnBase }
-func newPhysicalSortFloat16Column(chunks []arrow.Array, numRows int, vn bool)
*physicalSortFloat16Column {
- return &physicalSortFloat16Column{base: newPhysicalColumnBase(chunks,
numRows, vn)}
+func newPhysicalSortFloat16Column(chunks []arrow.Array, numRows int, vn bool,
rowMap logicalRowMap) *physicalSortFloat16Column {
+ return &physicalSortFloat16Column{base: newPhysicalColumnBase(chunks,
numRows, vn, rowMap)}
}
func (c *physicalSortFloat16Column) compareRowsForKey(i, j uint64, key
SortKey) int {
@@ -469,8 +469,8 @@ func (c *physicalSortFloat16Column)
columnHasValidityNulls() bool {
type physicalSortFloat32Column struct{ base physicalColumnBase }
-func newPhysicalSortFloat32Column(chunks []arrow.Array, numRows int, vn bool)
*physicalSortFloat32Column {
- return &physicalSortFloat32Column{base: newPhysicalColumnBase(chunks,
numRows, vn)}
+func newPhysicalSortFloat32Column(chunks []arrow.Array, numRows int, vn bool,
rowMap logicalRowMap) *physicalSortFloat32Column {
+ return &physicalSortFloat32Column{base: newPhysicalColumnBase(chunks,
numRows, vn, rowMap)}
}
func (c *physicalSortFloat32Column) compareRowsForKey(i, j uint64, key
SortKey) int {
@@ -507,8 +507,8 @@ func (c *physicalSortFloat32Column)
columnHasValidityNulls() bool {
type physicalSortFloat64Column struct{ base physicalColumnBase }
-func newPhysicalSortFloat64Column(chunks []arrow.Array, numRows int, vn bool)
*physicalSortFloat64Column {
- return &physicalSortFloat64Column{base: newPhysicalColumnBase(chunks,
numRows, vn)}
+func newPhysicalSortFloat64Column(chunks []arrow.Array, numRows int, vn bool,
rowMap logicalRowMap) *physicalSortFloat64Column {
+ return &physicalSortFloat64Column{base: newPhysicalColumnBase(chunks,
numRows, vn, rowMap)}
}
func (c *physicalSortFloat64Column) compareRowsForKey(i, j uint64, key
SortKey) int {
@@ -545,8 +545,8 @@ func (c *physicalSortFloat64Column)
columnHasValidityNulls() bool {
type physicalSortDecimal32Column struct{ base physicalColumnBase }
-func newPhysicalSortDecimal32Column(chunks []arrow.Array, numRows int, vn
bool) *physicalSortDecimal32Column {
- return &physicalSortDecimal32Column{base: newPhysicalColumnBase(chunks,
numRows, vn)}
+func newPhysicalSortDecimal32Column(chunks []arrow.Array, numRows int, vn
bool, rowMap logicalRowMap) *physicalSortDecimal32Column {
+ return &physicalSortDecimal32Column{base: newPhysicalColumnBase(chunks,
numRows, vn, rowMap)}
}
func (c *physicalSortDecimal32Column) compareRowsForKey(i, j uint64, key
SortKey) int {
@@ -570,8 +570,8 @@ func (c *physicalSortDecimal32Column)
columnHasValidityNulls() bool {
type physicalSortDecimal64Column struct{ base physicalColumnBase }
-func newPhysicalSortDecimal64Column(chunks []arrow.Array, numRows int, vn
bool) *physicalSortDecimal64Column {
- return &physicalSortDecimal64Column{base: newPhysicalColumnBase(chunks,
numRows, vn)}
+func newPhysicalSortDecimal64Column(chunks []arrow.Array, numRows int, vn
bool, rowMap logicalRowMap) *physicalSortDecimal64Column {
+ return &physicalSortDecimal64Column{base: newPhysicalColumnBase(chunks,
numRows, vn, rowMap)}
}
func (c *physicalSortDecimal64Column) compareRowsForKey(i, j uint64, key
SortKey) int {
@@ -595,8 +595,8 @@ func (c *physicalSortDecimal64Column)
columnHasValidityNulls() bool {
type physicalSortDecimal128Column struct{ base physicalColumnBase }
-func newPhysicalSortDecimal128Column(chunks []arrow.Array, numRows int, vn
bool) *physicalSortDecimal128Column {
- return &physicalSortDecimal128Column{base:
newPhysicalColumnBase(chunks, numRows, vn)}
+func newPhysicalSortDecimal128Column(chunks []arrow.Array, numRows int, vn
bool, rowMap logicalRowMap) *physicalSortDecimal128Column {
+ return &physicalSortDecimal128Column{base:
newPhysicalColumnBase(chunks, numRows, vn, rowMap)}
}
func (c *physicalSortDecimal128Column) compareRowsForKey(i, j uint64, key
SortKey) int {
@@ -620,8 +620,8 @@ func (c *physicalSortDecimal128Column)
columnHasValidityNulls() bool {
type physicalSortDecimal256Column struct{ base physicalColumnBase }
-func newPhysicalSortDecimal256Column(chunks []arrow.Array, numRows int, vn
bool) *physicalSortDecimal256Column {
- return &physicalSortDecimal256Column{base:
newPhysicalColumnBase(chunks, numRows, vn)}
+func newPhysicalSortDecimal256Column(chunks []arrow.Array, numRows int, vn
bool, rowMap logicalRowMap) *physicalSortDecimal256Column {
+ return &physicalSortDecimal256Column{base:
newPhysicalColumnBase(chunks, numRows, vn, rowMap)}
}
func (c *physicalSortDecimal256Column) compareRowsForKey(i, j uint64, key
SortKey) int {
@@ -645,8 +645,8 @@ func (c *physicalSortDecimal256Column)
columnHasValidityNulls() bool {
type physicalSortMonthIntervalColumn struct{ base physicalColumnBase }
-func newPhysicalSortMonthIntervalColumn(chunks []arrow.Array, numRows int, vn
bool) *physicalSortMonthIntervalColumn {
- return &physicalSortMonthIntervalColumn{base:
newPhysicalColumnBase(chunks, numRows, vn)}
+func newPhysicalSortMonthIntervalColumn(chunks []arrow.Array, numRows int, vn
bool, rowMap logicalRowMap) *physicalSortMonthIntervalColumn {
+ return &physicalSortMonthIntervalColumn{base:
newPhysicalColumnBase(chunks, numRows, vn, rowMap)}
}
func (c *physicalSortMonthIntervalColumn) compareRowsForKey(i, j uint64, key
SortKey) int {
@@ -672,8 +672,8 @@ func (c *physicalSortMonthIntervalColumn)
columnHasValidityNulls() bool {
type physicalSortDayTimeColumn struct{ base physicalColumnBase }
-func newPhysicalSortDayTimeColumn(chunks []arrow.Array, numRows int, vn bool)
*physicalSortDayTimeColumn {
- return &physicalSortDayTimeColumn{base: newPhysicalColumnBase(chunks,
numRows, vn)}
+func newPhysicalSortDayTimeColumn(chunks []arrow.Array, numRows int, vn bool,
rowMap logicalRowMap) *physicalSortDayTimeColumn {
+ return &physicalSortDayTimeColumn{base: newPhysicalColumnBase(chunks,
numRows, vn, rowMap)}
}
func (c *physicalSortDayTimeColumn) compareRowsForKey(i, j uint64, key
SortKey) int {
@@ -697,8 +697,8 @@ func (c *physicalSortDayTimeColumn)
columnHasValidityNulls() bool {
type physicalSortMonthDayNanoColumn struct{ base physicalColumnBase }
-func newPhysicalSortMonthDayNanoColumn(chunks []arrow.Array, numRows int, vn
bool) *physicalSortMonthDayNanoColumn {
- return &physicalSortMonthDayNanoColumn{base:
newPhysicalColumnBase(chunks, numRows, vn)}
+func newPhysicalSortMonthDayNanoColumn(chunks []arrow.Array, numRows int, vn
bool, rowMap logicalRowMap) *physicalSortMonthDayNanoColumn {
+ return &physicalSortMonthDayNanoColumn{base:
newPhysicalColumnBase(chunks, numRows, vn, rowMap)}
}
func (c *physicalSortMonthDayNanoColumn) compareRowsForKey(i, j uint64, key
SortKey) int {
@@ -722,8 +722,8 @@ func (c *physicalSortMonthDayNanoColumn)
columnHasValidityNulls() bool {
type physicalSortBoolColumn struct{ base physicalColumnBase }
-func newPhysicalSortBoolColumn(chunks []arrow.Array, numRows int, vn bool)
*physicalSortBoolColumn {
- return &physicalSortBoolColumn{base: newPhysicalColumnBase(chunks,
numRows, vn)}
+func newPhysicalSortBoolColumn(chunks []arrow.Array, numRows int, vn bool,
rowMap logicalRowMap) *physicalSortBoolColumn {
+ return &physicalSortBoolColumn{base: newPhysicalColumnBase(chunks,
numRows, vn, rowMap)}
}
func (c *physicalSortBoolColumn) compareRowsForKey(i, j uint64, key SortKey)
int {
@@ -747,8 +747,8 @@ func (c *physicalSortBoolColumn) columnHasValidityNulls()
bool {
type physicalSortStringColumn struct{ base physicalColumnBase }
-func newPhysicalSortStringColumn(chunks []arrow.Array, numRows int, vn bool)
*physicalSortStringColumn {
- return &physicalSortStringColumn{base: newPhysicalColumnBase(chunks,
numRows, vn)}
+func newPhysicalSortStringColumn(chunks []arrow.Array, numRows int, vn bool,
rowMap logicalRowMap) *physicalSortStringColumn {
+ return &physicalSortStringColumn{base: newPhysicalColumnBase(chunks,
numRows, vn, rowMap)}
}
func (c *physicalSortStringColumn) compareRowsForKey(i, j uint64, key SortKey)
int {
@@ -772,8 +772,8 @@ func (c *physicalSortStringColumn) columnHasValidityNulls()
bool {
type physicalSortLargeStringColumn struct{ base physicalColumnBase }
-func newPhysicalSortLargeStringColumn(chunks []arrow.Array, numRows int, vn
bool) *physicalSortLargeStringColumn {
- return &physicalSortLargeStringColumn{base:
newPhysicalColumnBase(chunks, numRows, vn)}
+func newPhysicalSortLargeStringColumn(chunks []arrow.Array, numRows int, vn
bool, rowMap logicalRowMap) *physicalSortLargeStringColumn {
+ return &physicalSortLargeStringColumn{base:
newPhysicalColumnBase(chunks, numRows, vn, rowMap)}
}
func (c *physicalSortLargeStringColumn) compareRowsForKey(i, j uint64, key
SortKey) int {
@@ -797,8 +797,8 @@ func (c *physicalSortLargeStringColumn)
columnHasValidityNulls() bool {
type physicalSortBinaryColumn struct{ base physicalColumnBase }
-func newPhysicalSortBinaryColumn(chunks []arrow.Array, numRows int, vn bool)
*physicalSortBinaryColumn {
- return &physicalSortBinaryColumn{base: newPhysicalColumnBase(chunks,
numRows, vn)}
+func newPhysicalSortBinaryColumn(chunks []arrow.Array, numRows int, vn bool,
rowMap logicalRowMap) *physicalSortBinaryColumn {
+ return &physicalSortBinaryColumn{base: newPhysicalColumnBase(chunks,
numRows, vn, rowMap)}
}
func (c *physicalSortBinaryColumn) compareRowsForKey(i, j uint64, key SortKey)
int {
@@ -822,8 +822,8 @@ func (c *physicalSortBinaryColumn) columnHasValidityNulls()
bool {
type physicalSortLargeBinaryColumn struct{ base physicalColumnBase }
-func newPhysicalSortLargeBinaryColumn(chunks []arrow.Array, numRows int, vn
bool) *physicalSortLargeBinaryColumn {
- return &physicalSortLargeBinaryColumn{base:
newPhysicalColumnBase(chunks, numRows, vn)}
+func newPhysicalSortLargeBinaryColumn(chunks []arrow.Array, numRows int, vn
bool, rowMap logicalRowMap) *physicalSortLargeBinaryColumn {
+ return &physicalSortLargeBinaryColumn{base:
newPhysicalColumnBase(chunks, numRows, vn, rowMap)}
}
func (c *physicalSortLargeBinaryColumn) compareRowsForKey(i, j uint64, key
SortKey) int {
@@ -847,8 +847,8 @@ func (c *physicalSortLargeBinaryColumn)
columnHasValidityNulls() bool {
type physicalSortFixedSizeBinaryColumn struct{ base physicalColumnBase }
-func newPhysicalSortFixedSizeBinaryColumn(chunks []arrow.Array, numRows int,
vn bool) *physicalSortFixedSizeBinaryColumn {
- return &physicalSortFixedSizeBinaryColumn{base:
newPhysicalColumnBase(chunks, numRows, vn)}
+func newPhysicalSortFixedSizeBinaryColumn(chunks []arrow.Array, numRows int,
vn bool, rowMap logicalRowMap) *physicalSortFixedSizeBinaryColumn {
+ return &physicalSortFixedSizeBinaryColumn{base:
newPhysicalColumnBase(chunks, numRows, vn, rowMap)}
}
func (c *physicalSortFixedSizeBinaryColumn) compareRowsForKey(i, j uint64, key
SortKey) int {