Re: pgsql: Support FETCH FIRST WITH TIES - Mailing list pgsql-committers

From Julien Rouhaud
Subject Re: pgsql: Support FETCH FIRST WITH TIES
Date
Msg-id CAOBaU_aLdPGU5wCpaowNLF-Q8328iR7mj1yJAhMOVsdLwY+sdg@mail.gmail.com
Whole thread Raw
In response to pgsql: Support FETCH FIRST WITH TIES  (Alvaro Herrera <alvherre@alvh.no-ip.org>)
Responses Re: pgsql: Support FETCH FIRST WITH TIES  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-committers
Hi Álvaro,

On Tue, Apr 7, 2020 at 10:28 PM Alvaro Herrera <alvherre@alvh.no-ip.org> wrote:
>
> Support FETCH FIRST WITH TIES
>
> WITH TIES is an option to the FETCH FIRST N ROWS clause (the SQL
> standard's spelling of LIMIT), where you additionally get rows that
> compare equal to the last of those N rows by the columns in the
> mandatory ORDER BY clause.
>
> There was a proposal by Andrew Gierth to implement this functionality in
> a more powerful way that would yield more features, but the other patch
> had not been finished at this time, so we decided to use this one for
> now in the spirit of incremental development.
>
> Author: Surafel Temesgen <surafel3000@gmail.com>
> Reviewed-by: Álvaro Herrera <alvherre@alvh.no-ip.org>
> Reviewed-by: Tomas Vondra <tomas.vondra@2ndquadrant.com>
> Discussion: https://postgr.es/m/CALAY4q9ky7rD_A4vf=FVQvCGngm3LOes-ky0J6euMrg=_Se+ag@mail.gmail.com
> Discussion: https://postgr.es/m/87o8wvz253.fsf@news-spur.riddles.org.uk
>
> Branch
> ------
> master
>
> Details
> -------
> https://git.postgresql.org/pg/commitdiff/357889eb17bb9c9336c4f324ceb1651da616fe57
>
> Modified Files
> --------------
> doc/src/sgml/ref/select.sgml            |  15 +--
> src/backend/catalog/sql_features.txt    |   2 +-
> src/backend/executor/nodeLimit.c        | 160 +++++++++++++++++++++++++++---
> src/backend/nodes/copyfuncs.c           |   7 ++
> src/backend/nodes/equalfuncs.c          |   2 +
> src/backend/nodes/outfuncs.c            |   7 ++
> src/backend/nodes/readfuncs.c           |   6 ++
> src/backend/optimizer/plan/createplan.c |  45 ++++++++-
> src/backend/optimizer/plan/planner.c    |   1 +
> src/backend/optimizer/util/pathnode.c   |   2 +
> src/backend/parser/analyze.c            |  21 ++--
> src/backend/parser/gram.y               | 117 +++++++++++++++++-----
> src/backend/parser/parse_clause.c       |  15 ++-
> src/backend/utils/adt/ruleutils.c       |  27 ++++--
> src/include/catalog/catversion.h        |   2 +-
> src/include/nodes/execnodes.h           |   5 +
> src/include/nodes/nodes.h               |  13 +++
> src/include/nodes/parsenodes.h          |   2 +
> src/include/nodes/pathnodes.h           |   1 +
> src/include/nodes/plannodes.h           |   5 +
> src/include/optimizer/pathnode.h        |   1 +
> src/include/optimizer/planmain.h        |   5 +-
> src/include/parser/parse_clause.h       |   3 +-
> src/test/regress/expected/limit.out     | 167 ++++++++++++++++++++++++++++++++
> src/test/regress/sql/limit.sql          |  48 +++++++++
> 25 files changed, 610 insertions(+), 69 deletions(-)
>

FTR I now get the following when compiling with -Wimplicit-fallthrough -Werror:

nodeLimit.c: In function ‘ExecLimit’:
nodeLimit.c:136:7: error: this statement may fall through
[-Werror=implicit-fallthrough=]
  136 |    if (ScanDirectionIsForward(direction))
      |       ^
nodeLimit.c:216:3: note: here
  216 |   case LIMIT_WINDOWEND_TIES:
      |   ^~~~

It seems that this fall-through comment:

[...]
                    else
                    {
                        node->lstate = LIMIT_WINDOWEND_TIES;
                        /* fall-through */
                    }
[...]

Is not recognized by my compiler (gcc (Gentoo 9.3.0 p1) 9.3.0).    If
that's something we should fix, PFA a naive patch for that.

Attachment

pgsql-committers by date:

Previous
From: Peter Eisentraut
Date:
Subject: pgsql: Fix RELCACHE_FORCE_RELEASE issue
Next
From: Tom Lane
Date:
Subject: pgsql: Clear dangling pointer to avoid bogus EXPLAIN printout in a corn