builder_test.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package builderx
  2. import (
  3. "fmt"
  4. "testing"
  5. "github.com/go-xorm/builder"
  6. "github.com/stretchr/testify/assert"
  7. )
  8. type (
  9. User struct {
  10. // 自增id
  11. Id string `db:"id" json:"id,omitempty"`
  12. // 姓名
  13. UserName string `db:"user_name" json:"userName,omitempty"`
  14. // 1男,2女
  15. Sex int `db:"sex" json:"sex,omitempty"`
  16. Uuid string `db:"uuid" uuid:"uuid,omitempty"`
  17. Age int `db:"age" json:"age"`
  18. }
  19. )
  20. var userFields = FieldNames(User{})
  21. func TestFieldNames(t *testing.T) {
  22. var u User
  23. out := FieldNames(&u)
  24. fmt.Println(out)
  25. actual := []string{"id", "user_name", "sex", "uuid", "age"}
  26. assert.Equal(t, out, actual)
  27. }
  28. func TestNewEq(t *testing.T) {
  29. u := &User{
  30. Id: "123456",
  31. UserName: "wahaha",
  32. }
  33. out := NewEq(u)
  34. fmt.Println(out)
  35. actual := builder.Eq{"id": "123456", "user_name": "wahaha"}
  36. assert.Equal(t, out, actual)
  37. }
  38. // @see https://github.com/go-xorm/builder
  39. func TestBuilderSql(t *testing.T) {
  40. u := &User{
  41. Id: "123123",
  42. }
  43. fields := FieldNames(u)
  44. eq := NewEq(u)
  45. sql, args, err := builder.Select(fields...).From("user").Where(eq).ToSQL()
  46. fmt.Println(sql, args, err)
  47. actualSql := "SELECT id,user_name,sex,uuid,age FROM user WHERE id=?"
  48. actualArgs := []interface{}{"123123"}
  49. assert.Equal(t, sql, actualSql)
  50. assert.Equal(t, args, actualArgs)
  51. }
  52. func TestBuildSqlDefaultValue(t *testing.T) {
  53. var eq = builder.Eq{}
  54. eq["age"] = 0
  55. eq["user_name"] = ""
  56. sql, args, err := builder.Select(userFields...).From("user").Where(eq).ToSQL()
  57. fmt.Println(sql, args, err)
  58. actualSql := "SELECT id,user_name,sex,uuid,age FROM user WHERE age=? AND user_name=?"
  59. actualArgs := []interface{}{0, ""}
  60. assert.Equal(t, sql, actualSql)
  61. assert.Equal(t, args, actualArgs)
  62. }
  63. func TestBuilderSqlIn(t *testing.T) {
  64. u := &User{
  65. Age: 18,
  66. }
  67. gtU := NewGt(u)
  68. in := builder.In("id", []string{"1", "2", "3"})
  69. sql, args, err := builder.Select(userFields...).From("user").Where(in).And(gtU).ToSQL()
  70. fmt.Println(sql, args, err)
  71. actualSql := "SELECT id,user_name,sex,uuid,age FROM user WHERE id IN (?,?,?) AND age>?"
  72. actualArgs := []interface{}{"1", "2", "3", 18}
  73. assert.Equal(t, sql, actualSql)
  74. assert.Equal(t, args, actualArgs)
  75. }
  76. func TestBuildSqlLike(t *testing.T) {
  77. like := builder.Like{"name", "wang"}
  78. sql, args, err := builder.Select(userFields...).From("user").Where(like).ToSQL()
  79. fmt.Println(sql, args, err)
  80. actualSql := "SELECT id,user_name,sex,uuid,age FROM user WHERE name LIKE ?"
  81. actualArgs := []interface{}{"%wang%"}
  82. assert.Equal(t, sql, actualSql)
  83. assert.Equal(t, args, actualArgs)
  84. }