//--------------------------------------------------------------------------- // 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