add nocascade method
This commit is contained in:
parent
59412a951c
commit
31dbc146ee
15
engine.go
15
engine.go
|
@ -15,10 +15,11 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
POSTGRES = "postgres"
|
POSTGRES = "postgres"
|
||||||
SQLITE = "sqlite3"
|
SQLITE = "sqlite3"
|
||||||
MYSQL = "mysql"
|
MYSQL = "mysql"
|
||||||
MYMYSQL = "mymysql"
|
MYMYSQL = "mymysql"
|
||||||
|
ORACLE_OCI = "oci8"
|
||||||
)
|
)
|
||||||
|
|
||||||
// a dialect is a driver's wrapper
|
// a dialect is a driver's wrapper
|
||||||
|
@ -140,6 +141,12 @@ func (engine *Engine) NoCache() *Session {
|
||||||
return session.NoCache()
|
return session.NoCache()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (engine *Engine) NoCascade() *Session {
|
||||||
|
session := engine.NewSession()
|
||||||
|
session.IsAutoClose = true
|
||||||
|
return session.NoCascade()
|
||||||
|
}
|
||||||
|
|
||||||
// Set a table use a special cacher
|
// Set a table use a special cacher
|
||||||
func (engine *Engine) MapCacher(bean interface{}, cacher Cacher) {
|
func (engine *Engine) MapCacher(bean interface{}, cacher Cacher) {
|
||||||
t := rType(bean)
|
t := rType(bean)
|
||||||
|
|
21
session.go
21
session.go
|
@ -129,6 +129,16 @@ func (session *Session) Cols(columns ...string) *Session {
|
||||||
return 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
|
// Xorm automatically retrieve condition according struct, but
|
||||||
// if struct has bool field, it will ignore them. So use UseBool
|
// if struct has bool field, it will ignore them. So use UseBool
|
||||||
// to tell system to do not ignore them.
|
// 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()
|
newSession := session.Engine.NewSession()
|
||||||
defer newSession.Close()
|
defer newSession.Close()
|
||||||
cacheBean = reflect.New(structValue.Type()).Interface()
|
cacheBean = reflect.New(structValue.Type()).Interface()
|
||||||
|
newSession.Id(id).NoCache()
|
||||||
if session.Statement.AltTableName != "" {
|
if session.Statement.AltTableName != "" {
|
||||||
has, err = newSession.Id(id).NoCache().Table(session.Statement.AltTableName).Get(cacheBean)
|
newSession.Table(session.Statement.AltTableName)
|
||||||
} else {
|
|
||||||
has, err = newSession.Id(id).NoCache().Get(cacheBean)
|
|
||||||
}
|
}
|
||||||
|
if !session.Statement.UseCascade {
|
||||||
|
newSession.NoCascade()
|
||||||
|
}
|
||||||
|
has, err = newSession.Get(cacheBean)
|
||||||
if err != nil || !has {
|
if err != nil || !has {
|
||||||
return has, err
|
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 {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue