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]
