From de7ed63cb9a71295e9b26aa5b2b214db3fe1e963 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 17 Aug 2020 20:20:36 +0800 Subject: [PATCH] Fix master/slave bug --- engine_group.go | 28 ++++++++++++++++++++++++++++ session_raw.go | 3 ++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/engine_group.go b/engine_group.go index 3569690b..f2fe913d 100644 --- a/engine_group.go +++ b/engine_group.go @@ -237,3 +237,31 @@ func (eg *EngineGroup) Slave() *Engine { func (eg *EngineGroup) Slaves() []*Engine { return eg.slaves } + +// Query execcute a select SQL and return the result +func (eg *EngineGroup) Query(sqlOrArgs ...interface{}) (resultsSlice []map[string][]byte, err error) { + sess := eg.NewSession() + sess.isAutoClose = true + return sess.Query(sqlOrArgs...) +} + +// QueryInterface execcute a select SQL and return the result +func (eg *EngineGroup) QueryInterface(sqlOrArgs ...interface{}) ([]map[string]interface{}, error) { + sess := eg.NewSession() + sess.isAutoClose = true + return sess.QueryInterface(sqlOrArgs...) +} + +// QueryString execcute a select SQL and return the result +func (eg *EngineGroup) QueryString(sqlOrArgs ...interface{}) ([]map[string]string, error) { + sess := eg.NewSession() + sess.isAutoClose = true + return sess.QueryString(sqlOrArgs...) +} + +// Rows execcute a select SQL and return the result +func (eg *EngineGroup) Rows(bean interface{}) (*Rows, error) { + sess := eg.NewSession() + sess.isAutoClose = true + return sess.Rows(bean) +} diff --git a/session_raw.go b/session_raw.go index 7eb8585d..2b488988 100644 --- a/session_raw.go +++ b/session_raw.go @@ -6,6 +6,7 @@ package xorm import ( "database/sql" + "strings" "xorm.io/xorm/core" ) @@ -32,7 +33,7 @@ func (session *Session) queryRows(sqlStr string, args ...interface{}) (*core.Row if session.isAutoCommit { var db *core.DB - if session.sessionType == groupSession { + if session.sessionType == groupSession && strings.EqualFold(sqlStr[:6], "select") { db = session.engine.engineGroup.Slave().DB() } else { db = session.DB()