From 428bfe4f46c83ae6e8c23f87c2b1830f6bae8b30 Mon Sep 17 00:00:00 2001 From: Ryan Liu Date: Mon, 16 May 2022 15:17:16 +0800 Subject: [PATCH 1/2] fix the error in mysql: unknown colType UNSIGNED FLOAT --- dialects/mysql.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/dialects/mysql.go b/dialects/mysql.go index 56ba66c7..ba5c06d8 100644 --- a/dialects/mysql.go +++ b/dialects/mysql.go @@ -492,10 +492,16 @@ func (db *mysql) GetColumns(queryer core.Queryer, ctx context.Context, tableName } col.Length = len1 col.Length2 = len2 - if _, ok := schemas.SqlTypes[colType]; ok { - col.SQLType = schemas.SQLType{Name: colType, DefaultLength: len1, DefaultLength2: len2} - } else { + if _, ok := schemas.SqlTypes[colType]; !ok { + if !strings.HasPrefix(colType, "UNSIGNED ") { + return nil, nil, fmt.Errorf("unknown colType %v", colType) + } + colType = colType[len("UNSIGNED "):] + } + if _, ok := schemas.SqlTypes[colType]; !ok { return nil, nil, fmt.Errorf("unknown colType %v", colType) + } else { + col.SQLType = schemas.SQLType{Name: colType, DefaultLength: len1, DefaultLength2: len2} } if colKey == "PRI" { From 62f87224a1ca0a93054996f4fd2eac8c624442b7 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 26 Jul 2023 11:21:49 +0800 Subject: [PATCH 2/2] Add test --- integrations/session_pk_test.go | 86 +++++++++++++++++++++++++-------- 1 file changed, 67 insertions(+), 19 deletions(-) diff --git a/integrations/session_pk_test.go b/integrations/session_pk_test.go index 0244937f..6aa57e13 100644 --- a/integrations/session_pk_test.go +++ b/integrations/session_pk_test.go @@ -53,17 +53,21 @@ type StringPK struct { Name string } -type ID int64 -type MyIntPK struct { - ID ID `xorm:"pk autoincr"` - Name string -} +type ( + ID int64 + MyIntPK struct { + ID ID `xorm:"pk autoincr"` + Name string + } +) -type StrID string -type MyStringPK struct { - ID StrID `xorm:"pk notnull"` - Name string -} +type ( + StrID string + MyStringPK struct { + ID StrID `xorm:"pk notnull"` + Name string + } +) func TestIntId(t *testing.T) { assert.NoError(t, PrepareEngine()) @@ -187,7 +191,7 @@ func TestUintId(t *testing.T) { assert.NoError(t, err) assert.EqualValues(t, 1, cnt) - var inserts = []UintId{ + inserts := []UintId{ {Name: "test1"}, {Name: "test2"}, } @@ -321,6 +325,48 @@ func TestUint64Id(t *testing.T) { 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) { assert.NoError(t, PrepareEngine()) @@ -390,7 +436,7 @@ func TestCompositeKey(t *testing.T) { assert.True(t, has) assert.EqualValues(t, compositeKeyVal, compositeKeyVal2) - var cps = make([]CompositeKey, 0) + cps := make([]CompositeKey, 0) err = testEngine.Find(&cps) assert.NoError(t, err) assert.EqualValues(t, 1, len(cps)) @@ -460,13 +506,15 @@ func TestCompositeKey2(t *testing.T) { assert.EqualValues(t, 1, cnt) } -type MyString string -type UserPK2 struct { - UserId MyString `xorm:"varchar(19) not null pk"` - NickName string `xorm:"varchar(19) not null"` - GameId uint32 `xorm:"integer pk"` - Score int32 `xorm:"integer"` -} +type ( + MyString string + UserPK2 struct { + UserId MyString `xorm:"varchar(19) not null pk"` + NickName string `xorm:"varchar(19) not null"` + GameId uint32 `xorm:"integer pk"` + Score int32 `xorm:"integer"` + } +) func TestCompositeKey3(t *testing.T) { assert.NoError(t, PrepareEngine())