diff --git a/engine.go b/engine.go index 02099295..abae5694 100644 --- a/engine.go +++ b/engine.go @@ -575,6 +575,13 @@ func (engine *Engine) SetExpr(column string, expression string) *Session { return session.SetExpr(column, expression) } +// Method Options specify the query option +func (engine *Engine) Options(options ...string) *Session { + session := engine.NewSession() + session.IsAutoClose = true + return session.Options(options...) +} + // Temporarily change the Get, Find, Update's table func (engine *Engine) Table(tableNameOrBean interface{}) *Session { session := engine.NewSession() diff --git a/session.go b/session.go index b097c44d..e689e5b6 100644 --- a/session.go +++ b/session.go @@ -172,6 +172,12 @@ func (session *Session) SetExpr(column string, expression string) *Session { return session } +// Method Options specify the query option +func (session *Session) Options(options ...string) *Session { + session.Statement.Options = options + return session +} + // Method Cols provides some columns to special func (session *Session) Cols(columns ...string) *Session { session.Statement.Cols(columns...) diff --git a/statement.go b/statement.go index 9a62d6f0..050fb31d 100644 --- a/statement.go +++ b/statement.go @@ -73,6 +73,7 @@ type Statement struct { incrColumns map[string]incrParam decrColumns map[string]decrParam exprColumns map[string]exprParam + Options []string } // init @@ -1312,6 +1313,20 @@ func (statement *Statement) genSelectSql(columnStr string) (a string) { } } + if len(statement.Options) > 0 { + switch statement.Engine.dialect.DBType() { + case core.MYSQL: + for _, option := range statement.Options { + switch option { + case "select:for-update": + a += " FOR UPDATE" + case "select:lock-in-share-mode": + a += " LOCK IN SHARE MODE" + } + } + } + } + return }