Files
sponge/pkg/mysql/query/page.go
2022-11-19 23:21:58 +08:00

95 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package query
import "strings"
var defaultMaxSize = 1000
// SetMaxSize 修改默认每页数量最大值
func SetMaxSize(max int) {
if max < 10 {
max = 10
}
defaultMaxSize = max
}
// Page 页
type Page struct {
page int // page number, starting from page 0
size int // 每一页数量
sort string // 字段排序
}
// Page 页码
func (p *Page) Page() int {
return p.page
}
// Size 每一页数量
func (p *Page) Size() int {
return p.size
}
// Sort 排序
func (p *Page) Sort() string {
return p.sort
}
// Offset 偏移量
func (p *Page) Offset() int {
return p.page * p.size
}
// DefaultPage 默认page每页数量20按id倒叙排序
func DefaultPage(page int) *Page {
if page < 0 {
page = 0
}
return &Page{
page: page,
size: 20,
sort: "id DESC",
}
}
// NewPage 自定义page从第0页开始
// 参数columnNames表示排序字段如果为空表示id降序如果有多个列名用逗号分隔
// 每一个列名称前面有'-'号,表示降序,否则升序
func NewPage(page int, size int, columnNames string) *Page {
if page < 0 {
page = 0
}
if size > defaultMaxSize {
size = defaultMaxSize
}
return &Page{
page: page,
size: size,
sort: getSort(columnNames),
}
}
// 转换为mysql 排序,每一个列名称前面有'-'号,表示降序,否则升序,示例:
// columnNames="name"表示按name升序排序
// columnNames="-name"表示按name降排序
// columnNames="name,age"表示按name升序排序前提下按age升序排序
// columnNames="-name,-age"表示按name降排序前提下按age降序排序
func getSort(columnNames string) string {
columnNames = strings.Replace(columnNames, " ", "", -1)
if columnNames == "" {
return "id DESC"
}
names := strings.Split(columnNames, ",")
strs := make([]string, 0, len(names))
for _, name := range names {
if name[0] == '-' && len(name) > 1 {
strs = append(strs, name[1:]+" DESC")
} else {
strs = append(strs, name+" ASC")
}
}
return strings.Join(strs, ", ")
}