fix the error in mysql: unknown colType UNSIGNED FLOAT (#2143)
Error: unknown colType UNSIGNED FLOAT
in mysql 5.6.27 or 5.7.32
Fix #2123
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Reviewed-on: https://gitea.com/xorm/xorm/pulls/2143
Co-authored-by: Ryan Liu <azhai@126.com>
Co-committed-by: Ryan Liu <azhai@126.com>
(cherry picked from commit ac88a5705a
)
This commit is contained in:
parent
13120b6d55
commit
be88b18a8e
|
@ -328,7 +328,7 @@ func (db *mssql) SQLType(c *schemas.Column) string {
|
||||||
res = schemas.Int
|
res = schemas.Int
|
||||||
case schemas.Text, schemas.MediumText, schemas.TinyText, schemas.LongText, schemas.Json:
|
case schemas.Text, schemas.MediumText, schemas.TinyText, schemas.LongText, schemas.Json:
|
||||||
res = db.defaultVarchar + "(MAX)"
|
res = db.defaultVarchar + "(MAX)"
|
||||||
case schemas.Double:
|
case schemas.Double, schemas.UnsignedFloat:
|
||||||
res = schemas.Real
|
res = schemas.Real
|
||||||
case schemas.Uuid:
|
case schemas.Uuid:
|
||||||
res = schemas.Varchar
|
res = schemas.Varchar
|
||||||
|
|
|
@ -319,6 +319,9 @@ func (db *mysql) SQLType(c *schemas.Column) string {
|
||||||
case schemas.UnsignedTinyInt:
|
case schemas.UnsignedTinyInt:
|
||||||
res = schemas.TinyInt
|
res = schemas.TinyInt
|
||||||
isUnsigned = true
|
isUnsigned = true
|
||||||
|
case schemas.UnsignedFloat:
|
||||||
|
res = schemas.Float
|
||||||
|
isUnsigned = true
|
||||||
default:
|
default:
|
||||||
res = t
|
res = t
|
||||||
}
|
}
|
||||||
|
@ -510,11 +513,10 @@ func (db *mysql) GetColumns(queryer core.Queryer, ctx context.Context, tableName
|
||||||
}
|
}
|
||||||
col.Length = len1
|
col.Length = len1
|
||||||
col.Length2 = len2
|
col.Length2 = len2
|
||||||
if _, ok := schemas.SqlTypes[colType]; ok {
|
if _, ok := schemas.SqlTypes[colType]; !ok {
|
||||||
col.SQLType = schemas.SQLType{Name: colType, DefaultLength: len1, DefaultLength2: len2}
|
|
||||||
} else {
|
|
||||||
return nil, nil, fmt.Errorf("unknown colType %v", colType)
|
return nil, nil, fmt.Errorf("unknown colType %v", colType)
|
||||||
}
|
}
|
||||||
|
col.SQLType = schemas.SQLType{Name: colType, DefaultLength: len1, DefaultLength2: len2}
|
||||||
|
|
||||||
if colKey == "PRI" {
|
if colKey == "PRI" {
|
||||||
col.IsPrimaryKey = true
|
col.IsPrimaryKey = true
|
||||||
|
|
|
@ -928,7 +928,7 @@ func (db *postgres) SQLType(c *schemas.Column) string {
|
||||||
return schemas.Uuid
|
return schemas.Uuid
|
||||||
case schemas.Blob, schemas.TinyBlob, schemas.MediumBlob, schemas.LongBlob:
|
case schemas.Blob, schemas.TinyBlob, schemas.MediumBlob, schemas.LongBlob:
|
||||||
return schemas.Bytea
|
return schemas.Bytea
|
||||||
case schemas.Double:
|
case schemas.Double, schemas.UnsignedFloat:
|
||||||
return "DOUBLE PRECISION"
|
return "DOUBLE PRECISION"
|
||||||
default:
|
default:
|
||||||
if c.IsAutoIncrement {
|
if c.IsAutoIncrement {
|
||||||
|
|
|
@ -141,6 +141,7 @@ var (
|
||||||
|
|
||||||
Real = "REAL"
|
Real = "REAL"
|
||||||
Float = "FLOAT"
|
Float = "FLOAT"
|
||||||
|
UnsignedFloat = "UNSIGNED FLOAT"
|
||||||
Double = "DOUBLE"
|
Double = "DOUBLE"
|
||||||
|
|
||||||
Binary = "BINARY"
|
Binary = "BINARY"
|
||||||
|
@ -212,6 +213,7 @@ var (
|
||||||
Numeric: NUMERIC_TYPE,
|
Numeric: NUMERIC_TYPE,
|
||||||
Real: NUMERIC_TYPE,
|
Real: NUMERIC_TYPE,
|
||||||
Float: NUMERIC_TYPE,
|
Float: NUMERIC_TYPE,
|
||||||
|
UnsignedFloat: NUMERIC_TYPE,
|
||||||
Double: NUMERIC_TYPE,
|
Double: NUMERIC_TYPE,
|
||||||
Money: NUMERIC_TYPE,
|
Money: NUMERIC_TYPE,
|
||||||
SmallMoney: NUMERIC_TYPE,
|
SmallMoney: NUMERIC_TYPE,
|
||||||
|
|
|
@ -325,6 +325,48 @@ func TestUint64Id(t *testing.T) {
|
||||||
assert.EqualValues(t, 1, cnt)
|
assert.EqualValues(t, 1, cnt)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUnsignedfloat(t *testing.T) {
|
||||||
|
assert.NoError(t, PrepareEngine())
|
||||||
|
|
||||||
|
type UnsignedFloat struct {
|
||||||
|
Id int64
|
||||||
|
UnsignedFloat float64 `xorm:"UNSIGNED FLOAT"`
|
||||||
|
}
|
||||||
|
|
||||||
|
err := testEngine.DropTables(&UnsignedFloat{})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
err = testEngine.CreateTables(&UnsignedFloat{})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
tables, err := testEngine.DBMetas()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
assert.EqualValues(t, 1, len(tables))
|
||||||
|
cols := tables[0].Columns()
|
||||||
|
assert.EqualValues(t, 2, len(cols))
|
||||||
|
if testEngine.Dialect().URI().DBType == schemas.MYSQL {
|
||||||
|
assert.EqualValues(t, "UNSIGNED FLOAT", cols[1].SQLType.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
idbean := &UnsignedFloat{UnsignedFloat: 12345678.90123456}
|
||||||
|
cnt, err := testEngine.Insert(idbean)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, 1, cnt)
|
||||||
|
|
||||||
|
bean := new(UnsignedFloat)
|
||||||
|
has, err := testEngine.Get(bean)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, has)
|
||||||
|
assert.EqualValues(t, bean.Id, idbean.Id)
|
||||||
|
|
||||||
|
beans := make([]UnsignedFloat, 0)
|
||||||
|
err = testEngine.Find(&beans)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, 1, len(beans))
|
||||||
|
assert.EqualValues(t, *bean, beans[0])
|
||||||
|
}
|
||||||
|
|
||||||
func TestStringPK(t *testing.T) {
|
func TestStringPK(t *testing.T) {
|
||||||
assert.NoError(t, PrepareEngine())
|
assert.NoError(t, PrepareEngine())
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue