locking_test.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package clause_test
  2. import (
  3. "fmt"
  4. "testing"
  5. "github.com/jinzhu/gorm/clause"
  6. )
  7. func TestFor(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.For{
  15. Lockings: []clause.Locking{{Strength: "UPDATE"}},
  16. }},
  17. "SELECT * FROM `users` FOR UPDATE", nil,
  18. },
  19. {
  20. []clause.Interface{clause.Select{}, clause.From{}, clause.For{
  21. Lockings: []clause.Locking{{Strength: "UPDATE"}, {Strength: "SHARE", Table: clause.Table{Name: clause.CurrentTable}}},
  22. }},
  23. "SELECT * FROM `users` FOR UPDATE FOR SHARE OF `users`", nil,
  24. },
  25. {
  26. []clause.Interface{clause.Select{}, clause.From{}, clause.For{
  27. Lockings: []clause.Locking{{Strength: "UPDATE"}, {Strength: "SHARE", Table: clause.Table{Name: clause.CurrentTable}}},
  28. }, clause.For{
  29. Lockings: []clause.Locking{{Strength: "UPDATE", Options: "NOWAIT"}},
  30. }},
  31. "SELECT * FROM `users` FOR UPDATE FOR SHARE OF `users` FOR UPDATE NOWAIT", nil,
  32. },
  33. }
  34. for idx, result := range results {
  35. t.Run(fmt.Sprintf("case #%v", idx), func(t *testing.T) {
  36. checkBuildClauses(t, result.Clauses, result.Result, result.Vars)
  37. })
  38. }
  39. }