diff --git a/engine_group.go b/engine_group.go index 5eee3e61..6796075e 100644 --- a/engine_group.go +++ b/engine_group.go @@ -74,6 +74,13 @@ func (eg *EngineGroup) Close() error { return nil } +// NewSession returned a group session +func (eg *EngineGroup) NewSession() *Session { + sess := eg.Engine.NewSession() + sess.sessionType = groupSession + return sess +} + // Master returns the master engine func (eg *EngineGroup) Master() *Engine { return eg.Engine diff --git a/session.go b/session.go index e3f7b989..2174cd23 100644 --- a/session.go +++ b/session.go @@ -18,6 +18,13 @@ import ( "github.com/go-xorm/core" ) +type sessionType int + +const ( + engineSession sessionType = iota + groupSession +) + // Session keep a pointer to sql.DB and provides all execution of all // kind of database operations. type Session struct { @@ -54,6 +61,8 @@ type Session struct { err error ctx context.Context + + sessionType sessionType } // Clone copy all the session's content and return a new session @@ -86,6 +95,7 @@ func (session *Session) Init() { session.lastSQLArgs = []interface{}{} session.ctx = session.engine.defaultContext + session.sessionType = engineSession } // Close release the connection from pool diff --git a/session_raw.go b/session_raw.go index 23ef0a16..c2556365 100644 --- a/session_raw.go +++ b/session_raw.go @@ -49,7 +49,7 @@ func (session *Session) queryRows(sqlStr string, args ...interface{}) (*core.Row if session.isAutoCommit { var db *core.DB - if session.engine.engineGroup != nil { + if session.sessionType == groupSession { db = session.engine.engineGroup.Slave().DB() } else { db = session.DB()