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

reshke pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry.git

commit fec83a88b07a910c63ef2e525ebd51d279ef3342
Author: zhoujiaqi <[email protected]>
AuthorDate: Fri Feb 7 17:35:15 2025 +0800

    Fix build && core generated by cherry-pick "index only scan, ao support 
index only scan..."
---
 src/backend/executor/execDynamicIndexes.c          | 32 +++++++++++-----------
 .../gpopt/translate/CTranslatorRelcacheToDXL.cpp   |  9 +-----
 src/backend/utils/adt/ruleutils.c                  |  2 +-
 src/include/executor/execDynamicIndexes.h          |  2 +-
 4 files changed, 19 insertions(+), 26 deletions(-)

diff --git a/src/backend/executor/execDynamicIndexes.c 
b/src/backend/executor/execDynamicIndexes.c
index 9ccc5e11fb..45f9a39590 100644
--- a/src/backend/executor/execDynamicIndexes.c
+++ b/src/backend/executor/execDynamicIndexes.c
@@ -39,7 +39,7 @@
  *
  *             Returns NULL for identical mapping.
  */
-AttrNumber *
+AttrMap *
 GetColumnMapping(Oid oldOid, Oid newOid)
 {
        Assert(OidIsValid(newOid));
@@ -53,7 +53,7 @@ GetColumnMapping(Oid oldOid, Oid newOid)
                return NULL;
        }
 
-       AttrNumber *attMap;
+       AttrMap    *attMap;
 
        Relation        oldRel = heap_open(oldOid, AccessShareLock);
        Relation        newRel = heap_open(newOid, AccessShareLock);
@@ -61,7 +61,7 @@ GetColumnMapping(Oid oldOid, Oid newOid)
        TupleDesc       oldTupDesc = oldRel->rd_att;
        TupleDesc       newTupDesc = newRel->rd_att;
 
-       attMap = convert_tuples_by_name_map_if_req(oldTupDesc, newTupDesc, 
"unused msg");
+       attMap = build_attrmap_by_name_if_req(oldTupDesc, newTupDesc);
 
        heap_close(oldRel, AccessShareLock);
        heap_close(newRel, AccessShareLock);
@@ -72,8 +72,8 @@ GetColumnMapping(Oid oldOid, Oid newOid)
 static void
 DynamicIndexScan_ReMapColumns(DynamicIndexScan *dIndexScan, Oid oldOid, Oid 
newOid)
 {
-       IndexScan  *indexScan = &dIndexScan->indexscan;
-       AttrNumber *attMap;
+       IndexScan *indexScan = &dIndexScan->indexscan;
+       AttrMap   *attMap;
 
        attMap = GetColumnMapping(oldOid, newOid);
 
@@ -81,15 +81,15 @@ DynamicIndexScan_ReMapColumns(DynamicIndexScan *dIndexScan, 
Oid oldOid, Oid newO
        {
                /* Also map attrnos in targetlist and quals */
                change_varattnos_of_a_varno((Node *) 
indexScan->scan.plan.targetlist,
-                                                                       attMap, 
indexScan->scan.scanrelid);
+                                                                       
attMap->attnums, indexScan->scan.scanrelid);
                change_varattnos_of_a_varno((Node *) indexScan->scan.plan.qual,
-                                                                       attMap, 
indexScan->scan.scanrelid);
+                                                                       
attMap->attnums, indexScan->scan.scanrelid);
                change_varattnos_of_a_varno((Node *) indexScan->indexqual,
-                                                                       attMap, 
indexScan->scan.scanrelid);
+                                                                       
attMap->attnums, indexScan->scan.scanrelid);
                change_varattnos_of_a_varno((Node *) indexScan->indexqualorig,
-                                                                       attMap, 
indexScan->scan.scanrelid);
+                                                                       
attMap->attnums, indexScan->scan.scanrelid);
 
-               pfree(attMap);
+               free_attrmap(attMap);
        }
 }
 
@@ -97,7 +97,7 @@ static void
 DynamicIndexOnlyScan_ReMapColumns(DynamicIndexOnlyScan *dIndexOnlyScan, Oid 
oldOid, Oid newOid)
 {
        IndexOnlyScan *indexScan = &dIndexOnlyScan->indexscan;
-       AttrNumber *attMap;
+       AttrMap       *attMap;
 
        attMap = GetColumnMapping(oldOid, newOid);
 
@@ -105,13 +105,13 @@ DynamicIndexOnlyScan_ReMapColumns(DynamicIndexOnlyScan 
*dIndexOnlyScan, Oid oldO
        {
                /* Also map attrnos in targetlist and quals */
                change_varattnos_of_a_varno((Node *) 
indexScan->scan.plan.targetlist,
-                                                                       attMap, 
indexScan->scan.scanrelid);
+                                                                       
attMap->attnums, indexScan->scan.scanrelid);
                change_varattnos_of_a_varno((Node *) indexScan->scan.plan.qual,
-                                                                       attMap, 
indexScan->scan.scanrelid);
+                                                                       
attMap->attnums, indexScan->scan.scanrelid);
                change_varattnos_of_a_varno((Node *) indexScan->indexqual,
-                                                                       attMap, 
indexScan->scan.scanrelid);
+                                                                       
attMap->attnums, indexScan->scan.scanrelid);
 
-               pfree(attMap);
+               free_attrmap(attMap);
        }
 }
 
@@ -150,7 +150,7 @@ beginCurrentIndexScan(DynamicIndexScanState *node, EState 
*estate,
                 * Just get the direct parent, we don't support multi-level
                 * partitioning
                 */
-               node->columnLayoutOid = get_partition_parent(tableOid);
+               node->columnLayoutOid = get_partition_parent(tableOid, true /* 
even_if_detached */);
        }
        if (is_indexonly_scan)
        {
diff --git a/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp 
b/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp
index 26915d7c27..4cfad96d42 100644
--- a/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp
+++ b/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp
@@ -508,8 +508,7 @@ get_ao_version(gpdb::RelationWrapper &rel)
                return low_ao_version;
        }
        // non-partitioned AO table or leaf AO table
-       else if ((rel->rd_rel->relam == AO_ROW_TABLE_AM_OID ||
-                         rel->rd_rel->relam == AO_COLUMN_TABLE_AM_OID))
+       else if (RelationStorageIsAO(rel))
        {
                return static_cast<IMDRelation::Erelaoversion>(
                        AORelationVersion_Get(rel.get()));
@@ -3051,12 +3050,6 @@ 
CTranslatorRelcacheToDXL::RetrieveStorageTypeForPartitionedTable(Relation rel)
                gpdb::RelationWrapper child_rel = gpdb::GetRelation(oid);
                IMDRelation::Erelstoragetype child_storage =
                        RetrieveRelStorageType(child_rel.get());
-               // Child rel with partdesc means it's not leaf partition, we 
don't care about it
-               if (child_rel->rd_partdesc)
-               {
-                       continue;
-               }
-
                if (child_storage == IMDRelation::ErelstorageForeign)
                {
                        // for partitioned tables with foreign partitions, we 
want to ignore the foreign partitions
diff --git a/src/backend/utils/adt/ruleutils.c 
b/src/backend/utils/adt/ruleutils.c
index b7148a95a3..872f863717 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -4951,7 +4951,7 @@ set_deparse_plan(deparse_namespace *dpns, Plan *plan)
                dpns->index_tlist = ((ForeignScan *) plan)->fdw_scan_tlist;
        else if (IsA(plan, CustomScan))
                dpns->index_tlist = ((CustomScan *) plan)->custom_scan_tlist;
-       else if (IsA(ps->plan, DynamicIndexOnlyScan))
+       else if (IsA(plan, DynamicIndexOnlyScan))
                dpns->index_tlist = ((DynamicIndexOnlyScan *) 
plan)->indexscan.indextlist;
        else
                dpns->index_tlist = NIL;
diff --git a/src/include/executor/execDynamicIndexes.h 
b/src/include/executor/execDynamicIndexes.h
index 3d308ab93b..8caa218923 100644
--- a/src/include/executor/execDynamicIndexes.h
+++ b/src/include/executor/execDynamicIndexes.h
@@ -13,7 +13,7 @@
 
 #include "nodes/execnodes.h"
 
-extern AttrNumber *GetColumnMapping(Oid oldOid, Oid newOid);
+extern AttrMap *GetColumnMapping(Oid oldOid, Oid newOid);
 extern TupleTableSlot *ExecNextDynamicIndexScan(DynamicIndexScanState *node);
 extern void ExecEndDynamicIndexScan(DynamicIndexScanState *node);
 extern void ExecReScanDynamicIndex(DynamicIndexScanState *node);


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

Reply via email to