builder_test.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. actual := []string{"`id`", "`user_name`", "`sex`", "`uuid`", "`age`"}
  25. assert.Equal(t, out, actual)
  26. }
  27. func TestNewEq(t *testing.T) {
  28. u := &User{
  29. Id: "123456",
  30. UserName: "wahaha",
  31. }
  32. out := NewEq(u)
  33. fmt.Println(out)
  34. actual := builder.Eq{"id": "123456", "user_name": "wahaha"}
  35. assert.Equal(t, out, actual)
  36. }
  37. // @see https://github.com/go-xorm/builder
  38. func TestBuilderSql(t *testing.T) {
  39. u := &User{
  40. Id: "123123",
  41. }
  42. fields := FieldNames(u)
  43. eq := NewEq(u)
  44. sql, args, err := builder.Select(fields...).From("user").Where(eq).ToSQL()
  45. fmt.Println(sql, args, err)
  46. actualSql := "SELECT `id`,`user_name`,`sex`,`uuid`,`age` FROM user WHERE id=?"
  47. actualArgs := []interface{}{"123123"}
  48. assert.Equal(t, sql, actualSql)
  49. assert.Equal(t, args, actualArgs)
  50. }
  51. func TestBuildSqlDefaultValue(t *testing.T) {
  52. var eq = builder.Eq{}
  53. eq["age"] = 0
  54. eq["user_name"] = ""
  55. sql, args, err := builder.Select(userFields...).From("user").Where(eq).ToSQL()
  56. fmt.Println(sql, args, err)
  57. actualSql := "SELECT `id`,`user_name`,`sex`,`uuid`,`age` FROM user WHERE age=? AND user_name=?"
  58. actualArgs := []interface{}{0, ""}
  59. assert.Equal(t, sql, actualSql)
  60. assert.Equal(t, args, actualArgs)
  61. }
  62. func TestBuilderSqlIn(t *testing.T) {
  63. u := &User{
  64. Age: 18,
  65. }
  66. gtU := NewGt(u)
  67. in := builder.In("id", []string{"1", "2", "3"})
  68. sql, args, err := builder.Select(userFields...).From("user").Where(in).And(gtU).ToSQL()
  69. fmt.Println(sql, args, err)
  70. actualSql := "SELECT `id`,`user_name`,`sex`,`uuid`,`age` FROM user WHERE id IN (?,?,?) AND age>?"
  71. actualArgs := []interface{}{"1", "2", "3", 18}
  72. assert.Equal(t, sql, actualSql)
  73. assert.Equal(t, args, actualArgs)
  74. }
  75. func TestBuildSqlLike(t *testing.T) {
  76. like := builder.Like{"name", "wang"}
  77. sql, args, err := builder.Select(userFields...).From("user").Where(like).ToSQL()
  78. fmt.Println(sql, args, err)
  79. actualSql := "SELECT `id`,`user_name`,`sex`,`uuid`,`age` FROM user WHERE name LIKE ?"
  80. actualArgs := []interface{}{"%wang%"}
  81. assert.Equal(t, sql, actualSql)
  82. assert.Equal(t, args, actualArgs)
  83. }