multiple In() supports

This commit is contained in:
Lunny Xiao 2013-12-11 16:27:33 +08:00
parent 82bdc0ec5a
commit bb6a9c24fa
3 changed files with 3311 additions and 3191 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1015,6 +1015,9 @@ func (session *Session) Find(rowsSlicePtr interface{}, condiBean ...interface{})
if columnStr == "" { if columnStr == "" {
columnStr = session.Statement.genColumnStr() columnStr = session.Statement.genColumnStr()
} }
session.Statement.attachInSql()
sql = session.Statement.genSelectSql(columnStr) sql = session.Statement.genSelectSql(columnStr)
args = append(session.Statement.Params, session.Statement.BeanArgs...) args = append(session.Statement.Params, session.Statement.BeanArgs...)
} else { } else {
@ -2508,7 +2511,8 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6
} }
} }
var sql string var sql, inSql string
var inArgs []interface{}
if table.Version != "" && session.Statement.checkVersion { if table.Version != "" && session.Statement.checkVersion {
if condition != "" { if condition != "" {
condition = fmt.Sprintf("WHERE (%v) AND %v = ?", condition, condition = fmt.Sprintf("WHERE (%v) AND %v = ?", condition,
@ -2516,6 +2520,15 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6
} else { } else {
condition = fmt.Sprintf("WHERE %v = ?", session.Engine.Quote(table.Version)) condition = fmt.Sprintf("WHERE %v = ?", session.Engine.Quote(table.Version))
} }
inSql, inArgs = session.Statement.genInSql()
if len(inSql) > 0 {
if condition != "" {
condition += " AND " + inSql
} else {
condition = "WHERE " + inSql
}
}
sql = fmt.Sprintf("UPDATE %v SET %v, %v %v", sql = fmt.Sprintf("UPDATE %v SET %v, %v %v",
session.Engine.Quote(session.Statement.TableName()), session.Engine.Quote(session.Statement.TableName()),
strings.Join(colNames, ", "), strings.Join(colNames, ", "),
@ -2527,13 +2540,24 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6
if condition != "" { if condition != "" {
condition = "WHERE " + condition condition = "WHERE " + condition
} }
inSql, inArgs = session.Statement.genInSql()
if len(inSql) > 0 {
if condition != "" {
condition += " AND " + inSql
} else {
condition = "WHERE " + inSql
}
}
sql = fmt.Sprintf("UPDATE %v SET %v %v", sql = fmt.Sprintf("UPDATE %v SET %v %v",
session.Engine.Quote(session.Statement.TableName()), session.Engine.Quote(session.Statement.TableName()),
strings.Join(colNames, ", "), strings.Join(colNames, ", "),
condition) condition)
} }
args = append(append(args, st.Params...), condiArgs...) args = append(args, st.Params...)
args = append(args, inArgs...)
args = append(args, condiArgs...)
res, err := session.exec(sql, args...) res, err := session.exec(sql, args...)
if err != nil { if err != nil {
@ -2660,10 +2684,18 @@ func (session *Session) Delete(bean interface{}) (int64, error) {
if session.Statement.WhereStr != "" { if session.Statement.WhereStr != "" {
condition = session.Statement.WhereStr condition = session.Statement.WhereStr
if len(colNames) > 0 { if len(colNames) > 0 {
condition += " and " + strings.Join(colNames, " and ") condition += " AND " + strings.Join(colNames, " AND ")
} }
} else { } else {
condition = strings.Join(colNames, " and ") condition = strings.Join(colNames, " AND ")
}
inSql, inArgs := session.Statement.genInSql()
if len(inSql) > 0 {
if len(condition) > 0 {
condition += " AND "
}
condition += inSql
args = append(args, inArgs...)
} }
if len(condition) == 0 { if len(condition) == 0 {
return 0, ErrNeedDeletedCond return 0, ErrNeedDeletedCond

File diff suppressed because it is too large Load Diff