forked from mirror/gorm
Yay, Offset works
This commit is contained in:
parent
32a996f738
commit
7948705181
|
@ -3,7 +3,6 @@
|
||||||
Yet Another ORM library for Go, aims for developer friendly
|
Yet Another ORM library for Go, aims for developer friendly
|
||||||
|
|
||||||
## TODO
|
## TODO
|
||||||
* Limit
|
|
||||||
* Offset
|
* Offset
|
||||||
* Or query
|
* Or query
|
||||||
* Not query
|
* Not query
|
||||||
|
|
10
orm.go
10
orm.go
|
@ -21,7 +21,7 @@ type Orm struct {
|
||||||
whereClause []map[string]interface{}
|
whereClause []map[string]interface{}
|
||||||
selectStr string
|
selectStr string
|
||||||
orderStrs []string
|
orderStrs []string
|
||||||
offsetInt int
|
offsetStr string
|
||||||
limitStr string
|
limitStr string
|
||||||
operation string
|
operation string
|
||||||
}
|
}
|
||||||
|
@ -57,9 +57,13 @@ func (s *Orm) Limit(value interface{}) *Orm {
|
||||||
func (s *Orm) Offset(value interface{}) *Orm {
|
func (s *Orm) Offset(value interface{}) *Orm {
|
||||||
switch value := value.(type) {
|
switch value := value.(type) {
|
||||||
case string:
|
case string:
|
||||||
s.offsetInt, _ = strconv.Atoi(value)
|
s.offsetStr = value
|
||||||
case int:
|
case int:
|
||||||
s.offsetInt = value
|
if value < 0 {
|
||||||
|
s.offsetStr = ""
|
||||||
|
} else {
|
||||||
|
s.offsetStr = strconv.Itoa(value)
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
s.Error = errors.New("Can' understand the value of Offset, Should be int")
|
s.Error = errors.New("Can' understand the value of Offset, Should be int")
|
||||||
}
|
}
|
||||||
|
|
|
@ -264,3 +264,12 @@ func TestLimit(t *testing.T) {
|
||||||
t.Errorf("Limit should works perfectly")
|
t.Errorf("Limit should works perfectly")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestOffset(t *testing.T) {
|
||||||
|
var users1, users2, users3, users4 []User
|
||||||
|
db.Order("age desc").Find(&users1).Offset(3).Find(&users2).Offset(5).Find(&users3).Offset(-1).Find(&users4)
|
||||||
|
|
||||||
|
if !((len(users1) == len(users4)) && (len(users1)-len(users2) == 3) && (len(users1)-len(users3) == 5)) {
|
||||||
|
t.Errorf("Offset should works perfectly")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
10
sql.go
10
sql.go
|
@ -231,8 +231,16 @@ func (s *Orm) limitSql() string {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Orm) offsetSql() string {
|
||||||
|
if len(s.offsetStr) == 0 {
|
||||||
|
return ""
|
||||||
|
} else {
|
||||||
|
return " OFFSET " + s.offsetStr
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (s *Orm) combinedSql() string {
|
func (s *Orm) combinedSql() string {
|
||||||
return s.whereSql() + s.orderSql() + s.limitSql()
|
return s.whereSql() + s.orderSql() + s.limitSql() + s.offsetSql()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Orm) addToVars(value interface{}) string {
|
func (s *Orm) addToVars(value interface{}) string {
|
||||||
|
|
Loading…
Reference in New Issue