1package clause_test
2
3import (
4	"fmt"
5	"testing"
6
7	"gorm.io/gorm/clause"
8)
9
10func TestSelect(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{clause.Select{
22				Columns: []clause.Column{clause.PrimaryColumn},
23			}, clause.From{}},
24			"SELECT `users`.`id` FROM `users`", nil,
25		},
26		{
27			[]clause.Interface{clause.Select{
28				Columns: []clause.Column{clause.PrimaryColumn},
29			}, clause.Select{
30				Columns: []clause.Column{{Name: "name"}},
31			}, clause.From{}},
32			"SELECT `name` FROM `users`", nil,
33		},
34		{
35			[]clause.Interface{clause.Select{
36				Expression: clause.CommaExpression{
37					Exprs: []clause.Expression{
38						clause.NamedExpr{"?", []interface{}{clause.Column{Name: "id"}}},
39						clause.NamedExpr{"?", []interface{}{clause.Column{Name: "name"}}},
40						clause.NamedExpr{"LENGTH(?)", []interface{}{clause.Column{Name: "mobile"}}},
41					},
42				},
43			}, clause.From{}},
44			"SELECT `id`, `name`, LENGTH(`mobile`) FROM `users`", nil,
45		},
46	}
47
48	for idx, result := range results {
49		t.Run(fmt.Sprintf("case #%v", idx), func(t *testing.T) {
50			checkBuildClauses(t, result.Clauses, result.Result, result.Vars)
51		})
52	}
53}
54