| From: | Henson Choi <assam258(at)gmail(dot)com> |
|---|---|
| To: | Tatsuo Ishii <ishii(at)postgresql(dot)org> |
| Cc: | sjjang112233(at)gmail(dot)com, vik(at)postgresfriends(dot)org, er(at)xs4all(dot)nl, jacob(dot)champion(at)enterprisedb(dot)com, david(dot)g(dot)johnston(at)gmail(dot)com, peter(at)eisentraut(dot)org, pgsql-hackers(at)postgresql(dot)org |
| Subject: | Re: Row pattern recognition |
| Date: | 2026-03-09 04:02:02 |
| Message-ID: | CAAAe_zAn2nFgM_gfsEDYu+MXCArRFoP6s9bRz2bP4X5HNmnYww@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
Hi Tatsuo,
> > 10/12 Walk DEFINE clause in window tree traversal [new]
> > A newly discovered issue: nodeFuncs.c was not visiting the
> > DEFINE clause in expression_tree_walker, query_tree_walker,
> > and their mutator counterparts. The demonstrated case is SQL
> > function inlining: a SQL function with a parameter used in
> > DEFINE (e.g., DEFINE A AS v > $1) would fail to substitute
> > the actual argument, producing wrong results.
>
> Excellnt findings! BTW, I realized that we cannot use $1 of function
> in PATTERN clause like: A{$1}.
>
> ERROR: 42601: syntax error at or near "$1"
> LINE 10: PATTERN (A{$1})
> ^
> LOCATION: scanner_yyerror, scan.l:1211
>
> Should we document somewhere?
>
The PATTERN quantifier {n} only accepts Iconst (integer literal) in the
grammar. When a host variable or function parameter is used (e.g.,
A{$1}), the user gets a generic syntax error.
Oracle accepts broader syntax and validates later, producing an error
at a later stage rather than a syntax error at parse time.
PostgreSQL itself already has precedent for this pattern -- in fact,
within the same window clause, frame offset (ROWS/RANGE/GROUPS) accepts
a_expr in the grammar and then rejects variables in parse analysis via
transformFrameOffset() -> checkExprIsVarFree().
I'd lean against documenting this. The SQL standard already defines
the quantifier bound as <unsigned integer literal>, so there is nothing
beyond the standard to call out, and documenting what is *not* allowed
tends to raise questions that wouldn't otherwise occur to users.
Rather, I think accepting a broader grammar and validating later would
be the more appropriate response, producing a descriptive error like:
"argument of bounded quantifier must be an integer literal"
I can either include this in the current patch set or handle it as a
separate follow-up after the main series is committed. What do you
think?
Regards,
Henson
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Michael Paquier | 2026-03-09 04:17:13 | Re: Avoid resource leak (src/bin/pg_dump/pg_dumpall.c) |
| Previous Message | Richard Guo | 2026-03-09 04:01:14 | Re: Convert NOT IN sublinks to anti-joins when safe |