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、 openharmony
- 
                        9、 golang