From 1f926db4fa1955185d361740622d806db1488f30 Mon Sep 17 00:00:00 2001 From: gledis69 Date: Tue, 19 Apr 2022 16:59:38 +0300 Subject: [PATCH] Allow LOCK TABLE to be run in a procedure / function --- src/backend/distributed/commands/utility_hook.c | 4 ++-- src/backend/distributed/utils/resource_lock.c | 4 ++-- src/include/distributed/resource_lock.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/backend/distributed/commands/utility_hook.c b/src/backend/distributed/commands/utility_hook.c index 9eb873eb9..20519b9d6 100644 --- a/src/backend/distributed/commands/utility_hook.c +++ b/src/backend/distributed/commands/utility_hook.c @@ -472,9 +472,9 @@ ProcessUtilityInternal(PlannedStmt *pstmt, { LockStmt *stmt = (LockStmt *) parsetree; - ereport(NOTICE, errmsg("Processing LOCK command.")); + bool isTopLevel = context == PROCESS_UTILITY_TOPLEVEL; + ErrorIfUnsupportedLockStmt(stmt, isTopLevel); - ErrorIfUnsupportedLockStmt(stmt); uint32 nowaitFlag = stmt->nowait ? DIST_LOCK_NOWAIT : 0; AcquireDistributedLockOnRelations(stmt->relations, stmt->mode, DIST_LOCK_VIEWS_RECUR | nowaitFlag); diff --git a/src/backend/distributed/utils/resource_lock.c b/src/backend/distributed/utils/resource_lock.c index a3a118993..f973d7826 100644 --- a/src/backend/distributed/utils/resource_lock.c +++ b/src/backend/distributed/utils/resource_lock.c @@ -1253,9 +1253,9 @@ AcquireDistributedLockOnRelations(List *relationList, LOCKMODE lockMode, uint32 * - Locking shard, but citus.enable_manual_changes_to_shards is false */ void -ErrorIfUnsupportedLockStmt(LockStmt *stmt) +ErrorIfUnsupportedLockStmt(LockStmt *stmt, bool isTopLevel) { - RequireTransactionBlock(true, "LOCK TABLE"); + RequireTransactionBlock(isTopLevel, "LOCK TABLE"); RangeVar *rangeVar = NULL; foreach_ptr(rangeVar, stmt->relations) diff --git a/src/include/distributed/resource_lock.h b/src/include/distributed/resource_lock.h index 2deb53318..7a9509564 100644 --- a/src/include/distributed/resource_lock.h +++ b/src/include/distributed/resource_lock.h @@ -163,5 +163,5 @@ extern LOCKMODE LockModeCStringToLockMode(const char *lockModeName); extern const char * LockModeToLockModeCString(LOCKMODE lockMode); extern void AcquireDistributedLockOnRelations(List *relationList, LOCKMODE lockMode, uint32 configs); -extern void ErrorIfUnsupportedLockStmt(LockStmt *stmt); +extern void ErrorIfUnsupportedLockStmt(LockStmt *stmt, bool isTopLevel); #endif /* RESOURCE_LOCK_H */