github.com/systematiccaos/gorm@v1.22.6/clause/benchmarks_test.go (about)

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