diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c index 967eea44..42d35a18 100644 --- a/src/backend/parser/parse_clause.c +++ b/src/backend/parser/parse_clause.c @@ -980,6 +980,7 @@ transformRangeGraphTable(ParseState *pstate, RangeGraphTable *rgt) char *colname; colexpr = transformExpr(pstate, rt->val, EXPR_KIND_SELECT_TARGET); + assign_expr_collations(pstate, colexpr); if (rt->name) colname = rt->name; diff --git a/src/test/regress/expected/graph_table.out b/src/test/regress/expected/graph_table.out index b579e3df..26ba95e5 100644 --- a/src/test/regress/expected/graph_table.out +++ b/src/test/regress/expected/graph_table.out @@ -1022,4 +1022,53 @@ SELECT sname, dname FROM GRAPH_TABLE (g1 MATCH (src)->(dest) WHERE src.vprop1 > ERROR: subqueries within GRAPH_TABLE reference are not supported SELECT sname, dname FROM GRAPH_TABLE (g1 MATCH (src)->(dest) WHERE out_degree(src.vname) > (SELECT max(out_degree(nname)) FROM GRAPH_TABLE (g1 MATCH (node) COLUMNS (node.vname AS nname))) COLUMNS(src.vname AS sname, dest.vname AS dname)); ERROR: subqueries within GRAPH_TABLE reference are not supported +-- collation assignment for COLUMNS expressions +SELECT * FROM GRAPH_TABLE (g1 MATCH (src)->(dest) COLUMNS (upper(src.vname) AS u)) ORDER BY u; + u +----- + V11 + V11 + V11 + V12 + V13 + V21 + V22 + V23 + V32 + V33 + V33 +(11 rows) + +SELECT * FROM GRAPH_TABLE (g1 MATCH (src)->(dest) COLUMNS (src.vname || dest.vname AS combined)) ORDER BY combined; + combined +---------- + v11v22 + v11v31 + v11v33 + v12v21 + v13v23 + v21v12 + v22v32 + v23v13 + v32v22 + v33v33 + v33v33 +(11 rows) + +SELECT * FROM GRAPH_TABLE (g1 MATCH (src)->(dest) COLUMNS (replace(src.vname, 'S', 'X') AS replaced)) ORDER BY replaced; + replaced +---------- + v11 + v11 + v11 + v12 + v13 + v21 + v22 + v23 + v32 + v33 + v33 +(11 rows) + -- leave the objects behind for pg_upgrade/pg_dump tests diff --git a/src/test/regress/sql/graph_table.sql b/src/test/regress/sql/graph_table.sql index 4ff98817..13ece6d8 100644 --- a/src/test/regress/sql/graph_table.sql +++ b/src/test/regress/sql/graph_table.sql @@ -582,4 +582,9 @@ SELECT * FROM customers co WHERE co.customer_id = (SELECT customer_id FROM GRAPH SELECT sname, dname FROM GRAPH_TABLE (g1 MATCH (src)->(dest) WHERE src.vprop1 > (SELECT max(v1.vprop1) FROM v1) COLUMNS(src.vname AS sname, dest.vname AS dname)); SELECT sname, dname FROM GRAPH_TABLE (g1 MATCH (src)->(dest) WHERE out_degree(src.vname) > (SELECT max(out_degree(nname)) FROM GRAPH_TABLE (g1 MATCH (node) COLUMNS (node.vname AS nname))) COLUMNS(src.vname AS sname, dest.vname AS dname)); +-- collation assignment for COLUMNS expressions +SELECT * FROM GRAPH_TABLE (g1 MATCH (src)->(dest) COLUMNS (upper(src.vname) AS u)) ORDER BY u; +SELECT * FROM GRAPH_TABLE (g1 MATCH (src)->(dest) COLUMNS (src.vname || dest.vname AS combined)) ORDER BY combined; +SELECT * FROM GRAPH_TABLE (g1 MATCH (src)->(dest) COLUMNS (replace(src.vname, 'S', 'X') AS replaced)) ORDER BY replaced; + -- leave the objects behind for pg_upgrade/pg_dump tests