From 3685fb60916b2d83a0a592874be190cd5db1a4d5 Mon Sep 17 00:00:00 2001 From: shenli Date: Mon, 18 Jan 2016 12:32:44 +0800 Subject: [PATCH 1/3] docs: Update hbase docs --- docs/HBASE_QUICKSTART.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/HBASE_QUICKSTART.md b/docs/HBASE_QUICKSTART.md index bbb944cb6b..28ffda07b1 100644 --- a/docs/HBASE_QUICKSTART.md +++ b/docs/HBASE_QUICKSTART.md @@ -62,3 +62,18 @@ tidb> select * from t1; +----+-------+ 2 rows in set (0.00 sec) tidb> +``` + +Run TiDB server: + +``` +make server +cd tidb-server +./tidb-server -store=hbase -path="zkaddrs/hbaseTbl?tso=tsoType" -P=4000 +DSN parameters: +zkaddrs is the address of zookkeeper. +hbaseTbl is the table in hbase to store TiDB data. +tsoaddr is the type of tso sever. Its value could be zk or local. +Here is an example of dsn: +./tidb-server -store=hbase -path="shenli-pc,cuiqiu-pc/test?tso=zk" -P=5000 +``` From bc0e191b593d8d613ecc3caf9b90a03d39d82c8e Mon Sep 17 00:00:00 2001 From: shenli Date: Mon, 18 Jan 2016 12:58:45 +0800 Subject: [PATCH 2/3] docs: Address comment --- docs/HBASE_QUICKSTART.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/HBASE_QUICKSTART.md b/docs/HBASE_QUICKSTART.md index 28ffda07b1..b6a065a25e 100644 --- a/docs/HBASE_QUICKSTART.md +++ b/docs/HBASE_QUICKSTART.md @@ -71,9 +71,9 @@ make server cd tidb-server ./tidb-server -store=hbase -path="zkaddrs/hbaseTbl?tso=tsoType" -P=4000 DSN parameters: -zkaddrs is the address of zookkeeper. +zkaddrs is the address of zookeeper. hbaseTbl is the table in hbase to store TiDB data. tsoaddr is the type of tso sever. Its value could be zk or local. Here is an example of dsn: -./tidb-server -store=hbase -path="shenli-pc,cuiqiu-pc/test?tso=zk" -P=5000 +./tidb-server -store=hbase -path="zk1,zk2/test?tso=zk" -P=5000 ``` From 420c5897184e81c7bfd650da28888dbb92fdc20f Mon Sep 17 00:00:00 2001 From: shenli Date: Mon, 18 Jan 2016 14:50:45 +0800 Subject: [PATCH 3/3] *: Fix a bug in type inferrer 1. Add missing CaseExpr. 2. Add field type merge rules for hybrid field type expressions. --- optimizer/typeinferer.go | 47 ++ optimizer/typeinferer_test.go | 2 + util/types/field_type.go | 869 +++++++++++++++++++++++++++++++++- util/types/field_type_test.go | 2 +- 4 files changed, 916 insertions(+), 4 deletions(-) diff --git a/optimizer/typeinferer.go b/optimizer/typeinferer.go index 43ec445bbe..e8116a0e2d 100644 --- a/optimizer/typeinferer.go +++ b/optimizer/typeinferer.go @@ -51,6 +51,8 @@ func (v *typeInferrer) Leave(in ast.Node) (out ast.Node, ok bool) { x.Type.Collate = charset.CollationBin case *ast.BinaryOperationExpr: v.binaryOperation(x) + case *ast.CaseExpr: + v.handleCaseExpr(x) case *ast.ColumnNameExpr: x.SetType(&x.Refer.Column.FieldType) case *ast.CompareSubqueryExpr: @@ -256,6 +258,13 @@ func (v *typeInferrer) handleFuncCallExpr(x *ast.FuncCallExpr) { tp = types.NewFieldType(mysql.TypeLonglong) tp.Flag |= mysql.UnsignedFlag case "if": + // TODO: fix this + // See: https://dev.mysql.com/doc/refman/5.5/en/control-flow-functions.html#function_if + // The default return type of IF() (which may matter when it is stored into a temporary table) is calculated as follows. + // Expression Return Value + // expr2 or expr3 returns a string string + // expr2 or expr3 returns a floating-point value floating-point + // expr2 or expr3 returns an integer integer tp = x.Args[1].GetType() default: tp = types.NewFieldType(mysql.TypeUnspecified) @@ -275,3 +284,41 @@ func (v *typeInferrer) handleFuncCallExpr(x *ast.FuncCallExpr) { } x.SetType(tp) } + +// The return type of a CASE expression is the compatible aggregated type of all return values, +// but also depends on the context in which it is used. +// If used in a string context, the result is returned as a string. +// If used in a numeric context, the result is returned as a decimal, real, or integer value. +func (v *typeInferrer) handleCaseExpr(x *ast.CaseExpr) { + var currType *types.FieldType + for _, w := range x.WhenClauses { + t := w.Result.GetType() + if currType == nil { + currType = t + continue + } + mtp := types.MergeFieldType(currType.Tp, t.Tp) + if mtp == t.Tp && mtp != currType.Tp { + currType.Charset = t.Charset + currType.Collate = t.Collate + } + currType.Tp = mtp + + } + if x.ElseClause != nil { + t := x.ElseClause.GetType() + if currType == nil { + currType = t + } else { + mtp := types.MergeFieldType(currType.Tp, t.Tp) + if mtp == t.Tp && mtp != currType.Tp { + currType.Charset = t.Charset + currType.Collate = t.Collate + } + currType.Tp = mtp + } + } + x.SetType(currType) + // TODO: We need a better way to set charset/collation + x.Type.Charset, x.Type.Collate = types.DefaultCharsetForType(x.Type.Tp) +} diff --git a/optimizer/typeinferer_test.go b/optimizer/typeinferer_test.go index 75a8444e65..d22a8de716 100644 --- a/optimizer/typeinferer_test.go +++ b/optimizer/typeinferer_test.go @@ -123,6 +123,8 @@ func (ts *testTypeInferrerSuite) TestInferType(c *C) { {"upper('TiDB')", mysql.TypeVarString, "utf8"}, {"connection_id()", mysql.TypeLonglong, charset.CharsetBin}, {"if(1>2, 2, 3)", mysql.TypeLonglong, charset.CharsetBin}, + {"case c1 when null then 2 when 2 then 1.1 else 1 END", mysql.TypeNewDecimal, charset.CharsetBin}, + {"case c1 when null then 2 when 2 then 'tidb' else 1.1 END", mysql.TypeVarchar, "utf8"}, } for _, ca := range cases { ctx := testKit.Se.(context.Context) diff --git a/util/types/field_type.go b/util/types/field_type.go index d7fcf0b582..ff889ff20b 100644 --- a/util/types/field_type.go +++ b/util/types/field_type.go @@ -21,7 +21,6 @@ import ( "fmt" "strings" - "github.com/ngaut/log" "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/util/charset" ) @@ -160,7 +159,7 @@ func DefaultTypeForValue(value interface{}) *FieldType { tp.Charset = charset.CharsetBin tp.Collate = charset.CharsetBin case string: - tp = NewFieldType(mysql.TypeVarchar) + tp = NewFieldType(mysql.TypeVarString) tp.Charset = mysql.DefaultCharset tp.Collate = mysql.DefaultCollationName case float64: @@ -203,7 +202,6 @@ func DefaultTypeForValue(value interface{}) *FieldType { tp = x.Type default: tp = NewFieldType(mysql.TypeDecimal) - log.Errorf("Unknown value type %T for default field type.", value) } return tp } @@ -217,3 +215,868 @@ func DefaultCharsetForType(tp byte) (string, string) { } 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 resule 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.TypeNewDecimal) - 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>-<245> + 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>-<245> + 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>-<245> + 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>-<245> + 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>-<245> + 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>-<245> + 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.TypeNewDate, mysql.TypeDuration, + //mysql.TypeDatetime mysql.TypeYear + mysql.TypeDatetime, mysql.TypeYear, + //mysql.TypeNewDate mysql.TypeVarchar + mysql.TypeNewDate, mysql.TypeVarchar, + //mysql.TypeBit <16>-<245> + mysql.TypeBit, + //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>-<245> + 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>-<245> + 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>-<245> + 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.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>-<245> + 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>-<245> + 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>-<245> + 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>-<245> + 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>-<245> + 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>-<245> + 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>-<245> + mysql.TypeBit, + //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.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>-<245> + 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>-<245> + 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>-<245> + 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>-<245> + mysql.TypeTinyBlob, + //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>-<245> + mysql.TypeMediumBlob, + //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>-<245> + 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>-<245> + mysql.TypeBlob, + //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>-<245> + 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>-<245> + 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>-<245> + 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, + }, +} diff --git a/util/types/field_type_test.go b/util/types/field_type_test.go index b406c9560a..6e0bf4c46b 100644 --- a/util/types/field_type_test.go +++ b/util/types/field_type_test.go @@ -129,7 +129,7 @@ func (s *testFieldTypeSuite) TestDefaultTypeForValue(c *check.C) { {nil, mysql.TypeNull}, {1, mysql.TypeLonglong}, {uint64(1), mysql.TypeLonglong}, - {"abc", mysql.TypeVarchar}, + {"abc", mysql.TypeVarString}, {1.1, mysql.TypeNewDecimal}, {[]byte("abc"), mysql.TypeBlob}, {mysql.Bit{}, mysql.TypeBit},