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
125 changes: 105 additions & 20 deletions go/store/prolly/tree/prolly_fields.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (

"github.com/dolthub/go-mysql-server/sql"
"github.com/dolthub/go-mysql-server/sql/types"
querypb "github.com/dolthub/vitess/go/vt/proto/query"
"github.com/mohae/uvarint"
"github.com/shopspring/decimal"

Expand Down Expand Up @@ -175,20 +176,84 @@ func GetField(ctx context.Context, td *val.TupleDesc, i int, tup val.Tuple, ns N

// GetFieldValue reads the value from the ith field of the Tuple as a sql.Value
func GetFieldValue(ctx context.Context, td *val.TupleDesc, i int, tup val.Tuple, ns NodeStore) (v sql.Value, err error) {
enc := td.Types[i].Enc
v.Typ = val.EncToType[enc]
switch enc {
case val.Int8Enc, val.Int16Enc, val.Int32Enc, val.Int64Enc,
val.Uint8Enc, val.Uint16Enc, val.Uint32Enc, val.Uint64Enc,
val.Float32Enc, val.Float64Enc, val.DecimalEnc, val.Bit64Enc,
val.DateEnc, val.DatetimeEnc, val.TimeEnc,
val.EnumEnc, val.SetEnc,
val.JSONEnc, val.GeometryEnc,
val.Hash128Enc, val.CommitAddrEnc, val.CellEnc:
switch td.Types[i].Enc {
case val.Int8Enc:
v.Typ = querypb.Type_INT8
v.Val = td.GetField(i, tup)
return v, nil

case val.Int16Enc:
v.Typ = querypb.Type_INT16
v.Val = td.GetField(i, tup)
return v, nil

case val.Int32Enc:
v.Typ = querypb.Type_INT32
v.Val = td.GetField(i, tup)
return v, nil

case val.Int64Enc:
v.Typ = querypb.Type_INT64
v.Val = td.GetField(i, tup)
return v, nil

case val.Uint8Enc:
v.Typ = querypb.Type_UINT8
v.Val = td.GetField(i, tup)
return v, nil

case val.Uint16Enc:
v.Typ = querypb.Type_UINT16
v.Val = td.GetField(i, tup)
return v, nil

case val.Uint32Enc:
v.Typ = querypb.Type_UINT32
v.Val = td.GetField(i, tup)
return v, nil

case val.Uint64Enc:
v.Typ = querypb.Type_UINT64
v.Val = td.GetField(i, tup)
return v, nil

case val.Float32Enc:
v.Typ = querypb.Type_FLOAT32
v.Val = td.GetField(i, tup)
return v, nil

case val.Float64Enc:
v.Typ = querypb.Type_FLOAT64
v.Val = td.GetField(i, tup)
return v, nil

case val.DecimalEnc:
v.Typ = querypb.Type_DECIMAL
v.Val = td.GetField(i, tup)
return v, nil

case val.Bit64Enc:
v.Typ = querypb.Type_INT64
v.Val = td.GetField(i, tup)
return v, nil

case val.DateEnc:
v.Typ = querypb.Type_DATE
v.Val = td.GetField(i, tup)
return v, nil

case val.DatetimeEnc:
v.Typ = querypb.Type_DATETIME
v.Val = td.GetField(i, tup)
return v, nil

case val.TimeEnc:
v.Typ = querypb.Type_TIME
v.Val = td.GetField(i, tup)
return v, nil

case val.YearEnc:
v.Typ = querypb.Type_YEAR
year, ok := td.GetYear(i, tup)
if !ok {
return v, nil
Expand All @@ -197,7 +262,33 @@ func GetFieldValue(ctx context.Context, td *val.TupleDesc, i int, tup val.Tuple,
binary.LittleEndian.PutUint16(v.Val, uint16(year))
return v, nil

case val.EnumEnc:
v.Typ = querypb.Type_ENUM
v.Val = td.GetField(i, tup)
return v, nil

case val.SetEnc:
v.Typ = querypb.Type_SET
v.Val = td.GetField(i, tup)
return v, nil

case val.JSONEnc:
v.Typ = querypb.Type_JSON
v.Val = td.GetField(i, tup)
return v, nil

case val.GeometryEnc:
v.Typ = querypb.Type_GEOMETRY
v.Val = td.GetField(i, tup)
return v, nil

case val.Hash128Enc, val.CommitAddrEnc, val.CellEnc:
v.Typ = querypb.Type_BLOB
v.Val = td.GetField(i, tup)
return v, nil

case val.StringEnc, val.ByteStringEnc:
v.Typ = querypb.Type_TEXT
v.Val = td.GetField(i, tup)
if len(v.Val) == 0 {
return v, nil
Expand All @@ -206,16 +297,7 @@ func GetFieldValue(ctx context.Context, td *val.TupleDesc, i int, tup val.Tuple,
return v, nil

case val.GeomAddrEnc:
// TODO: until GeometryEnc is removed, we must check if GeomAddrEnc is a GeometryEnc
var ok bool
v.Val, ok = td.GetGeometry(i, tup)
if ok {
_, err = deserializeGeometry(v.Val) // TODO: on successful deserialize, this work is wasted
if err == nil {
return v, nil
}
}
// TODO: have GeometryAddr implement TextStorage
Comment on lines -209 to -218
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How long has GeometryEnc been removed? Is there a risk customers will still have databases that have this encoding and can't be read with this latest change?

v.Typ = querypb.Type_GEOMETRY
h, ok := td.GetGeometryAddr(i, tup)
if ok {
v.Val, err = ns.ReadBytes(ctx, h)
Expand All @@ -226,6 +308,7 @@ func GetFieldValue(ctx context.Context, td *val.TupleDesc, i int, tup val.Tuple,
return v, nil

case val.StringAddrEnc, val.BytesAddrEnc:
v.Typ = querypb.Type_BLOB
h, ok := td.GetAddr(i, tup)
if !ok {
return v, nil
Expand All @@ -234,6 +317,7 @@ func GetFieldValue(ctx context.Context, td *val.TupleDesc, i int, tup val.Tuple,
return v, nil

case val.JSONAddrEnc:
v.Typ = querypb.Type_BLOB
h, ok := td.GetAddr(i, tup)
if !ok {
return v, nil
Expand All @@ -245,6 +329,7 @@ func GetFieldValue(ctx context.Context, td *val.TupleDesc, i int, tup val.Tuple,
return v, nil

case val.BytesAdaptiveEnc, val.StringAdaptiveEnc:
v.Typ = querypb.Type_BLOB
b := td.GetField(i, tup)
// null value
if len(b) == 0 {
Expand Down
47 changes: 0 additions & 47 deletions go/store/val/codec.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ import (
"unsafe"

"github.com/dolthub/go-mysql-server/sql/types"
querypb "github.com/dolthub/vitess/go/vt/proto/query"
"github.com/shopspring/decimal"

"github.com/dolthub/dolt/go/gen/fb/serial"
Expand Down Expand Up @@ -106,52 +105,6 @@ const (
sentinel Encoding = 127
)

var EncToType = map[Encoding]querypb.Type{
NullEnc: querypb.Type_NULL_TYPE,
Int8Enc: querypb.Type_INT8,
Int16Enc: querypb.Type_INT16,
Int32Enc: querypb.Type_INT32,
Int64Enc: querypb.Type_INT64,
Uint32Enc: querypb.Type_UINT32,
Uint16Enc: querypb.Type_UINT16,
Uint8Enc: querypb.Type_UINT8,
Uint64Enc: querypb.Type_UINT64,

Float32Enc: querypb.Type_FLOAT32,
Float64Enc: querypb.Type_FLOAT64,
DecimalEnc: querypb.Type_DECIMAL,
Bit64Enc: querypb.Type_INT64,

DateEnc: querypb.Type_DATE,
DatetimeEnc: querypb.Type_DATETIME,
TimeEnc: querypb.Type_TIME,
YearEnc: querypb.Type_YEAR,

EnumEnc: querypb.Type_ENUM,
SetEnc: querypb.Type_SET,

Hash128Enc: querypb.Type_BLOB,
CommitAddrEnc: querypb.Type_BLOB,
CellEnc: querypb.Type_BLOB,

StringEnc: querypb.Type_TEXT,
ByteStringEnc: querypb.Type_TEXT,

JSONEnc: querypb.Type_JSON,
GeometryEnc: querypb.Type_GEOMETRY,
GeomAddrEnc: querypb.Type_GEOMETRY,

BytesAddrEnc: querypb.Type_BLOB,
StringAddrEnc: querypb.Type_BLOB,
BytesAdaptiveEnc: querypb.Type_BLOB,
StringAdaptiveEnc: querypb.Type_BLOB,
JSONAddrEnc: querypb.Type_BLOB,

ExtendedEnc: querypb.Type_BLOB,
ExtendedAddrEnc: querypb.Type_BLOB,
ExtendedAdaptiveEnc: querypb.Type_BLOB,
}

func IsAddrEncoding(enc Encoding) bool {
switch enc {
case BytesAddrEnc,
Expand Down
Loading