From 4d78c16cd82be5a9fee0e0e2dd95ecefbf3dcf40 Mon Sep 17 00:00:00 2001 From: "Racardo.Cui" Date: Tue, 16 Mar 2021 16:15:23 +0800 Subject: [PATCH] Shield the cursor from calling a stored procedure or function containing commit/rollback --- src/gausskernel/optimizer/commands/portalcmds.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/gausskernel/optimizer/commands/portalcmds.cpp b/src/gausskernel/optimizer/commands/portalcmds.cpp index 00edd6174..308ee27c4 100644 --- a/src/gausskernel/optimizer/commands/portalcmds.cpp +++ b/src/gausskernel/optimizer/commands/portalcmds.cpp @@ -187,9 +187,14 @@ void PerformPortalFetch(FetchStmt* stmt, DestReceiver* dest, char* completionTag if (stmt->ismove) dest = None_Receiver; + bool savedIsAllowCommitRollback; + bool needResetErrMsg = stp_disable_xact_and_set_err_msg(&savedIsAllowCommitRollback, STP_XACT_OPEN_FOR); + /* Do it */ nprocessed = PortalRunFetch(portal, stmt->direction, stmt->howMany, dest); + stp_reset_xact_state_and_err_msg(savedIsAllowCommitRollback, needResetErrMsg); + /* Return command status if wanted */ if (completionTag != NULL) { int rc = snprintf_s(completionTag,