benchmarks_test.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package clause_test
  2. import (
  3. "sync"
  4. "testing"
  5. "github.com/jinzhu/gorm"
  6. "github.com/jinzhu/gorm/clause"
  7. "github.com/jinzhu/gorm/schema"
  8. "github.com/jinzhu/gorm/tests"
  9. )
  10. func BenchmarkSelect(b *testing.B) {
  11. user, _, _ := schema.Parse(&tests.User{}, &sync.Map{}, db.NamingStrategy)
  12. for i := 0; i < b.N; i++ {
  13. stmt := gorm.Statement{DB: db, Table: user.Table, Schema: user, Clauses: map[string]clause.Clause{}}
  14. clauses := []clause.Interface{clause.Select{}, clause.From{}, clause.Where{Exprs: []clause.Expression{clause.Eq{Column: clause.PrimaryColumn, Value: "1"}, clause.Gt{Column: "age", Value: 18}, clause.Or(clause.Neq{Column: "name", Value: "jinzhu"})}}}
  15. for _, clause := range clauses {
  16. stmt.AddClause(clause)
  17. }
  18. stmt.Build("SELECT", "FROM", "WHERE")
  19. _ = stmt.SQL.String()
  20. }
  21. }
  22. func BenchmarkComplexSelect(b *testing.B) {
  23. user, _, _ := schema.Parse(&tests.User{}, &sync.Map{}, db.NamingStrategy)
  24. for i := 0; i < b.N; i++ {
  25. stmt := gorm.Statement{DB: db, Table: user.Table, Schema: user, Clauses: map[string]clause.Clause{}}
  26. clauses := []clause.Interface{
  27. clause.Select{}, clause.From{},
  28. clause.Where{Exprs: []clause.Expression{
  29. clause.Eq{Column: clause.PrimaryColumn, Value: "1"},
  30. clause.Gt{Column: "age", Value: 18},
  31. clause.Or(clause.Neq{Column: "name", Value: "jinzhu"}),
  32. }},
  33. clause.Where{Exprs: []clause.Expression{
  34. clause.Or(clause.Gt{Column: "score", Value: 100}, clause.Like{Column: "name", Value: "%linus%"}),
  35. }},
  36. clause.GroupBy{Columns: []clause.Column{{Name: "role"}}, Having: clause.Where{[]clause.Expression{clause.Eq{"role", "admin"}}}},
  37. clause.Limit{Limit: 10, Offset: 20},
  38. clause.OrderBy{Columns: []clause.OrderByColumn{{Column: clause.PrimaryColumn, Desc: true}}},
  39. }
  40. for _, clause := range clauses {
  41. stmt.AddClause(clause)
  42. }
  43. stmt.Build("SELECT", "FROM", "WHERE", "GROUP BY", "LIMIT", "ORDER BY")
  44. _ = stmt.SQL.String()
  45. }
  46. }