github.com/RevenueMonster/sqlike@v1.0.6/sqlike/actions/paginate.go (about) 1 package actions 2 3 import ( 4 "strings" 5 6 "github.com/RevenueMonster/sqlike/sql/expr" 7 ) 8 9 // PaginateStatement : 10 type PaginateStatement interface { 11 Distinct() PaginateStatement 12 Select(fields ...interface{}) PaginateStatement 13 From(values ...string) PaginateStatement 14 Where(fields ...interface{}) PaginateStatement 15 Having(fields ...interface{}) PaginateStatement 16 GroupBy(fields ...interface{}) PaginateStatement 17 OrderBy(fields ...interface{}) PaginateStatement 18 Limit(num uint) PaginateStatement 19 Offset(num uint) PaginateStatement 20 } 21 22 // PaginateActions : 23 type PaginateActions struct { 24 FindActions 25 } 26 27 // Select : 28 func (act *PaginateActions) Select(fields ...interface{}) PaginateStatement { 29 act.Projections = fields 30 return act 31 } 32 33 // Distinct : 34 func (act *PaginateActions) Distinct() PaginateStatement { 35 act.DistinctOn = true 36 return act 37 } 38 39 // From : 40 func (act *PaginateActions) From(values ...string) PaginateStatement { 41 length := len(values) 42 if length == 0 { 43 panic("empty table name") 44 } 45 if length > 0 { 46 act.Table = strings.TrimSpace(values[0]) 47 } 48 if length > 1 { 49 act.Database = strings.TrimSpace(values[0]) 50 act.Table = strings.TrimSpace(values[1]) 51 } 52 return act 53 } 54 55 // Where : 56 func (act *PaginateActions) Where(fields ...interface{}) PaginateStatement { 57 act.Conditions = expr.And(fields...) 58 return act 59 } 60 61 // Having : 62 func (act *PaginateActions) Having(fields ...interface{}) PaginateStatement { 63 act.Havings = expr.And(fields...) 64 return act 65 } 66 67 // OrderBy : 68 func (act *PaginateActions) OrderBy(fields ...interface{}) PaginateStatement { 69 act.Sorts = fields 70 return act 71 } 72 73 // GroupBy : 74 func (act *PaginateActions) GroupBy(fields ...interface{}) PaginateStatement { 75 act.GroupBys = fields 76 return act 77 } 78 79 // Limit : 80 func (act *PaginateActions) Limit(num uint) PaginateStatement { 81 if num > 0 { 82 act.Count = num 83 } 84 return act 85 } 86 87 // Offset : 88 func (act *PaginateActions) Offset(num uint) PaginateStatement { 89 if num > 0 { 90 act.Skip = num 91 } 92 return act 93 }