greenplumn CQueryContext 源码
greenplumn CQueryContext 代码
文件路径:/src/backend/gporca/libgpopt/include/gpopt/base/CQueryContext.h
//---------------------------------------------------------------------------
// Greenplum Database
// Copyright (C) 2011 EMC Corp.
//
// @filename:
// CQueryContext.h
//
// @doc:
// A container for query-specific input objects to the optimizer
//---------------------------------------------------------------------------
#ifndef GPOPT_CQueryContext_H
#define GPOPT_CQueryContext_H
#include "gpos/base.h"
#include "gpos/common/DbgPrintMixin.h"
#include "gpopt/base/CReqdPropPlan.h"
#include "gpopt/base/CReqdPropRelational.h"
#include "gpopt/operators/CExpressionPreprocessor.h"
#include "gpopt/search/CGroupExpression.h"
namespace gpopt
{
using namespace gpos;
//---------------------------------------------------------------------------
// @class:
// CQueryContext
//
// @doc:
// Query specific information that optimizer receives as input
// representing the requirements that need to be satisfied by the final
// plan. This includes:
// - Input logical expression
// - Required columns
// - Required plan (physical) properties at the top level of the query.
// This will include sort order, rewindability etc requested by the entire
// query.
//
// The function CQueryContext::PqcGenerate() is the main routine that
// generates a query context object for a given logical expression and
// required output columns. See there for more details of how
// CQueryContext is constructed.
//
// NB: One instance of CQueryContext is created per query. It is then used
// to initialize the CEngine.
//
//
//---------------------------------------------------------------------------
class CQueryContext : public DbgPrintMixin<CQueryContext>
{
private:
// required plan properties in optimizer's produced plan
CReqdPropPlan *m_prpp;
// required array of output columns
CColRefArray *m_pdrgpcr;
// required system columns, collected from of output columns
CColRefArray *m_pdrgpcrSystemCols;
// array of output column names
CMDNameArray *m_pdrgpmdname;
// logical expression tree to be optimized
CExpression *m_pexpr;
// should statistics derivation take place
BOOL m_fDeriveStats;
// collect system columns from output columns
void SetSystemCols(CMemoryPool *mp);
// return top level operator in the given expression
static COperator *PopTop(CExpression *pexpr);
public:
CQueryContext(const CQueryContext &) = delete;
// ctor
CQueryContext(CMemoryPool *mp, CExpression *pexpr, CReqdPropPlan *prpp,
CColRefArray *colref_array, CMDNameArray *pdrgpmdname,
BOOL fDeriveStats);
// dtor
virtual ~CQueryContext();
BOOL
FDeriveStats() const
{
return m_fDeriveStats;
}
// expression accessor
CExpression *
Pexpr() const
{
return m_pexpr;
}
// required plan properties accessor
CReqdPropPlan *
Prpp() const
{
return m_prpp;
}
// return the array of output column references
CColRefArray *
PdrgPcr() const
{
return m_pdrgpcr;
}
// system columns
CColRefArray *
PdrgpcrSystemCols() const
{
return m_pdrgpcrSystemCols;
}
// return the array of output column names
CMDNameArray *
Pdrgpmdname() const
{
return m_pdrgpmdname;
}
// generate the query context for the given expression and array of output column ref ids
static CQueryContext *PqcGenerate(
CMemoryPool *mp, // memory pool
CExpression *pexpr, // expression representing the query
ULongPtrArray
*pdrgpulQueryOutputColRefId, // array of output column reference id
CMDNameArray *pdrgpmdname, // array of output column names
BOOL fDeriveStats);
#ifdef GPOS_DEBUG
// debug print
IOstream &OsPrint(IOstream &) const;
#endif // GPOS_DEBUG
// walk the expression and add the mapping between computed column
// and their corresponding used column(s)
static void MapComputedToUsedCols(CColumnFactory *col_factory,
CExpression *pexpr);
}; // class CQueryContext
} // namespace gpopt
#endif // !GPOPT_CQueryContext_H
// EOF
相关信息
相关文章
greenplumn CColConstraintsArrayMapper 源码
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦