fix Conds bug on Find and add test for FindAndCount (#652)
This commit is contained in:
parent
1aa1846afb
commit
8cfde0eb4b
|
@ -64,7 +64,7 @@ func (session *Session) NotIn(column string, args ...interface{}) *Session {
|
|||
return session
|
||||
}
|
||||
|
||||
// Conds returns session query conditions
|
||||
// Conds returns session query conditions except auto bean conditions
|
||||
func (session *Session) Conds() builder.Cond {
|
||||
return session.Statement.cond
|
||||
}
|
||||
|
|
|
@ -260,3 +260,35 @@ func TestIn(t *testing.T) {
|
|||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFindAndCount(t *testing.T) {
|
||||
assert.NoError(t, prepareEngine())
|
||||
|
||||
type FindAndCount struct {
|
||||
Id int64
|
||||
Name string
|
||||
}
|
||||
|
||||
assert.NoError(t, testEngine.Sync2(new(FindAndCount)))
|
||||
|
||||
_, err := testEngine.Insert([]FindAndCount{
|
||||
{
|
||||
Name: "test1",
|
||||
},
|
||||
{
|
||||
Name: "test2",
|
||||
},
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
|
||||
var results []FindAndCount
|
||||
sess := testEngine.Where("name = ?", "test1")
|
||||
conds := sess.Conds()
|
||||
err = sess.Find(&results)
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 1, len(results))
|
||||
|
||||
total, err := testEngine.Where(conds).Count(new(FindAndCount))
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 1, total)
|
||||
}
|
||||
|
|
|
@ -119,7 +119,8 @@ func (session *Session) Find(rowsSlicePtr interface{}, condiBean ...interface{})
|
|||
}
|
||||
}
|
||||
|
||||
condSQL, condArgs, err := builder.ToSQL(session.Statement.cond.And(autoCond))
|
||||
session.Statement.cond = session.Statement.cond.And(autoCond)
|
||||
condSQL, condArgs, err := builder.ToSQL(session.Statement.cond)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
21
statement.go
21
statement.go
|
@ -890,17 +890,24 @@ func (statement *Statement) buildConds(table *core.Table, bean interface{}, incl
|
|||
statement.unscoped, statement.mustColumnMap, statement.TableName(), statement.TableAlias, addedTableName)
|
||||
}
|
||||
|
||||
func (statement *Statement) genConds(bean interface{}) (string, []interface{}, error) {
|
||||
func (statement *Statement) mergeConds(bean interface{}) error {
|
||||
if !statement.noAutoCondition {
|
||||
var addedTableName = (len(statement.JoinStr) > 0)
|
||||
autoCond, err := statement.buildConds(statement.RefTable, bean, true, true, false, true, addedTableName)
|
||||
if err != nil {
|
||||
return "", nil, err
|
||||
return err
|
||||
}
|
||||
statement.cond = statement.cond.And(autoCond)
|
||||
}
|
||||
|
||||
if err := statement.processIDParam(); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (statement *Statement) genConds(bean interface{}) (string, []interface{}, error) {
|
||||
if err := statement.mergeConds(bean); err != nil {
|
||||
return "", nil, err
|
||||
}
|
||||
|
||||
|
@ -940,14 +947,12 @@ func (statement *Statement) genGetSQL(bean interface{}) (string, []interface{},
|
|||
columnStr = "*"
|
||||
}
|
||||
|
||||
var condSQL string
|
||||
var condArgs []interface{}
|
||||
var err error
|
||||
if isStruct {
|
||||
condSQL, condArgs, err = statement.genConds(bean)
|
||||
} else {
|
||||
condSQL, condArgs, err = builder.ToSQL(statement.cond)
|
||||
if err := statement.mergeConds(bean); err != nil {
|
||||
return "", nil, err
|
||||
}
|
||||
}
|
||||
condSQL, condArgs, err := builder.ToSQL(statement.cond)
|
||||
if err != nil {
|
||||
return "", nil, err
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue