> On Aug 31, 2026, at 15:32, Ewan Young <[email protected]> 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.

Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/






Reply via email to