support OrderClauses for QuerySeter
This commit is contained in:
parent
b1d5ba8ece
commit
56fa213a6e
@ -147,6 +147,15 @@ func (o querySet) OrderBy(expressions ...string) QuerySeter {
|
||||
return &o
|
||||
}
|
||||
|
||||
// add ORDER expression.
|
||||
func (o querySet) OrderClauses(orders ...*clauses.Order) QuerySeter {
|
||||
if len(orders) <= 0 {
|
||||
return &o
|
||||
}
|
||||
o.orders = orders
|
||||
return &o
|
||||
}
|
||||
|
||||
// add DISTINCT to SELECT
|
||||
func (o querySet) Distinct() QuerySeter {
|
||||
o.distinct = true
|
||||
|
||||
@ -8,9 +8,21 @@ const (
|
||||
SortDescending Sort = 2
|
||||
)
|
||||
|
||||
type OrderOption func(order *Order)
|
||||
|
||||
type Order struct {
|
||||
column string
|
||||
sort Sort
|
||||
isRaw bool
|
||||
}
|
||||
|
||||
func OrderClause(options ...OrderOption) *Order {
|
||||
o := &Order{}
|
||||
for _, option := range options {
|
||||
option(o)
|
||||
}
|
||||
|
||||
return o
|
||||
}
|
||||
|
||||
func (o *Order) GetColumn() string {
|
||||
@ -21,6 +33,10 @@ func (o *Order) GetSort() Sort {
|
||||
return o.sort
|
||||
}
|
||||
|
||||
func (o *Order) IsRaw() bool {
|
||||
return o.isRaw
|
||||
}
|
||||
|
||||
func ParseOrder(expressions ...string) []*Order {
|
||||
var orders []*Order
|
||||
for _, expression := range expressions {
|
||||
@ -39,3 +55,21 @@ func ParseOrder(expressions ...string) []*Order {
|
||||
|
||||
return orders
|
||||
}
|
||||
|
||||
func OrderColumn(column string) OrderOption {
|
||||
return func(order *Order) {
|
||||
order.column = column
|
||||
}
|
||||
}
|
||||
|
||||
func OrderSort(sort Sort) OrderOption {
|
||||
return func(order *Order) {
|
||||
order.sort = sort
|
||||
}
|
||||
}
|
||||
|
||||
func OrderRaw(isRaw bool) OrderOption {
|
||||
return func(order *Order) {
|
||||
order.isRaw = isRaw
|
||||
}
|
||||
}
|
||||
|
||||
29
client/orm/structs/clauses/order_test.go
Normal file
29
client/orm/structs/clauses/order_test.go
Normal file
@ -0,0 +1,29 @@
|
||||
package clauses
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestOrderClause(t *testing.T) {
|
||||
var (
|
||||
column = `a`
|
||||
sort = SortDescending
|
||||
raw = true
|
||||
)
|
||||
|
||||
o := OrderClause(
|
||||
OrderColumn(column),
|
||||
OrderSort(sort),
|
||||
OrderRaw(raw),
|
||||
)
|
||||
|
||||
if o.GetColumn() != column {
|
||||
t.Error()
|
||||
}
|
||||
|
||||
if o.GetSort() != sort {
|
||||
t.Error()
|
||||
}
|
||||
|
||||
if o.IsRaw() != raw {
|
||||
t.Error()
|
||||
}
|
||||
}
|
||||
@ -17,6 +17,7 @@ package orm
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"github.com/astaxie/beego/client/orm/structs/clauses"
|
||||
"reflect"
|
||||
"time"
|
||||
|
||||
@ -289,6 +290,24 @@ type QuerySeter interface {
|
||||
// for example:
|
||||
// qs.OrderBy("-status")
|
||||
OrderBy(exprs ...string) QuerySeter
|
||||
// add ORDER expression by order clauses
|
||||
// for example:
|
||||
// OrderClauses(clauses.OrderClause(
|
||||
// clauses.OrderColumn(`status`),
|
||||
// clauses.OrderSort(clauses.SortAscending),
|
||||
// clauses.OrderRaw(false),
|
||||
// ))
|
||||
// OrderClauses(clauses.OrderClause(
|
||||
// clauses.OrderColumn(`user__status`),
|
||||
// clauses.OrderSort(clauses.SortAscending),
|
||||
// clauses.OrderRaw(false),
|
||||
// ))
|
||||
// OrderClauses(clauses.OrderClause(
|
||||
// clauses.OrderColumn(`random()`),
|
||||
// clauses.OrderSort(clauses.SortNone),
|
||||
// clauses.OrderRaw(true),
|
||||
// ))
|
||||
OrderClauses(orders ...*clauses.Order) QuerySeter
|
||||
// add FORCE INDEX expression.
|
||||
// for example:
|
||||
// qs.ForceIndex(`idx_name1`,`idx_name2`)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user