acmestack / gorm-plus

Gorm-plus是基于Gorm的增强版,类似Mybatis-plus语法。Gorm-plus is based on an enhanced version of Gorm, similar to Mybatis-plus syntax.
https://github.com/acmestack/gorm-plus/wiki
Apache License 2.0
285 stars 44 forks source link

建议结构体改为嵌套 #61

Closed aixj1984 closed 1 year ago

aixj1984 commented 1 year ago

新特性里面增加了字段忽略和条件查询的功能,里面用到的字段反射都是基于一层结构体的,建议改为下面的模式适配测试代码

type Base struct { ID int64 CreatedAt time.Time UpdatedAt time.Time }

type User struct { Base Username string Password string Address string Age int Phone string Score int Dept string }

func (User) TableName() string { return "Users" }

具体哪里改我还没看,有改法了我再提交申请

aixj1984 commented 1 year ago

select_test.go:302: errors happened when select expect: SELECT FROM Users WHERE id IN (1,2), got SELECT FROM Users WHERE id IN ('1','2')

TestSelectByIdName : errors happened when select expect: SELECT FROM Users WHERE id = 1 LIMIT 1, got SELECT FROM Users WHERE id = 1 ORDER BY Users.id LIMIT 1

afumu commented 1 year ago

select_test.go:302: errors happened when select expect: SELECT FROM Users WHERE id IN (1,2), got SELECT FROM Users WHERE id IN ('1','2')

TestSelectByIdName : errors happened when select expect: SELECT FROM Users WHERE id = 1 LIMIT 1, got SELECT FROM Users WHERE id = 1 ORDER BY Users.id LIMIT 1

我这边测试没有问题呀

aixj1984 commented 1 year ago

你把user的结构体换成我上面的,再跑测试

afumu commented 1 year ago

select_test.go:302: errors happened when select expect: SELECT FROM Users WHERE id IN (1,2), got SELECT FROM Users WHERE id IN ('1','2') TestSelectByIdName : errors happened when select expect: SELECT FROM Users WHERE id = 1 LIMIT 1, got SELECT FROM Users WHERE id = 1 ORDER BY Users.id LIMIT 1

这个错误跟结构体没有关系,你那边应该没有更新到最新的测试代码吧

aixj1984 commented 1 year ago

--- FAIL: TestQueryByIdsIn (0.00s) select_test.go:302: errors happened when select expect: SELECT FROM Users WHERE id IN (1,2), got SELECT FROM Users WHERE id IN ('1','2')

func TestQueryByIdsIn(t testing.T) { values := url.Values{} values["q"] = []string{"id?=1,2"} query := gplus.BuildQueryUser var expectSql = "SELECT FROM Users WHERE id IN (1,2)" sessionDb := checkSelectSql(t, expectSql) gplus.SelectList[User](query, gplus.Db(sessionDb)) }

是因为gplus.BuildQuery的时候,没有把ID识别成int64,所有导致出来的是字符串,而识别到的就是int64值,问题就出在这里

afumu commented 1 year ago

--- FAIL: TestQueryByIdsIn (0.00s) select_test.go:302: errors happened when select expect: SELECT FROM Users WHERE id IN (1,2), got SELECT FROM Users WHERE id IN ('1','2')

func TestQueryByIdsIn(t testing.T) { values := url.Values{} values["q"] = []string{"id?=1,2"} query := gplus.BuildQueryUser var expectSql = "SELECT FROM Users WHERE id IN (1,2)" sessionDb := checkSelectSql(t, expectSql) gplus.SelectList[User](query, gplus.Db(sessionDb)) }

是因为gplus.BuildQuery的时候,没有把ID识别成int64,所有导致出来的是字符串,而识别到的就是int64值,问题就出在这里

哦哦,确实嵌套会有问题,主要在获取类型那块,得递归缓存好类型信息

afumu commented 1 year ago

--- FAIL: TestQueryByIdsIn (0.00s) select_test.go:302: errors happened when select expect: SELECT FROM Users WHERE id IN (1,2), got SELECT FROM Users WHERE id IN ('1','2') func TestQueryByIdsIn(t testing.T) { values := url.Values{} values["q"] = []string{"id?=1,2"} query := gplus.BuildQueryUser var expectSql = "SELECT FROM Users WHERE id IN (1,2)" sessionDb := checkSelectSql(t, expectSql) gplus.SelectList[User](query, gplus.Db(sessionDb)) } 是因为gplus.BuildQuery的时候,没有把ID识别成int64,所有导致出来的是字符串,而识别到的就是int64值,问题就出在这里

哦哦,确实嵌套会有问题,主要在获取类型那块,得递归缓存好类型信息

看这里 https://github.com/acmestack/gorm-plus/pull/63

aixj1984 commented 1 year ago

问题已经解决