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 }