where_test.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package clause_test
  2. import (
  3. "fmt"
  4. "testing"
  5. "github.com/jinzhu/gorm/clause"
  6. )
  7. func TestWhere(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.Where{
  15. Exprs: []clause.Expression{clause.Eq{Column: clause.PrimaryColumn, Value: "1"}, clause.Gt{Column: "age", Value: 18}, clause.Or(clause.Neq{Column: "name", Value: "jinzhu"})},
  16. }},
  17. "SELECT * FROM `users` WHERE `users`.`id` = ? AND `age` > ? OR `name` <> ?", []interface{}{"1", 18, "jinzhu"},
  18. },
  19. {
  20. []clause.Interface{clause.Select{}, clause.From{}, clause.Where{
  21. Exprs: []clause.Expression{clause.Or(clause.Neq{Column: "name", Value: "jinzhu"}), clause.Eq{Column: clause.PrimaryColumn, Value: "1"}, clause.Gt{Column: "age", Value: 18}},
  22. }},
  23. "SELECT * FROM `users` WHERE `users`.`id` = ? OR `name` <> ? AND `age` > ?", []interface{}{"1", "jinzhu", 18},
  24. },
  25. {
  26. []clause.Interface{clause.Select{}, clause.From{}, clause.Where{
  27. Exprs: []clause.Expression{clause.Or(), clause.Or(clause.Neq{Column: "name", Value: "jinzhu"}), clause.Eq{Column: clause.PrimaryColumn, Value: "1"}, clause.Gt{Column: "age", Value: 18}},
  28. }},
  29. "SELECT * FROM `users` WHERE `users`.`id` = ? OR `name` <> ? AND `age` > ?", []interface{}{"1", "jinzhu", 18},
  30. },
  31. {
  32. []clause.Interface{clause.Select{}, clause.From{}, clause.Where{
  33. Exprs: []clause.Expression{clause.Or(clause.Eq{Column: clause.PrimaryColumn, Value: "1"}), clause.Or(clause.Neq{Column: "name", Value: "jinzhu"})},
  34. }},
  35. "SELECT * FROM `users` WHERE `users`.`id` = ? OR `name` <> ?", []interface{}{"1", "jinzhu"},
  36. },
  37. {
  38. []clause.Interface{clause.Select{}, clause.From{}, clause.Where{
  39. Exprs: []clause.Expression{clause.Eq{Column: clause.PrimaryColumn, Value: "1"}, clause.Gt{Column: "age", Value: 18}, clause.Or(clause.Neq{Column: "name", Value: "jinzhu"})},
  40. }, clause.Where{
  41. Exprs: []clause.Expression{clause.Or(clause.Gt{Column: "score", Value: 100}, clause.Like{Column: "name", Value: "%linus%"})},
  42. }},
  43. "SELECT * FROM `users` WHERE `users`.`id` = ? AND `age` > ? OR `name` <> ? AND (`score` > ? OR `name` LIKE ?)", []interface{}{"1", 18, "jinzhu", 100, "%linus%"},
  44. },
  45. {
  46. []clause.Interface{clause.Select{}, clause.From{}, clause.Where{
  47. Exprs: []clause.Expression{clause.Not(clause.Eq{Column: clause.PrimaryColumn, Value: "1"}, clause.Gt{Column: "age", Value: 18}), clause.Or(clause.Neq{Column: "name", Value: "jinzhu"})},
  48. }, clause.Where{
  49. Exprs: []clause.Expression{clause.Or(clause.Not(clause.Gt{Column: "score", Value: 100}), clause.Like{Column: "name", Value: "%linus%"})},
  50. }},
  51. "SELECT * FROM `users` WHERE (`users`.`id` <> ? AND `age` <= ?) OR `name` <> ? AND (`score` <= ? OR `name` LIKE ?)", []interface{}{"1", 18, "jinzhu", 100, "%linus%"},
  52. },
  53. }
  54. for idx, result := range results {
  55. t.Run(fmt.Sprintf("case #%v", idx), func(t *testing.T) {
  56. checkBuildClauses(t, result.Clauses, result.Result, result.Vars)
  57. })
  58. }
  59. }