From 6f79e06376c5e3ad591aa5b30dc7f0418c8f838d Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 22 Jul 2021 11:07:53 +0800 Subject: [PATCH] Fix master/slave bug (#2004) Reviewed-on: https://gitea.com/xorm/xorm/pulls/2004 Co-authored-by: Lunny Xiao Co-committed-by: Lunny Xiao --- 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()