github.com/systematiccaos/gorm@v1.22.6/clause/from_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 TestFrom(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{}}, 18 "SELECT * FROM `users`", nil, 19 }, 20 { 21 []clause.Interface{ 22 clause.Select{}, clause.From{ 23 Tables: []clause.Table{{Name: "users"}}, 24 Joins: []clause.Join{ 25 { 26 Type: clause.InnerJoin, 27 Table: clause.Table{Name: "articles"}, 28 ON: clause.Where{ 29 []clause.Expression{clause.Eq{clause.Column{Table: "articles", Name: "id"}, clause.PrimaryColumn}}, 30 }, 31 }, 32 }, 33 }, 34 }, 35 "SELECT * FROM `users` INNER JOIN `articles` ON `articles`.`id` = `users`.`id`", nil, 36 }, 37 { 38 []clause.Interface{ 39 clause.Select{}, clause.From{ 40 Tables: []clause.Table{{Name: "users"}}, 41 Joins: []clause.Join{ 42 { 43 Type: clause.RightJoin, 44 Table: clause.Table{Name: "profiles"}, 45 ON: clause.Where{ 46 []clause.Expression{clause.Eq{clause.Column{Table: "profiles", Name: "email"}, clause.Column{Table: clause.CurrentTable, Name: "email"}}}, 47 }, 48 }, 49 }, 50 }, clause.From{ 51 Joins: []clause.Join{ 52 { 53 Type: clause.InnerJoin, 54 Table: clause.Table{Name: "articles"}, 55 ON: clause.Where{ 56 []clause.Expression{clause.Eq{clause.Column{Table: "articles", Name: "id"}, clause.PrimaryColumn}}, 57 }, 58 }, { 59 Type: clause.LeftJoin, 60 Table: clause.Table{Name: "companies"}, 61 Using: []string{"company_name"}, 62 }, 63 }, 64 }, 65 }, 66 "SELECT * FROM `users` INNER JOIN `articles` ON `articles`.`id` = `users`.`id` LEFT JOIN `companies` USING (`company_name`)", nil, 67 }, 68 } 69 70 for idx, result := range results { 71 t.Run(fmt.Sprintf("case #%v", idx), func(t *testing.T) { 72 checkBuildClauses(t, result.Clauses, result.Result, result.Vars) 73 }) 74 } 75 }