sql_test.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package logger_test
  2. import (
  3. "regexp"
  4. "testing"
  5. "github.com/jinzhu/gorm/logger"
  6. "github.com/jinzhu/now"
  7. )
  8. func TestExplainSQL(t *testing.T) {
  9. type role string
  10. type password []byte
  11. var (
  12. tt = now.MustParse("2020-02-23 11:10:10")
  13. myrole = role("admin")
  14. pwd = password([]byte("pass"))
  15. )
  16. results := []struct {
  17. SQL string
  18. NumericRegexp *regexp.Regexp
  19. Vars []interface{}
  20. Result string
  21. }{
  22. {
  23. SQL: "create table users (name, age, height, actived, bytes, create_at, update_at, deleted_at, email, role, pass) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
  24. NumericRegexp: nil,
  25. Vars: []interface{}{"jinzhu", 1, 999.99, true, []byte("12345"), tt, &tt, nil, "w@g.\"com", myrole, pwd},
  26. Result: `create table users (name, age, height, actived, bytes, create_at, update_at, deleted_at, email, role, pass) values ("jinzhu", 1, 999.990000, true, "12345", "2020-02-23 11:10:10", "2020-02-23 11:10:10", NULL, "w@g.\"com", "admin", "pass")`,
  27. },
  28. {
  29. SQL: "create table users (name, age, height, actived, bytes, create_at, update_at, deleted_at, email, role, pass) values (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10)",
  30. NumericRegexp: regexp.MustCompile("@p(\\d+)"),
  31. Vars: []interface{}{"jinzhu", 1, 999.99, true, []byte("12345"), tt, &tt, nil, "w@g.com", myrole, pwd},
  32. Result: `create table users (name, age, height, actived, bytes, create_at, update_at, deleted_at, email, role, pass) values ("jinzhu", 1, 999.990000, true, "12345", "2020-02-23 11:10:10", "2020-02-23 11:10:10", NULL, "w@g.com", "admin", "pass")`,
  33. },
  34. {
  35. SQL: "create table users (name, age, height, actived, bytes, create_at, update_at, deleted_at, email, role, pass) values ($2, $3, $0, $1, $6, $7, $4, $5, $8, $9, $10)",
  36. NumericRegexp: regexp.MustCompile("\\$(\\d+)"),
  37. Vars: []interface{}{999.99, true, "jinzhu", 1, &tt, nil, []byte("12345"), tt, "w@g.com", myrole, pwd},
  38. Result: `create table users (name, age, height, actived, bytes, create_at, update_at, deleted_at, email, role, pass) values ("jinzhu", 1, 999.990000, true, "12345", "2020-02-23 11:10:10", "2020-02-23 11:10:10", NULL, "w@g.com", "admin", "pass")`,
  39. },
  40. {
  41. SQL: "create table users (name, age, height, actived, bytes, create_at, update_at, deleted_at, email, role, pass) values (@p0, @p10, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9)",
  42. NumericRegexp: regexp.MustCompile("@p(\\d+)"),
  43. Vars: []interface{}{"jinzhu", 999.99, true, []byte("12345"), tt, &tt, nil, "w@g.com", myrole, pwd, 1},
  44. Result: `create table users (name, age, height, actived, bytes, create_at, update_at, deleted_at, email, role, pass) values ("jinzhu", 1, 999.990000, true, "12345", "2020-02-23 11:10:10", "2020-02-23 11:10:10", NULL, "w@g.com", "admin", "pass")`,
  45. },
  46. }
  47. for idx, r := range results {
  48. if result := logger.ExplainSQL(r.SQL, r.NumericRegexp, `"`, r.Vars...); result != r.Result {
  49. t.Errorf("Explain SQL #%v expects %v, but got %v", idx, r.Result, result)
  50. }
  51. }
  52. }