Where and Desc 组合异常的问题 #626

Closed
opened 2017-06-22 11:53:36 +00:00 by gonboy · 4 comments
gonboy commented 2017-06-22 11:53:36 +00:00 (Migrated from github.com)

请直接看三楼

测试

type User struct {
	Id        int       `xorm:"not null pk autoincr INT(11)"` 
	Email     string    `xorm:"index VARCHAR(64)"` 
	Operate   string    `xorm:"index VARCHAR(256)"` 
	CreatedAt time.Time `xorm:"created DATETIME"` 
}
  1. 如下代码测试 正确。 仅显示需要的 Email
sql.db.Where("Email=?", email).Find(&xxx)
sql.db.Where("Email=?", email).Desc("Created_At").Find(&xxx)
  1. 如下代码测试 有问题.
var sr *xorm.Session
// 这里sr 被试用过....
// 测试1, 异常 -> 显示了所有的 Email
sr = sql.db.Where("Email=?", email)
sr.Desc("Created_At").Find(&xxx)
.
// 测试2, 异常 ) -> 显示了所有的Operate   
sr = sql.db.Where("Operate   =?", operate)
sr.Desc("Created_At").Find(&xxx)

问题:

a. 是什么原因?
b. 我想用第二种方法,如何解决?

# 请直接看三楼 ## 测试 ```go type User struct { Id int `xorm:"not null pk autoincr INT(11)"` Email string `xorm:"index VARCHAR(64)"` Operate string `xorm:"index VARCHAR(256)"` CreatedAt time.Time `xorm:"created DATETIME"` } ``` 1. 如下代码测试 **正确**。 仅显示需要的 Email ```go sql.db.Where("Email=?", email).Find(&xxx) sql.db.Where("Email=?", email).Desc("Created_At").Find(&xxx) ``` 2. 如下代码测试 **有问题**. ```go var sr *xorm.Session // 这里sr 被试用过.... // 测试1, 异常 -> 显示了所有的 Email sr = sql.db.Where("Email=?", email) sr.Desc("Created_At").Find(&xxx) . // 测试2, 异常 ) -> 显示了所有的Operate sr = sql.db.Where("Operate =?", operate) sr.Desc("Created_At").Find(&xxx) ``` ## 问题: a. 是什么原因? b. 我想用第二种方法,如何解决?

请贴一下生成的语句,这样看不出问题

请贴一下生成的语句,这样看不出问题
gonboy commented 2017-06-23 06:48:49 +00:00 (Migrated from github.com)

测试代码:

var xxx []dbModel.UserLog
err1 := sql.db.Where("Email=?", email).Desc("Id").Find(&xxx)
fmt.Println("111")
fmt.Println("err1 = ", err1)
fmt.Println("xxx = ", xxx)

var yyy []dbModel.UserLog
var sr *xorm.Session
sr = sql.db.Where("Email=?", email)  //0. 初始定义 为 Email过滤
err2 := sr.Desc("Id").Find(&yyy)        // 1. 被使用过查询,结构OK
fmt.Println("222")
fmt.Println("err2 = ", err2)
fmt.Println("yyy = ", yyy)

var zzz []dbModel.UserLog
err3 := sr.Desc("Id").Find(&zzz)        //2. 再次使用查询,结果错误。 即 Email的过滤失效
fmt.Println("333")
fmt.Println("err3 = ", err3)
fmt.Println("yyy = ", zzz)

结果如下:

111
err1 =  <nil>
xxx =  [{333 saf@sdf.com signin  127.0.0.1 IANA 2017-06-23 06:36:17 +0000 UTC web} ]
222
err2 =  <nil>
yyy =  [{333 saf@sdf.com signin  127.0.0.1 IANA 2017-06-23 06:36:17 +0000 UTC web} ]
333
err3 =  <nil>
yyy =  [{333 saf@sdf.com signin  127.0.0.1 IANA 2017-06-23 06:36:17 +0000 UTC web} {332 xx.yyy@189.cn signout  127.0.0.1 IANA 2017-06-23 06:36:02 +0000 UTC web}  ... ]

刚测试了下,确认原因了:

如上测试代码,

  1. (0处) sr被添加过滤后, 只要使用过(1处)
  2. 当对sr再次使用时, 其过滤失效(2)处,需要重新定义。
### 测试代码: ```go var xxx []dbModel.UserLog err1 := sql.db.Where("Email=?", email).Desc("Id").Find(&xxx) fmt.Println("111") fmt.Println("err1 = ", err1) fmt.Println("xxx = ", xxx) var yyy []dbModel.UserLog var sr *xorm.Session sr = sql.db.Where("Email=?", email) //0. 初始定义 为 Email过滤 err2 := sr.Desc("Id").Find(&yyy) // 1. 被使用过查询,结构OK fmt.Println("222") fmt.Println("err2 = ", err2) fmt.Println("yyy = ", yyy) var zzz []dbModel.UserLog err3 := sr.Desc("Id").Find(&zzz) //2. 再次使用查询,结果错误。 即 Email的过滤失效 fmt.Println("333") fmt.Println("err3 = ", err3) fmt.Println("yyy = ", zzz) ``` ### 结果如下: ```go 111 err1 = <nil> xxx = [{333 saf@sdf.com signin 127.0.0.1 IANA 2017-06-23 06:36:17 +0000 UTC web} ] 222 err2 = <nil> yyy = [{333 saf@sdf.com signin 127.0.0.1 IANA 2017-06-23 06:36:17 +0000 UTC web} ] 333 err3 = <nil> yyy = [{333 saf@sdf.com signin 127.0.0.1 IANA 2017-06-23 06:36:17 +0000 UTC web} {332 xx.yyy@189.cn signout 127.0.0.1 IANA 2017-06-23 06:36:02 +0000 UTC web} ... ] ``` ### 刚测试了下,确认原因了: 如上测试代码, 1. (0处) sr被添加过滤后, 只要使用过(1处) 1. 当对sr再次使用时, 其过滤失效(2)处,需要重新定义。

@gonboy 这个用法是错误的,sr在第一次调用Find之后,条件会被自动清空。

@gonboy 这个用法是错误的,sr在第一次调用Find之后,条件会被自动清空。
gonboy commented 2017-06-23 08:12:48 +00:00 (Migrated from github.com)

了解。 thanks

了解。 thanks
Sign in to join this conversation.
No Milestone
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: xorm/xorm#626
No description provided.