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  }