greenplumn CUpperBoundNDVs 源码
greenplumn CUpperBoundNDVs 代码
文件路径:/src/backend/gporca/libnaucrates/src/statistics/CUpperBoundNDVs.cpp
//---------------------------------------------------------------------------
// Greenplum Database
// Copyright (C) 2014 VMware, Inc. or its affiliates.
//
// @filename:
// CUpperBoundNDVs.cpp
//
// @doc:
// Implementation of upper bound on the number of distinct values for a
// given set of columns
//---------------------------------------------------------------------------
#include "naucrates/statistics/CUpperBoundNDVs.h"
#include "gpopt/base/CColRefSet.h"
#include "gpopt/base/CColRefSetIter.h"
using namespace gpnaucrates;
using namespace gpopt;
//---------------------------------------------------------------------------
// @function:
// CUpperBoundNDVs::CopyUpperBoundNDVWithRemap
//
// @doc:
// Copy upper bound ndvs with remapped column id; function will
// return null if there is no mapping found for any of the columns
//
//---------------------------------------------------------------------------
CUpperBoundNDVs *
CUpperBoundNDVs::CopyUpperBoundNDVWithRemap(
CMemoryPool *mp, UlongToColRefMap *colid_to_colref_map) const
{
BOOL mapping_not_found = false;
CColRefSet *column_refset_copy = GPOS_NEW(mp) CColRefSet(mp);
CColRefSetIter column_refset_iter(*m_column_refset);
while (column_refset_iter.Advance() && !mapping_not_found)
{
ULONG colid = column_refset_iter.Pcr()->Id();
CColRef *column_ref = colid_to_colref_map->Find(&colid);
if (nullptr != column_ref)
{
column_refset_copy->Include(column_ref);
}
else
{
mapping_not_found = true;
}
}
if (0 < column_refset_copy->Size() && !mapping_not_found)
{
return GPOS_NEW(mp)
CUpperBoundNDVs(column_refset_copy, UpperBoundNDVs());
}
column_refset_copy->Release();
return nullptr;
}
//---------------------------------------------------------------------------
// @function:
// CUpperBoundNDVs::CopyUpperBoundNDVs
//
// @doc:
// Copy upper bound ndvs
//
//---------------------------------------------------------------------------
CUpperBoundNDVs *
CUpperBoundNDVs::CopyUpperBoundNDVs(CMemoryPool *mp,
CDouble upper_bound_ndv) const
{
m_column_refset->AddRef();
CUpperBoundNDVs *ndv_copy =
GPOS_NEW(mp) CUpperBoundNDVs(m_column_refset, upper_bound_ndv);
return ndv_copy;
}
//---------------------------------------------------------------------------
// @function:
// CUpperBoundNDVs::CopyUpperBoundNDVs
//
// @doc:
// Copy upper bound ndvs
//
//---------------------------------------------------------------------------
CUpperBoundNDVs *
CUpperBoundNDVs::CopyUpperBoundNDVs(CMemoryPool *mp) const
{
return CopyUpperBoundNDVs(mp, m_upper_bound_ndv);
}
//---------------------------------------------------------------------------
// @function:
// CUpperBoundNDVs::OsPrint
//
// @doc:
// Print function
//
//---------------------------------------------------------------------------
IOstream &
CUpperBoundNDVs::OsPrint(IOstream &os) const
{
os << "{" << std::endl;
m_column_refset->OsPrint(os);
os << " Upper Bound of NDVs " << UpperBoundNDVs() << std::endl;
os << "}" << std::endl;
return os;
}
// EOF
相关信息
相关文章
greenplumn CFilterStatsProcessor 源码
greenplumn CGroupByStatsProcessor 源码
greenplumn CInnerJoinStatsProcessor 源码
greenplumn CJoinStatsProcessor 源码
greenplumn CLeftAntiSemiJoinStatsProcessor 源码
greenplumn CLeftOuterJoinStatsProcessor 源码
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦