|
@@ -1,125 +0,0 @@
|
|
-package builderx
|
|
|
|
-
|
|
|
|
-import (
|
|
|
|
- "fmt"
|
|
|
|
- "testing"
|
|
|
|
-
|
|
|
|
- "github.com/go-xorm/builder"
|
|
|
|
- "github.com/stretchr/testify/assert"
|
|
|
|
-)
|
|
|
|
-
|
|
|
|
-type mockedUser struct {
|
|
|
|
- // 自增id
|
|
|
|
- ID string `db:"id" json:"id,omitempty"`
|
|
|
|
- // 姓名
|
|
|
|
- UserName string `db:"user_name" json:"userName,omitempty"`
|
|
|
|
- // 1男,2女
|
|
|
|
- Sex int `db:"sex" json:"sex,omitempty"`
|
|
|
|
- UUID string `db:"uuid" uuid:"uuid,omitempty"`
|
|
|
|
- Age int `db:"age" json:"age"`
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-var (
|
|
|
|
- userFieldsWithRawStringQuote = RawFieldNames(mockedUser{})
|
|
|
|
- userFieldsWithoutRawStringQuote = FieldNames(mockedUser{})
|
|
|
|
-)
|
|
|
|
-
|
|
|
|
-func TestFieldNames(t *testing.T) {
|
|
|
|
- t.Run("old", func(t *testing.T) {
|
|
|
|
- var u mockedUser
|
|
|
|
- out := FieldNames(&u)
|
|
|
|
- expected := []string{"id", "user_name", "sex", "uuid", "age"}
|
|
|
|
- assert.Equal(t, expected, out)
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- t.Run("new", func(t *testing.T) {
|
|
|
|
- var u mockedUser
|
|
|
|
- out := RawFieldNames(&u)
|
|
|
|
- expected := []string{"`id`", "`user_name`", "`sex`", "`uuid`", "`age`"}
|
|
|
|
- assert.Equal(t, expected, out)
|
|
|
|
- })
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-func TestNewEq(t *testing.T) {
|
|
|
|
- u := &mockedUser{
|
|
|
|
- ID: "123456",
|
|
|
|
- UserName: "wahaha",
|
|
|
|
- }
|
|
|
|
- out := NewEq(u)
|
|
|
|
- fmt.Println(out)
|
|
|
|
- actual := builder.Eq{"id": "123456", "user_name": "wahaha"}
|
|
|
|
- assert.Equal(t, out, actual)
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-// @see https://github.com/go-xorm/builder
|
|
|
|
-func TestBuilderSql(t *testing.T) {
|
|
|
|
- u := &mockedUser{
|
|
|
|
- ID: "123123",
|
|
|
|
- }
|
|
|
|
- fields := RawFieldNames(u)
|
|
|
|
- eq := NewEq(u)
|
|
|
|
- sql, args, err := builder.Select(fields...).From("user").Where(eq).ToSQL()
|
|
|
|
- fmt.Println(sql, args, err)
|
|
|
|
-
|
|
|
|
- actualSQL := "SELECT `id`,`user_name`,`sex`,`uuid`,`age` FROM user WHERE id=?"
|
|
|
|
- actualArgs := []interface{}{"123123"}
|
|
|
|
- assert.Equal(t, sql, actualSQL)
|
|
|
|
- assert.Equal(t, args, actualArgs)
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-func TestBuildSqlDefaultValue(t *testing.T) {
|
|
|
|
- eq := builder.Eq{}
|
|
|
|
- eq["age"] = 0
|
|
|
|
- eq["user_name"] = ""
|
|
|
|
-
|
|
|
|
- t.Run("raw", func(t *testing.T) {
|
|
|
|
- sql, args, err := builder.Select(userFieldsWithRawStringQuote...).From("user").Where(eq).ToSQL()
|
|
|
|
- fmt.Println(sql, args, err)
|
|
|
|
-
|
|
|
|
- actualSQL := "SELECT `id`,`user_name`,`sex`,`uuid`,`age` FROM user WHERE age=? AND user_name=?"
|
|
|
|
- actualArgs := []interface{}{0, ""}
|
|
|
|
- assert.Equal(t, sql, actualSQL)
|
|
|
|
- assert.Equal(t, args, actualArgs)
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- t.Run("withour raw quote", func(t *testing.T) {
|
|
|
|
- sql, args, err := builder.Select(userFieldsWithoutRawStringQuote...).From("user").Where(eq).ToSQL()
|
|
|
|
- fmt.Println(sql, args, err)
|
|
|
|
-
|
|
|
|
- actualSQL := "SELECT id,user_name,sex,uuid,age FROM user WHERE age=? AND user_name=?"
|
|
|
|
- actualArgs := []interface{}{0, ""}
|
|
|
|
- assert.Equal(t, sql, actualSQL)
|
|
|
|
- assert.Equal(t, args, actualArgs)
|
|
|
|
- })
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-func TestBuilderSqlIn(t *testing.T) {
|
|
|
|
- u := &mockedUser{
|
|
|
|
- Age: 18,
|
|
|
|
- }
|
|
|
|
- gtU := NewGt(u)
|
|
|
|
- in := builder.In("id", []string{"1", "2", "3"})
|
|
|
|
- sql, args, err := builder.Select(userFieldsWithRawStringQuote...).From("user").Where(in).And(gtU).ToSQL()
|
|
|
|
- fmt.Println(sql, args, err)
|
|
|
|
-
|
|
|
|
- actualSQL := "SELECT `id`,`user_name`,`sex`,`uuid`,`age` FROM user WHERE id IN (?,?,?) AND age>?"
|
|
|
|
- actualArgs := []interface{}{"1", "2", "3", 18}
|
|
|
|
- assert.Equal(t, sql, actualSQL)
|
|
|
|
- assert.Equal(t, args, actualArgs)
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-func TestBuildSqlLike(t *testing.T) {
|
|
|
|
- like := builder.Like{"name", "wang"}
|
|
|
|
- sql, args, err := builder.Select(userFieldsWithRawStringQuote...).From("user").Where(like).ToSQL()
|
|
|
|
- fmt.Println(sql, args, err)
|
|
|
|
-
|
|
|
|
- actualSQL := "SELECT `id`,`user_name`,`sex`,`uuid`,`age` FROM user WHERE name LIKE ?"
|
|
|
|
- actualArgs := []interface{}{"%wang%"}
|
|
|
|
- assert.Equal(t, sql, actualSQL)
|
|
|
|
- assert.Equal(t, args, actualArgs)
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-func TestJoin(t *testing.T) {
|
|
|
|
- ret := PostgreSqlJoin([]string{"name", "age"})
|
|
|
|
- assert.Equal(t, "name = $2, age = $3", ret)
|
|
|
|
-}
|
|
|