From bfe42aec253886a054e929dbd4052df2d0224f88 Mon Sep 17 00:00:00 2001 From: liumingmin <443925902@qq.com> Date: Mon, 20 Aug 2018 15:03:29 +0800 Subject: [PATCH] =?UTF-8?q?fix=20#1075=20=E4=BD=BF=E7=94=A8EngineGroup?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=B8=80=E4=B8=BB=E5=A4=9A=E4=BB=8E=E9=9B=86?= =?UTF-8?q?=E7=BE=A4=EF=BC=8C=E6=97=A0=E6=B3=95=E4=BB=8EMaster=E6=89=A7?= =?UTF-8?q?=E8=A1=8CSql=E6=9F=A5=E8=AF=A2=EF=BC=8C=E5=B9=B6=E4=B8=94?= =?UTF-8?q?=E6=80=BB=E6=98=AF=E4=BB=8ESlave=E6=9F=A5=E8=AF=A2=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- engine.go | 7 +++++++ session.go | 2 ++ session_raw.go | 12 +++++++++--- 3 files changed, 18 insertions(+), 3 deletions(-) mode change 100644 => 100755 engine.go mode change 100644 => 100755 session.go mode change 100644 => 100755 session_raw.go 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)