From 03a05ba9939f061c4272eedd03c23056f77686ff Mon Sep 17 00:00:00 2001 From: Daylon Wilkins Date: Fri, 29 May 2026 04:24:47 -0700 Subject: [PATCH] Pass context through extended type deserialization --- go/go.mod | 2 +- go/go.sum | 4 ++-- .../doltcore/schema/encoding/serialization.go | 24 +++++++++++-------- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/go/go.mod b/go/go.mod index d7ebc074539..e89bf5537b7 100644 --- a/go/go.mod +++ b/go/go.mod @@ -64,7 +64,7 @@ require ( github.com/dolthub/dolt-mcp v0.3.4 github.com/dolthub/eventsapi_schema v0.0.0-20260310172945-37a9265ade69 github.com/dolthub/flatbuffers/v23 v23.3.3-dh.2 - github.com/dolthub/go-mysql-server v0.20.1-0.20260528221811-29886bb10b26 + github.com/dolthub/go-mysql-server v0.20.1-0.20260529111951-2d07778ba26b 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 d96f79d9d38..944e15ef7a2 100644 --- a/go/go.sum +++ b/go/go.sum @@ -214,8 +214,8 @@ github.com/dolthub/fslock v0.0.4 h1:p0FcUPu81bO53349qPT1im7XyGu3CwZDsB0PEVdFcaE= github.com/dolthub/fslock v0.0.4/go.mod h1:895XJNoMTlL5N1TjOJbd9Pnpjtv1DW/Ddw9qShcAYsM= github.com/dolthub/go-icu-regex v0.0.0-20260412212219-49724d547866 h1:U6gSf5I0e6h6GP1/5Sa7D2lWW1CWfcVPtY5wkyHq6jY= github.com/dolthub/go-icu-regex v0.0.0-20260412212219-49724d547866/go.mod h1:F3cnm+vMRK1HaU6+rNqQrOCyR03HHhR1GWG2gnPOqaE= -github.com/dolthub/go-mysql-server v0.20.1-0.20260528221811-29886bb10b26 h1:CFR0vFhNJO9Q5LyPulyQhmbiUzPYKxbFCKnR/fBkwT4= -github.com/dolthub/go-mysql-server v0.20.1-0.20260528221811-29886bb10b26/go.mod h1:UTL4UvG/y8PMBcI8I60gf0DH4YPBALW/8UQCcvft95Y= +github.com/dolthub/go-mysql-server v0.20.1-0.20260529111951-2d07778ba26b h1:vN5Ts+H0aTjb4l7VLc0xsoh1x0XnnKzfARBS3Cl1W+g= +github.com/dolthub/go-mysql-server v0.20.1-0.20260529111951-2d07778ba26b/go.mod h1:UTL4UvG/y8PMBcI8I60gf0DH4YPBALW/8UQCcvft95Y= 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-20260414231531-5f031e3e9037 h1:oIW9HwuWrhxv+4HZxA+QQSKHLqWFyXZ2FmNjUYwkdiM= diff --git a/go/libraries/doltcore/schema/encoding/serialization.go b/go/libraries/doltcore/schema/encoding/serialization.go index 8d6809feafc..ca358397267 100644 --- a/go/libraries/doltcore/schema/encoding/serialization.go +++ b/go/libraries/doltcore/schema/encoding/serialization.go @@ -40,7 +40,7 @@ const ( // SerializeSchema serializes a schema.Schema as a Flatbuffer message wrapped in a serial.Message. func SerializeSchema(ctx context.Context, vrw types.ValueReadWriter, sch schema.Schema) (types.SerialMessage, error) { - buf, err := serializeSchemaAsFlatbuffer(sch) + buf, err := serializeSchemaAsFlatbuffer(ctx, sch) if err != nil { return nil, err } @@ -52,9 +52,9 @@ func SerializeSchema(ctx context.Context, vrw types.ValueReadWriter, sch schema. return v, nil } -func serializeSchemaAsFlatbuffer(sch schema.Schema) ([]byte, error) { +func serializeSchemaAsFlatbuffer(ctx context.Context, sch schema.Schema) ([]byte, error) { b := fb.NewBuilder(1024) - columns := serializeSchemaColumns(b, sch) + columns := serializeSchemaColumns(ctx, b, sch) rows := serializeClusteredIndex(b, sch) indexes := serializeSecondaryIndexes(b, sch, sch.Indexes().AllIndexes()) checks := serializeChecks(b, sch.Checks().AllChecks()) @@ -219,7 +219,7 @@ func deserializeClusteredIndex(s *serial.TableSchema) ([]int, error) { return pkOrdinals, nil } -func serializeSchemaColumns(b *fb.Builder, sch schema.Schema) fb.UOffsetT { +func serializeSchemaColumns(ctx context.Context, b *fb.Builder, sch schema.Schema) fb.UOffsetT { cols := sch.GetAllCols().GetColumns() offs := make([]fb.UOffsetT, len(cols)) @@ -253,7 +253,7 @@ func serializeSchemaColumns(b *fb.Builder, sch schema.Schema) fb.UOffsetT { do := b.CreateString(defVal) ou := b.CreateString(onUpdateVal) - typeString := sqlTypeString(col.TypeInfo) + typeString := sqlTypeString(ctx, col.TypeInfo) to := b.CreateString(typeString) no := b.CreateString(col.Name) @@ -372,7 +372,7 @@ func deserializeColumns(ctx context.Context, s *serial.TableSchema) ([]schema.Co if err != nil { return nil, err } - sqlType, err := typeinfoFromSqlType(string(c.SqlType())) + sqlType, err := typeinfoFromSqlType(ctx, string(c.SqlType())) if err != nil { return nil, err } @@ -710,7 +710,7 @@ func keylessSerialSchema(s *serial.TableSchema) (bool, error) { string(card.Name()) == keylessCardCol, nil } -func sqlTypeString(t typeinfo.TypeInfo) string { +func sqlTypeString(ctx context.Context, t typeinfo.TypeInfo) string { typ := t.ToSqlType() if st, ok := typ.(sql.SpatialColumnType); ok { // for spatial types, we must append the SRID @@ -731,7 +731,11 @@ func sqlTypeString(t typeinfo.TypeInfo) string { // Extended types are string serializable, so we'll just prepend a tag if extendedType, ok := typ.(sql.ExtendedType); ok { - serializedType, err := sqltypes.SerializeTypeToString(extendedType) + sqlCtx, ok := ctx.(*sql.Context) + if !ok { + panic("SQL context needed for extended type deserialization") + } + serializedType, err := sqltypes.SerializeTypeToString(sqlCtx, extendedType) if err != nil { panic(err) } @@ -741,8 +745,8 @@ func sqlTypeString(t typeinfo.TypeInfo) string { return typ.String() } -func typeinfoFromSqlType(s string) (typeinfo.TypeInfo, error) { - sqlType, err := planbuilder.ParseColumnTypeString(s) +func typeinfoFromSqlType(ctx context.Context, s string) (typeinfo.TypeInfo, error) { + sqlType, err := planbuilder.ParseColumnTypeString(ctx, s) if err != nil { return nil, err }