From 1d32b381ec0b86d4261f3e6607e5bb3dc21f3c40 Mon Sep 17 00:00:00 2001 From: Mehmet Yilmaz Date: Fri, 30 May 2025 09:43:19 +0000 Subject: [PATCH] Fix deparsing FETCH FIRST ROWS WITH TIES 29f7ce6fe78e3f8d520764b5870453d791a3ca65 --- src/backend/distributed/deparser/ruleutils_18.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/backend/distributed/deparser/ruleutils_18.c b/src/backend/distributed/deparser/ruleutils_18.c index 59bc5c5ed..0422761d6 100644 --- a/src/backend/distributed/deparser/ruleutils_18.c +++ b/src/backend/distributed/deparser/ruleutils_18.c @@ -2400,10 +2400,20 @@ get_select_query_def(Query *query, deparse_context *context) { if (query->limitOption == LIMIT_OPTION_WITH_TIES) { + /* + * The limitCount arg is a c_expr, so it needs parens. Simple + * literals and function expressions would not need parens, but + * unfortunately it's hard to tell if the expression will be + * printed as a simple literal like 123 or as a typecast + * expression, like '-123'::int4. The grammar accepts the former + * without quoting, but not the latter. + */ // had to add '(' and ')' here because it fails with casting appendContextKeyword(context, " FETCH FIRST (", -PRETTYINDENT_STD, PRETTYINDENT_STD, 0); + appendStringInfoChar(buf, '('); get_rule_expr(query->limitCount, context, false); + appendStringInfoChar(buf, ')'); appendStringInfoString(buf, ") ROWS WITH TIES"); } else