case T_RangeTblRef:
case T_SortGroupClause:
case T_CTESearchClause:
+ case T_GraphLabelRef:
case T_GraphPropertyRef:
case T_MergeSupportFunc:
/* primitive node types with no expression subnodes */
{
GraphElementPattern *gep = (GraphElementPattern *) node;
+ if (WALK(gep->labelexpr))
+ return true;
if (WALK(gep->subexpr))
return true;
if (WALK(gep->whereClause))
case T_RangeTblRef:
case T_SortGroupClause:
case T_CTESearchClause:
+ case T_GraphLabelRef:
+ case T_GraphPropertyRef:
case T_MergeSupportFunc:
return copyObject(node);
case T_WithCheckOption:
return (Node *) newnode;
}
break;
+ case T_GraphElementPattern:
+ {
+ GraphElementPattern *gep = (GraphElementPattern *) node;
+ GraphElementPattern *newnode;
+
+ FLATCOPY(newnode, gep, GraphElementPattern);
+ MUTATE(newnode->labelexpr, gep->labelexpr, Node *);
+ MUTATE(newnode->subexpr, gep->subexpr, List *);
+ MUTATE(newnode->whereClause, gep->whereClause, Node *);
+ newnode->quantifier = list_copy(gep->quantifier);
+ return (Node *) newnode;
+ }
+ break;
+ case T_GraphPattern:
+ {
+ GraphPattern *gp = (GraphPattern *) node;
+ GraphPattern *newnode;
+
+ FLATCOPY(newnode, gp, GraphPattern);
+ MUTATE(newnode->path_pattern_list, gp->path_pattern_list, List *);
+ MUTATE(newnode->whereClause, gp->whereClause, Node *);
+ return (Node *) newnode;
+ }
+ break;
default:
elog(ERROR, "unrecognized node type: %d",
(int) nodeTag(node));
{
GraphElementPattern *gep = (GraphElementPattern *) node;
+ if (WALK(gep->labelexpr))
+ return true;
if (WALK(gep->subexpr))
return true;
if (WALK(gep->whereClause))
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
+-- GRAPH_TABLE subquery in HAVING clause (tests expression mutator)
+SELECT src.vname, count(*) FROM v1 AS src
+ GROUP BY src.vname
+ HAVING count(*) >= (SELECT count(*) FROM GRAPH_TABLE (g1 MATCH (a IS vl1 | vl2) COLUMNS (a.vname AS n)) WHERE n = src.vname);
+ vname | count
+-------+-------
+ v13 | 1
+ v12 | 1
+ v11 | 1
+(3 rows)
+
-- leave the objects behind for pg_upgrade/pg_dump tests
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));
+-- GRAPH_TABLE subquery in HAVING clause (tests expression mutator)
+SELECT src.vname, count(*) FROM v1 AS src
+ GROUP BY src.vname
+ HAVING count(*) >= (SELECT count(*) FROM GRAPH_TABLE (g1 MATCH (a IS vl1 | vl2) COLUMNS (a.vname AS n)) WHERE n = src.vname);
+
-- leave the objects behind for pg_upgrade/pg_dump tests