From 31dbc146ee9d579f081dca72ea537ef8aebe5c26 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 19 Dec 2013 22:32:00 +0800 Subject: [PATCH] add nocascade method --- engine.go | 15 +++++++++++---- session.go | 21 +++++++++++++++++---- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/engine.go b/engine.go index 56a286cb..aac949b1 100644 --- a/engine.go +++ b/engine.go @@ -15,10 +15,11 @@ import ( ) const ( - POSTGRES = "postgres" - SQLITE = "sqlite3" - MYSQL = "mysql" - MYMYSQL = "mymysql" + POSTGRES = "postgres" + SQLITE = "sqlite3" + MYSQL = "mysql" + MYMYSQL = "mymysql" + ORACLE_OCI = "oci8" ) // a dialect is a driver's wrapper @@ -140,6 +141,12 @@ func (engine *Engine) NoCache() *Session { return session.NoCache() } +func (engine *Engine) NoCascade() *Session { + session := engine.NewSession() + session.IsAutoClose = true + return session.NoCascade() +} + // Set a table use a special cacher func (engine *Engine) MapCacher(bean interface{}, cacher Cacher) { t := rType(bean) diff --git a/session.go b/session.go index c8de127d..7f156a4a 100644 --- a/session.go +++ b/session.go @@ -129,6 +129,16 @@ func (session *Session) Cols(columns ...string) *Session { return session } +func (session *Session) NoCascade() *Session { + session.Statement.UseCascade = false + return session +} + +/* +func (session *Session) MustCols(columns ...string) *Session { + session.Statement.Must() +}*/ + // Xorm automatically retrieve condition according struct, but // if struct has bool field, it will ignore them. So use UseBool // to tell system to do not ignore them. @@ -635,11 +645,14 @@ func (session *Session) cacheGet(bean interface{}, sql string, args ...interface newSession := session.Engine.NewSession() defer newSession.Close() cacheBean = reflect.New(structValue.Type()).Interface() + newSession.Id(id).NoCache() if session.Statement.AltTableName != "" { - has, err = newSession.Id(id).NoCache().Table(session.Statement.AltTableName).Get(cacheBean) - } else { - has, err = newSession.Id(id).NoCache().Get(cacheBean) + newSession.Table(session.Statement.AltTableName) } + if !session.Statement.UseCascade { + newSession.NoCascade() + } + has, err = newSession.Get(cacheBean) if err != nil || !has { return has, err } @@ -2129,7 +2142,7 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) { } // -- - colNames, args, err := table.genCols(session, bean, false, false) + colNames, args, err := table.genCols(session, bean, true, false) if err != nil { return 0, err }