1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/hanchuanchuan-goInception

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
field_type.go 50 КБ
Копировать Редактировать Исходные данные Просмотреть построчно История
hanchuanchuan Отправлено 5 лет назад e2812d8
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"fmt"
"io"
"strconv"
"strings"
"github.com/hanchuanchuan/goInception/format"
"github.com/hanchuanchuan/goInception/mysql"
"github.com/hanchuanchuan/goInception/types/json"
"github.com/hanchuanchuan/goInception/util/charset"
)
// UnspecifiedLength is unspecified length.
const (
UnspecifiedLength = -1
)
// FieldType records field type information.
type FieldType struct {
Tp byte
Flag uint
Flen int
Decimal int
Charset string
Collate string
// Elems is the element list for enum and set type.
Elems []string
}
// NewFieldType returns a FieldType,
// with a type and other information about field type.
func NewFieldType(tp byte) *FieldType {
return &FieldType{
Tp: tp,
Flen: UnspecifiedLength,
Decimal: UnspecifiedLength,
}
}
// Equal checks whether two FieldType objects are equal.
func (ft *FieldType) Equal(other *FieldType) bool {
// We do not need to compare whole `ft.Flag == other.Flag` when wrapping cast upon an Expression.
// but need compare unsigned_flag of ft.Flag.
partialEqual := ft.Tp == other.Tp &&
ft.Flen == other.Flen &&
ft.Decimal == other.Decimal &&
ft.Charset == other.Charset &&
ft.Collate == other.Collate &&
mysql.HasUnsignedFlag(ft.Flag) == mysql.HasUnsignedFlag(other.Flag)
if !partialEqual || len(ft.Elems) != len(other.Elems) {
return false
}
for i := range ft.Elems {
if ft.Elems[i] != other.Elems[i] {
return false
}
}
return true
}
// AggFieldType aggregates field types for a multi-argument function like `IF`, `IFNULL`, `COALESCE`
// whose return type is determined by the arguments' FieldTypes.
// Aggregation is performed by MergeFieldType function.
func AggFieldType(tps []*FieldType) *FieldType {
var currType FieldType
for i, t := range tps {
if i == 0 && currType.Tp == mysql.TypeUnspecified {
currType = *t
continue
}
mtp := MergeFieldType(currType.Tp, t.Tp)
currType.Tp = mtp
}
return &currType
}
// AggregateEvalType aggregates arguments' EvalType of a multi-argument function.
func AggregateEvalType(fts []*FieldType, flag *uint) EvalType {
var (
aggregatedEvalType = ETString
unsigned bool
gotFirst bool
gotBinString bool
)
lft := fts[0]
for _, ft := range fts {
if ft.Tp == mysql.TypeNull {
continue
}
et := ft.EvalType()
rft := ft
if (IsTypeBlob(ft.Tp) || IsTypeVarchar(ft.Tp) || IsTypeChar(ft.Tp)) && mysql.HasBinaryFlag(ft.Flag) {
gotBinString = true
}
if !gotFirst {
gotFirst = true
aggregatedEvalType = et
unsigned = mysql.HasUnsignedFlag(ft.Flag)
} else {
aggregatedEvalType = mergeEvalType(aggregatedEvalType, et, lft, rft, unsigned, mysql.HasUnsignedFlag(ft.Flag))
unsigned = unsigned && mysql.HasUnsignedFlag(ft.Flag)
}
lft = rft
}
setTypeFlag(flag, mysql.UnsignedFlag, unsigned)
setTypeFlag(flag, mysql.BinaryFlag, !aggregatedEvalType.IsStringKind() || gotBinString)
return aggregatedEvalType
}
func mergeEvalType(lhs, rhs EvalType, lft, rft *FieldType, isLHSUnsigned, isRHSUnsigned bool) EvalType {
if lft.Tp == mysql.TypeUnspecified || rft.Tp == mysql.TypeUnspecified {
if lft.Tp == rft.Tp {
return ETString
}
if lft.Tp == mysql.TypeUnspecified {
lhs = rhs
} else {
rhs = lhs
}
}
if lhs.IsStringKind() || rhs.IsStringKind() {
return ETString
} else if lhs == ETReal || rhs == ETReal {
return ETReal
} else if lhs == ETDecimal || rhs == ETDecimal || isLHSUnsigned != isRHSUnsigned {
return ETDecimal
}
return ETInt
}
func setTypeFlag(flag *uint, flagItem uint, on bool) {
if on {
*flag |= flagItem
} else {
*flag &= ^flagItem
}
}
// EvalType gets the type in evaluation.
func (ft *FieldType) EvalType() EvalType {
switch ft.Tp {
case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong,
mysql.TypeBit, mysql.TypeYear:
return ETInt
case mysql.TypeFloat, mysql.TypeDouble:
return ETReal
case mysql.TypeNewDecimal:
return ETDecimal
case mysql.TypeDate, mysql.TypeDatetime:
return ETDatetime
case mysql.TypeTimestamp:
return ETTimestamp
case mysql.TypeDuration:
return ETDuration
case mysql.TypeJSON:
return ETJson
}
return ETString
}
// Hybrid checks whether a type is a hybrid type, which can represent different types of value in specific context.
func (ft *FieldType) Hybrid() bool {
return ft.Tp == mysql.TypeEnum || ft.Tp == mysql.TypeBit || ft.Tp == mysql.TypeSet
}
// Init initializes the FieldType data.
func (ft *FieldType) Init(tp byte) {
ft.Tp = tp
ft.Flen = UnspecifiedLength
ft.Decimal = UnspecifiedLength
}
// CompactStr only considers Tp/CharsetBin/Flen/Deimal.
// This is used for showing column type in infoschema.
func (ft *FieldType) CompactStr() string {
ts := TypeToStr(ft.Tp, ft.Charset)
suffix := ""
defaultFlen, defaultDecimal := mysql.GetDefaultFieldLengthAndDecimal(ft.Tp)
isDecimalNotDefault := ft.Decimal != defaultDecimal && ft.Decimal != 0 && ft.Decimal != UnspecifiedLength
// displayFlen and displayDecimal are flen and decimal values with `-1` substituted with default value.
displayFlen, displayDecimal := ft.Flen, ft.Decimal
if displayFlen == 0 || displayFlen == UnspecifiedLength {
displayFlen = defaultFlen
}
if displayDecimal == 0 || displayDecimal == UnspecifiedLength {
displayDecimal = defaultDecimal
}
switch ft.Tp {
case mysql.TypeEnum, mysql.TypeSet:
// Format is ENUM ('e1', 'e2') or SET ('e1', 'e2')
es := make([]string, 0, len(ft.Elems))
for _, e := range ft.Elems {
e = format.OutputFormat(e)
es = append(es, e)
}
suffix = fmt.Sprintf("('%s')", strings.Join(es, "','"))
case mysql.TypeTimestamp, mysql.TypeDatetime, mysql.TypeDuration:
if isDecimalNotDefault {
suffix = fmt.Sprintf("(%d)", displayDecimal)
}
case mysql.TypeDouble, mysql.TypeFloat:
// 1. Flen Not Default, Decimal Not Default -> Valid
// 2. Flen Not Default, Decimal Default (-1) -> Invalid
// 3. Flen Default, Decimal Not Default -> Valid
// 4. Flen Default, Decimal Default -> Valid (hide)
if isDecimalNotDefault {
suffix = fmt.Sprintf("(%d,%d)", displayFlen, displayDecimal)
}
case mysql.TypeNewDecimal:
suffix = fmt.Sprintf("(%d,%d)", displayFlen, displayDecimal)
case mysql.TypeBit, mysql.TypeShort, mysql.TypeTiny, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong, mysql.TypeVarchar, mysql.TypeString, mysql.TypeVarString:
// Flen is always shown.
suffix = fmt.Sprintf("(%d)", displayFlen)
}
return ts + suffix
}
// InfoSchemaStr joins the CompactStr with unsigned flag and
// returns a string.
func (ft *FieldType) InfoSchemaStr() string {
suffix := ""
if mysql.HasUnsignedFlag(ft.Flag) {
suffix = " unsigned"
}
return ft.CompactStr() + suffix
}
// String joins the information of FieldType and returns a string.
// Note: when flen or decimal is unspecified, this function will use the default value instead of -1.
func (ft *FieldType) String() string {
strs := []string{ft.CompactStr()}
if mysql.HasUnsignedFlag(ft.Flag) {
strs = append(strs, "UNSIGNED")
}
if mysql.HasZerofillFlag(ft.Flag) {
strs = append(strs, "ZEROFILL")
}
if mysql.HasBinaryFlag(ft.Flag) && ft.Tp != mysql.TypeString {
strs = append(strs, "BINARY")
}
if IsTypeChar(ft.Tp) || IsTypeBlob(ft.Tp) {
if ft.Charset != "" && ft.Charset != charset.CharsetBin {
strs = append(strs, fmt.Sprintf("CHARACTER SET %s", ft.Charset))
}
if ft.Collate != "" && ft.Collate != charset.CharsetBin {
strs = append(strs, fmt.Sprintf("COLLATE %s", ft.Collate))
}
}
return strings.Join(strs, " ")
}
// Restore implements Node interface.
func (ft *FieldType) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord(TypeToStr(ft.Tp, ft.Charset))
precision := ft.Flen
scale := ft.Decimal
switch ft.Tp {
case mysql.TypeEnum, mysql.TypeSet:
precision = UnspecifiedLength
scale = UnspecifiedLength
ctx.WritePlain("(")
for i, e := range ft.Elems {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WriteString(e)
}
ctx.WritePlain(")")
case mysql.TypeTimestamp, mysql.TypeDatetime, mysql.TypeDuration:
precision = ft.Decimal
scale = UnspecifiedLength
}
if precision != UnspecifiedLength {
ctx.WritePlainf("(%d", precision)
if scale != UnspecifiedLength {
ctx.WritePlainf(",%d", scale)
}
ctx.WritePlain(")")
}
if mysql.HasUnsignedFlag(ft.Flag) {
ctx.WriteKeyWord(" UNSIGNED")
}
if mysql.HasZerofillFlag(ft.Flag) {
ctx.WriteKeyWord(" ZEROFILL")
}
if mysql.HasBinaryFlag(ft.Flag) && ft.Charset != charset.CharsetBin {
ctx.WriteKeyWord(" BINARY")
}
if IsTypeChar(ft.Tp) || IsTypeBlob(ft.Tp) {
if ft.Charset != "" && ft.Charset != charset.CharsetBin {
ctx.WriteKeyWord(" CHARACTER SET " + ft.Charset)
}
if ft.Collate != "" && ft.Collate != charset.CharsetBin {
ctx.WriteKeyWord(" COLLATE ")
ctx.WritePlain(ft.Collate)
}
}
return nil
}
// RestoreAsCastType is used for write AST back to string.
func (ft *FieldType) RestoreAsCastType(ctx *format.RestoreCtx) {
switch ft.Tp {
case mysql.TypeVarString:
if ft.Charset == charset.CharsetBin && ft.Collate == charset.CollationBin {
ctx.WriteKeyWord("BINARY")
} else {
ctx.WriteKeyWord("CHAR")
}
if ft.Flen != UnspecifiedLength {
ctx.WritePlainf("(%d)", ft.Flen)
}
if ft.Flag&mysql.BinaryFlag != 0 {
ctx.WriteKeyWord(" BINARY")
}
if ft.Charset != charset.CharsetBin && ft.Charset != mysql.DefaultCharset {
ctx.WriteKeyWord(" CHARSET ")
ctx.WriteKeyWord(ft.Charset)
}
case mysql.TypeDate:
ctx.WriteKeyWord("DATE")
case mysql.TypeDatetime:
ctx.WriteKeyWord("DATETIME")
if ft.Decimal > 0 {
ctx.WritePlainf("(%d)", ft.Decimal)
}
case mysql.TypeNewDecimal:
ctx.WriteKeyWord("DECIMAL")
if ft.Flen > 0 && ft.Decimal > 0 {
ctx.WritePlainf("(%d, %d)", ft.Flen, ft.Decimal)
} else if ft.Flen > 0 {
ctx.WritePlainf("(%d)", ft.Flen)
}
case mysql.TypeDuration:
ctx.WriteKeyWord("TIME")
if ft.Decimal > 0 {
ctx.WritePlainf("(%d)", ft.Decimal)
}
case mysql.TypeLonglong:
if ft.Flag&mysql.UnsignedFlag != 0 {
ctx.WriteKeyWord("UNSIGNED")
} else {
ctx.WriteKeyWord("SIGNED")
}
case mysql.TypeJSON:
ctx.WriteKeyWord("JSON")
}
}
// DefaultParamTypeForValue returns the default FieldType for the parameterized value.
func DefaultParamTypeForValue(value interface{}, tp *FieldType) {
switch value.(type) {
case nil:
tp.Tp = mysql.TypeUnspecified
tp.Flen = UnspecifiedLength
tp.Decimal = UnspecifiedLength
default:
DefaultTypeForValue(value, tp)
}
}
// DefaultTypeForValue returns the default FieldType for the value.
func DefaultTypeForValue(value interface{}, tp *FieldType) {
switch x := value.(type) {
case nil:
tp.Tp = mysql.TypeNull
tp.Flen = 0
tp.Decimal = 0
SetBinChsClnFlag(tp)
case bool:
tp.Tp = mysql.TypeLonglong
tp.Flen = 1
tp.Decimal = 0
tp.Flag |= mysql.IsBooleanFlag
SetBinChsClnFlag(tp)
case int:
tp.Tp = mysql.TypeLonglong
tp.Flen = len(strconv.FormatInt(int64(x), 10))
tp.Decimal = 0
SetBinChsClnFlag(tp)
case int64:
tp.Tp = mysql.TypeLonglong
tp.Flen = len(strconv.FormatInt(x, 10))
tp.Decimal = 0
SetBinChsClnFlag(tp)
case uint64:
tp.Tp = mysql.TypeLonglong
tp.Flag |= mysql.UnsignedFlag
tp.Flen = len(strconv.FormatUint(x, 10))
tp.Decimal = 0
SetBinChsClnFlag(tp)
case string:
tp.Tp = mysql.TypeVarString
// TODO: tp.Flen should be len(x) * 3 (max bytes length of CharsetUTF8)
tp.Flen = len(x)
tp.Decimal = UnspecifiedLength
tp.Charset = mysql.DefaultCharset
tp.Collate = mysql.DefaultCollationName
case float64:
tp.Tp = mysql.TypeDouble
s := strconv.FormatFloat(x, 'f', -1, 64)
tp.Flen = len(s)
tp.Decimal = UnspecifiedLength
SetBinChsClnFlag(tp)
case []byte:
tp.Tp = mysql.TypeBlob
tp.Flen = len(x)
tp.Decimal = UnspecifiedLength
SetBinChsClnFlag(tp)
case BitLiteral:
tp.Tp = mysql.TypeVarString
tp.Flen = len(x)
tp.Decimal = 0
SetBinChsClnFlag(tp)
case HexLiteral:
tp.Tp = mysql.TypeVarString
tp.Flen = len(x)
tp.Decimal = 0
tp.Flag |= mysql.UnsignedFlag
SetBinChsClnFlag(tp)
case BinaryLiteral:
tp.Tp = mysql.TypeBit
tp.Flen = len(x) * 8
tp.Decimal = 0
SetBinChsClnFlag(tp)
tp.Flag &= ^mysql.BinaryFlag
tp.Flag |= mysql.UnsignedFlag
case Time:
tp.Tp = x.Type
switch x.Type {
case mysql.TypeDate:
tp.Flen = mysql.MaxDateWidth
tp.Decimal = UnspecifiedLength
case mysql.TypeDatetime, mysql.TypeTimestamp:
tp.Flen = mysql.MaxDatetimeWidthNoFsp
if x.Fsp > DefaultFsp { // consider point('.') and the fractional part.
tp.Flen += x.Fsp + 1
}
tp.Decimal = x.Fsp
}
SetBinChsClnFlag(tp)
case Duration:
tp.Tp = mysql.TypeDuration
tp.Flen = len(x.String())
if x.Fsp > DefaultFsp { // consider point('.') and the fractional part.
tp.Flen = x.Fsp + 1
}
tp.Decimal = x.Fsp
SetBinChsClnFlag(tp)
case *MyDecimal:
tp.Tp = mysql.TypeNewDecimal
tp.Flen = len(x.ToString())
tp.Decimal = int(x.digitsFrac)
SetBinChsClnFlag(tp)
case Enum:
tp.Tp = mysql.TypeEnum
tp.Flen = len(x.Name)
tp.Decimal = UnspecifiedLength
SetBinChsClnFlag(tp)
case Set:
tp.Tp = mysql.TypeSet
tp.Flen = len(x.Name)
tp.Decimal = UnspecifiedLength
SetBinChsClnFlag(tp)
case json.BinaryJSON:
tp.Tp = mysql.TypeJSON
tp.Flen = UnspecifiedLength
tp.Decimal = 0
tp.Charset = charset.CharsetBin
tp.Collate = charset.CollationBin
default:
tp.Tp = mysql.TypeUnspecified
tp.Flen = UnspecifiedLength
tp.Decimal = UnspecifiedLength
}
}
// DefaultCharsetForType returns the default charset/collation for mysql type.
func DefaultCharsetForType(tp byte) (string, string) {
switch tp {
case mysql.TypeVarString, mysql.TypeString, mysql.TypeVarchar:
// Default charset for string types is utf8.
return mysql.DefaultCharset, mysql.DefaultCollationName
}
return charset.CharsetBin, charset.CollationBin
}
// MergeFieldType merges two MySQL type to a new type.
// This is used in hybrid field type expression.
// For example "select case c when 1 then 2 when 2 then 'tidb' from t;"
// The result field type of the case expression is the merged type of the two when clause.
// See https://github.com/mysql/mysql-server/blob/5.7/sql/field.cc#L1042
func MergeFieldType(a byte, b byte) byte {
ia := getFieldTypeIndex(a)
ib := getFieldTypeIndex(b)
return fieldTypeMergeRules[ia][ib]
}
func getFieldTypeIndex(tp byte) int {
itp := int(tp)
if itp < fieldTypeTearFrom {
return itp
}
return fieldTypeTearFrom + itp - fieldTypeTearTo - 1
}
const (
fieldTypeTearFrom = int(mysql.TypeBit) + 1
fieldTypeTearTo = int(mysql.TypeJSON) - 1
fieldTypeNum = fieldTypeTearFrom + (255 - fieldTypeTearTo)
)
var fieldTypeMergeRules = [fieldTypeNum][fieldTypeNum]byte{
/* mysql.TypeDecimal -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeNewDecimal, mysql.TypeNewDecimal,
//mysql.TypeShort mysql.TypeLong
mysql.TypeNewDecimal, mysql.TypeNewDecimal,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeDouble, mysql.TypeDouble,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeNewDecimal, mysql.TypeVarchar,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeDecimal, mysql.TypeDecimal,
//mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
//mysql.TypeJSON
mysql.TypeVarchar,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeNewDecimal, mysql.TypeVarchar,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
},
/* mysql.TypeTiny -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeNewDecimal, mysql.TypeTiny,
//mysql.TypeShort mysql.TypeLong
mysql.TypeShort, mysql.TypeLong,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeFloat, mysql.TypeDouble,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeTiny, mysql.TypeVarchar,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeLonglong, mysql.TypeInt24,
//mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeTiny,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
//mysql.TypeJSON
mysql.TypeVarchar,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeNewDecimal, mysql.TypeVarchar,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
},
/* mysql.TypeShort -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeNewDecimal, mysql.TypeShort,
//mysql.TypeShort mysql.TypeLong
mysql.TypeShort, mysql.TypeLong,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeFloat, mysql.TypeDouble,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeShort, mysql.TypeVarchar,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeLonglong, mysql.TypeInt24,
//mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeShort,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
//mysql.TypeJSON
mysql.TypeVarchar,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeNewDecimal, mysql.TypeVarchar,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
},
/* mysql.TypeLong -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeNewDecimal, mysql.TypeLong,
//mysql.TypeShort mysql.TypeLong
mysql.TypeLong, mysql.TypeLong,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeDouble, mysql.TypeDouble,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeLong, mysql.TypeVarchar,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeLonglong, mysql.TypeLong,
//mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeLong,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
//mysql.TypeJSON
mysql.TypeVarchar,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeNewDecimal, mysql.TypeVarchar,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
},
/* mysql.TypeFloat -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeDouble, mysql.TypeFloat,
//mysql.TypeShort mysql.TypeLong
mysql.TypeFloat, mysql.TypeDouble,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeFloat, mysql.TypeDouble,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeFloat, mysql.TypeVarchar,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeFloat, mysql.TypeFloat,
//mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeFloat,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
//mysql.TypeJSON
mysql.TypeVarchar,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeDouble, mysql.TypeVarchar,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
},
/* mysql.TypeDouble -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeDouble, mysql.TypeDouble,
//mysql.TypeShort mysql.TypeLong
mysql.TypeDouble, mysql.TypeDouble,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeDouble, mysql.TypeDouble,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeDouble, mysql.TypeVarchar,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeDouble, mysql.TypeDouble,
//mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeDouble,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
//mysql.TypeJSON
mysql.TypeVarchar,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeDouble, mysql.TypeVarchar,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
},
/* mysql.TypeNull -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeNewDecimal, mysql.TypeTiny,
//mysql.TypeShort mysql.TypeLong
mysql.TypeShort, mysql.TypeLong,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeFloat, mysql.TypeDouble,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeNull, mysql.TypeTimestamp,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeLonglong, mysql.TypeLonglong,
//mysql.TypeDate mysql.TypeTime
mysql.TypeDate, mysql.TypeDuration,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeDatetime, mysql.TypeYear,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeNewDate, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeBit,
//mysql.TypeJSON
mysql.TypeJSON,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeNewDecimal, mysql.TypeEnum,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeSet, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeGeometry,
},
/* mysql.TypeTimestamp -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeTimestamp, mysql.TypeTimestamp,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDate mysql.TypeTime
mysql.TypeDatetime, mysql.TypeDatetime,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeDatetime, mysql.TypeVarchar,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeNewDate, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
//mysql.TypeJSON
mysql.TypeVarchar,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
},
/* mysql.TypeLonglong -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeNewDecimal, mysql.TypeLonglong,
//mysql.TypeShort mysql.TypeLong
mysql.TypeLonglong, mysql.TypeLonglong,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeDouble, mysql.TypeDouble,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeLonglong, mysql.TypeVarchar,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeLonglong, mysql.TypeLong,
//mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeLonglong,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeNewDate, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
//mysql.TypeJSON
mysql.TypeVarchar,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeNewDecimal, mysql.TypeVarchar,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
},
/* mysql.TypeInt24 -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeNewDecimal, mysql.TypeInt24,
//mysql.TypeShort mysql.TypeLong
mysql.TypeInt24, mysql.TypeLong,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeFloat, mysql.TypeDouble,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeInt24, mysql.TypeVarchar,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeLonglong, mysql.TypeInt24,
//mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeInt24,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeNewDate, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
//mysql.TypeJSON
mysql.TypeVarchar,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeNewDecimal, mysql.TypeVarchar,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
},
/* mysql.TypeDate -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeDate, mysql.TypeDatetime,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDate mysql.TypeTime
mysql.TypeDate, mysql.TypeDatetime,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeDatetime, mysql.TypeVarchar,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeNewDate, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
//mysql.TypeJSON
mysql.TypeVarchar,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
},
/* mysql.TypeTime -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeDuration, mysql.TypeDatetime,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDate mysql.TypeTime
mysql.TypeDatetime, mysql.TypeDuration,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeDatetime, mysql.TypeVarchar,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeNewDate, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
//mysql.TypeJSON
mysql.TypeVarchar,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
},
/* mysql.TypeDatetime -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeDatetime, mysql.TypeDatetime,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDate mysql.TypeTime
mysql.TypeDatetime, mysql.TypeDatetime,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeDatetime, mysql.TypeVarchar,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeNewDate, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
//mysql.TypeJSON
mysql.TypeVarchar,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
},
/* mysql.TypeYear -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeDecimal, mysql.TypeTiny,
//mysql.TypeShort mysql.TypeLong
mysql.TypeShort, mysql.TypeLong,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeFloat, mysql.TypeDouble,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeYear, mysql.TypeVarchar,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeLonglong, mysql.TypeInt24,
//mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeYear,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
//mysql.TypeJSON
mysql.TypeVarchar,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeNewDecimal, mysql.TypeVarchar,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
},
/* mysql.TypeNewDate -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeNewDate, mysql.TypeDatetime,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDate mysql.TypeTime
mysql.TypeNewDate, mysql.TypeDatetime,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeDatetime, mysql.TypeVarchar,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeNewDate, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
//mysql.TypeJSON
mysql.TypeVarchar,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
},
/* mysql.TypeVarchar -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
//mysql.TypeJSON
mysql.TypeVarchar,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeVarchar, mysql.TypeVarchar,
},
/* mysql.TypeBit -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeBit, mysql.TypeVarchar,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeBit,
//mysql.TypeJSON
mysql.TypeVarchar,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
},
/* mysql.TypeJSON -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeNewFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeJSON, mysql.TypeVarchar,
//mysql.TypeLongLONG mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDate MYSQL_TYPE_TIME
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDatetime MYSQL_TYPE_YEAR
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
//mysql.TypeJSON
mysql.TypeJSON,
//mysql.TypeNewDecimal MYSQL_TYPE_ENUM
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeLongBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeLongBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeLongBlob, mysql.TypeVarchar,
//mysql.TypeString MYSQL_TYPE_GEOMETRY
mysql.TypeString, mysql.TypeVarchar,
},
/* mysql.TypeNewDecimal -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeNewDecimal, mysql.TypeNewDecimal,
//mysql.TypeShort mysql.TypeLong
mysql.TypeNewDecimal, mysql.TypeNewDecimal,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeDouble, mysql.TypeDouble,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeNewDecimal, mysql.TypeVarchar,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeNewDecimal, mysql.TypeNewDecimal,
//mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeNewDecimal,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
//mysql.TypeJSON
mysql.TypeVarchar,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeNewDecimal, mysql.TypeVarchar,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
},
/* mysql.TypeEnum -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeEnum, mysql.TypeVarchar,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
//mysql.TypeJSON
mysql.TypeVarchar,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
},
/* mysql.TypeSet -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeSet, mysql.TypeVarchar,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
//mysql.TypeJSON
mysql.TypeVarchar,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
},
/* mysql.TypeTinyBlob -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeTinyBlob, mysql.TypeTinyBlob,
//mysql.TypeShort mysql.TypeLong
mysql.TypeTinyBlob, mysql.TypeTinyBlob,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeTinyBlob, mysql.TypeTinyBlob,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeTinyBlob, mysql.TypeTinyBlob,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeTinyBlob, mysql.TypeTinyBlob,
//mysql.TypeDate mysql.TypeTime
mysql.TypeTinyBlob, mysql.TypeTinyBlob,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeTinyBlob, mysql.TypeTinyBlob,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeTinyBlob, mysql.TypeTinyBlob,
//mysql.TypeBit <16>-<244>
mysql.TypeTinyBlob,
//mysql.TypeJSON
mysql.TypeLongBlob,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeTinyBlob, mysql.TypeTinyBlob,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeTinyBlob, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeTinyBlob,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeTinyBlob, mysql.TypeTinyBlob,
},
/* mysql.TypeMediumBlob -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
//mysql.TypeShort mysql.TypeLong
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
//mysql.TypeDate mysql.TypeTime
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
//mysql.TypeBit <16>-<244>
mysql.TypeMediumBlob,
//mysql.TypeJSON
mysql.TypeLongBlob,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
},
/* mysql.TypeLongBlob -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeLongBlob, mysql.TypeLongBlob,
//mysql.TypeShort mysql.TypeLong
mysql.TypeLongBlob, mysql.TypeLongBlob,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeLongBlob, mysql.TypeLongBlob,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeLongBlob, mysql.TypeLongBlob,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeLongBlob, mysql.TypeLongBlob,
//mysql.TypeDate mysql.TypeTime
mysql.TypeLongBlob, mysql.TypeLongBlob,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeLongBlob, mysql.TypeLongBlob,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeLongBlob, mysql.TypeLongBlob,
//mysql.TypeBit <16>-<244>
mysql.TypeLongBlob,
//mysql.TypeJSON
mysql.TypeLongBlob,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeLongBlob, mysql.TypeLongBlob,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeLongBlob, mysql.TypeLongBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeLongBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeLongBlob, mysql.TypeLongBlob,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeLongBlob, mysql.TypeLongBlob,
},
/* mysql.TypeBlob -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeBlob, mysql.TypeBlob,
//mysql.TypeShort mysql.TypeLong
mysql.TypeBlob, mysql.TypeBlob,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeBlob, mysql.TypeBlob,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeBlob, mysql.TypeBlob,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeBlob, mysql.TypeBlob,
//mysql.TypeDate mysql.TypeTime
mysql.TypeBlob, mysql.TypeBlob,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeBlob, mysql.TypeBlob,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeBlob, mysql.TypeBlob,
//mysql.TypeBit <16>-<244>
mysql.TypeBlob,
//mysql.TypeJSON
mysql.TypeLongBlob,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeBlob, mysql.TypeBlob,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeBlob, mysql.TypeBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeBlob,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeBlob, mysql.TypeBlob,
},
/* mysql.TypeVarString -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
//mysql.TypeJSON
mysql.TypeVarchar,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeVarchar, mysql.TypeVarchar,
},
/* mysql.TypeString -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeString, mysql.TypeString,
//mysql.TypeShort mysql.TypeLong
mysql.TypeString, mysql.TypeString,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeString, mysql.TypeString,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeString, mysql.TypeString,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeString, mysql.TypeString,
//mysql.TypeDate mysql.TypeTime
mysql.TypeString, mysql.TypeString,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeString, mysql.TypeString,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeString, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeString,
//mysql.TypeJSON
mysql.TypeString,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeString, mysql.TypeString,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeString, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeString,
},
/* mysql.TypeGeometry -> */
{
//mysql.TypeDecimal mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeNull mysql.TypeTimestamp
mysql.TypeGeometry, mysql.TypeVarchar,
//mysql.TypeLonglong mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
//mysql.TypeJSON
mysql.TypeVarchar,
//mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeVarchar, mysql.TypeVarchar,
//mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
//mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
//mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
//mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeGeometry,
},
}
// SetBinChsClnFlag sets charset, collation as 'binary' and adds binaryFlag to FieldType.
func SetBinChsClnFlag(ft *FieldType) {
ft.Charset = charset.CharsetBin
ft.Collate = charset.CollationBin
ft.Flag |= mysql.BinaryFlag
}
// FormatAsCastType is used for write AST back to string.
func (ft *FieldType) FormatAsCastType(w io.Writer) {
var sb strings.Builder
restoreCtx := format.NewRestoreCtx(format.DefaultRestoreFlags, &sb)
ft.RestoreAsCastType(restoreCtx)
fmt.Fprint(w, sb.String())
}
// VarStorageLen indicates this column is a variable length column.
const VarStorageLen = -1
// StorageLength is the length of stored value for the type.
func (ft *FieldType) StorageLength() int {
switch ft.Tp {
case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong,
mysql.TypeLonglong, mysql.TypeDouble, mysql.TypeFloat, mysql.TypeYear, mysql.TypeDuration,
mysql.TypeDate, mysql.TypeDatetime, mysql.TypeTimestamp, mysql.TypeEnum, mysql.TypeSet,
mysql.TypeBit:
// This may not be the accurate length, because we may encode them as varint.
return 8
case mysql.TypeNewDecimal:
precision, frac := ft.Flen-ft.Decimal, ft.Decimal
return precision/digitsPerWord*wordSize + dig2bytes[precision%digitsPerWord] + frac/digitsPerWord*wordSize + dig2bytes[frac%digitsPerWord]
default:
return VarStorageLen
}
}

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/hanchuanchuan-goInception.git
git@gitlife.ru:oschina-mirror/hanchuanchuan-goInception.git
oschina-mirror
hanchuanchuan-goInception
hanchuanchuan-goInception
v1.2.3