Documentation ¶
Overview ¶
Package sqltypes implements interfaces and types that represent SQL values.
Index ¶
- Constants
- Variables
- func AreTypesEquivalent(mysqlTypeFromBinlog, mysqlTypeFromSchema querypb.Type) bool
- func BindVariablesEqual(x, y map[string]*querypb.BindVariable) bool
- func BitNumBindVariable(v []byte) *querypb.BindVariable
- func BoolBindVariable(v bool) *querypb.BindVariable
- func BufDecodeStringSQL(buf *strings.Builder, val string) error
- func BufEncodeStringSQL(buf *strings.Builder, val string)
- func BuildBindVariable(v any) (*querypb.BindVariable, error)
- func BuildBindVariables(in map[string]any) (map[string]*querypb.BindVariable, error)
- func BytesBindVariable(v []byte) *querypb.BindVariable
- func CopyBindVariables(bindVariables map[string]*querypb.BindVariable) map[string]*querypb.BindVariable
- func DecimalBindVariable(v DecimalString) *querypb.BindVariable
- func DecodeStringSQL(val string) (string, error)
- func EncodeStringSQL(val string) string
- func EventTokenMinimum(ev1, ev2 *querypb.EventToken) *querypb.EventToken
- func FieldsEqual(f1, f2 []*querypb.Field) bool
- func Float64BindVariable(v float64) *querypb.BindVariable
- func FormatBindVariables(bindVariables map[string]*querypb.BindVariable, full, asJSON bool) string
- func HexNumBindVariable(v []byte) *querypb.BindVariable
- func HexValBindVariable(v []byte) *querypb.BindVariable
- func IncludeFieldsOrDefault(options *querypb.ExecuteOptions) querypb.ExecuteOptions_IncludedFields
- func Int32BindVariable(v int32) *querypb.BindVariable
- func Int64BindVariable(v int64) *querypb.BindVariable
- func Int8BindVariable(v int8) *querypb.BindVariable
- func IsBinary(t querypb.Type) bool
- func IsDate(t querypb.Type) bool
- func IsDateOrTime(t querypb.Type) bool
- func IsDecimal(t querypb.Type) bool
- func IsEnum(t querypb.Type) bool
- func IsFloat(t querypb.Type) bool
- func IsIntegral(t querypb.Type) bool
- func IsNull(t querypb.Type) bool
- func IsNumber(t querypb.Type) bool
- func IsQuoted(t querypb.Type) bool
- func IsSet(t querypb.Type) bool
- func IsSigned(t querypb.Type) bool
- func IsText(t querypb.Type) bool
- func IsTextOrBinary(t querypb.Type) bool
- func IsUnsigned(t querypb.Type) bool
- func MakeTestFields(names, types string) []*querypb.Field
- func MySQLToType(mysqlType byte, flags int64) (typ querypb.Type, err error)
- func PrintResults(results []*Result) string
- func Proto3QueryResponsesEqual(r1, r2 []*querypb.ResultWithError) bool
- func Proto3ResultsEqual(r1, r2 []*querypb.QueryResult) bool
- func Proto3ValuesEqual(v1, v2 []*querypb.Value) bool
- func QueryResponsesEqual(r1, r2 []QueryResponse) bool
- func QueryResponsesToProto3(qr []QueryResponse) []*querypb.ResultWithError
- func ResultToProto3(qr *Result) *querypb.QueryResult
- func ResultsEqual(r1, r2 []Result) bool
- func ResultsEqualUnordered(r1, r2 []Result) bool
- func ResultsToProto3(qr []Result) []*querypb.QueryResult
- func RowEqual(want, got Row) bool
- func RowToProto3(row []Value) *querypb.Row
- func RowToProto3Inplace(row []Value, result *querypb.Row) int
- func RowsEquals(want, got []Row) error
- func RowsEqualsStr(wantStr string, got []Row) error
- func RowsToProto3(rows [][]Value) []*querypb.Row
- func StringBindVariable(v string) *querypb.BindVariable
- func TestBindVariable(v any) *querypb.BindVariable
- func TestRandomValues() (Value, Value)
- func TupleToProto(v []Value) *querypb.Value
- func TypeToMySQL(typ querypb.Type) (mysqlType byte, flags int64)
- func Uint32BindVariable(v uint32) *querypb.BindVariable
- func Uint64BindVariable(v uint64) *querypb.BindVariable
- func ValidateBindVariable(bv *querypb.BindVariable) error
- func ValidateBindVariables(bv map[string]*querypb.BindVariable) error
- func ValueBindVariable(v Value) *querypb.BindVariable
- func ValueToProto(v Value) *querypb.Value
- type BinWriter
- type DecimalString
- type NamedResult
- type QueryResponse
- type RandomGenerator
- type Result
- func CustomProto3ToResult(fields []*querypb.Field, qr *querypb.QueryResult) *Result
- func MakeTestResult(fields []*querypb.Field, rows ...string) *Result
- func MakeTestStreamingResults(fields []*querypb.Field, rows ...string) []*Result
- func MarshalResult(v any) (*Result, error)
- func Proto3ToResult(qr *querypb.QueryResult) *Result
- func Proto3ToResults(qr []*querypb.QueryResult) []Result
- func ReplaceFields(result *Result, remap map[string]string) *Result
- func (result *Result) AppendResult(src *Result)
- func (cached *Result) CachedSize(alloc bool) int64
- func (result *Result) Copy() *Result
- func (result *Result) Equal(other *Result) bool
- func (result *Result) IsInTransaction() bool
- func (result *Result) IsMoreResultsExists() bool
- func (result *Result) Metadata() *Result
- func (result *Result) Named() *NamedResult
- func (result *Result) Repair(fields []*querypb.Field)
- func (result *Result) ReplaceKeyspace(keyspace string)
- func (result *Result) ShallowCopy() *Result
- func (result *Result) StripMetadata(incl querypb.ExecuteOptions_IncludedFields) *Result
- func (result *Result) Truncate(l int) *Result
- type ResultMarshaller
- type ResultStream
- type Row
- type RowMismatchError
- type RowNamedValues
- func (r RowNamedValues) AsBool(fieldName string, def bool) bool
- func (r RowNamedValues) AsBytes(fieldName string, def []byte) []byte
- func (r RowNamedValues) AsFloat64(fieldName string, def float64) float64
- func (r RowNamedValues) AsInt32(fieldName string, def int32) int32
- func (r RowNamedValues) AsInt64(fieldName string, def int64) int64
- func (r RowNamedValues) AsString(fieldName string, def string) string
- func (r RowNamedValues) AsUint64(fieldName string, def uint64) uint64
- func (r RowNamedValues) ToBool(fieldName string) (bool, error)
- func (r RowNamedValues) ToBytes(fieldName string) ([]byte, error)
- func (r RowNamedValues) ToFloat64(fieldName string) (float64, error)
- func (r RowNamedValues) ToInt(fieldName string) (int, error)
- func (r RowNamedValues) ToInt32(fieldName string) (int32, error)
- func (r RowNamedValues) ToInt64(fieldName string) (int64, error)
- func (r RowNamedValues) ToString(fieldName string) (string, error)
- func (r RowNamedValues) ToUint64(fieldName string) (uint64, error)
- type Type
- type Value
- func BindVariableToValue(bv *querypb.BindVariable) (Value, error)
- func Cast(v Value, typ Type) (Value, error)
- func CopyRow(r []Value) []Value
- func InterfaceToValue(goval any) (Value, error)
- func MakeRowTrusted(fields []*querypb.Field, row *querypb.Row) []Value
- func MakeTrusted(typ querypb.Type, val []byte) Value
- func NewBitNum(v []byte) Value
- func NewBoolean(v bool) Value
- func NewDate(v string) Value
- func NewDatetime(v string) Value
- func NewDecimal(v string) Value
- func NewFloat32(v float32) Value
- func NewFloat64(v float64) Value
- func NewHexNum(v []byte) Value
- func NewHexVal(v []byte) Value
- func NewInt16(v int16) Value
- func NewInt32(v int32) Value
- func NewInt64(v int64) Value
- func NewInt8(v int8) Value
- func NewIntegral(val string) (n Value, err error)
- func NewJSON(v string) (Value, error)
- func NewTime(v string) Value
- func NewTimestamp(v string) Value
- func NewUint16(v uint16) Value
- func NewUint32(v uint32) Value
- func NewUint64(v uint64) Value
- func NewUint8(v uint8) Value
- func NewValue(typ querypb.Type, val []byte) (v Value, err error)
- func NewVarBinary(v string) Value
- func NewVarChar(v string) Value
- func ProtoToValue(v *querypb.Value) Value
- func TestTuple(vals ...Value) Value
- func TestValue(typ querypb.Type, val string) Value
- func (cached *Value) CachedSize(alloc bool) int64
- func (v Value) EncodeASCII(b BinWriter)
- func (v Value) EncodeSQL(b BinWriter)
- func (v Value) EncodeSQLBytes2(b *bytes2.Buffer)
- func (v Value) EncodeSQLStringBuilder(b *strings.Builder)
- func (v Value) Equal(other Value) bool
- func (v *Value) ForEachValue(each func(bv Value)) error
- func (v Value) IsBinary() bool
- func (v *Value) IsComparable() bool
- func (v Value) IsDate() bool
- func (v Value) IsDateTime() bool
- func (v Value) IsDecimal() bool
- func (v Value) IsEnum() bool
- func (v Value) IsFloat() bool
- func (v Value) IsIntegral() bool
- func (v Value) IsNull() bool
- func (v Value) IsQuoted() bool
- func (v Value) IsSet() bool
- func (v Value) IsSigned() bool
- func (v Value) IsText() bool
- func (v Value) IsTime() bool
- func (v Value) IsTimestamp() bool
- func (v Value) IsUnsigned() bool
- func (v Value) Len() int
- func (v Value) MarshalJSON() ([]byte, error)
- func (v Value) Raw() []byte
- func (v Value) RawStr() string
- func (v *Value) SetTinyWeight(w uint32)
- func (v Value) String() string
- func (v Value) TinyWeight() uint32
- func (v Value) TinyWeightCmp(other Value) int
- func (v Value) ToBool() (bool, error)
- func (v Value) ToBytes() ([]byte, error)
- func (v Value) ToCastInt64() (int64, error)
- func (v Value) ToCastUint64() (uint64, error)
- func (v Value) ToFloat64() (float64, error)
- func (v Value) ToInt() (int, error)
- func (v Value) ToInt32() (int32, error)
- func (v Value) ToInt64() (int64, error)
- func (v Value) ToString() string
- func (v Value) ToUint16() (uint16, error)
- func (v Value) ToUint32() (uint32, error)
- func (v Value) ToUint64() (uint64, error)
- func (v Value) Type() querypb.Type
- func (v *Value) UnmarshalJSON(b []byte) error
- type ValueMarshaller
Constants ¶
const ( ServerStatusInTrans = 0x0001 ServerStatusAutocommit = 0x0002 ServerMoreResultsExists = 0x0008 ServerStatusNoGoodIndexUsed = 0x0010 ServerStatusNoIndexUsed = 0x0020 ServerStatusCursorExists = 0x0040 ServerStatusLastRowSent = 0x0080 ServerStatusDbDropped = 0x0100 ServerStatusNoBackslashEscapes = 0x0200 ServerStatusMetadataChanged = 0x0400 ServerQueryWasSlow = 0x0800 ServerPsOutParams = 0x1000 ServerStatusInTransReadonly = 0x2000 ServerSessionStateChanged = 0x4000 )
const ( TimestampFormat = "2006-01-02 15:04:05" TimestampFormatPrecision3 = "2006-01-02 15:04:05.000" TimestampFormatPrecision6 = "2006-01-02 15:04:05.000000" )
const ( Unknown = querypb.Type(-1) Null = querypb.Type_NULL_TYPE Int8 = querypb.Type_INT8 Uint8 = querypb.Type_UINT8 Int16 = querypb.Type_INT16 Uint16 = querypb.Type_UINT16 Int24 = querypb.Type_INT24 Uint24 = querypb.Type_UINT24 Int32 = querypb.Type_INT32 Uint32 = querypb.Type_UINT32 Int64 = querypb.Type_INT64 Uint64 = querypb.Type_UINT64 Float32 = querypb.Type_FLOAT32 Float64 = querypb.Type_FLOAT64 Timestamp = querypb.Type_TIMESTAMP Date = querypb.Type_DATE Time = querypb.Type_TIME Datetime = querypb.Type_DATETIME Year = querypb.Type_YEAR Decimal = querypb.Type_DECIMAL Text = querypb.Type_TEXT Blob = querypb.Type_BLOB VarChar = querypb.Type_VARCHAR VarBinary = querypb.Type_VARBINARY Char = querypb.Type_CHAR Binary = querypb.Type_BINARY Bit = querypb.Type_BIT Enum = querypb.Type_ENUM Set = querypb.Type_SET Geometry = querypb.Type_GEOMETRY TypeJSON = querypb.Type_JSON Expression = querypb.Type_EXPRESSION HexNum = querypb.Type_HEXNUM HexVal = querypb.Type_HEXVAL Tuple = querypb.Type_TUPLE BitNum = querypb.Type_BITNUM )
Vitess data types. These are idiomatically named synonyms for the querypb.Type values. Although these constants are interchangeable, they should be treated as different from querypb.Type. Use the synonyms only to refer to the type in Value. For proto variables, use the querypb.Type constants instead. The following is a complete listing of types that match each classification function in this API:
IsSigned(): INT8, INT16, INT24, INT32, INT64 IsFloat(): FLOAT32, FLOAT64 IsUnsigned(): UINT8, UINT16, UINT24, UINT32, UINT64, YEAR IsIntegral(): INT8, UINT8, INT16, UINT16, INT24, UINT24, INT32, UINT32, INT64, UINT64, YEAR IsText(): TEXT, VARCHAR, CHAR, HEXNUM, HEXVAL, BITNUM IsNumber(): INT8, UINT8, INT16, UINT16, INT24, UINT24, INT32, UINT32, INT64, UINT64, FLOAT32, FLOAT64, YEAR, DECIMAL IsQuoted(): TIMESTAMP, DATE, TIME, DATETIME, TEXT, BLOB, VARCHAR, VARBINARY, CHAR, BINARY, ENUM, SET, GEOMETRY, JSON IsBinary(): BLOB, VARBINARY, BINARY IsDate(): TIMESTAMP, DATE, TIME, DATETIME IsNull(): NULL_TYPE
TODO(sougou): provide a categorization function that returns enums, which will allow for cleaner switch statements for those who want to cover types by their category.
Variables ¶
var ( // BvSchemaName is bind variable to be sent down to vttablet for schema name. BvSchemaName = "__vtschemaname" // BvReplaceSchemaName is bind variable to be sent down to vttablet to replace schema name. BvReplaceSchemaName = "__replacevtschemaname" // NullBindVariable is a bindvar with NULL value. NullBindVariable = &querypb.BindVariable{Type: querypb.Type_NULL_TYPE} )
var ( // NULL represents the NULL value. NULL = Value{} // DontEscape tells you if a character should not be escaped. DontEscape = byte(255) NullStr = "null" NullBytes = []byte(NullStr) // ErrIncompatibleTypeCast indicates a casting problem ErrIncompatibleTypeCast = errors.New("Cannot convert value to desired type") ErrInvalidEncodedString = errors.New("invalid SQL encoded string") )
var ErrBadTupleEncoding = errors.New("bad tuple encoding in sqltypes.Value")
var ( // ErrNoSuchField indicates a search for a value by an unknown field/column name ErrNoSuchField = errors.New("No such field in RowNamedValues") )
var RandomGenerators = map[Type]RandomGenerator{ Null: func() Value { return NULL }, Int8: func() Value { return NewInt8(int8(rand.IntN(255))) }, Int32: func() Value { return NewInt32(rand.Int32()) }, Int64: func() Value { return NewInt64(rand.Int64()) }, Uint32: func() Value { return NewUint32(rand.Uint32()) }, Uint64: func() Value { return NewUint64(rand.Uint64()) }, Float64: func() Value { return NewFloat64(rand.ExpFloat64()) }, Decimal: func() Value { dec := fmt.Sprintf("%d.%d", rand.IntN(999999999), rand.IntN(999999999)) if rand.Int()&0x1 == 1 { dec = "-" + dec } return NewDecimal(dec) }, VarChar: func() Value { return NewVarChar(base64.StdEncoding.EncodeToString(randomBytes())) }, VarBinary: func() Value { return NewVarBinary(string(randomBytes())) }, Date: func() Value { return NewDate(randTime().Format(time.DateOnly)) }, Datetime: func() Value { return NewDatetime(randTime().Format(time.DateTime)) }, Timestamp: func() Value { return NewTimestamp(randTime().Format(time.DateTime)) }, Time: func() Value { return NewTime(randTime().Format(time.TimeOnly)) }, TypeJSON: func() Value { var j string switch rand.IntN(6) { case 0: j = "null" case 1: i := rand.Int64() if rand.Int()&0x1 == 1 { i = -i } j = strconv.FormatInt(i, 10) case 2: j = strconv.FormatFloat(rand.NormFloat64(), 'g', -1, 64) case 3: j = strconv.Quote(hex.EncodeToString(randomBytes())) case 4: j = "true" case 5: j = "false" } v, err := NewJSON(j) if err != nil { panic(err) } return v }, Enum: func() Value { return MakeTrusted(Enum, randEnum()) }, Set: func() Value { return MakeTrusted(Set, randSet()) }, }
var SQLDecodeMap [256]byte
SQLDecodeMap is the reverse of SQLEncodeMap
var SQLEncodeMap [256]byte
SQLEncodeMap specifies how to escape binary data with '\'. Complies to https://dev.mysql.com/doc/refman/5.7/en/string-literals.html Handling escaping of % and _ is different than other characters. When escaped in a like clause, they are supposed to be treated as literals Everywhere else, they evaluate to strings '\%' and '\_' respectively. In Vitess, the way we are choosing to handle this behaviour is to always preserve the escaping of % and _ as is in all the places and handle it like MySQL in our evaluation engine for Like.
Functions ¶
func AreTypesEquivalent ¶
AreTypesEquivalent returns whether two types are equivalent.
func BindVariablesEqual ¶
func BindVariablesEqual(x, y map[string]*querypb.BindVariable) bool
BindVariablesEqual compares two maps of bind variables. For protobuf messages we have to use "proto.Equal".
func BitNumBindVariable ¶ added in v0.15.0
func BitNumBindVariable(v []byte) *querypb.BindVariable
BitNumBindVariable converts bytes representing a bit encoded string to a bind var.
func BoolBindVariable ¶ added in v0.8.0
func BoolBindVariable(v bool) *querypb.BindVariable
BoolBindVariable converts an bool to a int64 bind var.
func BufDecodeStringSQL ¶ added in v0.20.0
BufDecodeStringSQL decodes the string into a strings.Builder
func BufEncodeStringSQL ¶ added in v0.10.0
BufEncodeStringSQL encodes the string into a strings.Builder
func BuildBindVariable ¶
func BuildBindVariable(v any) (*querypb.BindVariable, error)
BuildBindVariable builds a *querypb.BindVariable from a valid input type.
func BuildBindVariables ¶
BuildBindVariables builds a map[string]*querypb.BindVariable from a map[string]any
func BytesBindVariable ¶
func BytesBindVariable(v []byte) *querypb.BindVariable
BytesBindVariable converts a []byte to a bind var.
func CopyBindVariables ¶
func CopyBindVariables(bindVariables map[string]*querypb.BindVariable) map[string]*querypb.BindVariable
CopyBindVariables returns a shallow-copy of the given bindVariables map.
func DecimalBindVariable ¶ added in v0.13.0
func DecimalBindVariable(v DecimalString) *querypb.BindVariable
func DecodeStringSQL ¶ added in v0.20.0
DecodeStringSQL encodes the string as a SQL string.
func EncodeStringSQL ¶ added in v0.10.0
EncodeStringSQL encodes the string as a SQL string.
func EventTokenMinimum ¶
func EventTokenMinimum(ev1, ev2 *querypb.EventToken) *querypb.EventToken
EventTokenMinimum returns an event token that is guaranteed to happen before both provided EventToken objects. Note it doesn't parse the position, but rather only uses the timestamp. This is meant to be used for EventToken objects coming from different source shard.
func FieldsEqual ¶
FieldsEqual compares two arrays of fields. reflect.DeepEqual shouldn't be used because of the protos.
func Float64BindVariable ¶
func Float64BindVariable(v float64) *querypb.BindVariable
Float64BindVariable converts a float64 to a bind var.
func FormatBindVariables ¶
func FormatBindVariables(bindVariables map[string]*querypb.BindVariable, full, asJSON bool) string
FormatBindVariables returns a string representation of the bind variables.
If full is false, then large string or tuple values are truncated to only print the lengths.
If asJson is true, then the resulting string is a valid JSON representation, otherwise it is the golang printed map representation.
func HexNumBindVariable ¶ added in v0.12.1
func HexNumBindVariable(v []byte) *querypb.BindVariable
HexNumBindVariable converts bytes representing a hex number to a bind var.
func HexValBindVariable ¶ added in v0.12.1
func HexValBindVariable(v []byte) *querypb.BindVariable
HexValBindVariable converts bytes representing a hex encoded string to a bind var.
func IncludeFieldsOrDefault ¶
func IncludeFieldsOrDefault(options *querypb.ExecuteOptions) querypb.ExecuteOptions_IncludedFields
IncludeFieldsOrDefault normalizes the passed Execution Options. It returns the default value if options is nil.
func Int32BindVariable ¶
func Int32BindVariable(v int32) *querypb.BindVariable
Int32BindVariable converts an int32 to a bind var.
func Int64BindVariable ¶
func Int64BindVariable(v int64) *querypb.BindVariable
Int64BindVariable converts an int64 to a bind var.
func Int8BindVariable ¶
func Int8BindVariable(v int8) *querypb.BindVariable
Int8BindVariable converts an int8 to a bind var.
func IsBinary ¶
IsBinary returns true if querypb.Type is a binary. If you have a Value object, use its member function.
func IsDateOrTime ¶ added in v0.17.0
IsDateOrTime returns true if the type represents a date and/or time.
func IsDecimal ¶ added in v0.17.0
IsDecimal returns true is querypb.Type is a decimal. If you have a Value object, use its member function.
func IsFloat ¶
IsFloat returns true is querypb.Type is a floating point. If you have a Value object, use its member function.
func IsIntegral ¶
IsIntegral returns true if querypb.Type is an integral (signed/unsigned) that can be represented using up to 64 binary bits. If you have a Value object, use its member function.
func IsQuoted ¶
IsQuoted returns true if querypb.Type is a quoted text or binary. If you have a Value object, use its member function.
func IsSigned ¶
IsSigned returns true if querypb.Type is a signed integral. If you have a Value object, use its member function.
func IsText ¶
IsText returns true if querypb.Type is a text. If you have a Value object, use its member function.
func IsTextOrBinary ¶ added in v0.19.0
func IsUnsigned ¶
IsUnsigned returns true if querypb.Type is an unsigned integral. Caution: this is not the same as !IsSigned. If you have a Value object, use its member function.
func MakeTestFields ¶
MakeTestFields builds a []*querypb.Field for testing.
fields := sqltypes.MakeTestFields( "a|b", "int64|varchar", )
The field types are as defined in querypb and are case insensitive. Column delimiters must be used only to sepearate strings and not at the beginning or the end.
func MySQLToType ¶
MySQLToType computes the vitess type from mysql type and flags.
func PrintResults ¶
PrintResults prints []*Results into a string. This function should only be used for testing.
func Proto3QueryResponsesEqual ¶
func Proto3QueryResponsesEqual(r1, r2 []*querypb.ResultWithError) bool
Proto3QueryResponsesEqual compares two arrays of proto3 QueryResponse. reflect.DeepEqual shouldn't be used because of the protos.
func Proto3ResultsEqual ¶
func Proto3ResultsEqual(r1, r2 []*querypb.QueryResult) bool
Proto3ResultsEqual compares two arrays of proto3 Result. reflect.DeepEqual shouldn't be used because of the protos.
func Proto3ValuesEqual ¶
Proto3ValuesEqual compares two arrays of proto3 Value.
func QueryResponsesEqual ¶
func QueryResponsesEqual(r1, r2 []QueryResponse) bool
QueryResponsesEqual compares two arrays of QueryResponse. They contain protos, so we cannot use reflect.DeepEqual.
func QueryResponsesToProto3 ¶
func QueryResponsesToProto3(qr []QueryResponse) []*querypb.ResultWithError
QueryResponsesToProto3 converts []QueryResponse to proto3.
func ResultToProto3 ¶
func ResultToProto3(qr *Result) *querypb.QueryResult
ResultToProto3 converts Result to proto3.
func ResultsEqual ¶
ResultsEqual compares two arrays of Result. reflect.DeepEqual shouldn't be used because of the protos.
func ResultsEqualUnordered ¶ added in v0.12.0
ResultsEqualUnordered compares two unordered arrays of Result.
func ResultsToProto3 ¶
func ResultsToProto3(qr []Result) []*querypb.QueryResult
ResultsToProto3 converts []Result to proto3.
func RowToProto3 ¶
RowToProto3 converts []Value to proto3.
func RowToProto3Inplace ¶ added in v0.11.0
RowToProto3Inplace converts []Value to proto3 and stores the conversion in the provided Row
func RowsEquals ¶ added in v0.16.7
func RowsEqualsStr ¶ added in v0.16.7
func RowsToProto3 ¶
RowsToProto3 converts [][]Value to proto3.
func StringBindVariable ¶
func StringBindVariable(v string) *querypb.BindVariable
StringBindVariable converts a string to a bind var.
func TestBindVariable ¶
func TestBindVariable(v any) *querypb.BindVariable
TestBindVariable makes a *querypb.BindVariable from any. It panics on invalid input. This function should only be used for testing.
func TestRandomValues ¶ added in v0.18.0
func TupleToProto ¶ added in v0.18.0
func TypeToMySQL ¶
TypeToMySQL returns the equivalent mysql type and flag for a vitess type.
func Uint32BindVariable ¶ added in v0.14.0
func Uint32BindVariable(v uint32) *querypb.BindVariable
Uint32BindVariable converts a uint32 to a bind var.
func Uint64BindVariable ¶
func Uint64BindVariable(v uint64) *querypb.BindVariable
Uint64BindVariable converts a uint64 to a bind var.
func ValidateBindVariable ¶
func ValidateBindVariable(bv *querypb.BindVariable) error
ValidateBindVariable returns an error if the bind variable has inconsistent fields.
func ValidateBindVariables ¶
func ValidateBindVariables(bv map[string]*querypb.BindVariable) error
ValidateBindVariables validates a map[string]*querypb.BindVariable.
func ValueBindVariable ¶
func ValueBindVariable(v Value) *querypb.BindVariable
ValueBindVariable converts a Value to a bind var.
func ValueToProto ¶
ValueToProto converts Value to a *querypb.Value.
Types ¶
type BinWriter ¶
BinWriter interface is used for encoding values. Types like bytes.Buffer conform to this interface. We expect the writer objects to be in-memory buffers. So, we don't expect the write operations to fail.
type DecimalString ¶ added in v0.17.0
type DecimalString string
type NamedResult ¶ added in v0.8.0
type NamedResult struct { Fields []*querypb.Field `json:"fields"` RowsAffected uint64 `json:"rows_affected"` InsertID uint64 `json:"insert_id"` Rows []RowNamedValues `json:"rows"` }
NamedResult represents a query result with named values as opposed to ordinal values.
func ToNamedResult ¶ added in v0.8.0
func ToNamedResult(result *Result) (r *NamedResult)
ToNamedResult converts a Result struct into a new NamedResult struct
func (*NamedResult) Row ¶ added in v0.8.0
func (r *NamedResult) Row() RowNamedValues
Row assumes this result has exactly one row, and returns it, or else returns nil. It is useful for queries like: - select count(*) from ... - select @@read_only - select UNIX_TIMESTAMP() from dual
type QueryResponse ¶
QueryResponse represents a query response for ExecuteBatch.
func Proto3ToQueryReponses ¶
func Proto3ToQueryReponses(qr []*querypb.ResultWithError) []QueryResponse
Proto3ToQueryReponses converts proto3 queryResponse to []QueryResponse.
type RandomGenerator ¶ added in v0.18.0
type RandomGenerator func() Value
type Result ¶
type Result struct { Fields []*querypb.Field `json:"fields"` RowsAffected uint64 `json:"rows_affected"` InsertID uint64 `json:"insert_id"` Rows []Row `json:"rows"` SessionStateChanges string `json:"session_state_changes"` StatusFlags uint16 `json:"status_flags"` Info string `json:"info"` }
Result represents a query result.
func CustomProto3ToResult ¶
func CustomProto3ToResult(fields []*querypb.Field, qr *querypb.QueryResult) *Result
CustomProto3ToResult converts a proto3 Result to an internal data structure. This function takes a separate fields input because not all QueryResults contain the field info. In particular, only the first packet of streaming queries contain the field info.
func MakeTestResult ¶
MakeTestResult builds a *sqltypes.Result object for testing.
result := sqltypes.MakeTestResult( fields, " 1|a", "10|abcd", )
The field type values are set as the types for the rows built. Spaces are trimmed from row values. "null" is treated as NULL.
func MakeTestStreamingResults ¶
MakeTestStreamingResults builds a list of results for streaming.
results := sqltypes.MakeStreamingResults( fields, "1|a", "2|b", "---", "c|c", )
The first result contains only the fields. Subsequent results are built using the field types. Every input that starts with a "-" is treated as streaming delimiter for one result. A final delimiter must not be supplied.
func MarshalResult ¶ added in v0.18.0
MarshalResult marshals the object into a Result object. It is semi-complete.
func Proto3ToResult ¶
func Proto3ToResult(qr *querypb.QueryResult) *Result
Proto3ToResult converts a proto3 Result to an internal data structure. This function should be used only if the field info is populated in qr.
func Proto3ToResults ¶
func Proto3ToResults(qr []*querypb.QueryResult) []Result
Proto3ToResults converts proto3 results to []Result.
func ReplaceFields ¶ added in v0.18.0
ReplaceFields remaps the fields and/or row columns of a given result. This is useful when you need to embed a struct to modify its marshalling behavior, then cleanup or otherwise transfer the redunant fields. For example:
| uuid | tablet | retries | migration_uuid | $$tablet | | abc | --- | 1 | abc | zone1-101 |
=> becomes
| migration_uuid | tablet | retries | | abc | zone1-101 | 1 |
func (*Result) AppendResult ¶
AppendResult will combine the Results Objects of one result to another result.Note currently it doesn't handle cases like if two results have different fields.We will enhance this function.
func (*Result) CachedSize ¶ added in v0.11.0
func (*Result) Equal ¶
Equal compares the Result with another one. reflect.DeepEqual shouldn't be used because of the protos.
func (*Result) IsInTransaction ¶ added in v0.10.0
IsInTransaction returns true if the status flag has SERVER_STATUS_IN_TRANS set
func (*Result) IsMoreResultsExists ¶ added in v0.10.0
IsMoreResultsExists returns true if the status flag has SERVER_MORE_RESULTS_EXISTS set
func (*Result) Metadata ¶ added in v0.16.0
Metadata creates a shallow copy of Result without the rows useful for sending as a first packet in streaming results.
func (*Result) Named ¶ added in v0.8.0
func (result *Result) Named() *NamedResult
Named returns a NamedResult based on this struct
func (*Result) Repair ¶
Repair fixes the type info in the rows to conform to the supplied field types.
func (*Result) ReplaceKeyspace ¶ added in v0.11.0
ReplaceKeyspace replaces all the non-empty Database identifiers in the result set with the given keyspace name
func (*Result) ShallowCopy ¶ added in v0.16.0
ShallowCopy creates a shallow copy of Result.
func (*Result) StripMetadata ¶
func (result *Result) StripMetadata(incl querypb.ExecuteOptions_IncludedFields) *Result
StripMetadata will return a new Result that has the same Rows, but the Field objects will have their non-critical metadata emptied. Note we don't proto.Copy each Field for performance reasons, but we only copy the individual fields.
type ResultMarshaller ¶ added in v0.18.0
ResultMarshaller knows how to marshal itself into a Result.
type ResultStream ¶
type ResultStream interface { // Recv returns the next result on the stream. // It will return io.EOF if the stream ended. Recv() (*Result, error) }
ResultStream is an interface for receiving Result. It is used for RPC interfaces.
type RowMismatchError ¶ added in v0.16.7
type RowMismatchError struct {
// contains filtered or unexported fields
}
func (*RowMismatchError) Error ¶ added in v0.16.7
func (e *RowMismatchError) Error() string
type RowNamedValues ¶ added in v0.8.0
RowNamedValues contains a row's values as a map based on Field (aka table column) name
func (RowNamedValues) AsBool ¶ added in v0.8.0
func (r RowNamedValues) AsBool(fieldName string, def bool) bool
AsBool returns the named field as bool, or default value if nonexistent/error
func (RowNamedValues) AsBytes ¶ added in v0.13.0
func (r RowNamedValues) AsBytes(fieldName string, def []byte) []byte
AsBytes returns the named field as a byte array, or default value if nonexistent/error
func (RowNamedValues) AsFloat64 ¶ added in v0.10.0
func (r RowNamedValues) AsFloat64(fieldName string, def float64) float64
AsFloat64 returns the named field as float64, or default value if nonexistent/error
func (RowNamedValues) AsInt32 ¶ added in v0.17.0
func (r RowNamedValues) AsInt32(fieldName string, def int32) int32
func (RowNamedValues) AsInt64 ¶ added in v0.8.0
func (r RowNamedValues) AsInt64(fieldName string, def int64) int64
AsInt64 returns the named field as int64, or default value if nonexistent/error
func (RowNamedValues) AsString ¶ added in v0.8.0
func (r RowNamedValues) AsString(fieldName string, def string) string
AsString returns the named field as string, or default value if nonexistent/error
func (RowNamedValues) AsUint64 ¶ added in v0.8.0
func (r RowNamedValues) AsUint64(fieldName string, def uint64) uint64
AsUint64 returns the named field as uint64, or default value if nonexistent/error
func (RowNamedValues) ToBool ¶ added in v0.8.0
func (r RowNamedValues) ToBool(fieldName string) (bool, error)
ToBool returns the named field as bool
func (RowNamedValues) ToBytes ¶ added in v0.13.0
func (r RowNamedValues) ToBytes(fieldName string) ([]byte, error)
ToBytes returns the named field as a byte array
func (RowNamedValues) ToFloat64 ¶ added in v0.10.0
func (r RowNamedValues) ToFloat64(fieldName string) (float64, error)
ToFloat64 returns the named field as float64
func (RowNamedValues) ToInt ¶ added in v0.17.0
func (r RowNamedValues) ToInt(fieldName string) (int, error)
ToInt returns the named field as int
func (RowNamedValues) ToInt32 ¶ added in v0.17.0
func (r RowNamedValues) ToInt32(fieldName string) (int32, error)
func (RowNamedValues) ToInt64 ¶ added in v0.8.0
func (r RowNamedValues) ToInt64(fieldName string) (int64, error)
ToInt64 returns the named field as int64
type Value ¶
type Value struct {
// contains filtered or unexported fields
}
Value can store any SQL value. If the value represents an integral type, the bytes are always stored as a canonical representation that matches how MySQL returns such values.
func BindVariableToValue ¶
func BindVariableToValue(bv *querypb.BindVariable) (Value, error)
BindVariableToValue converts a bind var into a Value.
func InterfaceToValue ¶
InterfaceToValue builds a value from a go type. Supported types are nil, int64, uint64, float64, string and []byte. This function is deprecated. Use the type-specific functions instead.
func MakeRowTrusted ¶
MakeRowTrusted converts a *querypb.Row to []Value based on the types in fields. It does not sanity check the values against the type. Every place this function is called, a comment is needed that explains why it's justified.
func MakeTrusted ¶
MakeTrusted makes a new Value based on the type. This function should only be used if you know the value and type conform to the rules. Every place this function is called, a comment is needed that explains why it's justified. Exceptions: The current package and mysql package do not need comments. Other packages can also use the function to create VarBinary or VarChar values.
func NewBoolean ¶ added in v0.18.0
NewBoolean builds a Uint8 Value from a boolean.
func NewDatetime ¶ added in v0.13.0
NewDatetime builds a Datetime value.
func NewDecimal ¶ added in v0.13.0
NewDecimal builds a Decimal value.
func NewFloat32 ¶ added in v0.18.0
NewFloat32 builds a Float32 Value.
func NewIntegral ¶
NewIntegral builds an integral type from a string representation. The type will be Int64 or Uint64. Int64 will be preferred where possible.
func NewTimestamp ¶ added in v0.13.0
NewTimestamp builds a Timestamp value.
func NewValue ¶
NewValue builds a Value using typ and val. If the value and typ don't match, it returns an error.
func NewVarBinary ¶
NewVarBinary builds a VarBinary Value. The input is a string because it's the most common use case.
func ProtoToValue ¶
ProtoToValue converts a *querypb.Value to a Value.
func TestTuple ¶ added in v0.18.0
TestTuple builds a tuple Value from a list of Values. This function should only be used for testing.
func TestValue ¶
TestValue builds a Value from typ and val. This function should only be used for testing.
func (*Value) CachedSize ¶ added in v0.10.0
func (Value) EncodeASCII ¶
EncodeASCII encodes the value using 7-bit clean ascii bytes.
func (Value) EncodeSQLBytes2 ¶ added in v0.11.0
EncodeSQLBytes2 is identical to EncodeSQL but it takes a bytes2.Buffer as its writer, so it can be inlined for performance.
func (Value) EncodeSQLStringBuilder ¶ added in v0.11.0
EncodeSQLStringBuilder is identical to EncodeSQL but it takes a strings.Builder as its writer, so it can be inlined for performance.
func (*Value) ForEachValue ¶ added in v0.18.0
func (*Value) IsComparable ¶ added in v0.12.0
IsComparable returns true if the Value is null safe comparable without collation information.
func (Value) IsDateTime ¶ added in v0.9.0
IsDateTime returns true if Value is datetime.
func (Value) IsIntegral ¶
IsIntegral returns true if Value is an integral.
func (Value) IsTimestamp ¶ added in v0.18.0
IsTimestamp returns true if Value is date.
func (Value) IsUnsigned ¶
IsUnsigned returns true if Value is an unsigned integral.
func (Value) MarshalJSON ¶
MarshalJSON should only be used for testing. It's not a complete implementation.
func (Value) Raw ¶
Raw returns the internal representation of the value. For newer types, this may not match MySQL's representation.
func (Value) RawStr ¶ added in v0.13.0
RawStr returns the internal representation of the value as a string instead of a byte slice. This is equivalent to calling `string(v.Raw())` but does not allocate.
func (*Value) SetTinyWeight ¶ added in v0.19.0
SetTinyWeight sets this Value's tiny weight string
func (Value) TinyWeight ¶ added in v0.19.0
func (Value) TinyWeightCmp ¶ added in v0.19.0
TinyWeightCmp performs a fast comparison of this Value with other if both have a Tiny Weight String set. For any 2 instances of Value: if both instances have a Tiny Weight string, and the weight strings are **different**, the two values will sort accordingly to the 32-bit numerical sort of their tiny weight strings. Otherwise, the relative sorting of the two values will not be known, and they will require a full sort using e.g. evalengine.NullsafeCompare See: evalengine.TinyWeighter
func (Value) ToBytes ¶
ToBytes returns the value as MySQL would return it as []byte. In contrast, Raw returns the internal representation of the Value, which may not match MySQL's representation for hex encoded binary data or newer types. If the value is not convertible like in the case of Expression, it returns an error.
func (Value) ToCastInt64 ¶ added in v0.18.0
ToCastInt64 returns the best effort value as MySQL would return it as a int64.
func (Value) ToCastUint64 ¶ added in v0.18.0
ToCastUint64 returns the best effort value as MySQL would return it as a uint64.
func (Value) ToFloat64 ¶ added in v0.9.0
ToFloat64 returns the value as MySQL would return it as a float64.
func (Value) ToInt64 ¶ added in v0.8.0
ToInt64 returns the value as MySQL would return it as a int64.
func (Value) ToString ¶
ToString returns the value as MySQL would return it as string. If the value is not convertible like in the case of Expression, it returns nil.
func (Value) ToUint16 ¶ added in v0.17.0
ToUint16 returns the value as MySQL would return it as a uint16.
func (Value) ToUint64 ¶ added in v0.8.0
ToUint64 returns the value as MySQL would return it as a uint64.
func (*Value) UnmarshalJSON ¶
UnmarshalJSON should only be used for testing. It's not a complete implementation.