This is an automated email from the ASF dual-hosted git repository. maxyang pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/cloudberry.git
commit 0e3e7a3b25e428e1745039449c3a8c6d54cd2d78 Author: David Kimura <[email protected]> AuthorDate: Wed Aug 31 22:18:59 2022 +0000 Remove ORCA specific duplicate code A function that gets system column name, type, and length from attno already exists in Postgres. Use that function and remove ORCA version. --- .../gpopt/translate/CTranslatorQueryToDXL.cpp | 12 +- .../gpopt/translate/CTranslatorRelcacheToDXL.cpp | 13 +- src/backend/gpopt/translate/CTranslatorUtils.cpp | 132 --------------------- src/include/gpopt/translate/CTranslatorUtils.h | 9 -- 4 files changed, 18 insertions(+), 148 deletions(-) diff --git a/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp b/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp index 758baf886c..c4cfe8e22d 100644 --- a/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp +++ b/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp @@ -19,6 +19,7 @@ extern "C" { #include "postgres.h" #include "access/sysattr.h" +#include "catalog/heap.h" #include "catalog/pg_class.h" #include "nodes/makefuncs.h" #include "nodes/parsenodes.h" @@ -1137,16 +1138,21 @@ CTranslatorQueryToDXL::ExtractStorageOptionStr(DefElem *def_elem) void CTranslatorQueryToDXL::GetCtidAndSegmentId(ULONG *ctid, ULONG *segment_id) { + const FormData_pg_attribute *att_tup_tupid = + SystemAttributeDefinition(SelfItemPointerAttributeNumber); + const FormData_pg_attribute *att_tup_segid = + SystemAttributeDefinition(GpSegmentIdAttributeNumber); + + // ctid column id - IMDId *mdid = CTranslatorUtils::GetSystemColType( - m_mp, SelfItemPointerAttributeNumber); + IMDId *mdid = GPOS_NEW(m_mp) CMDIdGPDB(att_tup_tupid->atttypid); *ctid = CTranslatorUtils::GetColId(m_query_level, m_query->resultRelation, SelfItemPointerAttributeNumber, mdid, m_var_to_colid_map); mdid->Release(); // segmentid column id - mdid = CTranslatorUtils::GetSystemColType(m_mp, GpSegmentIdAttributeNumber); + mdid = GPOS_NEW(m_mp) CMDIdGPDB(att_tup_segid->atttypid); *segment_id = CTranslatorUtils::GetColId( m_query_level, m_query->resultRelation, GpSegmentIdAttributeNumber, mdid, m_var_to_colid_map); diff --git a/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp b/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp index f7987fa942..6558df6cc7 100644 --- a/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp +++ b/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp @@ -19,6 +19,7 @@ extern "C" { #include "access/external.h" #include "access/heapam.h" +#include "catalog/heap.h" #include "catalog/namespace.h" #include "catalog/pg_am.h" #include "catalog/pg_proc.h" @@ -750,21 +751,25 @@ CTranslatorRelcacheToDXL::AddSystemColumns(CMemoryPool *mp, AttrNumber attno = AttrNumber(i); GPOS_ASSERT(0 != attno); + const FormData_pg_attribute *att_tup = SystemAttributeDefinition(attno); + // get system name for that attribute - const CWStringConst *sys_colname = - CTranslatorUtils::GetSystemColName(attno); + const CWStringConst *sys_colname = GPOS_NEW(mp) + CWStringConst(CDXLUtils::CreateDynamicStringFromCharArray( + mp, NameStr(att_tup->attname)) + ->GetBuffer()); GPOS_ASSERT(nullptr != sys_colname); // copy string into column name CMDName *md_colname = GPOS_NEW(mp) CMDName(mp, sys_colname); CMDColumn *md_col = GPOS_NEW(mp) CMDColumn( - md_colname, attno, CTranslatorUtils::GetSystemColType(mp, attno), + md_colname, attno, GPOS_NEW(mp) CMDIdGPDB(att_tup->atttypid), default_type_modifier, false, // is_nullable false, // is_dropped nullptr, // default value - CTranslatorUtils::GetSystemColLength(attno)); + att_tup->attlen); mdcol_array->Append(md_col); } diff --git a/src/backend/gpopt/translate/CTranslatorUtils.cpp b/src/backend/gpopt/translate/CTranslatorUtils.cpp index 0f09f57f00..bf5698d2f2 100644 --- a/src/backend/gpopt/translate/CTranslatorUtils.cpp +++ b/src/backend/gpopt/translate/CTranslatorUtils.cpp @@ -766,138 +766,6 @@ CTranslatorUtils::GetColumnDescrAt(const CDXLTableDescr *table_descr, ULONG pos) return table_descr->GetColumnDescrAt(pos); } -//--------------------------------------------------------------------------- -// @function: -// CTranslatorUtils::GetSystemColName -// -// @doc: -// Return the name for the system attribute with the given attribute number. -// -//--------------------------------------------------------------------------- -// GPDB_12_MERGE_FIXME: Can we get rid of this function? We should be able to get this info from pg_attribute -const CWStringConst * -CTranslatorUtils::GetSystemColName(AttrNumber attno) -{ - GPOS_ASSERT(FirstLowInvalidHeapAttributeNumber < attno && 0 > attno); - - switch (attno) - { - case SelfItemPointerAttributeNumber: - return CDXLTokens::GetDXLTokenStr(EdxltokenCtidColName); - - case MinTransactionIdAttributeNumber: - return CDXLTokens::GetDXLTokenStr(EdxltokenXminColName); - - case MinCommandIdAttributeNumber: - return CDXLTokens::GetDXLTokenStr(EdxltokenCminColName); - - case MaxTransactionIdAttributeNumber: - return CDXLTokens::GetDXLTokenStr(EdxltokenXmaxColName); - - case MaxCommandIdAttributeNumber: - return CDXLTokens::GetDXLTokenStr(EdxltokenCmaxColName); - - case TableOidAttributeNumber: - return CDXLTokens::GetDXLTokenStr(EdxltokenTableOidColName); - - case GpSegmentIdAttributeNumber: - return CDXLTokens::GetDXLTokenStr(EdxltokenGpSegmentIdColName); - - case GpForeignServerAttributeNumber: - return CDXLTokens::GetDXLTokenStr(EdxltokenGpForeignServerColName); - - default: - GPOS_RAISE(gpdxl::ExmaDXL, gpdxl::ExmiPlStmt2DXLConversion, - GPOS_WSZ_LIT("Invalid attribute number")); - return nullptr; - } -} - -//--------------------------------------------------------------------------- -// @function: -// CTranslatorUtils::GetSystemColType -// -// @doc: -// Return the type id for the system attribute with the given attribute number. -// -//--------------------------------------------------------------------------- -// GPDB_12_MERGE_FIXME: Can we get rid of this function? We should be able to get this info from pg_attribute -CMDIdGPDB * -CTranslatorUtils::GetSystemColType(CMemoryPool *mp, AttrNumber attno) -{ - GPOS_ASSERT(FirstLowInvalidHeapAttributeNumber < attno && 0 > attno); - - switch (attno) - { - case SelfItemPointerAttributeNumber: - // tid type - return GPOS_NEW(mp) CMDIdGPDB(GPDB_TID); - - case TableOidAttributeNumber: - // OID type - return GPOS_NEW(mp) CMDIdGPDB(GPDB_OID); - - case MinTransactionIdAttributeNumber: - case MaxTransactionIdAttributeNumber: - // xid type - return GPOS_NEW(mp) CMDIdGPDB(GPDB_XID); - - case MinCommandIdAttributeNumber: - case MaxCommandIdAttributeNumber: - // cid type - return GPOS_NEW(mp) CMDIdGPDB(GPDB_CID); - - case GpSegmentIdAttributeNumber: - // int4 - return GPOS_NEW(mp) CMDIdGPDB(GPDB_INT4); - - case GpForeignServerAttributeNumber: - // int4 - return GPOS_NEW(mp) CMDIdGPDB(GPDB_INT4); - - default: - GPOS_RAISE(gpdxl::ExmaDXL, gpdxl::ExmiPlStmt2DXLConversion, - GPOS_WSZ_LIT("Invalid attribute number")); - return nullptr; - } -} - - -// Returns the length for the system column with given attno number -// GPDB_12_MERGE_FIXME: Can we get rid of this function? We should be able to get this info from pg_attribute -ULONG -CTranslatorUtils::GetSystemColLength(AttrNumber attno) -{ - GPOS_ASSERT(FirstLowInvalidHeapAttributeNumber < attno && 0 > attno); - - switch (attno) - { - case SelfItemPointerAttributeNumber: - // tid type - return 6; - - case TableOidAttributeNumber: - // OID type - - case MinTransactionIdAttributeNumber: - case MaxTransactionIdAttributeNumber: - // xid type - - case MinCommandIdAttributeNumber: - case MaxCommandIdAttributeNumber: - // cid type - - case GpSegmentIdAttributeNumber: - case GpForeignServerAttributeNumber: - // int4 - return 4; - - default: - GPOS_RAISE(gpdxl::ExmaDXL, gpdxl::ExmiPlStmt2DXLConversion, - GPOS_WSZ_LIT("Invalid attribute number")); - return gpos::ulong_max; - } -} //--------------------------------------------------------------------------- // @function: diff --git a/src/include/gpopt/translate/CTranslatorUtils.h b/src/include/gpopt/translate/CTranslatorUtils.h index 96c213a3af..a8088737aa 100644 --- a/src/include/gpopt/translate/CTranslatorUtils.h +++ b/src/include/gpopt/translate/CTranslatorUtils.h @@ -131,19 +131,10 @@ public: // get the opfamily for index key static OID GetOpFamilyForIndexQual(INT attno, OID oid_index); - // return the type for the system column with the given number - static CMDIdGPDB *GetSystemColType(CMemoryPool *mp, AttrNumber attno); - // find the n-th column descriptor in the table descriptor static const CDXLColDescr *GetColumnDescrAt( const CDXLTableDescr *table_descr, ULONG pos); - // return the name for the system column with given number - static const CWStringConst *GetSystemColName(AttrNumber attno); - - // returns the length for the system column with given attno number - static ULONG GetSystemColLength(AttrNumber attno); - // translate the join type from its GPDB representation into the DXL one static EdxlJoinType ConvertToDXLJoinType(JoinType jt); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
