greenplumn CDXLLogicalGet 代码
文件路径:/src/backend/gporca/libnaucrates/src/operators/CDXLLogicalGet.cpp
/---------------------------------------------------------------------------
/ Greenplum Database
/ Copyright (C) 2011 Greenplum, Inc.
/
/ @filename:
/ CDXLLogicalGet.cpp
/
/ @doc:
/ Implementation of DXL logical get operator
/
/---------------------------------------------------------------------------
#include "naucrates/dxl/operators/CDXLLogicalGet.h"
#include "naucrates/dxl/operators/CDXLNode.h"
#include "naucrates/dxl/xml/CXMLSerializer.h"
#include "naucrates/dxl/xml/dxltokens.h"
using namespace gpos;
using namespace gpdxl;
/---------------------------------------------------------------------------
/ @function:
/ CDXLLogicalGet::CDXLLogicalGet
/
/ @doc:
/ Construct a logical get operator node given its table descriptor rtable entry
/
/---------------------------------------------------------------------------
CDXLLogicalGet::CDXLLogicalGet(CMemoryPool *mp, CDXLTableDescr *table_descr)
: CDXLLogical(mp), m_dxl_table_descr(table_descr)
{
}
/---------------------------------------------------------------------------
/ @function:
/ CDXLLogicalGet::~CDXLLogicalGet
/
/ @doc:
/ Destructor
/
/---------------------------------------------------------------------------
CDXLLogicalGet::~CDXLLogicalGet()
{
CRefCount::SafeRelease(m_dxl_table_descr);
}
/---------------------------------------------------------------------------
/ @function:
/ CDXLLogicalGet::GetDXLOperator
/
/ @doc:
/ Operator type
/
/---------------------------------------------------------------------------
Edxlopid
CDXLLogicalGet::GetDXLOperator() const
{
return EdxlopLogicalGet;
}
/---------------------------------------------------------------------------
/ @function:
/ CDXLLogicalGet::GetOpNameStr
/
/ @doc:
/ Operator name
/
/---------------------------------------------------------------------------
const CWStringConst *
CDXLLogicalGet::GetOpNameStr() const
{
return CDXLTokens::GetDXLTokenStr(EdxltokenLogicalGet);
}
/---------------------------------------------------------------------------
/ @function:
/ CDXLLogicalGet::GetDXLTableDescr
/
/ @doc:
/ Table descriptor for the table scan
/
/---------------------------------------------------------------------------
CDXLTableDescr *
CDXLLogicalGet::GetDXLTableDescr() const
{
return m_dxl_table_descr;
}
/---------------------------------------------------------------------------
/ @function:
/ CDXLLogicalGet::SerializeToDXL
/
/ @doc:
/ Serialize operator in DXL format
/
/---------------------------------------------------------------------------
void
CDXLLogicalGet::SerializeToDXL(CXMLSerializer *xml_serializer,
const CDXLNode * /dxlnode
) const
{
const CWStringConst *element_name = GetOpNameStr();
xml_serializer->OpenElement(
CDXLTokens::GetDXLTokenStr(EdxltokenNamespacePrefix), element_name);
/ serialize table descriptor
m_dxl_table_descr->SerializeToDXL(xml_serializer);
xml_serializer->CloseElement(
CDXLTokens::GetDXLTokenStr(EdxltokenNamespacePrefix), element_name);
}
/---------------------------------------------------------------------------
/ @function:
/ CDXLLogicalGet::IsColDefined
/
/ @doc:
/ Check if given column is defined by operator
/
/---------------------------------------------------------------------------
BOOL
CDXLLogicalGet::IsColDefined(ULONG colid) const
{
const ULONG size = m_dxl_table_descr->Arity();
for (ULONG descr_id = 0; descr_id < size; descr_id++)
{
ULONG id = m_dxl_table_descr->GetColumnDescrAt(descr_id)->Id();
if (id == colid)
{
return true;
}
}
return false;
}
#ifdef GPOS_DEBUG
/---------------------------------------------------------------------------
/ @function:
/ CDXLLogicalGet::AssertValid
/
/ @doc:
/ Checks whether operator node is well-structured
/
/---------------------------------------------------------------------------
void
CDXLLogicalGet::AssertValid(const CDXLNode *, /dxlnode
BOOL / validate_children
) const
{
/ assert validity of table descriptor
GPOS_ASSERT(nullptr != m_dxl_table_descr);
GPOS_ASSERT(nullptr != m_dxl_table_descr->MdName());
GPOS_ASSERT(m_dxl_table_descr->MdName()->GetMDName()->IsValid());
}
#endif / GPOS_DEBUG
/ EOF
相关信息
相关文章
greenplumn CDXLCtasStorageOptions 源码