Skip to content
This repository was archived by the owner on Sep 7, 2021. It is now read-only.
This repository is currently being migrated. It's locked while the migration is in progress.

Commit 4ce90f9

Browse files
authored
Exec support builder (#1064)
1 parent 4b224e8 commit 4ce90f9

File tree

4 files changed

+29
-15
lines changed

4 files changed

+29
-15
lines changed

engine.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1333,10 +1333,10 @@ func (engine *Engine) DropIndexes(bean interface{}) error {
13331333
}
13341334

13351335
// Exec raw sql
1336-
func (engine *Engine) Exec(sql string, args ...interface{}) (sql.Result, error) {
1336+
func (engine *Engine) Exec(sqlorArgs ...interface{}) (sql.Result, error) {
13371337
session := engine.NewSession()
13381338
defer session.Close()
1339-
return session.Exec(sql, args...)
1339+
return session.Exec(sqlorArgs...)
13401340
}
13411341

13421342
// Query a raw sql and return records as []map[string][]byte

interface.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ type Interface interface {
2727
Delete(interface{}) (int64, error)
2828
Distinct(columns ...string) *Session
2929
DropIndexes(bean interface{}) error
30-
Exec(string, ...interface{}) (sql.Result, error)
30+
Exec(sqlOrAgrs ...interface{}) (sql.Result, error)
3131
Exist(bean ...interface{}) (bool, error)
3232
Find(interface{}, ...interface{}) error
3333
FindAndCount(interface{}, ...interface{}) (int64, error)

session_query.go

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,7 @@ import (
1717

1818
func (session *Session) genQuerySQL(sqlorArgs ...interface{}) (string, []interface{}, error) {
1919
if len(sqlorArgs) > 0 {
20-
switch sqlorArgs[0].(type) {
21-
case string:
22-
return sqlorArgs[0].(string), sqlorArgs[1:], nil
23-
case *builder.Builder:
24-
return sqlorArgs[0].(*builder.Builder).ToSQL()
25-
case builder.Builder:
26-
bd := sqlorArgs[0].(builder.Builder)
27-
return bd.ToSQL()
28-
default:
29-
return "", nil, ErrUnSupportedType
30-
}
20+
return convertSQLOrArgs(sqlorArgs...)
3121
}
3222

3323
if session.statement.RawSQL != "" {

session_raw.go

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"reflect"
1010
"time"
1111

12+
"github.com/go-xorm/builder"
1213
"github.com/go-xorm/core"
1314
)
1415

@@ -193,11 +194,34 @@ func (session *Session) exec(sqlStr string, args ...interface{}) (sql.Result, er
193194
return session.DB().Exec(sqlStr, args...)
194195
}
195196

197+
func convertSQLOrArgs(sqlorArgs ...interface{}) (string, []interface{}, error) {
198+
switch sqlorArgs[0].(type) {
199+
case string:
200+
return sqlorArgs[0].(string), sqlorArgs[1:], nil
201+
case *builder.Builder:
202+
return sqlorArgs[0].(*builder.Builder).ToSQL()
203+
case builder.Builder:
204+
bd := sqlorArgs[0].(builder.Builder)
205+
return bd.ToSQL()
206+
}
207+
208+
return "", nil, ErrUnSupportedType
209+
}
210+
196211
// Exec raw sql
197-
func (session *Session) Exec(sqlStr string, args ...interface{}) (sql.Result, error) {
212+
func (session *Session) Exec(sqlorArgs ...interface{}) (sql.Result, error) {
198213
if session.isAutoClose {
199214
defer session.Close()
200215
}
201216

217+
if len(sqlorArgs) == 0 {
218+
return nil, ErrUnSupportedType
219+
}
220+
221+
sqlStr, args, err := convertSQLOrArgs(sqlorArgs...)
222+
if err != nil {
223+
return nil, err
224+
}
225+
202226
return session.exec(sqlStr, args...)
203227
}

0 commit comments

Comments
 (0)