GRAPH_TABLE COLUMNS expressions that involve collation-dependent functions or operators fail with:
HINT: Use the COLLATE clause to set the collation explicitly.
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.