mirror of
https://github.com/postgres/postgres.git
synced 2025-07-02 09:02:37 +03:00
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
This commit is contained in:
@ -5243,7 +5243,10 @@ get_select_query_def(Query *query, deparse_context *context,
|
||||
force_colno, context);
|
||||
}
|
||||
|
||||
/* Add the LIMIT clause if given */
|
||||
/*
|
||||
* Add the LIMIT/OFFSET clauses if given. If non-default options, use the
|
||||
* standard spelling of LIMIT.
|
||||
*/
|
||||
if (query->limitOffset != NULL)
|
||||
{
|
||||
appendContextKeyword(context, " OFFSET ",
|
||||
@ -5252,13 +5255,23 @@ get_select_query_def(Query *query, deparse_context *context,
|
||||
}
|
||||
if (query->limitCount != NULL)
|
||||
{
|
||||
appendContextKeyword(context, " LIMIT ",
|
||||
-PRETTYINDENT_STD, PRETTYINDENT_STD, 0);
|
||||
if (IsA(query->limitCount, Const) &&
|
||||
((Const *) query->limitCount)->constisnull)
|
||||
appendStringInfoString(buf, "ALL");
|
||||
else
|
||||
if (query->limitOption == LIMIT_OPTION_WITH_TIES)
|
||||
{
|
||||
appendContextKeyword(context, " FETCH FIRST ",
|
||||
-PRETTYINDENT_STD, PRETTYINDENT_STD, 0);
|
||||
get_rule_expr(query->limitCount, context, false);
|
||||
appendStringInfo(buf, " ROWS WITH TIES");
|
||||
}
|
||||
else
|
||||
{
|
||||
appendContextKeyword(context, " LIMIT ",
|
||||
-PRETTYINDENT_STD, PRETTYINDENT_STD, 0);
|
||||
if (IsA(query->limitCount, Const) &&
|
||||
((Const *) query->limitCount)->constisnull)
|
||||
appendStringInfoString(buf, "ALL");
|
||||
else
|
||||
get_rule_expr(query->limitCount, context, false);
|
||||
}
|
||||
}
|
||||
|
||||
/* Add FOR [KEY] UPDATE/SHARE clauses if present */
|
||||
|
Reference in New Issue
Block a user