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 }