diff --git a/engine.go b/engine.go old mode 100644 new mode 100755 index d959d01f..f8b250e1 --- a/engine.go +++ b/engine.go @@ -308,6 +308,13 @@ func (engine *Engine) NewSession() *Session { return session } +func (engine *Engine) NewMasterSession() *Session { + session := &Session{engine: engine} + session.Init() + session.isMasterOwn=true + return session +} + // Close the engine func (engine *Engine) Close() error { return engine.db.Close() diff --git a/session.go b/session.go old mode 100644 new mode 100755 index 3775eb01..f85ae3c2 --- a/session.go +++ b/session.go @@ -27,6 +27,7 @@ type Session struct { isAutoCommit bool isCommitedOrRollbacked bool isAutoClose bool + isMasterOwn bool // Automatically reset the statement after operations that execute a SQL // query such as Count(), Find(), Get(), ... @@ -69,6 +70,7 @@ func (session *Session) Init() { session.isAutoClose = false session.autoResetStatement = true session.prepareStmt = false + session.isMasterOwn = false // !nashtsai! is lazy init better? session.afterInsertBeans = make(map[interface{}]*[]func(interface{}), 0) diff --git a/session_raw.go b/session_raw.go old mode 100644 new mode 100755 index 47823d67..686b85c9 --- a/session_raw.go +++ b/session_raw.go @@ -49,12 +49,18 @@ func (session *Session) queryRows(sqlStr string, args ...interface{}) (*core.Row if session.isAutoCommit { var db *core.DB - if session.engine.engineGroup != nil { - db = session.engine.engineGroup.Slave().DB() - } else { + + if session.isMasterOwn{ db = session.DB() + }else{ + if session.engine.engineGroup != nil { + db = session.engine.engineGroup.Slave().DB() + } else { + db = session.DB() + } } + if session.prepareStmt { // don't clear stmt since session will cache them stmt, err := session.doPrepare(db, sqlStr)