From ec67f66c25e056c131c57de97953b241bb78f9c0 Mon Sep 17 00:00:00 2001 From: Jianghua Yang Date: Fri, 16 Jan 2026 03:32:00 +0800 Subject: [PATCH 1/2] ORCA: Fix memory leak in CWindowOids by adding destructor CWindowOids class was leaking three CMDIdGPDB objects (m_MDIdRowNumber, m_MDIdRank, m_MDDenseRank) that were allocated in the constructor but never released. Fixes ORCA unit test failures: - gporca_test_CXformTest - gporca_test_CConstExprEvaluatorDefaultTest --- .../gporca/libgpopt/include/gpopt/base/CWindowOids.h | 2 ++ src/backend/gporca/libgpopt/src/base/CWindowOids.cpp | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/src/backend/gporca/libgpopt/include/gpopt/base/CWindowOids.h b/src/backend/gporca/libgpopt/include/gpopt/base/CWindowOids.h index ba120eac015..6d20b4948c2 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/base/CWindowOids.h +++ b/src/backend/gporca/libgpopt/include/gpopt/base/CWindowOids.h @@ -60,6 +60,8 @@ class CWindowOids : public CRefCount CWindowOids(CMemoryPool *mp, OID row_number_oid, OID rank_oid, OID dense_rank_oid); + ~CWindowOids() override; + // accessor of oid value of "row_number" function OID OidRowNumber() const; IMDId *MDIdRowNumber() const; diff --git a/src/backend/gporca/libgpopt/src/base/CWindowOids.cpp b/src/backend/gporca/libgpopt/src/base/CWindowOids.cpp index da744a018d9..10bfb785fd9 100644 --- a/src/backend/gporca/libgpopt/src/base/CWindowOids.cpp +++ b/src/backend/gporca/libgpopt/src/base/CWindowOids.cpp @@ -18,6 +18,13 @@ CWindowOids::CWindowOids(CMemoryPool *mp, OID row_number_oid, OID rank_oid, m_MDDenseRank = GPOS_NEW(mp) CMDIdGPDB(IMDId::EmdidGeneral, m_oidDenseRank); } +CWindowOids::~CWindowOids() +{ + m_MDIdRowNumber->Release(); + m_MDIdRank->Release(); + m_MDDenseRank->Release(); +} + OID CWindowOids::OidRowNumber() const { From c0dc483db13e9c041d23e15cb4c0799e5dbe8a6b Mon Sep 17 00:00:00 2001 From: "Jianghua.yjh" Date: Thu, 15 Jan 2026 11:41:10 -0800 Subject: [PATCH 2/2] Update src/backend/gporca/libgpopt/src/base/CWindowOids.cpp Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/backend/gporca/libgpopt/src/base/CWindowOids.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/backend/gporca/libgpopt/src/base/CWindowOids.cpp b/src/backend/gporca/libgpopt/src/base/CWindowOids.cpp index 10bfb785fd9..e2f326d3aaf 100644 --- a/src/backend/gporca/libgpopt/src/base/CWindowOids.cpp +++ b/src/backend/gporca/libgpopt/src/base/CWindowOids.cpp @@ -20,9 +20,9 @@ CWindowOids::CWindowOids(CMemoryPool *mp, OID row_number_oid, OID rank_oid, CWindowOids::~CWindowOids() { - m_MDIdRowNumber->Release(); - m_MDIdRank->Release(); - m_MDDenseRank->Release(); + CRefCount::SafeRelease(m_MDIdRowNumber); + CRefCount::SafeRelease(m_MDIdRank); + CRefCount::SafeRelease(m_MDDenseRank); } OID