improve data type conversion (#236)

* improve data type conversion

* update doc
This commit is contained in:
songmeizi
2020-12-08 18:06:15 +08:00
committed by GitHub
parent cecd4b1b75
commit 4d53045c6b
8 changed files with 103 additions and 34 deletions

View File

@@ -41,12 +41,34 @@ var (
}
)
func ConvertDataType(dataBaseType string) (goDataType string, err error) {
func ConvertDataType(dataBaseType string, isDefaultNull bool) (string, error) {
tp, ok := commonMysqlDataTypeMap[strings.ToLower(dataBaseType)]
if !ok {
err = fmt.Errorf("unexpected database type: %s", dataBaseType)
return
return "", fmt.Errorf("unexpected database type: %s", dataBaseType)
}
return mayConvertNullType(tp, isDefaultNull), nil
}
func mayConvertNullType(goDataType string, isDefaultNull bool) string {
if !isDefaultNull {
return goDataType
}
switch goDataType {
case "int64":
return "sql.NullInt64"
case "int32":
return "sql.NullInt32"
case "float64":
return "sql.NullFloat64"
case "bool":
return "sql.NullBool"
case "string":
return "sql.NullString"
case "time.Time":
return "sql.NullTime"
default:
return goDataType
}
goDataType = tp
return
}

View File

@@ -7,14 +7,22 @@ import (
)
func TestConvertDataType(t *testing.T) {
v, err := ConvertDataType("tinyint")
v, err := ConvertDataType("tinyint", false)
assert.Nil(t, err)
assert.Equal(t, "int64", v)
v, err = ConvertDataType("timestamp")
v, err = ConvertDataType("tinyint", true)
assert.Nil(t, err)
assert.Equal(t, "sql.NullInt64", v)
v, err = ConvertDataType("timestamp", false)
assert.Nil(t, err)
assert.Equal(t, "time.Time", v)
_, err = ConvertDataType("float32")
v, err = ConvertDataType("timestamp", true)
assert.Nil(t, err)
assert.Equal(t, "sql.NullTime", v)
_, err = ConvertDataType("float32", false)
assert.NotNil(t, err)
}