greenplumn CConstExprEvaluatorProxy 源码
greenplumn CConstExprEvaluatorProxy 代码
文件路径:/src/include/gpopt/utils/CConstExprEvaluatorProxy.h
//---------------------------------------------------------------------------
// Greenplum Database
// Copyright (C) 2014 VMware, Inc. or its affiliates.
//
// @filename:
// CConstExprEvaluatorProxy.h
//
// @doc:
// Evaluator for constant expressions passed as DXL
//
// @test:
//
//---------------------------------------------------------------------------
#ifndef GPDXL_CConstExprEvaluator_H
#define GPDXL_CConstExprEvaluator_H
#include "gpos/base.h"
#include "gpopt/eval/IConstDXLNodeEvaluator.h"
#include "gpopt/mdcache/CMDAccessor.h"
#include "gpopt/translate/CMappingColIdVar.h"
#include "gpopt/translate/CTranslatorDXLToScalar.h"
namespace gpdxl
{
class CDXLNode;
//---------------------------------------------------------------------------
// @class:
// CConstExprEvaluatorProxy
//
// @doc:
// Wrapper over GPDB's expression evaluator that takes a constant expression,
// given as DXL, tries to evaluate it and returns the result as DXL.
//
// The metadata cache should have been initialized by the caller before
// creating an instance of this class and should not be released before
// the destructor of this class.
//
//---------------------------------------------------------------------------
class CConstExprEvaluatorProxy : public gpopt::IConstDXLNodeEvaluator
{
private:
//---------------------------------------------------------------------------
// @class:
// CEmptyMappingColIdVar
//
// @doc:
// Dummy class to implement an empty variable mapping. Variable lookups
// raise exceptions.
//
//---------------------------------------------------------------------------
class CEmptyMappingColIdVar : public CMappingColIdVar
{
public:
explicit CEmptyMappingColIdVar(CMemoryPool *mp) : CMappingColIdVar(mp)
{
}
~CEmptyMappingColIdVar() override = default;
Var *VarFromDXLNodeScId(const CDXLScalarIdent *scalar_ident) override;
};
// memory pool, not owned
CMemoryPool *m_mp;
// empty mapping needed for the translator
CEmptyMappingColIdVar m_emptymapcidvar;
// pointer to metadata cache accessor
CMDAccessor *m_md_accessor;
// translator for the DXL input -> GPDB Expr
CTranslatorDXLToScalar m_dxl2scalar_translator;
public:
// ctor
CConstExprEvaluatorProxy(CMemoryPool *mp, CMDAccessor *md_accessor)
: m_mp(mp),
m_emptymapcidvar(m_mp),
m_md_accessor(md_accessor),
m_dxl2scalar_translator(m_mp, m_md_accessor, 0)
{
}
// dtor
~CConstExprEvaluatorProxy() override = default;
// evaluate given constant expressionand return the DXL representation of the result.
// if the expression has variables, an error is thrown.
// caller keeps ownership of 'expr_dxlnode' and takes ownership of the returned pointer
CDXLNode *EvaluateExpr(const CDXLNode *expr) override;
// returns true iff the evaluator can evaluate constant expressions without subqueries
BOOL
FCanEvalExpressions() override
{
return true;
}
};
} // namespace gpdxl
#endif // !GPDXL_CConstExprEvaluator_H
// EOF
相关信息
相关文章
greenplumn CMemoryPoolPalloc 源码
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦