diff --git a/main_test.go b/main_test.go index bdcdd4aee85f5badb481483d13f10223475965b0..f9739264c63b96f6001ed25daf8e49dcaa443933 100644 --- a/main_test.go +++ b/main_test.go @@ -11,19 +11,19 @@ import ( "testing" "time" "upper.io/db" - _ "upper.io/db/mongo" - _ "upper.io/db/mysql" + //_ "upper.io/db/mongo" + //_ "upper.io/db/mysql" _ "upper.io/db/postgresql" - _ "upper.io/db/ql" - _ "upper.io/db/sqlite" + //_ "upper.io/db/ql" + //_ "upper.io/db/sqlite" ) var wrappers = []string{ - `sqlite`, - `mysql`, + //`sqlite`, + //`mysql`, `postgresql`, - `mongo`, - `ql`, + //`mongo`, + //`ql`, } const ( @@ -541,7 +541,7 @@ func TestFibonacci(t *testing.T) { whereIn = db.Cond{"input": db.Func{"IN", []int{3, 5, 6, 7}}} } - res = col.Find(whereIn).Skip(1).Limit(2).Sort("input") + res = col.Find(whereIn).Sort("input") total, err = res.Count() @@ -553,6 +553,8 @@ func TestFibonacci(t *testing.T) { t.Fatalf(`Expecting a count of 4.`) } + res = res.Skip(1).Limit(2) + for { var item Fibonacci err = res.Next(&item) @@ -583,11 +585,9 @@ func TestFibonacci(t *testing.T) { }, db.Cond{"input": 3}, }, - ).Skip(1).Limit(2).Sort("-input") - - total, err = res.Count() + ).Sort("-input") - if err != nil { + if total, err = res.Count(); err != nil { t.Fatalf(`%s: %s`, wrapper, err.Error()) } @@ -595,6 +595,9 @@ func TestFibonacci(t *testing.T) { t.Fatalf(`Expecting a count of 4.`) } + // Skipping. + res = res.Skip(1).Limit(2) + for { var item Fibonacci err = res.Next(&item) diff --git a/postgresql/collection.go b/postgresql/collection.go index 351326f64770c7dd9f1eb17113bbbd4a4417f5b8..11b05a624ddf30f1917237af9e21c0d3c41fd751 100644 --- a/postgresql/collection.go +++ b/postgresql/collection.go @@ -121,7 +121,7 @@ func whereValues(term interface{}) (where sqlgen.Where, args []interface{}) { for _, cond := range t { k, v := whereValues(cond) args = append(args, v...) - and = append(and, k) + and = append(and, k...) } where = append(where, and) case db.Or: @@ -129,7 +129,7 @@ func whereValues(term interface{}) (where sqlgen.Where, args []interface{}) { for _, cond := range t { k, v := whereValues(cond) args = append(args, v...) - or = append(or, k) + or = append(or, k...) } where = append(where, or) case db.Cond: diff --git a/postgresql/result.go b/postgresql/result.go index 1ebd0c3a00e55ee61a746623c510f4f8469319fa..3e8459eab5553d320d6f0c1248198f331768a7bf 100644 --- a/postgresql/result.go +++ b/postgresql/result.go @@ -228,9 +228,11 @@ func (self *Result) Close() error { func (self *Result) Count() (uint64, error) { rows, err := self.table.source.doQuery(sqlgen.Statement{ - Type: sqlgen.SqlSelectCount, - Table: sqlgen.Table{self.table.Name()}, - Where: self.where, + Type: sqlgen.SqlSelectCount, + Table: sqlgen.Table{self.table.Name()}, + Where: self.where, + Limit: self.limit, + Offset: self.offset, }, self.arguments...) if err != nil { diff --git a/util/sqlgen/default.go b/util/sqlgen/default.go index 2924c6110a0af448b62c5e7d577e4ac96ce8fbe0..778fab65e3137807804eb3b8b4452d9299840337 100644 --- a/util/sqlgen/default.go +++ b/util/sqlgen/default.go @@ -71,6 +71,14 @@ const ( COUNT(1) AS _t FROM {{.Table}} {{.Where}} + + {{if .Limit}} + LIMIT {{.Limit}} + {{end}} + + {{if .Offset}} + OFFSET {{.Offset}} + {{end}} ` defaultInsertLayout = `