连表时deleted生成SQL不对 #1956

Open
opened 2021-06-21 09:26:09 +00:00 by dhh1028 · 2 comments
package models
import "time"
type A struct {
	Id int64 `xorm:"id pk autoincr"`
	IsDelete time.Time `xorm:"is_delete deleted"`
}
func (*A) TableName() string {
	return "a"
}
type B struct {
	Id int64 `xorm:"id pk autoincr"`
	IsDelete time.Time `xorm:"is_delete deleted"`
}
func (*B) TableName() string {
	return "b"
}
type C struct {
	Id int64 `xorm:"id pk autoincr"`
	IsDelete time.Time `xorm:"is_delete deleted"`
}
func (*C) TableName() string {
	return "c"
}
type ABC struct {
	A `xorm:"extends"`
	B `xorm:"extends"`
	C `xorm:"extends"`
}


var engine *xorm.Engine
func main() {
	var err error
	engine, err = xorm.NewEngine("mysql", "xxx:xxx@tcp(xxx.xxx.xx.xxx:3306)/xxxxx?loc=Local&charset=utf8mb4")
	if err != nil {
		log.Fatalln(err)
	}
	engine.ShowSQL(true)
	session := engine.NewSession()
	defer session.Close()
	var abc models.ABC
	session.Table("a").Join("INNER", "b", "a.id=b.id").
		Join("INNER", "c", "b.id=c.id").
		Get(&abc)
}

生成的SQL如下:SELECT * FROM a INNER JOIN b ON a.id=b.id INNER JOIN c ON b.id=c.id WHERE (a.is_delete=? OR a.is_delete IS NULL) AND (a.is_delete=? OR a.is_delete IS NULL) AND (a.is_delete=? OR a.is_delete IS NULL) LIMIT 1 [0001-01-01 00:00:00 0001-01-01 00:00:00 0001-01-01 00:00:00]

``` package models import "time" type A struct { Id int64 `xorm:"id pk autoincr"` IsDelete time.Time `xorm:"is_delete deleted"` } func (*A) TableName() string { return "a" } type B struct { Id int64 `xorm:"id pk autoincr"` IsDelete time.Time `xorm:"is_delete deleted"` } func (*B) TableName() string { return "b" } type C struct { Id int64 `xorm:"id pk autoincr"` IsDelete time.Time `xorm:"is_delete deleted"` } func (*C) TableName() string { return "c" } type ABC struct { A `xorm:"extends"` B `xorm:"extends"` C `xorm:"extends"` } var engine *xorm.Engine func main() { var err error engine, err = xorm.NewEngine("mysql", "xxx:xxx@tcp(xxx.xxx.xx.xxx:3306)/xxxxx?loc=Local&charset=utf8mb4") if err != nil { log.Fatalln(err) } engine.ShowSQL(true) session := engine.NewSession() defer session.Close() var abc models.ABC session.Table("a").Join("INNER", "b", "a.id=b.id"). Join("INNER", "c", "b.id=c.id"). Get(&abc) } ``` 生成的SQL如下:SELECT * FROM `a` INNER JOIN `b` ON a.id=b.id INNER JOIN `c` ON b.id=c.id WHERE (`a`.`is_delete`=? OR `a`.`is_delete` IS NULL) AND (`a`.`is_delete`=? OR `a`.`is_delete` IS NULL) AND (`a`.`is_delete`=? OR `a`.`is_delete` IS NULL) LIMIT 1 [0001-01-01 00:00:00 0001-01-01 00:00:00 0001-01-01 00:00:00]
Owner

What's wrong?

What's wrong?
lunny added the
need
feedback
label 2021-06-21 13:05:06 +00:00
Author

a.is_delete=? OR a.is_delete IS NULL为什么会生成三次呢,难道不应该分别是三个表名吗?表名都变为a表了

a.is_delete=? OR a.is_delete IS NULL为什么会生成三次呢,难道不应该分别是三个表名吗?表名都变为a表了
lunny added
kind
bug
and removed
need
feedback
labels 2021-06-22 10:53:47 +00:00
jimbirthday added a new dependency 2021-06-23 06:21:52 +00:00
jimbirthday removed a dependency 2021-06-23 08:53:49 +00:00
Sign in to join this conversation.
No Milestone
No Assignees
2 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#1956
No description provided.