| From: | Tatsuo Ishii <ishii(at)postgresql(dot)org> |
|---|---|
| To: | assam258(at)gmail(dot)com |
| Cc: | anchovyseo(at)gmail(dot)com, ishii(at)postgresql(dot)org, 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-14 02:49:49 |
| Message-ID: | 20260814.114949.148490743251112051.ishii@postgresql.org |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
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
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Srinath Reddy Sadipiralla | 2026-08-14 03:18:47 | Re: Credits For v19 |
| Previous Message | Tatsuo Ishii | 2026-08-14 02:12:13 | Re: Row pattern recognition |