| From: | SATYANARAYANA NARLAPURAM <satyanarlapuram(at)gmail(dot)com> |
|---|---|
| To: | Ashutosh Bapat <ashutosh(dot)bapat(dot)oss(at)gmail(dot)com> |
| Cc: | PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>, Peter Eisentraut <peter(at)eisentraut(dot)org> |
| Subject: | Re: Bug: Missing collation assignment for GRAPH_TABLE COLUMNS expressions |
| Date: | 2026-04-10 18:06:05 |
| Message-ID: | CAHg+QDfdgVT0qZv6fGcxS7Sk1se8yYBsaVUGoQqbLVVs9PsxZQ@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
Hi Ashutosh,
On Fri, Apr 10, 2026 at 9:25 AM Ashutosh Bapat <ashutosh(dot)bapat(dot)oss(at)gmail(dot)com>
wrote:
> Hi Satya,
> Thanks for the report and patch.
>
> On Fri, Apr 10, 2026 at 9:12 PM SATYANARAYANA NARLAPURAM
> <satyanarlapuram(at)gmail(dot)com> wrote:
> >
> > Hi hackers,
> >
> > GRAPH_TABLE COLUMNS expressions that involve collation-dependent
> functions or operators fail with:
> >
> > ERROR: could not determine which collation to use for upper() function
> > HINT: Use the COLLATE clause to set the collation explicitly.
> >
> > Setup:
> >
> > CREATE TABLE vtx (id int PRIMARY KEY, name text);
> > CREATE TABLE edg (id int PRIMARY KEY,
> > src int REFERENCES vtx(id),
> > dst int REFERENCES vtx(id));
> > INSERT INTO vtx VALUES (1,'Alice'),(2,'Bob'),(3,'Carol');
> > INSERT INTO edg VALUES (1,1,2),(2,2,3);
> >
> > CREATE PROPERTY GRAPH g
> > VERTEX TABLES (vtx KEY (id))
> > EDGE TABLES (edg KEY (id)
> > SOURCE KEY (src) REFERENCES vtx (id)
> > DESTINATION KEY (dst) REFERENCES vtx (id));
> >
> > postgres=# SELECT * FROM GRAPH_TABLE (g
> > MATCH (a IS vtx)-[e IS edg]->(b IS vtx) COLUMNS (upper(a.name) AS
> src_upper));
> > ERROR: could not determine which collation to use for upper() function
> > HINT: Use the COLLATE clause to set the collation explicitly.
> >
> >
> > In transformRangeGraphTable(), the COLUMNS transformation loop calls
> transformExpr()
> > on each column expression but omits the subsequent
> assign_expr_collations() call. Both
> > WHERE clause transformation sites in parse_graphtable.c correctly
> include it.
> >
> > Attached a patch to fix this.
>
> I think the fix is in the right direction. It's better to call
> assign_expr_collation only once on all the columns at the end of loop
> of rgt->columns, just like assign_expr_collation is called on all the
> conditions in WHERE clause once
Addressed this in v2 patch.
>
>
Good to see tests also included in the patch. Do we need all three
> queries? Also those queries should be placed near the section "-- test
> collation specified in the expression" and add a query for explicit
> collation in COLUMNs expression.
>
Removed two tests and moved the test. Explicit collate test already exists.
Thanks,
Satya
| Attachment | Content-Type | Size |
|---|---|---|
| v2-0001-fix-graph-table-columns-collation.patch | application/octet-stream | 2.4 KB |
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Nathan Bossart | 2026-04-10 18:07:35 | Re: [PATCH] Use cached hash to skip unnecessary key comparisons in dshash |
| Previous Message | Ashutosh Bapat | 2026-04-10 16:25:00 | Re: Bug: Missing collation assignment for GRAPH_TABLE COLUMNS expressions |