support delete with no bean
This commit is contained in:
parent
43977186d3
commit
286a929433
|
@ -241,3 +241,28 @@ func TestUnscopeDelete(t *testing.T) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.False(t, has)
|
assert.False(t, has)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDelete2(t *testing.T) {
|
||||||
|
assert.NoError(t, PrepareEngine())
|
||||||
|
|
||||||
|
type UserinfoDelete2 struct {
|
||||||
|
Uid int64 `xorm:"id pk not null autoincr"`
|
||||||
|
IsMan bool
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.NoError(t, testEngine.Sync2(new(UserinfoDelete2)))
|
||||||
|
|
||||||
|
user := UserinfoDelete2{}
|
||||||
|
cnt, err := testEngine.Insert(&user)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, 1, cnt)
|
||||||
|
|
||||||
|
cnt, err = testEngine.Table("userinfo_delete2").In("id", []int{1}).Delete()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, 1, cnt)
|
||||||
|
|
||||||
|
user2 := UserinfoDelete2{}
|
||||||
|
has, err := testEngine.ID(1).Get(&user2)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.False(t, has)
|
||||||
|
}
|
||||||
|
|
|
@ -83,7 +83,7 @@ func (session *Session) cacheDelete(table *schemas.Table, tableName, sqlStr stri
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete records, bean's non-empty fields are conditions
|
// Delete records, bean's non-empty fields are conditions
|
||||||
func (session *Session) Delete(bean interface{}) (int64, error) {
|
func (session *Session) Delete(beans ...interface{}) (int64, error) {
|
||||||
if session.isAutoClose {
|
if session.isAutoClose {
|
||||||
defer session.Close()
|
defer session.Close()
|
||||||
}
|
}
|
||||||
|
@ -92,7 +92,14 @@ func (session *Session) Delete(bean interface{}) (int64, error) {
|
||||||
return 0, session.statement.LastError
|
return 0, session.statement.LastError
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := session.statement.SetRefBean(bean); err != nil {
|
var (
|
||||||
|
condSQL string
|
||||||
|
condArgs []interface{}
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
if len(beans) > 0 {
|
||||||
|
bean := beans[0]
|
||||||
|
if err = session.statement.SetRefBean(bean); err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,10 +109,14 @@ func (session *Session) Delete(bean interface{}) (int64, error) {
|
||||||
processor.BeforeDelete()
|
processor.BeforeDelete()
|
||||||
}
|
}
|
||||||
|
|
||||||
condSQL, condArgs, err := session.statement.GenConds(bean)
|
condSQL, condArgs, err = session.statement.GenConds(bean)
|
||||||
|
} else {
|
||||||
|
condSQL, condArgs, err = session.statement.GenCondSQL(session.statement.Conds())
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
pLimitN := session.statement.LimitN
|
pLimitN := session.statement.LimitN
|
||||||
if len(condSQL) == 0 && (pLimitN == nil || *pLimitN == 0) {
|
if len(condSQL) == 0 && (pLimitN == nil || *pLimitN == 0) {
|
||||||
return 0, ErrNeedDeletedCond
|
return 0, ErrNeedDeletedCond
|
||||||
|
@ -230,8 +241,8 @@ func (session *Session) Delete(bean interface{}) (int64, error) {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
lenAfterClosures := len(session.afterClosures)
|
lenAfterClosures := len(session.afterClosures)
|
||||||
if lenAfterClosures > 0 {
|
if lenAfterClosures > 0 && len(beans) > 0 {
|
||||||
if value, has := session.afterDeleteBeans[bean]; has && value != nil {
|
if value, has := session.afterDeleteBeans[beans[0]]; has && value != nil {
|
||||||
*value = append(*value, session.afterClosures...)
|
*value = append(*value, session.afterClosures...)
|
||||||
} else {
|
} else {
|
||||||
afterClosures := make([]func(interface{}), lenAfterClosures)
|
afterClosures := make([]func(interface{}), lenAfterClosures)
|
||||||
|
|
Loading…
Reference in New Issue