improve data type conversion (#236)
* improve data type conversion * update doc
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user