From 74334a9b9ad5a0601428789ff8d88864cb291ab7 Mon Sep 17 00:00:00 2001 From: Junwang Zhao Date: Wed, 26 Feb 2025 13:32:41 +0000 Subject: [PATCH v12 14/14] lock graph table Signed-off-by: Junwang Zhao --- src/backend/rewrite/rewriteGraphTable.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/backend/rewrite/rewriteGraphTable.c b/src/backend/rewrite/rewriteGraphTable.c index d5e75b791a3..e640a541303 100644 --- a/src/backend/rewrite/rewriteGraphTable.c +++ b/src/backend/rewrite/rewriteGraphTable.c @@ -107,6 +107,7 @@ static Node *get_element_property_expr(Oid elemoid, Oid propoid, int rtindex); Query * rewriteGraphTable(Query *parsetree, int rt_index) { + Relation rel; RangeTblEntry *rte; Query *graph_table_query; List *path_pattern; @@ -123,6 +124,7 @@ rewriteGraphTable(Query *parsetree, int rt_index) AcquireRewriteLocks(graph_table_query, true, false); + rel = table_open(rte->relid, AccessShareLock); rte->rtekind = RTE_SUBQUERY; rte->subquery = graph_table_query; rte->lateral = true; @@ -133,6 +135,7 @@ rewriteGraphTable(Query *parsetree, int rt_index) */ rte->graph_pattern = NULL; rte->graph_table_columns = NIL; + table_close(rel, NoLock); #if 0 elog(INFO, "rewritten:\n%s", pg_get_querydef(copyObject(parsetree), false)); @@ -230,7 +233,8 @@ generate_queries_for_path_pattern(RangeTblEntry *rte, List *path_pattern) * conjuction is not supported right now. */ if (!other->labelexpr) - other->labelexpr = gep->labelexpr; + other ->labelexpr = gep->labelexpr; + else if (gep->labelexpr && !equal(other->labelexpr, gep->labelexpr)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), @@ -242,12 +246,14 @@ generate_queries_for_path_pattern(RangeTblEntry *rte, List *path_pattern) * element. Combine by ANDing them. */ if (!other->whereClause) - other->whereClause = gep->whereClause; + other ->whereClause = gep->whereClause; + else if (gep->whereClause) - other->whereClause = (Node *) makeBoolExpr(AND_EXPR, - list_make2(other->whereClause, gep->whereClause), - -1); + other ->whereClause = (Node *) makeBoolExpr(AND_EXPR, + list_make2(other->whereClause, gep->whereClause), + -1); pf = other; + break; } } -- 2.39.5