mirror of
https://gitee.com/johng/gf.git
synced 2024-11-30 03:07:45 +08:00
142 lines
3.2 KiB
Go
142 lines
3.2 KiB
Go
// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
|
|
//
|
|
// This Source Code Form is subject to the terms of the MIT License.
|
|
// If a copy of the MIT was not distributed with this file,
|
|
// You can obtain one at https://github.com/gogf/gf.
|
|
|
|
package mysql_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/gogf/gf/v2/encoding/gjson"
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
"github.com/gogf/gf/v2/os/gtime"
|
|
"github.com/gogf/gf/v2/test/gtest"
|
|
"github.com/gogf/gf/v2/util/gmeta"
|
|
)
|
|
|
|
func Test_Model_Builder(t *testing.T) {
|
|
table := createInitTable()
|
|
defer dropTable(table)
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
m := db.Model(table)
|
|
b := m.Builder()
|
|
|
|
all, err := m.Where(
|
|
b.Where("id", g.Slice{1, 2, 3}).WhereOr("id", g.Slice{4, 5, 6}),
|
|
).All()
|
|
t.AssertNil(err)
|
|
t.Assert(len(all), 6)
|
|
})
|
|
|
|
// Where And
|
|
gtest.C(t, func(t *gtest.T) {
|
|
m := db.Model(table)
|
|
b := m.Builder()
|
|
|
|
all, err := m.Where(
|
|
b.Where("id", g.Slice{1, 2, 3}).WhereOr("id", g.Slice{4, 5, 6}),
|
|
).Where(
|
|
b.Where("id", g.Slice{2, 3}).WhereOr("id", g.Slice{5, 6}),
|
|
).Where(
|
|
b.Where("id", g.Slice{3}).Where("id", g.Slice{1, 2, 3}),
|
|
).All()
|
|
t.AssertNil(err)
|
|
t.Assert(len(all), 1)
|
|
})
|
|
|
|
// Where Or
|
|
gtest.C(t, func(t *gtest.T) {
|
|
m := db.Model(table)
|
|
b := m.Builder()
|
|
|
|
all, err := m.WhereOr(
|
|
b.Where("id", g.Slice{1, 2, 3}).WhereOr("id", g.Slice{4, 5, 6}),
|
|
).WhereOr(
|
|
b.Where("id", g.Slice{2, 3}).WhereOr("id", g.Slice{5, 6}),
|
|
).WhereOr(
|
|
b.Where("id", g.Slice{3}).Where("id", g.Slice{1, 2, 3}),
|
|
).All()
|
|
t.AssertNil(err)
|
|
t.Assert(len(all), 6)
|
|
})
|
|
|
|
// Where with struct which has a field type of *gtime.Time
|
|
gtest.C(t, func(t *gtest.T) {
|
|
m := db.Model(table)
|
|
b := m.Builder()
|
|
|
|
type Query struct {
|
|
Id interface{}
|
|
Nickname *gtime.Time
|
|
}
|
|
|
|
where, args := b.Where(&Query{Id: 1}).Build()
|
|
t.Assert(where, "`id`=? AND `nickname` IS NULL")
|
|
t.Assert(args, []interface{}{1})
|
|
})
|
|
|
|
// Where with struct which has a field type of *gjson.Json
|
|
gtest.C(t, func(t *gtest.T) {
|
|
m := db.Model(table)
|
|
b := m.Builder()
|
|
|
|
type Query struct {
|
|
Id interface{}
|
|
Nickname *gjson.Json
|
|
}
|
|
|
|
where, args := b.Where(&Query{Id: 1}).Build()
|
|
t.Assert(where, "`id`=? AND `nickname` IS NULL")
|
|
t.Assert(args, []interface{}{1})
|
|
})
|
|
|
|
// Where with do struct which has a field type of *gtime.Time and generated by gf cli
|
|
gtest.C(t, func(t *gtest.T) {
|
|
m := db.Model(table)
|
|
b := m.Builder()
|
|
|
|
type Query struct {
|
|
gmeta.Meta `orm:"do:true"`
|
|
Id interface{}
|
|
Nickname *gtime.Time
|
|
}
|
|
|
|
where, args := b.Where(&Query{Id: 1}).Build()
|
|
t.Assert(where, "`id`=?")
|
|
t.Assert(args, []interface{}{1})
|
|
})
|
|
|
|
// Where with do struct which has a field type of *gjson.Json and generated by gf cli
|
|
gtest.C(t, func(t *gtest.T) {
|
|
m := db.Model(table)
|
|
b := m.Builder()
|
|
|
|
type Query struct {
|
|
gmeta.Meta `orm:"do:true"`
|
|
Id interface{}
|
|
Nickname *gjson.Json
|
|
}
|
|
|
|
where, args := b.Where(&Query{Id: 1}).Build()
|
|
t.Assert(where, "`id`=?")
|
|
t.Assert(args, []interface{}{1})
|
|
})
|
|
}
|
|
|
|
func Test_Safe_Builder(t *testing.T) {
|
|
// test whether m.Builder() is chain safe
|
|
gtest.C(t, func(t *gtest.T) {
|
|
b := db.Model().Builder()
|
|
b.Where("id", 1)
|
|
_, args := b.Build()
|
|
t.AssertNil(args)
|
|
|
|
b = b.Where("id", 1)
|
|
_, args = b.Build()
|
|
t.Assert(args, g.Slice{1})
|
|
})
|
|
}
|