greenplumn CDXLColStats 源码
greenplumn CDXLColStats 代码
文件路径:/src/backend/gporca/libnaucrates/src/md/CDXLColStats.cpp
//---------------------------------------------------------------------------
// Greenplum Database
// Copyright (C) 2012 EMC Corp.
//
// @filename:
// CDXLColStats.cpp
//
// @doc:
// Implementation of the class for representing column stats in DXL
//---------------------------------------------------------------------------
#include "naucrates/md/CDXLColStats.h"
#include "gpos/common/CAutoRef.h"
#include "gpos/string/CWStringDynamic.h"
#include "naucrates/dxl/CDXLUtils.h"
#include "naucrates/dxl/xml/CXMLSerializer.h"
#include "naucrates/statistics/CStatistics.h"
using namespace gpdxl;
using namespace gpmd;
//---------------------------------------------------------------------------
// @function:
// CDXLColStats::CDXLColStats
//
// @doc:
// Constructor
//
//---------------------------------------------------------------------------
CDXLColStats::CDXLColStats(CMemoryPool *mp, CMDIdColStats *mdid_col_stats,
CMDName *mdname, CDouble width, CDouble null_freq,
CDouble distinct_remaining, CDouble freq_remaining,
CDXLBucketArray *dxl_stats_bucket_array,
BOOL is_col_stats_missing)
: m_mp(mp),
m_mdid_col_stats(mdid_col_stats),
m_mdname(mdname),
m_width(width),
m_null_freq(null_freq),
m_distinct_remaining(distinct_remaining),
m_freq_remaining(freq_remaining),
m_dxl_stats_bucket_array(dxl_stats_bucket_array),
m_is_col_stats_missing(is_col_stats_missing)
{
GPOS_ASSERT(mdid_col_stats->IsValid());
GPOS_ASSERT(nullptr != dxl_stats_bucket_array);
m_dxl_str = CDXLUtils::SerializeMDObj(
m_mp, this, false /*fSerializeHeader*/, false /*indentation*/);
}
//---------------------------------------------------------------------------
// @function:
// CDXLColStats::~CDXLColStats
//
// @doc:
// Destructor
//
//---------------------------------------------------------------------------
CDXLColStats::~CDXLColStats()
{
GPOS_DELETE(m_mdname);
GPOS_DELETE(m_dxl_str);
m_mdid_col_stats->Release();
m_dxl_stats_bucket_array->Release();
}
//---------------------------------------------------------------------------
// @function:
// CDXLColStats::MDId
//
// @doc:
// Returns the metadata id of this column stats object
//
//---------------------------------------------------------------------------
IMDId *
CDXLColStats::MDId() const
{
return m_mdid_col_stats;
}
//---------------------------------------------------------------------------
// @function:
// CDXLColStats::Mdname
//
// @doc:
// Returns the name of this column
//
//---------------------------------------------------------------------------
CMDName
CDXLColStats::Mdname() const
{
return *m_mdname;
}
//---------------------------------------------------------------------------
// @function:
// CDXLColStats::GetMDName
//
// @doc:
// Returns the DXL string for this object
//
//---------------------------------------------------------------------------
const CWStringDynamic *
CDXLColStats::GetStrRepr() const
{
return m_dxl_str;
}
//---------------------------------------------------------------------------
// @function:
// CDXLColStats::Buckets
//
// @doc:
// Returns the number of buckets in the histogram
//
//---------------------------------------------------------------------------
ULONG
CDXLColStats::Buckets() const
{
return m_dxl_stats_bucket_array->Size();
}
//---------------------------------------------------------------------------
// @function:
// CDXLColStats::GetDXLBucketAt
//
// @doc:
// Returns the bucket at the given position
//
//---------------------------------------------------------------------------
const CDXLBucket *
CDXLColStats::GetDXLBucketAt(ULONG pos) const
{
return (*m_dxl_stats_bucket_array)[pos];
}
//---------------------------------------------------------------------------
// @function:
// CDXLColStats::Serialize
//
// @doc:
// Serialize column stats in DXL format
//
//---------------------------------------------------------------------------
void
CDXLColStats::Serialize(CXMLSerializer *xml_serializer) const
{
xml_serializer->OpenElement(
CDXLTokens::GetDXLTokenStr(EdxltokenNamespacePrefix),
CDXLTokens::GetDXLTokenStr(EdxltokenColumnStats));
m_mdid_col_stats->Serialize(xml_serializer,
CDXLTokens::GetDXLTokenStr(EdxltokenMdid));
xml_serializer->AddAttribute(CDXLTokens::GetDXLTokenStr(EdxltokenName),
m_mdname->GetMDName());
xml_serializer->AddAttribute(CDXLTokens::GetDXLTokenStr(EdxltokenWidth),
m_width);
xml_serializer->AddAttribute(
CDXLTokens::GetDXLTokenStr(EdxltokenColNullFreq), m_null_freq);
xml_serializer->AddAttribute(
CDXLTokens::GetDXLTokenStr(EdxltokenColNdvRemain),
m_distinct_remaining);
xml_serializer->AddAttribute(
CDXLTokens::GetDXLTokenStr(EdxltokenColFreqRemain), m_freq_remaining);
xml_serializer->AddAttribute(
CDXLTokens::GetDXLTokenStr(EdxltokenColStatsMissing),
m_is_col_stats_missing);
GPOS_CHECK_ABORT;
ULONG num_of_buckets = Buckets();
for (ULONG ul = 0; ul < num_of_buckets; ul++)
{
const CDXLBucket *dxl_bucket = GetDXLBucketAt(ul);
dxl_bucket->Serialize(xml_serializer);
GPOS_CHECK_ABORT;
}
xml_serializer->CloseElement(
CDXLTokens::GetDXLTokenStr(EdxltokenNamespacePrefix),
CDXLTokens::GetDXLTokenStr(EdxltokenColumnStats));
}
#ifdef GPOS_DEBUG
//---------------------------------------------------------------------------
// @function:
// CDXLColStats::DebugPrint
//
// @doc:
// Dbug print of the column stats object
//
//---------------------------------------------------------------------------
void
CDXLColStats::DebugPrint(IOstream &os) const
{
os << "Column id: ";
MDId()->OsPrint(os);
os << std::endl;
os << "Column name: " << (Mdname()).GetMDName()->GetBuffer() << std::endl;
for (ULONG ul = 0; ul < Buckets(); ul++)
{
const CDXLBucket *dxl_bucket = GetDXLBucketAt(ul);
dxl_bucket->DebugPrint(os);
}
}
#endif // GPOS_DEBUG
//---------------------------------------------------------------------------
// @function:
// CDXLColStats::CreateDXLDummyColStats
//
// @doc:
// Dummy statistics
//
//---------------------------------------------------------------------------
CDXLColStats *
CDXLColStats::CreateDXLDummyColStats(CMemoryPool *mp, IMDId *mdid,
CMDName *mdname, CDouble width)
{
CMDIdColStats *mdid_col_stats = CMDIdColStats::CastMdid(mdid);
CAutoRef<CDXLBucketArray> dxl_bucket_array;
dxl_bucket_array = GPOS_NEW(mp) CDXLBucketArray(mp);
CAutoRef<CDXLColStats> dxl_col_stats;
dxl_col_stats = GPOS_NEW(mp) CDXLColStats(
mp, mdid_col_stats, mdname, width, CHistogram::DefaultNullFreq,
CHistogram::DefaultNDVRemain, CHistogram::DefaultNDVFreqRemain,
dxl_bucket_array.Value(), true /* is_col_stats_missing */
);
dxl_bucket_array.Reset();
return dxl_col_stats.Reset();
}
// EOF
相关信息
相关文章
greenplumn CDXLStatsDerivedColumn 源码
greenplumn CDXLStatsDerivedRelation 源码
greenplumn CMDAggregateGPDB 源码
greenplumn CMDArrayCoerceCastGPDB 源码
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦