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) {
|
func (session *Session) genQuerySQL(sqlorArgs ...interface{}) (string, []interface{}, error) {
|
||||||
if len(sqlorArgs) > 0 {
|
if len(sqlorArgs) > 0 {
|
||||||
return sqlorArgs[0].(string), sqlorArgs[1:], nil
|
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 != "" {
|
if session.statement.RawSQL != "" {
|
||||||
|
|
|
@ -10,6 +10,8 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/go-xorm/builder"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -183,3 +185,48 @@ func TestQueryNoParams(t *testing.T) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assertResult(t, results)
|
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