Re: [PATCH] Fix quotation logic for unreserved keywords in window specifications

From: Kwangwon Seo <anchovyseo(at)gmail(dot)com>
To: Tatsuo Ishii <ishii(at)postgresql(dot)org>, assam258(at)gmail(dot)com
Cc: jian(dot)universality(at)gmail(dot)com, pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Re: [PATCH] Fix quotation logic for unreserved keywords in window specifications
Date: 2026-08-18 10:11:58
Message-ID: CAHJxwBXMx36tnAixh8hx7Xb5R2mOvLxUjOP52kjxR58=8rB59w@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Thanks for the kind review, Mr. Henson Choi and Mr. Tatsuo Ishii.

I also checked commit 4c310eca2ea. Yes, (a) breaks that.

I also think that breaking changes are not desirable for a small patch like
this one.

So, as Mr. Tatsuo pointed out, this patch (v2) would limit the quoted range.

I also added some commit text that I missed in the first patch file.

That was my mistake, so it includes the "Reviewed-by" tag and a link to the
"Discussion" thread.

I hope this commit will be helpful for the work you are currently doing.

2026년 8월 14일 (금) 오전 11:50, Tatsuo Ishii <ishii(at)postgresql(dot)org>님이 작성:

> Hi Henson,
>
> > Hi Kwangwon, Tatsuo,
> >
> > Thanks for the patch -- this is a real dump/restore hazard, and the fix
> > is in the right place (get_rule_windowspec, refname only).
> >
> >> The attached patch quotes the window name when it is a keyword
> >
> > One thing worth settling: as written this quotes the refname for any
> > keyword, but only four names actually break on reparse -- PARTITION,
> > RANGE, ROWS, GROUPS, the ones the grammar won't accept unquoted as an
> > existing window name (exactly the comment you found). Every other
> > keyword still round-trips fine unquoted, so quoting just those four is
> > enough; quoting all keywords works too, it is just broader than needed.
> >
> > For context, this is an old interaction between two commits that never
> > knew about each other: 4c310eca2ea (2007) made quote_identifier() stop
> > quoting unreserved keywords -- the point being that unreserved keywords
> > are usable bare by definition, so quoting them was just unnecessary
> > noise -- and 95b07bc7f50 (2008, window functions) later had the grammar
> > reject four of those keywords as a bare existing-window-name. So when
> > such a keyword lands in that slot as a refname, deparse prints it
> > unquoted (quote_identifier skips it as unreserved) while the grammar
> > will not take it unquoted -- and reparsing breaks in exactly that gap.
> >
> > So the choice is:
> >
> > (a) quote any keyword (what the patch does now) -- simple, but
> > over-quotes.
> > (b) quote only those four -- minimal, but it needs an explicit list in
> > ruleutils kept in sync with the grammar, since no keyword category
> > isolates them.
> >
> > Tatsuo, I would like your read as committer, because this has a
> > cross-patch consequence. The Row Pattern Recognition patch (CF 4460)
> > adds four more names -- PATTERN, AFTER, INITIAL, SEEK -- to the same
> > grammar exclusion, so it hits the same bug. Under (b), RPR would have to
> > extend the list itself (plus a round-trip test per name) and depend on
> > this patch landing first; under (a), RPR needs nothing here.
> >
> > That history is also why I lean (b): quoting every keyword on the
> > refname (option (a)) re-introduces exactly the broad quoting
> > 4c310eca2ea set out to remove, just confined to one slot. (b) quotes
> > only the four names the grammar actually rejects, which keeps faith with
> > that original intent. If we take (b), then Kwangwon, since you would be
> > building that list here anyway, would you be up for helping with the
> > matching change on the RPR side (adding those four names to the same
> > list in CF 4460)? It is the same mechanism, so doing both keeps the list
> > in one place and consistent.
> >
> > Either way, I am happy to help review it through.
>
> Thank you for the explanation. I prefer (b) too since (a) breaks
> 4c310eca2ea as you said.
>
> Regards,
> --
> Tatsuo Ishii
> SRA OSS K.K.
> English: http://www.sraoss.co.jp/index_en/
> Japanese:http://www.sraoss.co.jp
>

Attachment Content-Type Size
v2-0001-Fix-quotation-logic-for-unreserved-keywords-in-wi.patch text/x-patch 5.3 KB

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Hüseyin Demir 2026-08-18 10:31:53 Re: [PATCH] pg_upgrade: add --initdb option to create the new cluster automatically
Previous Message Heikki Linnakangas 2026-08-18 10:00:09 Re: fix more casting away of qualifiers