group_by_test.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package clause_test
  2. import (
  3. "fmt"
  4. "testing"
  5. "github.com/jinzhu/gorm/clause"
  6. )
  7. func TestGroupBy(t *testing.T) {
  8. results := []struct {
  9. Clauses []clause.Interface
  10. Result string
  11. Vars []interface{}
  12. }{
  13. {
  14. []clause.Interface{clause.Select{}, clause.From{}, clause.GroupBy{
  15. Columns: []clause.Column{{Name: "role"}},
  16. Having: clause.Where{[]clause.Expression{clause.Eq{"role", "admin"}}},
  17. }},
  18. "SELECT * FROM `users` GROUP BY `role` HAVING `role` = ?", []interface{}{"admin"},
  19. },
  20. {
  21. []clause.Interface{clause.Select{}, clause.From{}, clause.GroupBy{
  22. Columns: []clause.Column{{Name: "role"}},
  23. Having: clause.Where{[]clause.Expression{clause.Eq{"role", "admin"}}},
  24. }, clause.GroupBy{
  25. Columns: []clause.Column{{Name: "gender"}},
  26. Having: clause.Where{[]clause.Expression{clause.Neq{"gender", "U"}}},
  27. }},
  28. "SELECT * FROM `users` GROUP BY `role`,`gender` HAVING `role` = ? AND `gender` <> ?", []interface{}{"admin", "U"},
  29. },
  30. }
  31. for idx, result := range results {
  32. t.Run(fmt.Sprintf("case #%v", idx), func(t *testing.T) {
  33. checkBuildClauses(t, result.Clauses, result.Result, result.Vars)
  34. })
  35. }
  36. }