Add strict flag (#2248)
Co-authored-by: Kevin Wan <wanjunfeng@gmail.com>
This commit is contained in:
@@ -132,28 +132,28 @@ var commonMysqlDataTypeMapString = map[string]string{
|
||||
}
|
||||
|
||||
// ConvertDataType converts mysql column type into golang type
|
||||
func ConvertDataType(dataBaseType int, isDefaultNull, unsigned bool) (string, error) {
|
||||
func ConvertDataType(dataBaseType int, isDefaultNull, unsigned, strict bool) (string, error) {
|
||||
tp, ok := commonMysqlDataTypeMapInt[dataBaseType]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("unsupported database type: %v", dataBaseType)
|
||||
}
|
||||
|
||||
return mayConvertNullType(tp, isDefaultNull, unsigned), nil
|
||||
return mayConvertNullType(tp, isDefaultNull, unsigned, strict), nil
|
||||
}
|
||||
|
||||
// ConvertStringDataType converts mysql column type into golang type
|
||||
func ConvertStringDataType(dataBaseType string, isDefaultNull, unsigned bool) (string, error) {
|
||||
func ConvertStringDataType(dataBaseType string, isDefaultNull, unsigned, strict bool) (string, error) {
|
||||
tp, ok := commonMysqlDataTypeMapString[strings.ToLower(dataBaseType)]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("unsupported database type: %s", dataBaseType)
|
||||
}
|
||||
|
||||
return mayConvertNullType(tp, isDefaultNull, unsigned), nil
|
||||
return mayConvertNullType(tp, isDefaultNull, unsigned, strict), nil
|
||||
}
|
||||
|
||||
func mayConvertNullType(goDataType string, isDefaultNull, unsigned bool) string {
|
||||
func mayConvertNullType(goDataType string, isDefaultNull, unsigned, strict bool) string {
|
||||
if !isDefaultNull {
|
||||
if unsigned {
|
||||
if unsigned && strict {
|
||||
ret, ok := unsignedTypeMap[goDataType]
|
||||
if ok {
|
||||
return ret
|
||||
|
||||
@@ -8,23 +8,23 @@ import (
|
||||
)
|
||||
|
||||
func TestConvertDataType(t *testing.T) {
|
||||
v, err := ConvertDataType(parser.TinyInt, false, false)
|
||||
v, err := ConvertDataType(parser.TinyInt, false, false, true)
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, "int64", v)
|
||||
|
||||
v, err = ConvertDataType(parser.TinyInt, false, true)
|
||||
v, err = ConvertDataType(parser.TinyInt, false, true, true)
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, "uint64", v)
|
||||
|
||||
v, err = ConvertDataType(parser.TinyInt, true, false)
|
||||
v, err = ConvertDataType(parser.TinyInt, true, false, true)
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, "sql.NullInt64", v)
|
||||
|
||||
v, err = ConvertDataType(parser.Timestamp, false, false)
|
||||
v, err = ConvertDataType(parser.Timestamp, false, false, true)
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, "time.Time", v)
|
||||
|
||||
v, err = ConvertDataType(parser.Timestamp, true, false)
|
||||
v, err = ConvertDataType(parser.Timestamp, true, false, true)
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, "sql.NullTime", v)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user