Satisfies the issue mentioned in #110. Introduces flag AutoResetStatement which is by default true, but setting it to false means the statement doesn't get reset. Calling .Init() or setting the flag back to true ensures normal behaviour.
Signed-off-by: Alfred Hall <ahall@ahall.org>
This commit is contained in:
parent
bd1487ba55
commit
62e3e1508e
63
session.go
63
session.go
|
@ -26,6 +26,10 @@ type Session struct {
|
|||
TransType string
|
||||
IsAutoClose bool
|
||||
|
||||
// Automatically reset the statement after operations that execute a SQL
|
||||
// query such as Count(), Find(), Get(), ...
|
||||
AutoResetStatement bool
|
||||
|
||||
// !nashtsai! storing these beans due to yet committed tx
|
||||
afterInsertBeans map[interface{}]*[]func(interface{})
|
||||
afterUpdateBeans map[interface{}]*[]func(interface{})
|
||||
|
@ -45,6 +49,7 @@ func (session *Session) Init() {
|
|||
session.IsAutoCommit = true
|
||||
session.IsCommitedOrRollbacked = false
|
||||
session.IsAutoClose = false
|
||||
session.AutoResetStatement = true
|
||||
|
||||
// !nashtsai! is lazy init better?
|
||||
session.afterInsertBeans = make(map[interface{}]*[]func(interface{}), 0)
|
||||
|
@ -69,6 +74,12 @@ func (session *Session) Close() {
|
|||
}
|
||||
}
|
||||
|
||||
func (session *Session) resetStatement() {
|
||||
if session.AutoResetStatement {
|
||||
session.Statement.Init()
|
||||
}
|
||||
}
|
||||
|
||||
// Method Sql provides raw sql input parameter. When you have a complex SQL statement
|
||||
// and cannot use Where, Id, In and etc. Methods to describe, you can use Sql.
|
||||
func (session *Session) Sql(querystring string, args ...interface{}) *Session {
|
||||
|
@ -445,7 +456,7 @@ func (session *Session) Exec(sqlStr string, args ...interface{}) (sql.Result, er
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
@ -461,7 +472,7 @@ func (session *Session) CreateTable(bean interface{}) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
@ -477,7 +488,7 @@ func (session *Session) CreateIndexes(bean interface{}) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
@ -500,7 +511,7 @@ func (session *Session) CreateUniques(bean interface{}) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
@ -528,7 +539,7 @@ func (session *Session) createAll() error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
@ -549,7 +560,7 @@ func (session *Session) DropIndexes(bean interface{}) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
@ -571,13 +582,13 @@ func (session *Session) DropTable(bean interface{}) error {
|
|||
return err
|
||||
}
|
||||
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
||||
t := reflect.Indirect(reflect.ValueOf(bean)).Type()
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if t.Kind() == reflect.String {
|
||||
session.Statement.AltTableName = bean.(string)
|
||||
} else if t.Kind() == reflect.Struct {
|
||||
|
@ -928,7 +939,7 @@ func (session *Session) Get(bean interface{}) (bool, error) {
|
|||
return false, err
|
||||
}
|
||||
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
@ -993,7 +1004,7 @@ func (session *Session) Count(bean interface{}) (int64, error) {
|
|||
return 0, err
|
||||
}
|
||||
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
@ -1032,7 +1043,7 @@ func (session *Session) Find(rowsSlicePtr interface{}, condiBean ...interface{})
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
@ -1228,7 +1239,7 @@ func (session *Session) Ping() error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
@ -1241,7 +1252,7 @@ func (session *Session) isColumnExist(tableName string, col *core.Column) (bool,
|
|||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
@ -1256,7 +1267,7 @@ func (session *Session) isTableExist(tableName string) (bool, error) {
|
|||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
@ -1270,7 +1281,7 @@ func (session *Session) isIndexExist(tableName, idxName string, unique bool) (bo
|
|||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
@ -1309,7 +1320,7 @@ func (session *Session) addColumn(colName string) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
@ -1325,7 +1336,7 @@ func (session *Session) addIndex(tableName, idxName string) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
@ -1341,7 +1352,7 @@ func (session *Session) addUnique(tableName, uqeName string) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
@ -1357,7 +1368,7 @@ func (session *Session) dropAll() error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
@ -1782,7 +1793,7 @@ func (session *Session) Query(sqlStr string, paramStr ...interface{}) (resultsSl
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
@ -1798,7 +1809,7 @@ func (session *Session) Insert(beans ...interface{}) (int64, error) {
|
|||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
@ -1985,7 +1996,7 @@ func (session *Session) InsertMulti(rowsSlicePtr interface{}) (int64, error) {
|
|||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
@ -2749,7 +2760,7 @@ func (session *Session) InsertOne(bean interface{}) (int64, error) {
|
|||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
@ -2935,7 +2946,7 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6
|
|||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
@ -3010,7 +3021,7 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6
|
|||
var condition = ""
|
||||
session.Statement.processIdParam()
|
||||
st := session.Statement
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if st.WhereStr != "" {
|
||||
condition = fmt.Sprintf("%v", st.WhereStr)
|
||||
}
|
||||
|
@ -3188,7 +3199,7 @@ func (session *Session) Delete(bean interface{}) (int64, error) {
|
|||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
defer session.Statement.Init()
|
||||
defer session.resetStatement()
|
||||
if session.IsAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue