Merge branch 'master' of github.com:go-xorm/xorm

This commit is contained in:
Lunny Xiao 2014-05-31 12:24:11 +08:00
commit ceaef4b7db
1 changed files with 37 additions and 26 deletions

View File

@ -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()
}