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]

Reply via email to