This is an automated email from the ASF dual-hosted git repository.

yjhjstz pushed a commit to branch cbdb-postgres-merge
in repository https://gitbox.apache.org/repos/asf/cloudberry.git


The following commit(s) were added to refs/heads/cbdb-postgres-merge by this 
push:
     new 32cabc2f7dc Fix ORCA RTEPermissionInfo handling for PG16 compatibility
32cabc2f7dc is described below

commit 32cabc2f7dc1f90fac6380accf59982926204fbc
Author: Jianghua Yang <[email protected]>
AuthorDate: Mon Mar 9 09:22:14 2026 -0700

    Fix ORCA RTEPermissionInfo handling for PG16 compatibility
    
    Two issues with ORCA's RTEPermissionInfo handling after PG16 merge:
    
    1. CTranslatorQueryToDXL::TranslateFromClauseToDXL called
       getRTEPermissionInfo unconditionally on every FROM clause RTE,
       but RTE_VALUES entries (from multi-value INSERT) have
       perminfoindex=0 and no permission info, causing ERROR.
       Fix: move the call inside the RTE_RELATION case branch.
    
    2. CTranslatorDXLToPlStmt::ProcessDXLTblDescr created
       RTEPermissionInfo nodes without setting relid, causing
       Assert(OidIsValid(perminfo->relid)) failures.
       Fix: set pi->relid = oid.
---
 src/backend/gpopt/translate/CTranslatorDXLToPlStmt.cpp | 1 +
 src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp  | 5 ++---
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/backend/gpopt/translate/CTranslatorDXLToPlStmt.cpp 
b/src/backend/gpopt/translate/CTranslatorDXLToPlStmt.cpp
index ace13c6cb3e..f634786e982 100644
--- a/src/backend/gpopt/translate/CTranslatorDXLToPlStmt.cpp
+++ b/src/backend/gpopt/translate/CTranslatorDXLToPlStmt.cpp
@@ -5284,6 +5284,7 @@ CTranslatorDXLToPlStmt::ProcessDXLTblDescr(
        RTEPermissionInfo *pi = MakeNode(RTEPermissionInfo);
        rte->rtekind = RTE_RELATION;
        rte->relid = oid;
+       pi->relid = oid;
        pi->checkAsUser = table_descr->GetExecuteAsUserId();
        pi->requiredPerms |= required_perms;
        rte->rellockmode = table_descr->LockMode();
diff --git a/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp 
b/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp
index 91e8106e60e..6c2cd98e8ee 100644
--- a/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp
+++ b/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp
@@ -3266,9 +3266,6 @@ CTranslatorQueryToDXL::TranslateFromClauseToDXL(Node 
*node)
                                           GPOS_WSZ_LIT("WITH ORDINALITY"));
                }
 
-               const RTEPermissionInfo *perminfo = 
gpdb::GetRTEPermissionInfo(m_query->rteperminfos,
-                                                                               
                                                                 rte);
-
                switch (rte->rtekind)
                {
                        default:
@@ -3279,6 +3276,8 @@ CTranslatorQueryToDXL::TranslateFromClauseToDXL(Node 
*node)
                        }
                        case RTE_RELATION:
                        {
+                               const RTEPermissionInfo *perminfo = 
gpdb::GetRTEPermissionInfo(m_query->rteperminfos,
+                                                                               
                                                                           rte);
                                return TranslateRTEToDXLLogicalGet(rte, 
perminfo, rt_index,
                                                                                
                   m_query_level);
                        }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to