greenplumn CDXLTranslateContext 源码
greenplumn CDXLTranslateContext 代码
文件路径:/src/backend/gpopt/translate/CDXLTranslateContext.cpp
//---------------------------------------------------------------------------
// Greenplum Database
// Copyright (C) 2010 Greenplum, Inc.
//
// @filename:
// CDXLTranslateContext.cpp
//
// @doc:
// Implementation of the methods for accessing translation context
//
// @test:
//
//
//---------------------------------------------------------------------------
#include "gpopt/translate/CDXLTranslateContext.h"
using namespace gpdxl;
using namespace gpos;
//---------------------------------------------------------------------------
// @function:
// CDXLTranslateContext::CDXLTranslateContext
//
// @doc:
// Ctor
//
//---------------------------------------------------------------------------
CDXLTranslateContext::CDXLTranslateContext(CMemoryPool *mp,
BOOL is_child_agg_node)
: m_mp(mp), m_is_child_agg_node(is_child_agg_node)
{
// initialize hash table
m_colid_to_target_entry_map = GPOS_NEW(m_mp) ULongToTargetEntryMap(m_mp);
m_colid_to_paramid_map = GPOS_NEW(m_mp) ULongToColParamMap(m_mp);
}
//---------------------------------------------------------------------------
// @function:
// CDXLTranslateContext::CDXLTranslateContext
//
// @doc:
// Ctor
//
//---------------------------------------------------------------------------
CDXLTranslateContext::CDXLTranslateContext(CMemoryPool *mp,
BOOL is_child_agg_node,
ULongToColParamMap *original)
: m_mp(mp), m_is_child_agg_node(is_child_agg_node)
{
m_colid_to_target_entry_map = GPOS_NEW(m_mp) ULongToTargetEntryMap(m_mp);
m_colid_to_paramid_map = GPOS_NEW(m_mp) ULongToColParamMap(m_mp);
CopyParamHashmap(original);
}
//---------------------------------------------------------------------------
// @function:
// CDXLTranslateContext::~CDXLTranslateContext
//
// @doc:
// Dtor
//
//---------------------------------------------------------------------------
CDXLTranslateContext::~CDXLTranslateContext()
{
m_colid_to_target_entry_map->Release();
m_colid_to_paramid_map->Release();
}
//---------------------------------------------------------------------------
// @function:
// CDXLTranslateContext::IsParentAggNode
//
// @doc:
// Is this translation context created by a parent Agg node
//
//---------------------------------------------------------------------------
BOOL
CDXLTranslateContext::IsParentAggNode() const
{
return m_is_child_agg_node;
}
//---------------------------------------------------------------------------
// @function:
// CDXLTranslateContext::CopyParamHashmap
//
// @doc:
// copy the params hashmap
//
//---------------------------------------------------------------------------
void
CDXLTranslateContext::CopyParamHashmap(ULongToColParamMap *original)
{
// iterate over full map
ULongToColParamMapIter hashmapiter(original);
while (hashmapiter.Advance())
{
CMappingElementColIdParamId *colidparamid =
const_cast<CMappingElementColIdParamId *>(hashmapiter.Value());
const ULONG colid = colidparamid->GetColId();
ULONG *key = GPOS_NEW(m_mp) ULONG(colid);
colidparamid->AddRef();
m_colid_to_paramid_map->Insert(key, colidparamid);
}
}
//---------------------------------------------------------------------------
// @function:
// CDXLTranslateContext::GetTargetEntry
//
// @doc:
// Lookup target entry associated with a given col id
//
//---------------------------------------------------------------------------
const TargetEntry *
CDXLTranslateContext::GetTargetEntry(ULONG colid) const
{
return m_colid_to_target_entry_map->Find(&colid);
}
//---------------------------------------------------------------------------
// @function:
// CDXLTranslateContext::GetParamIdMappingElement
//
// @doc:
// Lookup col->param mapping associated with a given col id
//
//---------------------------------------------------------------------------
const CMappingElementColIdParamId *
CDXLTranslateContext::GetParamIdMappingElement(ULONG colid) const
{
return m_colid_to_paramid_map->Find(&colid);
}
//---------------------------------------------------------------------------
// @function:
// CDXLTranslateContext::InsertMapping
//
// @doc:
// Insert a (col id, target entry) mapping
//
//---------------------------------------------------------------------------
void
CDXLTranslateContext::InsertMapping(ULONG colid, TargetEntry *target_entry)
{
// copy key
ULONG *key = GPOS_NEW(m_mp) ULONG(colid);
// insert colid->target entry mapping in the hash map
BOOL result = m_colid_to_target_entry_map->Insert(key, target_entry);
if (!result)
{
GPOS_DELETE(key);
}
}
//---------------------------------------------------------------------------
// @function:
// CDXLTranslateContext::FInsertParamMapping
//
// @doc:
// Insert a (col id, param id) mapping
//
//---------------------------------------------------------------------------
BOOL
CDXLTranslateContext::FInsertParamMapping(
ULONG colid, CMappingElementColIdParamId *colidparamid)
{
// copy key
ULONG *key = GPOS_NEW(m_mp) ULONG(colid);
// insert colid->target entry mapping in the hash map
return m_colid_to_paramid_map->Insert(key, colidparamid);
}
// EOF
相关信息
相关文章
greenplumn CContextDXLToPlStmt 源码
greenplumn CContextQueryToDXL 源码
greenplumn CDXLTranslateContextBaseTable 源码
greenplumn CMappingColIdVar 源码
greenplumn CMappingColIdVarPlStmt 源码
greenplumn CMappingElementColIdParamId 源码
greenplumn CMappingVarColId 源码
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦