Skip to content

Commit dd8222f

Browse files
committed
feat(#282): allow ordering by case expression
1 parent ce33bd7 commit dd8222f

File tree

4 files changed

+22
-0
lines changed

4 files changed

+22
-0
lines changed

exp/case.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,6 @@ func (c caseExpression) Else(result interface{}) CaseExpression {
7373
c.elseCondition = NewCaseElse(result)
7474
return c
7575
}
76+
77+
func (c caseExpression) Asc() OrderedExpression { return asc(c) }
78+
func (c caseExpression) Desc() OrderedExpression { return desc(c) }

exp/case_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,16 @@ func (ces *caseExpressionSuite) TestElse() {
5757
ces.Nil(ce.GetElse())
5858
}
5959

60+
func (ces *caseExpressionSuite) TestAsc() {
61+
ce := exp.NewCaseExpression()
62+
ces.Equal(exp.NewOrderedExpression(ce, exp.AscDir, exp.NoNullsSortType), ce.Asc())
63+
}
64+
65+
func (ces *caseExpressionSuite) TestDesc() {
66+
ce := exp.NewCaseExpression()
67+
ces.Equal(exp.NewOrderedExpression(ce, exp.DescSortDir, exp.NoNullsSortType), ce.Desc())
68+
}
69+
6070
type caseWhenSuite struct {
6171
suite.Suite
6272
}

exp/exp.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,7 @@ type (
455455
CaseExpression interface {
456456
Expression
457457
Aliaseable
458+
Orderable
458459
GetValue() interface{}
459460
GetWhens() []CaseWhen
460461
GetElse() CaseElse

select_dataset_example_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,14 @@ func ExampleSelectDataset_Order() {
380380
// SELECT * FROM "test" ORDER BY "a" ASC
381381
}
382382

383+
func ExampleSelectDataset_Order_caseExpression() {
384+
ds := goqu.From("test").Order(goqu.Case().When(goqu.C("num").Gt(10), 0).Else(1).Asc())
385+
sql, _, _ := ds.ToSQL()
386+
fmt.Println(sql)
387+
// Output:
388+
// SELECT * FROM "test" ORDER BY CASE WHEN ("num" > 10) THEN 0 ELSE 1 END ASC
389+
}
390+
383391
func ExampleSelectDataset_OrderAppend() {
384392
ds := goqu.From("test").Order(goqu.C("a").Asc())
385393
sql, _, _ := ds.OrderAppend(goqu.C("b").Desc().NullsLast()).ToSQL()

0 commit comments

Comments
 (0)