greenplumn CSearchStage 源码
greenplumn CSearchStage 代码
文件路径:/src/backend/gporca/libgpopt/include/gpopt/search/CSearchStage.h
//---------------------------------------------------------------------------
// Greenplum Database
// Copyright (C) 2012 EMC Corp.
//
// @filename:
// CSearchStage.h
//
// @doc:
// Search stage
//---------------------------------------------------------------------------
#ifndef GPOPT_CSearchStage_H
#define GPOPT_CSearchStage_H
#include "gpos/base.h"
#include "gpos/common/CDynamicPtrArray.h"
#include "gpos/common/CTimerUser.h"
#include "gpopt/xforms/CXform.h"
namespace gpopt
{
using namespace gpos;
// forward declarations
class CSearchStage;
class CExpression;
// definition of array of search stages
using CSearchStageArray = CDynamicPtrArray<CSearchStage, CleanupDelete>;
//---------------------------------------------------------------------------
// @class:
// CSearchStage
//
// @doc:
// Search stage
//
//---------------------------------------------------------------------------
class CSearchStage : public DbgPrintMixin<CSearchStage>
{
private:
// set of xforms to be applied during stage
CXformSet *m_xforms;
// time threshold in milliseconds
ULONG m_time_threshold;
// cost threshold
CCost m_cost_threshold;
// best plan found at the end of search stage
CExpression *m_pexprBest;
// cost of best plan found
CCost m_costBest;
// elapsed time
CTimerUser m_timer;
public:
// ctor
CSearchStage(CXformSet *xform_set, ULONG ulTimeThreshold = gpos::ulong_max,
CCost costThreshold = CCost(0.0));
// dtor
virtual ~CSearchStage();
// restart timer if time threshold is not default indicating don't timeout
// Restart() is a costly method, so avoid calling unnecessarily
void
RestartTimer()
{
if (m_time_threshold != gpos::ulong_max)
{
m_timer.Restart();
}
}
// is search stage timed-out?
// if threshold is gpos::ulong_max, its the default and we need not time out
// ElapsedMS() is a costly method, so avoid calling unnecesarily
BOOL
FTimedOut() const
{
if (m_time_threshold == gpos::ulong_max)
{
return false;
}
return m_timer.ElapsedMS() > m_time_threshold;
}
// return elapsed time (in millseconds) since timer was last restarted
ULONG
UlElapsedTime() const
{
return m_timer.ElapsedMS();
}
BOOL
FAchievedReqdCost() const
{
return (nullptr != m_pexprBest && m_costBest <= m_cost_threshold);
}
// xforms set accessor
CXformSet *
GetXformSet() const
{
return m_xforms;
}
// time threshold accessor
ULONG
TimeThreshold() const
{
return m_time_threshold;
}
// cost threshold accessor
CCost
CostThreshold() const
{
return m_cost_threshold;
}
// set best plan found at the end of search stage
void SetBestExpr(CExpression *pexpr);
// best plan found accessor
CExpression *
PexprBest() const
{
return m_pexprBest;
}
// best plan cost accessor
CCost
CostBest() const
{
return m_costBest;
}
// print function
IOstream &OsPrint(IOstream &) const;
// generate default search strategy
static CSearchStageArray *PdrgpssDefault(CMemoryPool *mp);
};
// shorthand for printing
inline IOstream &
operator<<(IOstream &os, CSearchStage &ss)
{
return ss.OsPrint(os);
}
} // namespace gpopt
#endif // !GPOPT_CSearchStage_H
// EOF
相关信息
相关文章
greenplumn CGroupExpression 源码
greenplumn CJobGroupExploration 源码
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦