From f02b286ad435d8714fe38f5c8778a8535793155a Mon Sep 17 00:00:00 2001 From: slene Date: Fri, 16 Aug 2013 20:01:18 +0800 Subject: [PATCH] orm make offset simple, can use any numeric type --- orm/orm_queryset.go | 21 +++++++++++++++++---- orm/types.go | 4 ++-- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/orm/orm_queryset.go b/orm/orm_queryset.go index 9fe62ef3..4e046bbf 100644 --- a/orm/orm_queryset.go +++ b/orm/orm_queryset.go @@ -2,6 +2,7 @@ package orm import ( "fmt" + "reflect" ) type querySet struct { @@ -33,16 +34,28 @@ func (o querySet) Exclude(expr string, args ...interface{}) QuerySeter { return &o } -func (o querySet) Limit(limit int, args ...int64) QuerySeter { +func (o *querySet) setOffset(num interface{}) { + val := reflect.ValueOf(num) + switch num.(type) { + case int, int8, int16, int32, int64: + o.offset = val.Int() + case uint, uint8, uint16, uint32, uint64: + o.offset = int64(val.Uint()) + default: + panic(fmt.Errorf(" offset value need numeric not `%T`", num)) + } +} + +func (o querySet) Limit(limit int, args ...interface{}) QuerySeter { o.limit = limit if len(args) > 0 { - o.offset = args[0] + o.setOffset(args[0]) } return &o } -func (o querySet) Offset(offset int64) QuerySeter { - o.offset = offset +func (o querySet) Offset(offset interface{}) QuerySeter { + o.setOffset(offset) return &o } diff --git a/orm/types.go b/orm/types.go index 44194bd4..d20a4df8 100644 --- a/orm/types.go +++ b/orm/types.go @@ -45,8 +45,8 @@ type QuerySeter interface { Filter(string, ...interface{}) QuerySeter Exclude(string, ...interface{}) QuerySeter SetCond(*Condition) QuerySeter - Limit(int, ...int64) QuerySeter - Offset(int64) QuerySeter + Limit(int, ...interface{}) QuerySeter + Offset(interface{}) QuerySeter OrderBy(...string) QuerySeter RelatedSel(...interface{}) QuerySeter Count() (int64, error)