diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2020-05-18 19:28:46 -0400 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2020-05-18 19:28:46 -0400 |
commit | c301c2e739c642199f9e4c62d867dc7bd5ef0fd1 (patch) | |
tree | 78a4988942bc7ede38fc31984dcc3349c5e78a6b /src | |
parent | 7966b7980138ebcee7ae986ebcc393aea38a35c0 (diff) | |
download | postgresql-c301c2e739c642199f9e4c62d867dc7bd5ef0fd1.tar.gz postgresql-c301c2e739c642199f9e4c62d867dc7bd5ef0fd1.zip |
WITH TIES: number of rows is optional and defaults to one
FETCH FIRST .. ONLY implements this correctly, but we missed to include
it for FETCH FIRST .. WITH TIES in commit 357889eb17bb.
Author: Vik Fearing
Discussion: https://postgr.es/m/6aa690ef-551d-e24f-2690-c38c2442947c@postgresfriends.org
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/parser/gram.y | 8 | ||||
-rw-r--r-- | src/test/regress/expected/limit.out | 17 | ||||
-rw-r--r-- | src/test/regress/sql/limit.sql | 5 |
3 files changed, 30 insertions, 0 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 3c78f2d1b51..a24b30f06f1 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -11816,6 +11816,14 @@ limit_clause: n->limitOption = LIMIT_OPTION_COUNT; $$ = n; } + | FETCH first_or_next row_or_rows WITH TIES + { + SelectLimit *n = (SelectLimit *) palloc(sizeof(SelectLimit)); + n->limitOffset = NULL; + n->limitCount = makeIntConst(1, -1); + n->limitOption = LIMIT_OPTION_WITH_TIES; + $$ = n; + } ; offset_clause: diff --git a/src/test/regress/expected/limit.out b/src/test/regress/expected/limit.out index a4e175855c3..e6f6809fbee 100644 --- a/src/test/regress/expected/limit.out +++ b/src/test/regress/expected/limit.out @@ -578,6 +578,23 @@ SELECT thousand SELECT thousand FROM onek WHERE thousand < 5 + ORDER BY thousand FETCH FIRST ROWS WITH TIES; + thousand +---------- + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 +(10 rows) + +SELECT thousand + FROM onek WHERE thousand < 5 ORDER BY thousand FETCH FIRST 1 ROW WITH TIES; thousand ---------- diff --git a/src/test/regress/sql/limit.sql b/src/test/regress/sql/limit.sql index afce5019b26..d2d4ef132df 100644 --- a/src/test/regress/sql/limit.sql +++ b/src/test/regress/sql/limit.sql @@ -163,11 +163,16 @@ SELECT thousand SELECT thousand FROM onek WHERE thousand < 5 + ORDER BY thousand FETCH FIRST ROWS WITH TIES; + +SELECT thousand + FROM onek WHERE thousand < 5 ORDER BY thousand FETCH FIRST 1 ROW WITH TIES; SELECT thousand FROM onek WHERE thousand < 5 ORDER BY thousand FETCH FIRST 2 ROW ONLY; + -- should fail SELECT ''::text AS two, unique1, unique2, stringu1 FROM onek WHERE unique1 > 50 |