Fix issues: #725, #740 (#813)

* Fix issues: #725, #740

* Update filed sort

Co-authored-by: anqiansong <anqiansong@xiaoheiban.cn>
This commit is contained in:
anqiansong
2021-07-16 22:55:39 +08:00
committed by GitHub
parent db87fd3239
commit 9b2a279948
11 changed files with 258 additions and 311 deletions

View File

@@ -3,9 +3,53 @@ package converter
import (
"fmt"
"strings"
"github.com/zeromicro/ddl-parser/parser"
)
var commonMysqlDataTypeMap = map[string]string{
var commonMysqlDataTypeMap = map[int]string{
// For consistency, all integer types are converted to int64
// number
parser.Bool: "int64",
parser.Boolean: "int64",
parser.TinyInt: "int64",
parser.SmallInt: "int64",
parser.MediumInt: "int64",
parser.Int: "int64",
parser.MiddleInt: "int64",
parser.Int1: "int64",
parser.Int2: "int64",
parser.Int3: "int64",
parser.Int4: "int64",
parser.Int8: "int64",
parser.Integer: "int64",
parser.BigInt: "int64",
parser.Float: "float64",
parser.Float4: "float64",
parser.Float8: "float64",
parser.Double: "float64",
parser.Decimal: "float64",
// date&time
parser.Date: "time.Time",
parser.DateTime: "time.Time",
parser.Timestamp: "time.Time",
parser.Time: "string",
parser.Year: "int64",
// string
parser.Char: "string",
parser.VarChar: "string",
parser.Binary: "string",
parser.VarBinary: "string",
parser.TinyText: "string",
parser.Text: "string",
parser.MediumText: "string",
parser.LongText: "string",
parser.Enum: "string",
parser.Set: "string",
parser.Json: "string",
}
var commonMysqlDataTypeMap2 = map[string]string{
// For consistency, all integer types are converted to int64
// number
"bool": "int64",
@@ -40,10 +84,20 @@ var commonMysqlDataTypeMap = map[string]string{
}
// ConvertDataType converts mysql column type into golang type
func ConvertDataType(dataBaseType string, isDefaultNull bool) (string, error) {
tp, ok := commonMysqlDataTypeMap[strings.ToLower(dataBaseType)]
func ConvertDataType(dataBaseType int, isDefaultNull bool) (string, error) {
tp, ok := commonMysqlDataTypeMap[dataBaseType]
if !ok {
return "", fmt.Errorf("unexpected database type: %s", dataBaseType)
return "", fmt.Errorf("unsupported database type: %v", dataBaseType)
}
return mayConvertNullType(tp, isDefaultNull), nil
}
// ConvertStringDataType converts mysql column type into golang type
func ConvertStringDataType(dataBaseType string, isDefaultNull bool) (string, error) {
tp, ok := commonMysqlDataTypeMap2[strings.ToLower(dataBaseType)]
if !ok {
return "", fmt.Errorf("unsupported database type: %s", dataBaseType)
}
return mayConvertNullType(tp, isDefaultNull), nil

View File

@@ -4,25 +4,23 @@ import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/zeromicro/ddl-parser/parser"
)
func TestConvertDataType(t *testing.T) {
v, err := ConvertDataType("tinyint", false)
v, err := ConvertDataType(parser.TinyInt, false)
assert.Nil(t, err)
assert.Equal(t, "int64", v)
v, err = ConvertDataType("tinyint", true)
v, err = ConvertDataType(parser.TinyInt, true)
assert.Nil(t, err)
assert.Equal(t, "sql.NullInt64", v)
v, err = ConvertDataType("timestamp", false)
v, err = ConvertDataType(parser.Timestamp, false)
assert.Nil(t, err)
assert.Equal(t, "time.Time", v)
v, err = ConvertDataType("timestamp", true)
v, err = ConvertDataType(parser.Timestamp, true)
assert.Nil(t, err)
assert.Equal(t, "sql.NullTime", v)
_, err = ConvertDataType("float32", false)
assert.NotNil(t, err)
}