github.com/RevenueMonster/sqlike@v1.0.6/sql/expr/order.go (about)

     1  package expr
     2  
     3  import (
     4  	"fmt"
     5  	"reflect"
     6  
     7  	"github.com/RevenueMonster/sqlike/reflext"
     8  	"github.com/RevenueMonster/sqlike/sqlike/primitive"
     9  )
    10  
    11  // Field :
    12  func Field(name string, val interface{}) (f primitive.Field) {
    13  	f.Name = name
    14  	v := reflext.Indirect(reflect.ValueOf(val))
    15  	k := v.Kind()
    16  	if k != reflect.Array && k != reflect.Slice {
    17  		panic(fmt.Errorf("unsupported data type: %v", k))
    18  	}
    19  	length := v.Len()
    20  	if length < 1 {
    21  		panic("zero length of array or slice")
    22  	}
    23  	for i := 0; i < length; i++ {
    24  		f.Values = append(f.Values, v.Index(i).Interface())
    25  	}
    26  	return
    27  }
    28  
    29  // Asc :
    30  func Asc(field interface{}) (s primitive.Sort) {
    31  	s.Field = wrapColumn(field)
    32  	s.Order = primitive.Ascending
    33  	return
    34  }
    35  
    36  // Desc :
    37  func Desc(field interface{}) (s primitive.Sort) {
    38  	s.Field = wrapColumn(field)
    39  	s.Order = primitive.Descending
    40  	return
    41  }