greenplumn CDXLTranslateContextBaseTable 代码
文件路径:/src/backend/gpopt/translate/CDXLTranslateContextBaseTable.cpp
/---------------------------------------------------------------------------
/ Greenplum Database
/ Copyright (C) 2010 Greenplum, Inc.
/
/ @filename:
/ CDXLTranslateContextBaseTable.cpp
/
/ @doc:
/ Implementation of the methods for accessing translation context for base tables.
/
/ @test:
/
/
/---------------------------------------------------------------------------
extern "C" {
#include "postgres.h"
}
#include "gpopt/translate/CDXLTranslateContextBaseTable.h"
using namespace gpdxl;
using namespace gpos;
/---------------------------------------------------------------------------
/ @function:
/ CDXLTranslateContextBaseTable::CDXLTranslateContextBaseTable
/
/ @doc:
/ Constructor
/
/---------------------------------------------------------------------------
CDXLTranslateContextBaseTable::CDXLTranslateContextBaseTable(CMemoryPool *mp)
: m_mp(mp), m_oid(InvalidOid), m_rel_index(0)
{
/ initialize hash table
m_colid_to_attno_map = GPOS_NEW(m_mp) UlongToIntMap(m_mp);
}
/---------------------------------------------------------------------------
/ @function:
/ CDXLTranslateContextBaseTable::~CDXLTranslateContextBaseTable
/
/ @doc:
/ Destructor
/
/---------------------------------------------------------------------------
CDXLTranslateContextBaseTable::~CDXLTranslateContextBaseTable()
{
CRefCount::SafeRelease(m_colid_to_attno_map);
}
/---------------------------------------------------------------------------
/ @function:
/ CDXLTranslateContextBaseTable::SetOID
/
/ @doc:
/ Set the oid of the base relation
/
/---------------------------------------------------------------------------
void
CDXLTranslateContextBaseTable::SetOID(OID oid)
{
GPOS_ASSERT(oid != InvalidOid);
m_oid = oid;
}
/---------------------------------------------------------------------------
/ @function:
/ CDXLTranslateContextBaseTable::SetIdx
/
/ @doc:
/ Set the index of the base relation in the range table
/
/---------------------------------------------------------------------------
void
CDXLTranslateContextBaseTable::SetRelIndex(Index rel_index)
{
GPOS_ASSERT(0 < rel_index);
m_rel_index = rel_index;
}
/---------------------------------------------------------------------------
/ @function:
/ CDXLTranslateContextBaseTable::GetOid
/
/ @doc:
/ Returns the oid of the table
/
/---------------------------------------------------------------------------
OID
CDXLTranslateContextBaseTable::GetOid() const
{
return m_oid;
}
/---------------------------------------------------------------------------
/ @function:
/ CDXLTranslateContextBaseTable::GetRelIndex
/
/ @doc:
/ Returns the index of the relation in the rable table
/
/---------------------------------------------------------------------------
Index
CDXLTranslateContextBaseTable::GetRelIndex() const
{
GPOS_ASSERT(0 < m_rel_index);
return m_rel_index;
}
/---------------------------------------------------------------------------
/ @function:
/ CDXLTranslateContextBaseTable::GetAttnoForColId
/
/ @doc:
/ Lookup the index of the attribute with the DXL col id in the underlying table schema
/
/---------------------------------------------------------------------------
INT
CDXLTranslateContextBaseTable::GetAttnoForColId(ULONG colid) const
{
const INT *pi = m_colid_to_attno_map->Find(&colid);
if (nullptr != pi)
{
return *pi;
}
/ column not found
return 0;
}
/---------------------------------------------------------------------------
/ @function:
/ CDXLTranslateContextBaseTable::InsertMapping
/
/ @doc:
/ Insert a mapping ColId->Idx, where ulDXLColId is a DXL introduced column id,
/ and ulIdx is the index of the column in the underlying table schema
/
/---------------------------------------------------------------------------
BOOL
CDXLTranslateContextBaseTable::InsertMapping(ULONG dxl_colid, INT att_no)
{
/ copy key and value
ULONG *key = GPOS_NEW(m_mp) ULONG(dxl_colid);
INT *value = GPOS_NEW(m_mp) INT(att_no);
/ insert colid-idx mapping in the hash map
BOOL res = m_colid_to_attno_map->Insert(key, value);
GPOS_ASSERT(res);
return res;
}
/ EOF
相关信息
相关文章
greenplumn CContextDXLToPlStmt 源码
greenplumn CContextQueryToDXL 源码
greenplumn CDXLTranslateContext 源码
greenplumn CMappingColIdVar 源码
greenplumn CMappingColIdVarPlStmt 源码
greenplumn CMappingElementColIdParamId 源码
greenplumn CMappingVarColId 源码