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
|
return session
|
||||||
}
|
}
|
||||||
|
|
||||||
// Conds returns session query conditions
|
// Conds returns session query conditions except auto bean conditions
|
||||||
func (session *Session) Conds() builder.Cond {
|
func (session *Session) Conds() builder.Cond {
|
||||||
return session.Statement.cond
|
return session.Statement.cond
|
||||||
}
|
}
|
||||||
|
|
|
@ -260,3 +260,35 @@ func TestIn(t *testing.T) {
|
||||||
panic(err)
|
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 {
|
if err != nil {
|
||||||
return err
|
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)
|
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 {
|
if !statement.noAutoCondition {
|
||||||
var addedTableName = (len(statement.JoinStr) > 0)
|
var addedTableName = (len(statement.JoinStr) > 0)
|
||||||
autoCond, err := statement.buildConds(statement.RefTable, bean, true, true, false, true, addedTableName)
|
autoCond, err := statement.buildConds(statement.RefTable, bean, true, true, false, true, addedTableName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", nil, err
|
return err
|
||||||
}
|
}
|
||||||
statement.cond = statement.cond.And(autoCond)
|
statement.cond = statement.cond.And(autoCond)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := statement.processIDParam(); err != nil {
|
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
|
return "", nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -940,14 +947,12 @@ func (statement *Statement) genGetSQL(bean interface{}) (string, []interface{},
|
||||||
columnStr = "*"
|
columnStr = "*"
|
||||||
}
|
}
|
||||||
|
|
||||||
var condSQL string
|
|
||||||
var condArgs []interface{}
|
|
||||||
var err error
|
|
||||||
if isStruct {
|
if isStruct {
|
||||||
condSQL, condArgs, err = statement.genConds(bean)
|
if err := statement.mergeConds(bean); err != nil {
|
||||||
} else {
|
return "", nil, err
|
||||||
condSQL, condArgs, err = builder.ToSQL(statement.cond)
|
}
|
||||||
}
|
}
|
||||||
|
condSQL, condArgs, err := builder.ToSQL(statement.cond)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", nil, err
|
return "", nil, err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue