Skip to content
This repository was archived by the owner on Jun 14, 2019. It is now read-only.

Commit f42cc73

Browse files
committed
update oracle limit
1 parent 3afe2cf commit f42cc73

File tree

2 files changed

+15
-17
lines changed

2 files changed

+15
-17
lines changed

builder_limit.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,13 @@ func (b *Builder) limitWriteTo(w Writer) error {
3939
if limit.offset == 0 {
4040
if len(selects) == 0 {
4141
selects = append(selects, "*")
42-
} else {
43-
selects = append(selects)
4442
}
4543

46-
final = Dialect(b.dialect).Select(selects...).From("at", b).
47-
Where(Lte{"at.ROWNUM": limit.limitN})
44+
final = Dialect(b.dialect).Select("*").From("at", b).
45+
Where(Lte{"at.RN": limit.limitN})
4846
} else {
4947
sub := Dialect(b.dialect).Select("*").
50-
From("at", b).Where(Lte{"at.ROWNUM": limit.offset + limit.limitN})
48+
From("at", b).Where(Lte{"at.RN": limit.offset + limit.limitN})
5149

5250
final = Dialect(b.dialect).Select("*").From("att", sub).
5351
Where(Gt{"att.RN": limit.offset})

builder_select_test.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -98,29 +98,29 @@ func TestBuilder_Limit(t *testing.T) {
9898
sql, args, err := Dialect(ORACLE).Select("a", "b", "c").From("table1").OrderBy("a ASC").
9999
Limit(5, 10).ToSQL()
100100
assert.NoError(t, err)
101-
assert.EqualValues(t, "SELECT * FROM (SELECT * FROM (SELECT a,b,c,ROWNUM RN FROM table1 ORDER BY a ASC) at WHERE at.ROWNUM<=?) att WHERE att.RN>?", sql)
101+
assert.EqualValues(t, "SELECT * FROM (SELECT * FROM (SELECT a,b,c,ROWNUM RN FROM table1 ORDER BY a ASC) at WHERE at.RN<=?) att WHERE att.RN>?", sql)
102102
assert.EqualValues(t, []interface{}{15, 10}, args)
103103

104104
// simple with join -- OracleSQL style
105-
sql, args, err = Dialect(ORACLE).Select("a", "b", "c").From("table1 t1").
105+
sql, args, err = Dialect(ORACLE).Select("a", "b", "c", "d").From("table1 t1").
106106
InnerJoin("table2 t2", "t1.id = t2.ref_id").OrderBy("a ASC").Limit(5, 10).ToSQL()
107107
assert.NoError(t, err)
108-
assert.EqualValues(t, "SELECT * FROM (SELECT * FROM (SELECT a,b,c,ROWNUM RN FROM table1 t1 INNER JOIN table2 t2 ON t1.id = t2.ref_id ORDER BY a ASC) at WHERE at.ROWNUM<=?) att WHERE att.RN>?", sql)
108+
assert.EqualValues(t, "SELECT * FROM (SELECT * FROM (SELECT a,b,c,d,ROWNUM RN FROM table1 t1 INNER JOIN table2 t2 ON t1.id = t2.ref_id ORDER BY a ASC) at WHERE at.RN<=?) att WHERE att.RN>?", sql)
109109
assert.EqualValues(t, []interface{}{15, 10}, args)
110110

111111
// simple -- OracleSQL style
112112
sql, args, err = Dialect(ORACLE).Select("a", "b", "c").From("table1").
113113
OrderBy("a ASC").Limit(5).ToSQL()
114114
assert.NoError(t, err)
115-
assert.EqualValues(t, "SELECT a,b,c FROM (SELECT a,b,c,ROWNUM RN FROM table1 ORDER BY a ASC) at WHERE at.ROWNUM<=?", sql)
115+
assert.EqualValues(t, "SELECT * FROM (SELECT a,b,c,ROWNUM RN FROM table1 ORDER BY a ASC) at WHERE at.RN<=?", sql)
116116
assert.EqualValues(t, []interface{}{5}, args)
117117

118118
// simple with where -- OracleSQL style
119-
sql, args, err = Dialect(ORACLE).Select("a", "b", "c").From("table1").Where(Eq{"f1": "v1", "f2": "v2"}).
120-
OrderBy("a ASC").Limit(5, 10).ToSQL()
119+
sql, args, err = Dialect(ORACLE).Select("a", "b", "c").From("table1").Where(Eq{"a": "10", "b": "10"}).
120+
OrderBy("a ASC").Limit(5, 1).ToSQL()
121121
assert.NoError(t, err)
122-
assert.EqualValues(t, "SELECT * FROM (SELECT * FROM (SELECT a,b,c,ROWNUM RN FROM table1 WHERE f1=? AND f2=? ORDER BY a ASC) at WHERE at.ROWNUM<=?) att WHERE att.RN>?", sql)
123-
assert.EqualValues(t, []interface{}{"v1", "v2", 15, 10}, args)
122+
assert.EqualValues(t, "SELECT * FROM (SELECT * FROM (SELECT a,b,c,ROWNUM RN FROM table1 WHERE a=? AND b=? ORDER BY a ASC) at WHERE at.RN<=?) att WHERE att.RN>?", sql)
123+
assert.EqualValues(t, []interface{}{"10", "10", 6, 1}, args)
124124

125125
// simple -- MySQL/SQLite/PostgreSQL style
126126
sql, args, err = Dialect(MYSQL).Select("a", "b", "c").From("table1").OrderBy("a ASC").
@@ -159,12 +159,12 @@ func TestBuilder_Limit(t *testing.T) {
159159

160160
// union with limit -- OracleSQL style
161161
sql, args, err = Dialect(ORACLE).Select("a", "b", "c").From("table1").
162-
Where(Eq{"a": 1}).OrderBy("a ASC").Limit(5, 10).Union("ALL",
163-
Select("a", "b", "c").From("table1").Where(Eq{"a": 2}).OrderBy("a DESC").Limit(10)).
162+
Where(Neq{"a": "0"}).OrderBy("a ASC").Limit(5, 10).Union("ALL",
163+
Select("a", "b", "c").From("table1").Where(Neq{"b": "48"}).OrderBy("a DESC").Limit(10)).
164164
Limit(3).ToSQL()
165165
assert.NoError(t, err)
166-
assert.EqualValues(t, "SELECT * FROM ((SELECT * FROM (SELECT * FROM (SELECT a,b,c,ROWNUM RN FROM table1 WHERE a=? ORDER BY a ASC) at WHERE at.ROWNUM<=?) att WHERE att.RN>?) UNION ALL (SELECT a,b,c FROM (SELECT a,b,c,ROWNUM RN FROM table1 WHERE a=? ORDER BY a DESC) at WHERE at.ROWNUM<=?)) at WHERE at.ROWNUM<=?", sql)
167-
assert.EqualValues(t, []interface{}{1, 15, 10, 2, 10, 3}, args)
166+
assert.EqualValues(t, "SELECT * FROM ((SELECT * FROM (SELECT * FROM (SELECT a,b,c,ROWNUM RN FROM table1 WHERE a<>? ORDER BY a ASC) at WHERE at.RN<=?) att WHERE att.RN>?) UNION ALL (SELECT * FROM (SELECT a,b,c,ROWNUM RN FROM table1 WHERE b<>? ORDER BY a DESC) at WHERE at.RN<=?)) at WHERE at.RN<=?", sql)
167+
assert.EqualValues(t, []interface{}{"0", 15, 10, "48", 10, 3}, args)
168168

169169
// union -- MySQL/SQLite/PostgreSQL style
170170
sql, args, err = Dialect(MYSQL).Select("a", "b", "c").From("table1").Where(Eq{"a": 1}).

0 commit comments

Comments
 (0)