Query add builder support (#829)
This commit is contained in:
parent
5185fdfa1b
commit
afd1ab91e7
|
@ -17,7 +17,17 @@ import (
|
|||
|
||||
func (session *Session) genQuerySQL(sqlorArgs ...interface{}) (string, []interface{}, error) {
|
||||
if len(sqlorArgs) > 0 {
|
||||
switch sqlorArgs[0].(type) {
|
||||
case string:
|
||||
return sqlorArgs[0].(string), sqlorArgs[1:], nil
|
||||
case *builder.Builder:
|
||||
return sqlorArgs[0].(*builder.Builder).ToSQL()
|
||||
case builder.Builder:
|
||||
bd := sqlorArgs[0].(builder.Builder)
|
||||
return bd.ToSQL()
|
||||
default:
|
||||
return "", nil, ErrUnSupportedType
|
||||
}
|
||||
}
|
||||
|
||||
if session.statement.RawSQL != "" {
|
||||
|
|
|
@ -10,6 +10,8 @@ import (
|
|||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/go-xorm/builder"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
|
@ -183,3 +185,48 @@ func TestQueryNoParams(t *testing.T) {
|
|||
assert.NoError(t, err)
|
||||
assertResult(t, results)
|
||||
}
|
||||
|
||||
func TestQueryWithBuilder(t *testing.T) {
|
||||
assert.NoError(t, prepareEngine())
|
||||
|
||||
type QueryWithBuilder struct {
|
||||
Id int64 `xorm:"autoincr pk"`
|
||||
Msg string `xorm:"varchar(255)"`
|
||||
Age int
|
||||
Money float32
|
||||
Created time.Time `xorm:"created"`
|
||||
}
|
||||
|
||||
testEngine.ShowSQL(true)
|
||||
|
||||
assert.NoError(t, testEngine.Sync2(new(QueryWithBuilder)))
|
||||
|
||||
var q = QueryWithBuilder{
|
||||
Msg: "message",
|
||||
Age: 20,
|
||||
Money: 3000,
|
||||
}
|
||||
cnt, err := testEngine.Insert(&q)
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 1, cnt)
|
||||
|
||||
assertResult := func(t *testing.T, results []map[string][]byte) {
|
||||
assert.EqualValues(t, 1, len(results))
|
||||
id, err := strconv.ParseInt(string(results[0]["id"]), 10, 64)
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 1, id)
|
||||
assert.Equal(t, "message", string(results[0]["msg"]))
|
||||
|
||||
age, err := strconv.Atoi(string(results[0]["age"]))
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 20, age)
|
||||
|
||||
money, err := strconv.ParseFloat(string(results[0]["money"]), 32)
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 3000, money)
|
||||
}
|
||||
|
||||
results, err := testEngine.Query(builder.Select("*").From("query_with_builder"))
|
||||
assert.NoError(t, err)
|
||||
assertResult(t, results)
|
||||
}
|
Loading…
Reference in New Issue