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

     1  package clause_test
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/systematiccaos/gorm/clause"
     8  )
     9  
    10  func TestWhere(t *testing.T) {
    11  	results := []struct {
    12  		Clauses []clause.Interface
    13  		Result  string
    14  		Vars    []interface{}
    15  	}{
    16  		{
    17  			[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
    18  				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  			"SELECT * FROM `users` WHERE `users`.`id` = ? AND `age` > ? OR `name` <> ?", []interface{}{"1", 18, "jinzhu"},
    21  		},
    22  		{
    23  			[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
    24  				Exprs: []clause.Expression{clause.Or(clause.Neq{Column: "name", Value: "jinzhu"}), clause.Eq{Column: clause.PrimaryColumn, Value: "1"}, clause.Gt{Column: "age", Value: 18}},
    25  			}},
    26  			"SELECT * FROM `users` WHERE `users`.`id` = ? OR `name` <> ? AND `age` > ?", []interface{}{"1", "jinzhu", 18},
    27  		},
    28  		{
    29  			[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
    30  				Exprs: []clause.Expression{clause.Or(clause.Neq{Column: "name", Value: "jinzhu"}), clause.Eq{Column: clause.PrimaryColumn, Value: "1"}, clause.Gt{Column: "age", Value: 18}},
    31  			}},
    32  			"SELECT * FROM `users` WHERE `users`.`id` = ? OR `name` <> ? AND `age` > ?", []interface{}{"1", "jinzhu", 18},
    33  		},
    34  		{
    35  			[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
    36  				Exprs: []clause.Expression{clause.Or(clause.Eq{Column: clause.PrimaryColumn, Value: "1"}), clause.Or(clause.Neq{Column: "name", Value: "jinzhu"})},
    37  			}},
    38  			"SELECT * FROM `users` WHERE `users`.`id` = ? OR `name` <> ?", []interface{}{"1", "jinzhu"},
    39  		},
    40  		{
    41  			[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
    42  				Exprs: []clause.Expression{clause.Eq{Column: clause.PrimaryColumn, Value: "1"}, clause.Gt{Column: "age", Value: 18}, clause.Or(clause.Neq{Column: "name", Value: "jinzhu"})},
    43  			}, clause.Where{
    44  				Exprs: []clause.Expression{clause.Or(clause.Gt{Column: "score", Value: 100}, clause.Like{Column: "name", Value: "%linus%"})},
    45  			}},
    46  			"SELECT * FROM `users` WHERE `users`.`id` = ? AND `age` > ? OR `name` <> ? AND (`score` > ? OR `name` LIKE ?)", []interface{}{"1", 18, "jinzhu", 100, "%linus%"},
    47  		},
    48  		{
    49  			[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
    50  				Exprs: []clause.Expression{clause.Not(clause.Eq{Column: clause.PrimaryColumn, Value: "1"}, clause.Gt{Column: "age", Value: 18}), clause.Or(clause.Neq{Column: "name", Value: "jinzhu"})},
    51  			}, clause.Where{
    52  				Exprs: []clause.Expression{clause.Or(clause.Not(clause.Gt{Column: "score", Value: 100}), clause.Like{Column: "name", Value: "%linus%"})},
    53  			}},
    54  			"SELECT * FROM `users` WHERE (`users`.`id` <> ? AND `age` <= ?) OR `name` <> ? AND (`score` <= ? OR `name` LIKE ?)", []interface{}{"1", 18, "jinzhu", 100, "%linus%"},
    55  		},
    56  		{
    57  			[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
    58  				Exprs: []clause.Expression{clause.And(clause.Eq{Column: "age", Value: 18}, clause.Or(clause.Neq{Column: "name", Value: "jinzhu"}))},
    59  			}},
    60  			"SELECT * FROM `users` WHERE (`age` = ? OR `name` <> ?)", []interface{}{18, "jinzhu"},
    61  		},
    62  	}
    63  
    64  	for idx, result := range results {
    65  		t.Run(fmt.Sprintf("case #%v", idx), func(t *testing.T) {
    66  			checkBuildClauses(t, result.Clauses, result.Result, result.Vars)
    67  		})
    68  	}
    69  }