From ba1c36d4b18f18293c9dfbed9bfa4c0822d4a6ab Mon Sep 17 00:00:00 2001 From: robi Date: Thu, 16 Aug 2018 16:45:27 +0800 Subject: [PATCH] server: fix column info for resultType/flag for enum&set type. --- server/column.go | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/server/column.go b/server/column.go index bf481253ab65f..27eee7fccc780 100644 --- a/server/column.go +++ b/server/column.go @@ -13,6 +13,10 @@ package server +import ( + "github.com/pingcap/tidb/mysql" +) + // ColumnInfo contains information of a column type ColumnInfo struct { Schema string @@ -42,8 +46,8 @@ func (column *ColumnInfo) Dump(buffer []byte) []byte { buffer = dumpUint16(buffer, column.Charset) buffer = dumpUint32(buffer, column.ColumnLength) - buffer = append(buffer, column.Type) - buffer = dumpUint16(buffer, column.Flag) + buffer = append(buffer, dumpType(column.Type)) + buffer = dumpUint16(buffer, dumpFlag(column.Type, column.Flag)) buffer = append(buffer, column.Decimal) buffer = append(buffer, 0, 0) @@ -54,3 +58,23 @@ func (column *ColumnInfo) Dump(buffer []byte) []byte { return buffer } + +func dumpFlag(tp byte, flag uint16) uint16 { + switch tp { + case mysql.TypeSet: + return flag | uint16(mysql.SetFlag) + case mysql.TypeEnum: + return flag | uint16(mysql.TypeEnum) + default: + return flag + } +} + +func dumpType(tp byte) byte { + switch tp { + case mysql.TypeSet, mysql.TypeEnum: + return mysql.TypeString + default: + return tp + } +}