Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion go/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ require (
github.com/dolthub/dolt-mcp v0.2.2
github.com/dolthub/eventsapi_schema v0.0.0-20250915094920-eadfd39051ca
github.com/dolthub/flatbuffers/v23 v23.3.3-dh.2
github.com/dolthub/go-mysql-server v0.20.1-0.20251230004453-61c13ba83cbb
github.com/dolthub/go-mysql-server v0.20.1-0.20251230225138-0bf05c4e54b0
github.com/dolthub/gozstd v0.0.0-20240423170813-23a2903bca63
github.com/edsrzf/mmap-go v1.2.0
github.com/esote/minmaxheap v1.0.0
Expand Down
4 changes: 2 additions & 2 deletions go/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -195,8 +195,8 @@ github.com/dolthub/fslock v0.0.0-20251215194149-ef20baba2318 h1:n+vdH5G5Db+1qnDC
github.com/dolthub/fslock v0.0.0-20251215194149-ef20baba2318/go.mod h1:QWql+P17oAAMLnL4HGB5tiovtDuAjdDTPbuqx7bYfa0=
github.com/dolthub/go-icu-regex v0.0.0-20250916051405-78a38d478790 h1:zxMsH7RLiG+dlZ/y0LgJHTV26XoiSJcuWq+em6t6VVc=
github.com/dolthub/go-icu-regex v0.0.0-20250916051405-78a38d478790/go.mod h1:F3cnm+vMRK1HaU6+rNqQrOCyR03HHhR1GWG2gnPOqaE=
github.com/dolthub/go-mysql-server v0.20.1-0.20251230004453-61c13ba83cbb h1:eOOEqLqSmzsVpN2VXCHoaEcvSFmyuVAJPQzwrAyND+E=
github.com/dolthub/go-mysql-server v0.20.1-0.20251230004453-61c13ba83cbb/go.mod h1:NjewWKoa5bVSLdKwL7fg7eAfrcIxDybWUKoWEHWRTw4=
github.com/dolthub/go-mysql-server v0.20.1-0.20251230225138-0bf05c4e54b0 h1:/lX2PaxPg13EudyvAM9NNz9NGJXky2C+fPWYWuQ3g5E=
github.com/dolthub/go-mysql-server v0.20.1-0.20251230225138-0bf05c4e54b0/go.mod h1:NjewWKoa5bVSLdKwL7fg7eAfrcIxDybWUKoWEHWRTw4=
github.com/dolthub/gozstd v0.0.0-20240423170813-23a2903bca63 h1:OAsXLAPL4du6tfbBgK0xXHZkOlos63RdKYS3Sgw/dfI=
github.com/dolthub/gozstd v0.0.0-20240423170813-23a2903bca63/go.mod h1:lV7lUeuDhH5thVGDCKXbatwKy2KW80L4rMT46n+Y2/Q=
github.com/dolthub/ishell v0.0.0-20240701202509-2b217167d718 h1:lT7hE5k+0nkBdj/1UOSFwjWpNxf+LCApbRHgnCA17XE=
Expand Down
10 changes: 6 additions & 4 deletions go/libraries/doltcore/schema/collation_comparator.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,17 @@ var _ val.TupleComparator = CollationTupleComparator{}
// Compare implements TupleComparator
func (c CollationTupleComparator) Compare(ctx context.Context, left, right val.Tuple, desc *val.TupleDesc) (cmp int) {
fast := desc.GetFixedAccess()
for i := range fast {
start, stop := fast[i][0], fast[i][1]
off := len(fast)
var start, stop val.ByteSize
for i := 0; i < off; i++ {
stop = fast[i]
cmp = collationCompare(ctx, desc.Types[i], c.Collations[i], left[start:stop], right[start:stop])
if cmp != 0 {
return cmp
}
start = stop
}

off := len(fast)
for i, typ := range desc.Types[off:] {
j := i + off
cmp = collationCompare(ctx, typ, c.Collations[j], left.GetField(j), right.GetField(j))
Expand Down Expand Up @@ -111,7 +113,7 @@ func collationCompare(ctx context.Context, typ val.Type, collation sql.Collation
if typ.Enc == val.StringEnc {
return compareCollatedStrings(collation, left[:len(left)-1], right[:len(right)-1])
} else {
return val.DefaultTupleComparator{}.CompareValues(ctx, 0, left, right, typ)
return (&val.DefaultTupleComparator{}).CompareValues(ctx, 0, left, right, typ)
}
}

Expand Down
2 changes: 1 addition & 1 deletion go/libraries/doltcore/sqle/resolve/resolve_tables.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ func TablesOnSearchPath(ctx *sql.Context, root doltdb.RootValue) ([]doltdb.Table

var tableNames []doltdb.TableName
for _, schemaName := range schemasToSearch {
names, err := root.GetTableNames(ctx, schemaName, true)
names, err := root.GetTableNames(ctx, schemaName, false)
if err != nil {
return nil, err
}
Expand Down
28 changes: 15 additions & 13 deletions go/store/val/extended_comparator.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,20 +25,22 @@ type ExtendedTupleComparator struct {
}

// TODO: compare performance of rolling this logic into the DefaultTupleComparator (nil check or generic handlers that call compare)
var _ TupleComparator = ExtendedTupleComparator{}
var _ TupleComparator = &ExtendedTupleComparator{}

// Compare implements the TupleComparator interface.
func (c ExtendedTupleComparator) Compare(ctx context.Context, left, right Tuple, desc *TupleDesc) (cmp int) {
func (c *ExtendedTupleComparator) Compare(ctx context.Context, left, right Tuple, desc *TupleDesc) (cmp int) {
fast := desc.GetFixedAccess()
for i := range fast {
start, stop := fast[i][0], fast[i][1]
off := len(fast)
var start, stop ByteSize
for i := 0; i < off; i++ {
stop = fast[i]
cmp = c.CompareValues(ctx, i, left[start:stop], right[start:stop], desc.Types[i])
if cmp != 0 {
return cmp
}
start = stop
}

off := len(fast)
for i, typ := range desc.Types[off:] {
j := i + off
cmp = c.CompareValues(ctx, j, left.GetField(j), right.GetField(j), typ)
Expand All @@ -50,7 +52,7 @@ func (c ExtendedTupleComparator) Compare(ctx context.Context, left, right Tuple,
}

// CompareValues implements the TupleComparator interface.
func (c ExtendedTupleComparator) CompareValues(ctx context.Context, index int, left, right []byte, typ Type) int {
func (c *ExtendedTupleComparator) CompareValues(ctx context.Context, index int, left, right []byte, typ Type) int {
switch typ.Enc {
case ExtendedEnc, ExtendedAddrEnc, ExtendedAdaptiveEnc:
cmp, err := c.handlers[index].SerializedCompare(ctx, left, right)
Expand All @@ -64,20 +66,20 @@ func (c ExtendedTupleComparator) CompareValues(ctx context.Context, index int, l
}

// Prefix implements the TupleComparator interface.
func (c ExtendedTupleComparator) Prefix(n int) TupleComparator {
return ExtendedTupleComparator{c.innerCmp.Prefix(n), c.handlers[:n]}
func (c *ExtendedTupleComparator) Prefix(n int) TupleComparator {
return &ExtendedTupleComparator{c.innerCmp.Prefix(n), c.handlers[:n]}
}

// Suffix implements the TupleComparator interface.
func (c ExtendedTupleComparator) Suffix(n int) TupleComparator {
return ExtendedTupleComparator{c.innerCmp.Suffix(n), c.handlers[n:]}
func (c *ExtendedTupleComparator) Suffix(n int) TupleComparator {
return &ExtendedTupleComparator{c.innerCmp.Suffix(n), c.handlers[n:]}
}

// Validated implements the TupleComparator interface.
func (c ExtendedTupleComparator) Validated(types []Type) TupleComparator {
func (c *ExtendedTupleComparator) Validated(types []Type) TupleComparator {
// If our inner comparator is an ExtendedTupleComparator, then we should use its inner comparator to reduce redundancy.
var innerCmp TupleComparator
if extendedInner, ok := c.innerCmp.(ExtendedTupleComparator); ok {
if extendedInner, ok := c.innerCmp.(*ExtendedTupleComparator); ok {
innerCmp = extendedInner.innerCmp.Validated(types)
} else {
innerCmp = c.innerCmp.Validated(types)
Expand All @@ -101,5 +103,5 @@ func (c ExtendedTupleComparator) Validated(types []Type) TupleComparator {
if !hasHandler {
return innerCmp
}
return ExtendedTupleComparator{innerCmp, c.handlers}
return &ExtendedTupleComparator{innerCmp, c.handlers}
}
14 changes: 7 additions & 7 deletions go/store/val/keyless_tuple.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ var keySuffix = [...]byte{1, 0}

var KeylessTupleDesc = &TupleDesc{
Types: []Type{{Enc: Hash128Enc, Nullable: false}},
cmp: keylessCompare{},
cmp: &keylessCompare{},
}

var KeylessCardType = Type{
Expand All @@ -77,28 +77,28 @@ var KeylessCardType = Type{

type keylessCompare struct{}

var _ TupleComparator = keylessCompare{}
var _ TupleComparator = &keylessCompare{}

// Compare implements TupleComparator
func (k keylessCompare) Compare(ctx context.Context, left, right Tuple, desc *TupleDesc) int {
func (k *keylessCompare) Compare(ctx context.Context, left, right Tuple, desc *TupleDesc) int {
return bytes.Compare(left, right)
}

// CompareValues implements TupleComparator
func (k keylessCompare) CompareValues(ctx context.Context, index int, left, right []byte, typ Type) int {
func (k *keylessCompare) CompareValues(ctx context.Context, index int, left, right []byte, typ Type) int {
return compare(typ, left, right)
}

// Prefix implements TupleComparator
func (k keylessCompare) Prefix(n int) TupleComparator {
func (k *keylessCompare) Prefix(n int) TupleComparator {
return k
}

// Suffix implements TupleComparator
func (k keylessCompare) Suffix(n int) TupleComparator {
func (k *keylessCompare) Suffix(n int) TupleComparator {
return k
}

func (k keylessCompare) Validated(types []Type) TupleComparator {
func (k *keylessCompare) Validated(types []Type) TupleComparator {
return k
}
20 changes: 11 additions & 9 deletions go/store/val/tuple_compare.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,19 +40,21 @@ type TupleComparator interface {

type DefaultTupleComparator struct{}

var _ TupleComparator = DefaultTupleComparator{}
var _ TupleComparator = &DefaultTupleComparator{}

// Compare implements TupleComparator
func (d DefaultTupleComparator) Compare(ctx context.Context, left, right Tuple, desc *TupleDesc) (cmp int) {
for i := range desc.fast {
start, stop := desc.fast[i][0], desc.fast[i][1]
func (d *DefaultTupleComparator) Compare(ctx context.Context, left, right Tuple, desc *TupleDesc) (cmp int) {
off := len(desc.fast)
var start, stop ByteSize
for i := 0; i < off; i++ {
stop = desc.fast[i]
cmp = compare(desc.Types[i], left[start:stop], right[start:stop])
if cmp != 0 {
return cmp
}
start = stop
}

off := len(desc.fast)
for i, typ := range desc.Types[off:] {
j := i + off
cmp = compare(typ, left.GetField(j), right.GetField(j))
Expand All @@ -64,22 +66,22 @@ func (d DefaultTupleComparator) Compare(ctx context.Context, left, right Tuple,
}

// CompareValues implements TupleComparator
func (d DefaultTupleComparator) CompareValues(ctx context.Context, index int, left, right []byte, typ Type) (cmp int) {
func (d *DefaultTupleComparator) CompareValues(ctx context.Context, index int, left, right []byte, typ Type) (cmp int) {
return compare(typ, left, right)
}

// Prefix implements TupleComparator
func (d DefaultTupleComparator) Prefix(n int) TupleComparator {
func (d *DefaultTupleComparator) Prefix(n int) TupleComparator {
return d
}

// Suffix implements TupleComparator
func (d DefaultTupleComparator) Suffix(n int) TupleComparator {
func (d *DefaultTupleComparator) Suffix(n int) TupleComparator {
return d
}

// Validated implements TupleComparator
func (d DefaultTupleComparator) Validated(types []Type) TupleComparator {
func (d *DefaultTupleComparator) Validated(types []Type) TupleComparator {
return d
}

Expand Down
26 changes: 17 additions & 9 deletions go/store/val/tuple_descriptor.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,12 +86,12 @@ func NewTupleDescriptorWithArgs(args TupleDescriptorArgs, types ...Type) (td *Tu
}
}
if args.Comparator == nil {
args.Comparator = DefaultTupleComparator{}
args.Comparator = &DefaultTupleComparator{}
}
args.Comparator = ExtendedTupleComparator{
args.Comparator = (&ExtendedTupleComparator{
innerCmp: args.Comparator,
handlers: args.Handlers,
}.Validated(types)
}).Validated(types)

td = &TupleDesc{
Types: types,
Expand Down Expand Up @@ -121,16 +121,15 @@ func IterAdaptiveFields(td *TupleDesc, cb func(int, Type)) {
}
}

type FixedAccess [][2]ByteSize
type FixedAccess []ByteSize

func makeFixedAccess(types []Type) (acc FixedAccess) {
if disableFixedAccess {
return nil
}

acc = make(FixedAccess, 0, len(types))

off := ByteSize(0)
acc = make(FixedAccess, 0, len(types))
for _, typ := range types {
if typ.Nullable {
break
Expand All @@ -139,9 +138,10 @@ func makeFixedAccess(types []Type) (acc FixedAccess) {
if !ok {
break
}
acc = append(acc, [2]ByteSize{off, off + sz})
off += sz
acc = append(acc, off)
}

return
}

Expand All @@ -167,7 +167,11 @@ func (td *TupleDesc) GetField(i int, tup Tuple) []byte {
if i >= cnt {
return nil
}
start, stop := td.fast[i][0], td.fast[i][1]
var start, stop ByteSize
if i != 0 {
start = td.fast[i-1]
}
stop = td.fast[i]
return tup[start:stop]
}
return tup.GetField(i)
Expand All @@ -182,7 +186,11 @@ func (td *TupleDesc) Compare(ctx context.Context, left, right Tuple) (cmp int) {
func (td *TupleDesc) CompareField(ctx context.Context, value []byte, i int, tup Tuple) (cmp int) {
var v []byte
if i < len(td.fast) {
start, stop := td.fast[i][0], td.fast[i][1]
var start, stop ByteSize
if i != 0 {
start = td.fast[i-1]
}
stop = td.fast[i]
v = tup[start:stop]
} else {
v = tup.GetField(i)
Expand Down
Loading