diff --git a/go/go.mod b/go/go.mod index 0526c8c839f..c5b1e44fe2e 100644 --- a/go/go.mod +++ b/go/go.mod @@ -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 diff --git a/go/go.sum b/go/go.sum index c6fdf5d8720..cbde9e4b8ce 100644 --- a/go/go.sum +++ b/go/go.sum @@ -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= diff --git a/go/libraries/doltcore/schema/collation_comparator.go b/go/libraries/doltcore/schema/collation_comparator.go index 590016be878..3ea31be2e97 100644 --- a/go/libraries/doltcore/schema/collation_comparator.go +++ b/go/libraries/doltcore/schema/collation_comparator.go @@ -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)) @@ -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) } } diff --git a/go/libraries/doltcore/sqle/resolve/resolve_tables.go b/go/libraries/doltcore/sqle/resolve/resolve_tables.go index 36dcfb74c02..37e5e85746f 100755 --- a/go/libraries/doltcore/sqle/resolve/resolve_tables.go +++ b/go/libraries/doltcore/sqle/resolve/resolve_tables.go @@ -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 } diff --git a/go/store/val/extended_comparator.go b/go/store/val/extended_comparator.go index 3c0fa291588..a1ff53e8af1 100644 --- a/go/store/val/extended_comparator.go +++ b/go/store/val/extended_comparator.go @@ -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) @@ -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) @@ -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) @@ -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} } diff --git a/go/store/val/keyless_tuple.go b/go/store/val/keyless_tuple.go index 0bdd9a93b89..e968b17bcf9 100644 --- a/go/store/val/keyless_tuple.go +++ b/go/store/val/keyless_tuple.go @@ -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{ @@ -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 } diff --git a/go/store/val/tuple_compare.go b/go/store/val/tuple_compare.go index 37745d16638..714dc7ba07e 100644 --- a/go/store/val/tuple_compare.go +++ b/go/store/val/tuple_compare.go @@ -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)) @@ -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 } diff --git a/go/store/val/tuple_descriptor.go b/go/store/val/tuple_descriptor.go index 6c0f4836ac0..9fa3c425bc8 100644 --- a/go/store/val/tuple_descriptor.go +++ b/go/store/val/tuple_descriptor.go @@ -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, @@ -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 @@ -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 } @@ -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) @@ -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)