From 0addf4216de010def6627beee45594fd5a00e10e Mon Sep 17 00:00:00 2001 From: Satya Narlapuram Date: Thu, 7 May 2026 04:18:54 +0000 Subject: [PATCH] Add the missing RTE_GRAPH_TABLE case to transformLockingClause() Without it, FOR UPDATE/SHARE/NO KEY UPDATE/KEY SHARE on a GRAPH_TABLE alias falls through to the default "unrecognized RTE type" elog. --- src/backend/parser/analyze.c | 9 +++++++++ src/test/regress/expected/graph_table.out | 16 ++++++++++++++++ src/test/regress/sql/graph_table.sql | 5 +++++ 3 files changed, 30 insertions(+) diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index ffcf25a6be..d0c5c128e7 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -4005,6 +4005,15 @@ transformLockingClause(ParseState *pstate, Query *qry, LockingClause *lc, LCS_asString(lc->strength)), parser_errposition(pstate, thisrel->location))); break; + case RTE_GRAPH_TABLE: + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /*------ + translator: %s is a SQL row locking clause such as FOR UPDATE */ + errmsg("%s cannot be applied to a GRAPH_TABLE", + LCS_asString(lc->strength)), + parser_errposition(pstate, thisrel->location))); + break; /* Shouldn't be possible to see RTE_RESULT here */ diff --git a/src/test/regress/expected/graph_table.out b/src/test/regress/expected/graph_table.out index 067190a690..7f28b9f90c 100644 --- a/src/test/regress/expected/graph_table.out +++ b/src/test/regress/expected/graph_table.out @@ -1065,4 +1065,20 @@ SELECT v1.vname, gt.aname v13 | v13 (3 rows) +SELECT * FROM GRAPH_TABLE (g1 MATCH (a IS vl1) COLUMNS (a.vname)) gt FOR UPDATE OF gt; +ERROR: FOR UPDATE cannot be applied to a GRAPH_TABLE +LINE 1: ...(g1 MATCH (a IS vl1) COLUMNS (a.vname)) gt FOR UPDATE OF gt; + ^ +SELECT * FROM GRAPH_TABLE (g1 MATCH (a IS vl1) COLUMNS (a.vname)) gt FOR SHARE OF gt; +ERROR: FOR SHARE cannot be applied to a GRAPH_TABLE +LINE 1: ... (g1 MATCH (a IS vl1) COLUMNS (a.vname)) gt FOR SHARE OF gt; + ^ +SELECT * FROM GRAPH_TABLE (g1 MATCH (a IS vl1) COLUMNS (a.vname)) gt FOR NO KEY UPDATE OF gt; +ERROR: FOR NO KEY UPDATE cannot be applied to a GRAPH_TABLE +LINE 1: ...CH (a IS vl1) COLUMNS (a.vname)) gt FOR NO KEY UPDATE OF gt; + ^ +SELECT * FROM GRAPH_TABLE (g1 MATCH (a IS vl1) COLUMNS (a.vname)) gt FOR KEY SHARE OF gt; +ERROR: FOR KEY SHARE cannot be applied to a GRAPH_TABLE +LINE 1: ... MATCH (a IS vl1) COLUMNS (a.vname)) gt FOR KEY SHARE OF gt; + ^ -- 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 7655b904c9..fcdbbf036a 100644 --- a/src/test/regress/sql/graph_table.sql +++ b/src/test/regress/sql/graph_table.sql @@ -604,4 +604,9 @@ SELECT v1.vname, gt.aname FROM v1, GRAPH_TABLE (g1 MATCH (a WHERE a.vprop1 = v1.vprop1) COLUMNS (a.vname AS aname)) gt ORDER BY 1, 2; +SELECT * FROM GRAPH_TABLE (g1 MATCH (a IS vl1) COLUMNS (a.vname)) gt FOR UPDATE OF gt; +SELECT * FROM GRAPH_TABLE (g1 MATCH (a IS vl1) COLUMNS (a.vname)) gt FOR SHARE OF gt; +SELECT * FROM GRAPH_TABLE (g1 MATCH (a IS vl1) COLUMNS (a.vname)) gt FOR NO KEY UPDATE OF gt; +SELECT * FROM GRAPH_TABLE (g1 MATCH (a IS vl1) COLUMNS (a.vname)) gt FOR KEY SHARE OF gt; + -- leave the objects behind for pg_upgrade/pg_dump tests -- 2.43.0