from_test.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package clause_test
  2. import (
  3. "fmt"
  4. "testing"
  5. "github.com/jinzhu/gorm/clause"
  6. )
  7. func TestFrom(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{}},
  15. "SELECT * FROM `users`", nil,
  16. },
  17. {
  18. []clause.Interface{
  19. clause.Select{}, clause.From{
  20. Tables: []clause.Table{{Name: "users"}},
  21. Joins: []clause.Join{
  22. {
  23. Type: clause.InnerJoin,
  24. Table: clause.Table{Name: "articles"},
  25. ON: clause.Where{
  26. []clause.Expression{clause.Eq{clause.Column{Table: "articles", Name: "id"}, clause.PrimaryColumn}},
  27. },
  28. },
  29. },
  30. },
  31. },
  32. "SELECT * FROM `users` INNER JOIN `articles` ON `articles`.`id` = `users`.`id`", nil,
  33. },
  34. {
  35. []clause.Interface{
  36. clause.Select{}, clause.From{
  37. Tables: []clause.Table{{Name: "users"}},
  38. Joins: []clause.Join{
  39. {
  40. Type: clause.InnerJoin,
  41. Table: clause.Table{Name: "articles"},
  42. ON: clause.Where{
  43. []clause.Expression{clause.Eq{clause.Column{Table: "articles", Name: "id"}, clause.PrimaryColumn}},
  44. },
  45. }, {
  46. Type: clause.LeftJoin,
  47. Table: clause.Table{Name: "companies"},
  48. Using: []string{"company_name"},
  49. },
  50. },
  51. }, clause.From{
  52. Joins: []clause.Join{
  53. {
  54. Type: clause.RightJoin,
  55. Table: clause.Table{Name: "profiles"},
  56. ON: clause.Where{
  57. []clause.Expression{clause.Eq{clause.Column{Table: "profiles", Name: "email"}, clause.Column{Table: clause.CurrentTable, Name: "email"}}},
  58. },
  59. },
  60. },
  61. },
  62. },
  63. "SELECT * FROM `users` INNER JOIN `articles` ON `articles`.`id` = `users`.`id` LEFT JOIN `companies` USING (`company_name`) RIGHT JOIN `profiles` ON `profiles`.`email` = `users`.`email`", nil,
  64. },
  65. }
  66. for idx, result := range results {
  67. t.Run(fmt.Sprintf("case #%v", idx), func(t *testing.T) {
  68. checkBuildClauses(t, result.Clauses, result.Result, result.Vars)
  69. })
  70. }
  71. }