github.com/dolthub/dolt/go@v0.40.5-0.20240520175717-68db7794bea6/libraries/doltcore/schema/serial_encoding.go (about) 1 // Copyright 2022 Dolthub, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package schema 16 17 import ( 18 "fmt" 19 20 "github.com/dolthub/go-mysql-server/sql" 21 "github.com/dolthub/go-mysql-server/sql/types" 22 "github.com/dolthub/vitess/go/vt/proto/query" 23 24 "github.com/dolthub/dolt/go/gen/fb/serial" 25 ) 26 27 // EncodingFromSqlType returns a serial.Encoding for a sql.Type. 28 func EncodingFromSqlType(typ sql.Type) serial.Encoding { 29 if extendedType, ok := typ.(types.ExtendedType); ok { 30 switch extendedType.MaxSerializedWidth() { 31 case types.ExtendedTypeSerializedWidth_64K: 32 return serial.EncodingExtended 33 case types.ExtendedTypeSerializedWidth_Unbounded: 34 return serial.EncodingExtendedAddr 35 default: 36 panic(fmt.Errorf("unknown serialization width")) 37 } 38 } 39 return EncodingFromQueryType(typ.Type()) 40 } 41 42 // EncodingFromQueryType returns a serial.Encoding for a query.Type. 43 func EncodingFromQueryType(typ query.Type) serial.Encoding { 44 switch typ { 45 case query.Type_INT8: 46 return serial.EncodingInt8 47 case query.Type_UINT8: 48 return serial.EncodingUint8 49 case query.Type_INT16: 50 return serial.EncodingInt16 51 case query.Type_UINT16: 52 return serial.EncodingUint16 53 case query.Type_INT24: 54 return serial.EncodingInt32 55 case query.Type_UINT24: 56 return serial.EncodingUint32 57 case query.Type_INT32: 58 return serial.EncodingInt32 59 case query.Type_UINT32: 60 return serial.EncodingUint32 61 case query.Type_INT64: 62 return serial.EncodingInt64 63 case query.Type_UINT64: 64 return serial.EncodingUint64 65 case query.Type_FLOAT32: 66 return serial.EncodingFloat32 67 case query.Type_FLOAT64: 68 return serial.EncodingFloat64 69 case query.Type_BIT: 70 return serial.EncodingUint64 71 case query.Type_DECIMAL: 72 return serial.EncodingDecimal 73 case query.Type_YEAR: 74 return serial.EncodingYear 75 case query.Type_DATE: 76 return serial.EncodingDate 77 case query.Type_TIME: 78 return serial.EncodingTime 79 case query.Type_TIMESTAMP: 80 return serial.EncodingDatetime 81 case query.Type_DATETIME: 82 return serial.EncodingDatetime 83 case query.Type_ENUM: 84 return serial.EncodingEnum 85 case query.Type_SET: 86 return serial.EncodingSet 87 case query.Type_BINARY: 88 return serial.EncodingBytes 89 case query.Type_VARBINARY: 90 return serial.EncodingBytes 91 case query.Type_CHAR: 92 return serial.EncodingString 93 case query.Type_VARCHAR: 94 return serial.EncodingString 95 case query.Type_GEOMETRY: 96 return serial.EncodingGeomAddr 97 case query.Type_JSON: 98 return serial.EncodingJSONAddr 99 case query.Type_BLOB: 100 return serial.EncodingBytesAddr 101 case query.Type_TEXT: 102 return serial.EncodingStringAddr 103 default: 104 panic(fmt.Sprintf("unknown encoding %v", typ)) 105 } 106 }