Skip to content

Commit f9e18c8

Browse files
authored
fix(engine/dolphin): Fixed problem that LIMIT OFFSET cannot be used with UNION ALL (#2613)
* fix(engine/dolphin): Fixed problem that LIMIT OFFSET cannot be used with `UNION ALL` close #2611 * test: update endtoend
1 parent a733c39 commit f9e18c8

File tree

9 files changed

+164
-1
lines changed

9 files changed

+164
-1
lines changed

internal/endtoend/testdata/select_union/mysql/go/query.sql.go

Lines changed: 35 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/select_union/mysql/query.sql

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ SELECT * FROM foo
55
UNION
66
SELECT * FROM foo;
77

8+
-- name: SelectUnionWithLimit :many
9+
SELECT * FROM foo
10+
UNION
11+
SELECT * FROM foo
12+
LIMIT ? OFFSET ?;
13+
814
-- name: SelectExcept :many
915
SELECT * FROM foo
1016
EXCEPT

internal/endtoend/testdata/select_union/postgres/pgx/v4/go/query.sql.go

Lines changed: 32 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/select_union/postgres/pgx/v4/query.sql

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ SELECT * FROM foo
55
UNION
66
SELECT * FROM foo;
77

8+
-- name: SelectUnionWithLimit :many
9+
SELECT * FROM foo
10+
UNION
11+
SELECT * FROM foo
12+
LIMIT $1 OFFSET $2;
13+
814
-- name: SelectExcept :many
915
SELECT * FROM foo
1016
EXCEPT

internal/endtoend/testdata/select_union/postgres/pgx/v5/go/query.sql.go

Lines changed: 32 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/select_union/postgres/pgx/v5/query.sql

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ SELECT * FROM foo
55
UNION
66
SELECT * FROM foo;
77

8+
-- name: SelectUnionWithLimit :many
9+
SELECT * FROM foo
10+
UNION
11+
SELECT * FROM foo
12+
LIMIT $1 OFFSET $2;
13+
814
-- name: SelectExcept :many
915
SELECT * FROM foo
1016
EXCEPT

internal/endtoend/testdata/select_union/postgres/stdlib/go/query.sql.go

Lines changed: 35 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/select_union/postgres/stdlib/query.sql

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ SELECT * FROM foo
55
UNION
66
SELECT * FROM foo;
77

8+
-- name: SelectUnionWithLimit :many
9+
SELECT * FROM foo
10+
UNION
11+
SELECT * FROM foo
12+
LIMIT $1 OFFSET $2;
13+
814
-- name: SelectExcept :many
915
SELECT * FROM foo
1016
EXCEPT

internal/engine/dolphin/convert.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1265,7 +1265,12 @@ func (c *cc) convertSetOprSelectList(n *pcast.SetOprSelectList) ast.Node {
12651265

12661266
func (c *cc) convertSetOprStmt(n *pcast.SetOprStmt) ast.Node {
12671267
if n.SelectList != nil {
1268-
return c.convertSetOprSelectList(n.SelectList)
1268+
sn := c.convertSetOprSelectList(n.SelectList)
1269+
if ss, ok := sn.(*ast.SelectStmt); ok && n.Limit != nil {
1270+
ss.LimitOffset = c.convert(n.Limit.Offset)
1271+
ss.LimitCount = c.convert(n.Limit.Count)
1272+
}
1273+
return sn
12691274
}
12701275
return todo(n)
12711276
}

0 commit comments

Comments
 (0)