diff --git a/session_delete.go b/session_delete.go index 324cfba3..f8a4c665 100644 --- a/session_delete.go +++ b/session_delete.go @@ -78,7 +78,6 @@ func (session *Session) cacheDelete(sqlStr string, args ...interface{}) error { // Delete records, bean's non-empty fields are conditions func (session *Session) Delete(bean interface{}) (int64, error) { - defer session.resetStatement() if session.isAutoClose { defer session.Close() } diff --git a/session_exist.go b/session_exist.go index e24ee121..049c1ddf 100644 --- a/session_exist.go +++ b/session_exist.go @@ -14,7 +14,6 @@ import ( // Exist returns true if the record exist otherwise return false func (session *Session) Exist(bean ...interface{}) (bool, error) { - defer session.resetStatement() if session.isAutoClose { defer session.Close() } diff --git a/session_find.go b/session_find.go index 8115928d..b7cc446a 100644 --- a/session_find.go +++ b/session_find.go @@ -23,11 +23,13 @@ const ( // are conditions. beans could be []Struct, []*Struct, map[int64]Struct // map[int64]*Struct func (session *Session) Find(rowsSlicePtr interface{}, condiBean ...interface{}) error { - defer session.resetStatement() if session.isAutoClose { defer session.Close() } + return session.find(rowsSlicePtr, condiBean...) +} +func (session *Session) find(rowsSlicePtr interface{}, condiBean ...interface{}) error { sliceValue := reflect.Indirect(reflect.ValueOf(rowsSlicePtr)) if sliceValue.Kind() != reflect.Slice && sliceValue.Kind() != reflect.Map { return errors.New("needs a pointer to a slice or a map") @@ -296,7 +298,7 @@ func (session *Session) cacheFind(t reflect.Type, sqlStr string, rowsSlicePtr in cacher := session.engine.getCacher2(table) ids, err := core.GetCacheSql(cacher, tableName, newsql, args) if err != nil { - rows, err := session.DB().Query(newsql, args...) + rows, err := session.NoCache().queryRows(newsql, args...) if err != nil { return err } @@ -368,9 +370,6 @@ func (session *Session) cacheFind(t reflect.Type, sqlStr string, rowsSlicePtr in } if len(ides) > 0 { - newSession := session.engine.NewSession() - defer newSession.Close() - slices := reflect.New(reflect.SliceOf(t)) beans := slices.Interface() @@ -380,18 +379,18 @@ func (session *Session) cacheFind(t reflect.Type, sqlStr string, rowsSlicePtr in ff = append(ff, ie[0]) } - newSession.In("`"+table.PrimaryKeys[0]+"`", ff...) + session.In("`"+table.PrimaryKeys[0]+"`", ff...) } else { for _, ie := range ides { cond := builder.NewCond() for i, name := range table.PrimaryKeys { cond = cond.And(builder.Eq{"`" + name + "`": ie[i]}) } - newSession.Or(cond) + session.Or(cond) } } - err = newSession.NoCache().Find(beans) + err = session.NoCache().find(beans) if err != nil { return err } diff --git a/session_get.go b/session_get.go index e5c67d4b..a697ec5e 100644 --- a/session_get.go +++ b/session_get.go @@ -15,7 +15,6 @@ import ( // Get retrieve one record from database, bean's non-empty fields // will be as conditions func (session *Session) Get(bean interface{}) (bool, error) { - defer session.resetStatement() if session.isAutoClose { defer session.Close() } @@ -127,7 +126,7 @@ func (session *Session) cacheGet(bean interface{}, sqlStr string, args ...interf table := session.statement.RefTable if err != nil { var res = make([]string, len(table.PrimaryKeys)) - rows, err := session.DB().Query(newsql, args...) + rows, err := session.NoCache().queryRows(newsql, args...) if err != nil { return false, err } diff --git a/session_insert.go b/session_insert.go index 350242bc..cafac151 100644 --- a/session_insert.go +++ b/session_insert.go @@ -22,7 +22,6 @@ func (session *Session) Insert(beans ...interface{}) (int64, error) { if session.isAutoClose { defer session.Close() } - defer session.resetStatement() for _, bean := range beans { sliceValue := reflect.Indirect(reflect.ValueOf(bean)) @@ -280,7 +279,6 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error // InsertMulti insert multiple records func (session *Session) InsertMulti(rowsSlicePtr interface{}) (int64, error) { - defer session.resetStatement() if session.isAutoClose { defer session.Close() } @@ -532,7 +530,6 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) { // The in parameter bean must a struct or a point to struct. The return // parameter is inserted and error func (session *Session) InsertOne(bean interface{}) (int64, error) { - defer session.resetStatement() if session.isAutoClose { defer session.Close() } diff --git a/session_iterate.go b/session_iterate.go index 7c148095..a2f957a2 100644 --- a/session_iterate.go +++ b/session_iterate.go @@ -19,6 +19,10 @@ func (session *Session) Rows(bean interface{}) (*Rows, error) { // are conditions. beans could be []Struct, []*Struct, map[int64]Struct // map[int64]*Struct func (session *Session) Iterate(bean interface{}, fun IterFunc) error { + if session.isAutoClose { + defer session.Close() + } + rows, err := session.Rows(bean) if err != nil { return err diff --git a/session_schema.go b/session_schema.go index 9442715a..a2708b73 100644 --- a/session_schema.go +++ b/session_schema.go @@ -16,7 +16,6 @@ import ( // Ping test if database is ok func (session *Session) Ping() error { - defer session.resetStatement() if session.isAutoClose { defer session.Close() } @@ -35,7 +34,6 @@ func (session *Session) CreateTable(bean interface{}) error { } func (session *Session) createTable(bean interface{}) error { - defer session.resetStatement() v := rValue(bean) if err := session.statement.setRefValue(v); err != nil { return err @@ -56,7 +54,6 @@ func (session *Session) CreateIndexes(bean interface{}) error { } func (session *Session) createIndexes(bean interface{}) error { - defer session.resetStatement() v := rValue(bean) if err := session.statement.setRefValue(v); err != nil { return err @@ -81,7 +78,6 @@ func (session *Session) CreateUniques(bean interface{}) error { } func (session *Session) createUniques(bean interface{}) error { - defer session.resetStatement() v := rValue(bean) if err := session.statement.setRefValue(v); err != nil { return err @@ -107,7 +103,6 @@ func (session *Session) DropIndexes(bean interface{}) error { } func (session *Session) dropIndexes(bean interface{}) error { - defer session.resetStatement() v := rValue(bean) if err := session.statement.setRefValue(v); err != nil { return err @@ -133,7 +128,6 @@ func (session *Session) DropTable(beanOrTableName interface{}) error { } func (session *Session) dropTable(beanOrTableName interface{}) error { - defer session.resetStatement() tableName, err := session.engine.tableName(beanOrTableName) if err != nil { return err @@ -172,7 +166,6 @@ func (session *Session) IsTableExist(beanOrTableName interface{}) (bool, error) } func (session *Session) isTableExist(tableName string) (bool, error) { - defer session.resetStatement() sqlStr, args := session.engine.dialect.TableCheckSql(tableName) results, err := session.queryBytes(sqlStr, args...) return len(results) > 0, err @@ -196,8 +189,6 @@ func (session *Session) IsTableEmpty(bean interface{}) (bool, error) { } func (session *Session) isTableEmpty(tableName string) (bool, error) { - defer session.resetStatement() - var total int64 sqlStr := fmt.Sprintf("select count(*) from %s", session.engine.Quote(tableName)) err := session.queryRow(sqlStr).Scan(&total) @@ -213,8 +204,6 @@ func (session *Session) isTableEmpty(tableName string) (bool, error) { // find if index is exist according cols func (session *Session) isIndexExist2(tableName string, cols []string, unique bool) (bool, error) { - defer session.resetStatement() - indexes, err := session.engine.dialect.GetIndexes(tableName) if err != nil { return false, err @@ -232,8 +221,6 @@ func (session *Session) isIndexExist2(tableName string, cols []string, unique bo } func (session *Session) addColumn(colName string) error { - defer session.resetStatement() - col := session.statement.RefTable.GetColumn(colName) sql, args := session.statement.genAddColumnStr(col) _, err := session.exec(sql, args...) @@ -241,18 +228,13 @@ func (session *Session) addColumn(colName string) error { } func (session *Session) addIndex(tableName, idxName string) error { - defer session.resetStatement() - index := session.statement.RefTable.Indexes[idxName] sqlStr := session.engine.dialect.CreateIndexSql(tableName, index) - _, err := session.exec(sqlStr) return err } func (session *Session) addUnique(tableName, uqeName string) error { - defer session.resetStatement() - index := session.statement.RefTable.Indexes[uqeName] sqlStr := session.engine.dialect.CreateIndexSql(tableName, index) _, err := session.exec(sqlStr) diff --git a/session_update.go b/session_update.go index e80cd0b5..ee0066ce 100644 --- a/session_update.go +++ b/session_update.go @@ -45,7 +45,7 @@ func (session *Session) cacheUpdate(sqlStr string, args ...interface{}) error { session.engine.logger.Debug("[cacheUpdate] get cache sql", newsql, args[nStart:]) ids, err := core.GetCacheSql(cacher, tableName, newsql, args[nStart:]) if err != nil { - rows, err := session.DB().Query(newsql, args[nStart:]...) + rows, err := session.NoCache().queryRows(newsql, args[nStart:]...) if err != nil { return err } @@ -144,7 +144,6 @@ func (session *Session) cacheUpdate(sqlStr string, args ...interface{}) error { // You should call UseBool if you have bool to use. // 2.float32 & float64 may be not inexact as conditions func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int64, error) { - defer session.resetStatement() if session.isAutoClose { defer session.Close() } @@ -249,8 +248,7 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6 } } - st := session.statement - defer session.resetStatement() + st := &session.statement var sqlStr string var condArgs []interface{}