This is an automated email from the ASF dual-hosted git repository.
maxyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry.git
The following commit(s) were added to refs/heads/main by this push:
new f87538c957c ORCA: Wrap bms_* function in C++
f87538c957c is described below
commit f87538c957c6a51d3c887bf31625e5acda8c54c6
Author: Hao Wu <[email protected]>
AuthorDate: Wed Jul 23 04:19:31 2025 +0000
ORCA: Wrap bms_* function in C++
ORCA uses exception to handle errors, it can't correctly handle long jump.
It's a rule to use pg functions in a wrapper to adapt long jump and
exceptions
in C++.
---
src/backend/gpopt/gpdbwrappers.cpp | 11 +++++++++++
src/backend/gpopt/translate/CPartPruneStepsBuilder.cpp | 2 +-
src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp | 2 +-
src/include/gpopt/gpdbwrappers.h | 3 +++
4 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/src/backend/gpopt/gpdbwrappers.cpp
b/src/backend/gpopt/gpdbwrappers.cpp
index 84ff881da28..1deb53883d5 100644
--- a/src/backend/gpopt/gpdbwrappers.cpp
+++ b/src/backend/gpopt/gpdbwrappers.cpp
@@ -93,6 +93,17 @@ gpdb::BmsAddMember(Bitmapset *a, int x)
return nullptr;
}
+int
+gpdb::BmsNextMember(const Bitmapset *a, int prevbit)
+{
+ GP_WRAP_START;
+ {
+ return bms_next_member(a, prevbit);
+ }
+ GP_WRAP_END;
+ return -2;
+}
+
void *
gpdb::CopyObject(void *from)
{
diff --git a/src/backend/gpopt/translate/CPartPruneStepsBuilder.cpp
b/src/backend/gpopt/translate/CPartPruneStepsBuilder.cpp
index 33571f9368b..939d9f9c37b 100644
--- a/src/backend/gpopt/translate/CPartPruneStepsBuilder.cpp
+++ b/src/backend/gpopt/translate/CPartPruneStepsBuilder.cpp
@@ -90,7 +90,7 @@
CPartPruneStepsBuilder::CreatePartPruneInfoForOneLevel(CDXLNode *filterNode)
// partition did survive pruning
pinfo->subplan_map[i] = part_ptr;
pinfo->relid_map[i] =
gpdb::RelationGetPartitionDesc(m_relation, true)->oids[i];
- pinfo->present_parts =
bms_add_member(pinfo->present_parts, i);
+ pinfo->present_parts =
gpdb::BmsAddMember(pinfo->present_parts, i);
++part_ptr;
}
else
diff --git a/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp
b/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp
index 1b5f9962318..44c719d5412 100644
--- a/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp
+++ b/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp
@@ -413,7 +413,7 @@ CTranslatorRelcacheToDXL::RetrieveExtStatsInfo(CMemoryPool
*mp, IMDId *mdid)
CBitSet *keys = GPOS_NEW(mp) CBitSet(mp);
int attno = -1;
- while ((attno = bms_next_member(info->keys, attno)) >= 0)
+ while ((attno = gpdb::BmsNextMember(info->keys, attno)) >= 0)
{
keys->ExchangeSet(attno);
}
diff --git a/src/include/gpopt/gpdbwrappers.h b/src/include/gpopt/gpdbwrappers.h
index ba710f994f7..fe387e471c0 100644
--- a/src/include/gpopt/gpdbwrappers.h
+++ b/src/include/gpopt/gpdbwrappers.h
@@ -227,6 +227,9 @@ bool AggregateExists(Oid oid);
// add member to Bitmapset
Bitmapset *BmsAddMember(Bitmapset *a, int x);
+// next member of Bitmapset
+int BmsNextMember(const Bitmapset *a, int prevbit);
+
// create a copy of an object
void *CopyObject(void *from);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]