v12-0014-lock-graph-table.patch

application/octet-stream

Filename: v12-0014-lock-graph-table.patch
Type: application/octet-stream
Part: 4
Message: Re: SQL Property Graph Queries (SQL/PGQ)

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: format-patch
Series: patch v12-0014
Subject: lock graph table
File+
src/backend/rewrite/rewriteGraphTable.c 11 5
From 74334a9b9ad5a0601428789ff8d88864cb291ab7 Mon Sep 17 00:00:00 2001
From: Junwang Zhao <zhjwpku@gmail.com>
Date: Wed, 26 Feb 2025 13:32:41 +0000
Subject: [PATCH v12 14/14] lock graph table

Signed-off-by: Junwang Zhao <zhjwpku@gmail.com>
---
 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