| From: | Ewan Young <kdbase(dot)hack(at)gmail(dot)com> |
|---|---|
| To: | Chao Li <li(dot)evan(dot)chao(at)gmail(dot)com> |
| Cc: | PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>, Peter Eisentraut <peter(at)eisentraut(dot)org>, Ashutosh Bapat <ashutosh(dot)bapat(dot)oss(at)gmail(dot)com> |
| Subject: | Re: GRAPH_TABLE pattern WHERE clause is not coerced to boolean |
| Date: | 2026-08-31 10:08:04 |
| Message-ID: | CAON2xHMP062_QSczXTJb_7fG3xRKzunft+tcwFD8dGqgFBS-Jg@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
Thanks for the review!
On Mon, Aug 31, 2026 at 4:38 PM Chao Li <li(dot)evan(dot)chao(at)gmail(dot)com> wrote:
>
>
>
> > On Aug 31, 2026, at 15:32, Ewan Young <kdbase(dot)hack(at)gmail(dot)com> wrote:
> >
> > Hi
> >
> > The WHERE clauses inside a GRAPH_TABLE pattern -- both the element-level
> > one (MATCH (c IS customers WHERE ...)) and the graph-pattern-level one
> > (MATCH ... WHERE ...) -- are transformed with a bare transformExpr()
> > and never go through coerce_to_boolean(). So a WHERE clause of any
> > type is accepted, and its raw datum is used as the qual:
> >
> > create table customers (id int primary key, name text);
> > insert into customers values (1,'alice'),(2,null),(3,'carol');
> > create property graph g
> > vertex tables (customers key (id) label customer properties (id, name));
> >
> > select * from graph_table (g match (c is customer where c.name)
> > columns (c.id));
> > id
> > ----
> > 1
> > 3
> > (2 rows)
> >
> > EXPLAIN shows "Filter: name". The never-null text pointer is always
> > taken as true, so the condition silently degenerates to roughly
> > "name IS NOT NULL": the NULL-name row disappears with no error.
> > Numeric quals are evaluated by bit pattern ("WHERE 1" is true,
> > "WHERE 0" is false), and even "WHERE row(1,2)" is accepted. The same
> > clause outside GRAPH_TABLE gives the usual
> >
> > ERROR: argument of WHERE must be type boolean, not type text
> >
> > The attached patch routes both sites through transformWhereClause(),
> > like every other WHERE clause, and adds regression tests for the
> > element-level and pattern-level cases. make check passes. The code is
> > the same in REL_19_STABLE, so v19 is affected as well.
> >
> > --
> > Regards,
> > Ewan Young
> > <v1-0001-Coerce-GRAPH_TABLE-pattern-WHERE-clauses-to-boolean.patch>
>
> The patch looks good to me. As this is a v19 bug, it might be worth noting in the Open Items list.
Agreed -- I don't have wiki edit access though; could someone add it
under "Open Issues"?
>
> Best regards,
> --
> Chao Li (Evan)
> HighGo Software Co., Ltd.
> https://www.highgo.com/
>
>
>
>
--
Regards,
Ewan Young
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Stepan Filippov | 2026-08-31 10:21:45 | Re: 028_pitr_timelines.pl might fail when cp interrupted and backup includes required segment |
| Previous Message | Vaijayanti Bharadwaj | 2026-08-31 10:05:58 | Re: SSI: A patch for a Serializability violation |