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
|
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
|
// add DISTINCT to SELECT
|
||||||
func (o querySet) Distinct() QuerySeter {
|
func (o querySet) Distinct() QuerySeter {
|
||||||
o.distinct = true
|
o.distinct = true
|
||||||
|
|||||||
@ -8,9 +8,21 @@ const (
|
|||||||
SortDescending Sort = 2
|
SortDescending Sort = 2
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type OrderOption func(order *Order)
|
||||||
|
|
||||||
type Order struct {
|
type Order struct {
|
||||||
column string
|
column string
|
||||||
sort Sort
|
sort Sort
|
||||||
|
isRaw bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func OrderClause(options ...OrderOption) *Order {
|
||||||
|
o := &Order{}
|
||||||
|
for _, option := range options {
|
||||||
|
option(o)
|
||||||
|
}
|
||||||
|
|
||||||
|
return o
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *Order) GetColumn() string {
|
func (o *Order) GetColumn() string {
|
||||||
@ -21,6 +33,10 @@ func (o *Order) GetSort() Sort {
|
|||||||
return o.sort
|
return o.sort
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (o *Order) IsRaw() bool {
|
||||||
|
return o.isRaw
|
||||||
|
}
|
||||||
|
|
||||||
func ParseOrder(expressions ...string) []*Order {
|
func ParseOrder(expressions ...string) []*Order {
|
||||||
var orders []*Order
|
var orders []*Order
|
||||||
for _, expression := range expressions {
|
for _, expression := range expressions {
|
||||||
@ -39,3 +55,21 @@ func ParseOrder(expressions ...string) []*Order {
|
|||||||
|
|
||||||
return orders
|
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 (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
|
"github.com/astaxie/beego/client/orm/structs/clauses"
|
||||||
"reflect"
|
"reflect"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -289,6 +290,24 @@ type QuerySeter interface {
|
|||||||
// for example:
|
// for example:
|
||||||
// qs.OrderBy("-status")
|
// qs.OrderBy("-status")
|
||||||
OrderBy(exprs ...string) QuerySeter
|
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.
|
// add FORCE INDEX expression.
|
||||||
// for example:
|
// for example:
|
||||||
// qs.ForceIndex(`idx_name1`,`idx_name2`)
|
// qs.ForceIndex(`idx_name1`,`idx_name2`)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user