| //--------------------------------------------------------------------------- |
| // Greenplum Database |
| // Copyright (C) 2012 EMC Greenplum |
| // |
| // @filename: |
| // COptColInfo.h |
| // |
| // @doc: |
| // Class to uniquely identify a column in optimizer |
| // |
| // @test: |
| // |
| // |
| //--------------------------------------------------------------------------- |
| |
| #ifndef GPDXL_COptColInfo_H |
| #define GPDXL_COptColInfo_H |
| |
| #include "gpos/base.h" |
| #include "gpos/common/CRefCount.h" |
| #include "gpos/utils.h" |
| |
| namespace gpdxl |
| { |
| using namespace gpos; |
| |
| //--------------------------------------------------------------------------- |
| // @class: |
| // COptColInfo |
| // |
| // @doc: |
| // pair of column id and column name |
| // |
| //--------------------------------------------------------------------------- |
| class COptColInfo : public CRefCount |
| { |
| private: |
| // column id |
| ULONG m_colid; |
| |
| // column name |
| CWStringBase *m_str; |
| |
| public: |
| COptColInfo(const COptColInfo &) = delete; |
| |
| // ctor |
| COptColInfo(ULONG colid, CWStringBase *str) : m_colid(colid), m_str(str) |
| { |
| GPOS_ASSERT(m_str); |
| } |
| |
| // dtor |
| ~COptColInfo() override |
| { |
| GPOS_DELETE(m_str); |
| } |
| |
| // accessors |
| ULONG |
| GetColId() const |
| { |
| return m_colid; |
| } |
| |
| CWStringBase * |
| GetOptColName() const |
| { |
| return m_str; |
| } |
| |
| // equality check |
| BOOL |
| Equals(const COptColInfo &optcolinfo) const |
| { |
| // don't need to check name as column id is unique |
| return m_colid == optcolinfo.m_colid; |
| } |
| |
| // hash value |
| ULONG |
| HashValue() const |
| { |
| return gpos::HashValue(&m_colid); |
| } |
| }; |
| |
| // hash function |
| inline ULONG |
| UlHashOptColInfo(const COptColInfo *opt_col_info) |
| { |
| GPOS_ASSERT(nullptr != opt_col_info); |
| return opt_col_info->HashValue(); |
| } |
| |
| // equality function |
| inline BOOL |
| FEqualOptColInfo(const COptColInfo *opt_col_infoA, |
| const COptColInfo *opt_col_infoB) |
| { |
| GPOS_ASSERT(nullptr != opt_col_infoA && nullptr != opt_col_infoB); |
| return opt_col_infoA->Equals(*opt_col_infoB); |
| } |
| |
| } // namespace gpdxl |
| |
| #endif // !GPDXL_COptColInfo_H |
| |
| // EOF |