greenplumn CStatsPred 源码

  • 2022-08-18
  • 浏览 (296)

greenplumn CStatsPred 代码

文件路径:/src/backend/gporca/libnaucrates/include/naucrates/statistics/CStatsPred.h

//---------------------------------------------------------------------------
//	Greenplum Database
//	Copyright (C) 2013 EMC Corp.
//
//	@filename:
//		CStatsPred.h
//
//	@doc:
//		Filter on statistics
//---------------------------------------------------------------------------
#ifndef GPNAUCRATES_CStatsPred_H
#define GPNAUCRATES_CStatsPred_H

#include "gpos/base.h"
#include "gpos/common/CDynamicPtrArray.h"
#include "gpos/common/CRefCount.h"

namespace gpnaucrates
{
using namespace gpos;

//---------------------------------------------------------------------------
//	@class:
//		CStatsPred
//
//	@doc:
//		Filter on statistics
//---------------------------------------------------------------------------
class CStatsPred : public CRefCount
{
public:
	enum EStatsPredType
	{
		EsptPoint,		  // filter with literals
		EsptArrayCmp,	  // filter with = ANY/ALL(ARRAY[...])
		EsptConj,		  // conjunctive filter
		EsptDisj,		  // disjunctive filter
		EsptLike,		  // LIKE filter
		EsptUnsupported,  // unsupported filter for statistics calculation

		EsptSentinel
	};

	// comparison types for stats computation
	enum EStatsCmpType
	{
		EstatscmptEq,		// equals
		EstatscmptNEq,		// not equals
		EstatscmptL,		// less than
		EstatscmptLEq,		// less or equal to
		EstatscmptG,		// greater than
		EstatscmptGEq,		// greater or equal to
		EstatscmptIDF,		// is distinct from
		EstatscmptINDF,		// is not distinct from
		EstatscmptLike,		// LIKE predicate comparison
		EstatscmptNotLike,	// NOT LIKE predicate comparison
		// NDV comparison for equality predicate on columns with functions, ex f(a) = b or a = f(b)
		EstatscmptEqNDV,
		EstatscmptOther
	};

private:
protected:
	// column id
	ULONG m_colid;

public:
	CStatsPred &operator=(CStatsPred &) = delete;

	CStatsPred(const CStatsPred &) = delete;

	// ctor
	explicit CStatsPred(ULONG colid) : m_colid(colid)
	{
	}

	// dtor
	~CStatsPred() override = default;

	// accessors
	virtual ULONG
	GetColId() const
	{
		return m_colid;
	}

	// type id
	virtual EStatsPredType GetPredStatsType() const = 0;

	// comparison function
	static inline INT StatsPredSortCmpFunc(const void *val1, const void *val2);
};	// class CStatsPred

// array of filters
using CStatsPredPtrArry = CDynamicPtrArray<CStatsPred, CleanupRelease>;

// comparison function for sorting predicates
INT
CStatsPred::StatsPredSortCmpFunc(const void *val1, const void *val2)
{
	const CStatsPred *stats_pred1 = *(const CStatsPred **) val1;
	const CStatsPred *stats_pred2 = *(const CStatsPred **) val2;

	return (INT) stats_pred1->GetColId() - (INT) stats_pred2->GetColId();
}

}  // namespace gpnaucrates

#endif	// !GPNAUCRATES_CStatsPred_H

// EOF

相关信息

greenplumn 源码目录

相关文章

greenplumn CBucket 源码

greenplumn CFilterStatsProcessor 源码

greenplumn CGroupByStatsProcessor 源码

greenplumn CHistogram 源码

greenplumn CInnerJoinStatsProcessor 源码

greenplumn CJoinStatsProcessor 源码

greenplumn CLeftAntiSemiJoinStatsProcessor 源码

greenplumn CLeftOuterJoinStatsProcessor 源码

greenplumn CLeftSemiJoinStatsProcessor 源码

greenplumn CLimitStatsProcessor 源码

0  赞