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  }