54 lines
1.0 KiB
Go
54 lines
1.0 KiB
Go
package entgo
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"entgo.io/ent/dialect/sql"
|
|
)
|
|
|
|
// QueryCommandToOrderConditions 查询命令转换为排序条件
|
|
func QueryCommandToOrderConditions(orderBys []string) (error, func(s *sql.Selector)) {
|
|
if len(orderBys) == 0 {
|
|
return nil, nil
|
|
}
|
|
|
|
return nil, func(s *sql.Selector) {
|
|
for _, v := range orderBys {
|
|
if strings.HasPrefix(v, "-") {
|
|
// 降序
|
|
key := v[1:]
|
|
if len(key) == 0 {
|
|
continue
|
|
}
|
|
|
|
BuildOrderSelect(s, key, true)
|
|
} else {
|
|
// 升序
|
|
if len(v) == 0 {
|
|
continue
|
|
}
|
|
|
|
BuildOrderSelect(s, v, false)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func BuildOrderSelector(orderBys []string, defaultOrderField string) (error, func(s *sql.Selector)) {
|
|
if len(orderBys) == 0 {
|
|
return nil, func(s *sql.Selector) {
|
|
BuildOrderSelect(s, defaultOrderField, true)
|
|
}
|
|
} else {
|
|
return QueryCommandToOrderConditions(orderBys)
|
|
}
|
|
}
|
|
|
|
func BuildOrderSelect(s *sql.Selector, field string, desc bool) {
|
|
if desc {
|
|
s.OrderBy(sql.Desc(s.C(field)))
|
|
} else {
|
|
s.OrderBy(sql.Asc(s.C(field)))
|
|
}
|
|
}
|