You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudberry.apache.org by dj...@apache.org on 2026/01/28 08:52:27 UTC

(cloudberry-pxf) branch main updated: feat: cleanup the PG_VERSION_NUM logic in source files (#41)

This is an automated email from the ASF dual-hosted git repository.

djwang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry-pxf.git


The following commit(s) were added to refs/heads/main by this push:
     new f9dcc03d feat: cleanup the PG_VERSION_NUM logic in source files (#41)
f9dcc03d is described below

commit f9dcc03debf6c31dac9560dc4d8541854ef6e3d7
Author: liuxiaoyu <45...@users.noreply.github.com>
AuthorDate: Wed Jan 28 16:52:23 2026 +0800

    feat: cleanup the PG_VERSION_NUM logic in source files (#41)
---
 external-table/src/gpdbwritableformatter.c   |  69 ++--
 external-table/src/pxfdelimited_formatter.c  |   6 -
 external-table/src/pxfheaders.c              | 449 +--------------------------
 external-table/src/pxfheaders.h              |   4 -
 external-table/src/pxfprotocol.c             |   4 -
 external-table/src/pxfuriparser.c            |   6 -
 external-table/src/pxfuriparser.h            |   2 -
 external-table/src/pxfutils.c                |   8 -
 external-table/test/libchurl_test.c          |  13 -
 external-table/test/mock/pxffragment_mock.c  |  20 --
 external-table/test/mock/pxfuriparser_mock.c |   9 -
 external-table/test/pxfbridge_test.c         |   2 -
 external-table/test/pxffilters_test.c        |  63 ----
 external-table/test/pxffragment_test.c       |  35 ---
 external-table/test/pxfheaders_test.c        |  40 +--
 external-table/test/pxfprotocol_test.c       |   2 -
 external-table/test/pxfuriparser_test.c      |   2 -
 external-table/test/pxfutils_test.c          |   2 -
 18 files changed, 36 insertions(+), 700 deletions(-)

diff --git a/external-table/src/gpdbwritableformatter.c b/external-table/src/gpdbwritableformatter.c
index d18b7e44..986da281 100644
--- a/external-table/src/gpdbwritableformatter.c
+++ b/external-table/src/gpdbwritableformatter.c
@@ -46,9 +46,7 @@
 #include "utils/lsyscache.h"
 
 #include <unistd.h>
-#if PG_VERSION_NUM >= 120000
 #include "access/external.h"
-#endif
 
 PG_FUNCTION_INFO_V1(gpdbwritableformatter_export);
 PG_FUNCTION_INFO_V1(gpdbwritableformatter_import);
@@ -106,7 +104,6 @@ typedef struct
 /* Bit flag */
 #define GPDBWRITABLE_BITFLAG_ISNULL 1	/* Column is null */
 
-#if PG_VERSION_NUM >= 90400
 /*
  * appendStringInfoFill
  *
@@ -128,7 +125,6 @@ appendStringInfoFill(StringInfo str, int occurrences, char ch)
 	str->len += occurrences;
 	str->data[str->len] = '\0';
 }
-#endif
 
 #ifndef unlikely
 #if __GNUC__ > 3
@@ -148,11 +144,6 @@ appendStringInfoFill(StringInfo str, int occurrences, char ch)
 		} \
 	} while (0)
 
-#if PG_VERSION_NUM < 90400
-// Copied from tupdesc.h (6.x), since this is not present in GPDB 5
-/* Accessor for the i'th attribute of tupdesc. */
-#define TupleDescAttr(tupdesc, i) ((tupdesc)->attrs[(i)])
-#endif
 
 /*
  * Write a int4 to the buffer
@@ -512,27 +503,20 @@ gpdbwritableformatter_export(PG_FUNCTION_ARGS)
 	 */
 	if (myData == NULL)
 	{
-        // In GP7 FORMATTER_GET_EXTENCODING(fcinfo) gets the database encoding which may not match the table encoding
-        // and thus results in exception here. So getting the table encoding from the ExtTableEntry
-#if PG_VERSION_NUM < 120000
-        if (FORMATTER_GET_EXTENCODING(fcinfo) != PG_UTF8)
-        {
-                 ereport(ERROR, (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
-                            errmsg(FORMATTER_ENCODING_ERR_MSG, "export")));
-        }
-#else
+        // FORMATTER_GET_EXTENCODING(fcinfo) may return database encoding; use table encoding instead.
         Relation rel = FORMATTER_GET_RELATION(fcinfo);
-        if(rel == NULL) {
+        if (rel == NULL)
+        {
             ereport(ERROR, (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
                             errmsg(FORMATTER_ENCODING_ERR_MSG, "export")));
         }
 
         ExtTableEntry *exttbl = GetExtTableEntry(rel->rd_id);
-        if (exttbl->encoding != PG_UTF8) {
+        if (exttbl->encoding != PG_UTF8)
+        {
             ereport(ERROR, (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
-                    errmsg(FORMATTER_ENCODING_ERR_MSG, "export")));
+                            errmsg(FORMATTER_ENCODING_ERR_MSG, "export")));
         }
-#endif
 
 		myData = palloc(sizeof(format_t));
 		myData->values = palloc(sizeof(Datum) * ncolumns);
@@ -785,27 +769,20 @@ gpdbwritableformatter_import(PG_FUNCTION_ARGS)
 	 */
 	if (myData == NULL)
 	{
-        // In GP7 FORMATTER_GET_EXTENCODING(fcinfo) gets the database encoding which may not match the table encoding
-        // and thus results in exception here. So getting the table encoding from the ExtTableEntry
-#if PG_VERSION_NUM < 120000
-            if (FORMATTER_GET_EXTENCODING(fcinfo) != PG_UTF8)
-            {
-                     ereport(ERROR, (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
-                                errmsg(FORMATTER_ENCODING_ERR_MSG, "import")));
-            }
-#else
-            Relation rel = FORMATTER_GET_RELATION(fcinfo);
-            if(rel == NULL) {
-                ereport(ERROR, (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
-                                    errmsg(FORMATTER_ENCODING_ERR_MSG, "import")));
-            }
-
-            ExtTableEntry *exttbl = GetExtTableEntry(rel->rd_id);
-            if (exttbl->encoding != PG_UTF8) {
-                ereport(ERROR, (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
-                        errmsg(FORMATTER_ENCODING_ERR_MSG, "import")));
-            }
-#endif
+        // FORMATTER_GET_EXTENCODING(fcinfo) may return database encoding; use table encoding instead.
+        Relation rel = FORMATTER_GET_RELATION(fcinfo);
+        if (rel == NULL)
+        {
+            ereport(ERROR, (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
+                            errmsg(FORMATTER_ENCODING_ERR_MSG, "import")));
+        }
+
+        ExtTableEntry *exttbl = GetExtTableEntry(rel->rd_id);
+        if (exttbl->encoding != PG_UTF8)
+        {
+            ereport(ERROR, (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
+                            errmsg(FORMATTER_ENCODING_ERR_MSG, "import")));
+        }
 
 		myData = palloc(sizeof(format_t));
 		myData->values = palloc(sizeof(Datum) * ncolumns);
@@ -1045,11 +1022,7 @@ static inline Form_pg_attribute
 getAttributeFromTupleDesc(TupleDesc tupdesc, int index)
 {
     Form_pg_attribute attr;
-    #if PG_VERSION_NUM >= 120000
-         attr = &tupdesc->attrs[index];
-    #else
-         attr = tupdesc->attrs[index];
-    #endif
+    attr = &tupdesc->attrs[index];
 
     return attr;
 
diff --git a/external-table/src/pxfdelimited_formatter.c b/external-table/src/pxfdelimited_formatter.c
index 6617c547..58faa9ee 100644
--- a/external-table/src/pxfdelimited_formatter.c
+++ b/external-table/src/pxfdelimited_formatter.c
@@ -8,12 +8,6 @@ Datum pxfdelimited_import(PG_FUNCTION_ARGS);
 
 #define is_even(cnt) (cnt % 2 == 0)
 
-#if PG_VERSION_NUM < 90400
-// Copied from tupdesc.h (6.x), since this is not present in GPDB 5
-/* Accessor for the i'th attribute of tupdesc. */
-#define TupleDescAttr(tupdesc, i) ((tupdesc)->attrs[(i)])
-#endif
-
 /**
  * Helper function to count the number of occurrences of a given character (from right to left) given a pointer to the current location in the string
  * and a pointer to the beginning of the string
diff --git a/external-table/src/pxfheaders.c b/external-table/src/pxfheaders.c
index 203c6a79..39671cb1 100644
--- a/external-table/src/pxfheaders.c
+++ b/external-table/src/pxfheaders.c
@@ -20,14 +20,9 @@
 #include "pxffilters.h"
 #include "pxfheaders.h"
 #include "commands/defrem.h"
-#if PG_VERSION_NUM >= 120000
 #include "access/external.h"
 #include "extension/gp_exttable_fdw/extaccess.h"
 #include "executor/execExpr.h"
-#else
-#include "access/fileam.h"
-#include "catalog/pg_exttable.h"
-#endif
 #include "utils/timestamp.h"
 #include "nodes/makefuncs.h"
 #include "cdb/cdbvars.h"
@@ -40,11 +35,7 @@ static char *get_format_name(ExtTableEntry *exttbl);
 static char *getFormatterString(ExtTableEntry *exttbl);
 static bool isFormatterPxfDelimited(ExtTableEntry *exttbl);
 static bool isFormatterPxfWritable(ExtTableEntry *exttbl);
-#if PG_VERSION_NUM >= 120000
 static void add_projection_desc_httpheader_pg12(CHURL_HEADERS headers, ProjectionInfo *projInfo, List *qualsAttributes, Relation rel);
-#else
-static void add_projection_desc_httpheader_pg94(CHURL_HEADERS headers, ProjectionInfo *projInfo, List *qualsAttributes, Relation rel);
-#endif
 
 static bool add_attnums_from_targetList(Node *node, List *attnums);
 static void add_projection_index_header(CHURL_HEADERS pVoid, StringInfoData data, int attno, char number[32]);
@@ -55,21 +46,6 @@ static bool needToIterateTargetList(List *targetList, int *varNumbers);
 static Node *getTargetListEntryExpression(ListCell *lc1);
 static int  getNumSimpleVars(ProjectionInfo *projInfo);
 
-#if PG_VERSION_NUM < 90400
-/*
- * this function is copied from Greenplum 6 (6X_STABLE branch) code
- * it is defined here for compilation with Greenplum 5 only
- * for compilation with Greenplum 6 it is defined in included fileam.h
- * in Greenplum 7 we do not need to define and call it as all options (copy or custom)
- * are added to ExtTableEntry.options list by external.c::GetExtFromForeignTableOptions()
- */
-static List *parseCopyFormatString(Relation rel, char *fmtstr, char fmttype);
-
-// Copied this Macro from tupdesc.h (6.x), since this is not present in GPDB 5
-/* Accessor for the i'th attribute of tupdesc. */
-#define TupleDescAttr(tupdesc, i) ((tupdesc)->attrs[(i)])
-#endif
-
 /*
  * Add key/value pairs to connection header.
  * These values are the context of the query and used
@@ -119,11 +95,7 @@ build_http_headers(PxfInputData *input)
     /* Parse fmtOptString here */
     if (fmttype_is_text(exttbl->fmtcode) || fmttype_is_csv(exttbl->fmtcode))
     {
-#if PG_VERSION_NUM >= 120000
       copyFmtOpts = exttbl->options;
-#else
-      copyFmtOpts = parseCopyFormatString(rel, exttbl->fmtopts, exttbl->fmtcode);
-#endif
     }
 
 		/* pass external table's encoding to copy's options */
@@ -161,11 +133,7 @@ build_http_headers(PxfInputData *input)
 		if (qualsAreSupported &&
 			(qualsAttributes != NIL || list_length(input->quals) == 0))
 		{
-			#if PG_VERSION_NUM >= 120000
-				add_projection_desc_httpheader_pg12(headers, proj_info, qualsAttributes, rel);
-			#else
-				add_projection_desc_httpheader_pg94(headers, proj_info, qualsAttributes, rel);
-			#endif
+			add_projection_desc_httpheader_pg12(headers, proj_info, qualsAttributes, rel);
 		}
 		else
 		{
@@ -281,11 +249,7 @@ add_tuple_desc_httpheader(CHURL_HEADERS headers, Relation rel)
 	/* Iterate attributes */
 	for (i = 0, attrIx = 0; i < tuple->natts; ++i)
 	{
-		#if PG_VERSION_NUM >= 120000
-			FormData_pg_attribute *attribute = &tuple->attrs[i];
-		#else
-			FormData_pg_attribute *attribute = tuple->attrs[i];
-		#endif
+		FormData_pg_attribute *attribute = &tuple->attrs[i];
 
 		/* Ignore dropped attributes. */
 		if (attribute->attisdropped)
@@ -410,11 +374,7 @@ add_tuple_desc_httpheader(CHURL_HEADERS headers, Relation rel)
  */
 static inline int*
 getVarNumbers(ProjectionInfo *projInfo) {
-#if PG_VERSION_NUM >= 120000
 	return NULL; // does not exist in projInfo in GP7
-#else
-	return projInfo->pi_varNumbers;
-#endif
 }
 
 /*
@@ -423,11 +383,7 @@ getVarNumbers(ProjectionInfo *projInfo) {
 static inline List*
 getTargetList(ProjectionInfo *projInfo)
 {
-#if PG_VERSION_NUM >= 120000
 	return (List *) projInfo->pi_state.expr;
-#else
-	return projInfo->pi_targetlist;
-#endif
 }
 
 /*
@@ -436,20 +392,12 @@ getTargetList(ProjectionInfo *projInfo)
 static inline bool
 needToIterateTargetList(List *targetList, int *varNumbers)
 {
-#if PG_VERSION_NUM >= 90400
 	/*
 	 * In GP6 non-simple Vars are added to the targetlist of ProjectionInfo while
 	 * simple Vars are pre-computed and their attnos are placed into varNumbers array
 	 * In GP7 everything is in targetList
 	 */
 	return (targetList != NULL);
-#else
-	/*
-	 * In GP5 if targetList contains ONLY simple Vars their attrnos will be populated into varNumbers array
-	 * otherwise the varNumbers array will be NULL, and we will need to iterate over the targetList
-	 */
-	return (varNumbers == NULL);
-#endif
 }
 
 /*
@@ -458,13 +406,8 @@ needToIterateTargetList(List *targetList, int *varNumbers)
 static inline
 Node *getTargetListEntryExpression(ListCell *lc1)
 {
-#if PG_VERSION_NUM >= 120000
 	ExprState *gstate = (ExprState *) lfirst(lc1);
 	return (Node *) gstate;
-#else
-	GenericExprState *gstate = (GenericExprState *) lfirst(lc1);
-	return (Node *) gstate->arg->expr;
-#endif
 };
 
 /*
@@ -473,21 +416,8 @@ Node *getTargetListEntryExpression(ListCell *lc1)
 static inline
 int getNumSimpleVars(ProjectionInfo *projInfo)
 {
-	int numSimpleVars = 0;
-#if PG_VERSION_NUM < 90400
-	// in GP5 if varNumbers is not NULL, it means the attrnos have been pre-computed in varNumbers
-	// and targetList consists only of simpleVars, so we can use its length
-	if (projInfo->pi_varNumbers)
-	{
-		numSimpleVars = list_length(projInfo->pi_targetlist);
-	}
-#elif PG_VERSION_NUM < 120000
-	// in GP6 we can get this value from projInfo
-	numSimpleVars = projInfo->pi_numSimpleVars;
-#else
 	// in GP7 there is no precomputation, the numSimpleVars stays at 0
-#endif
-	return numSimpleVars;
+	return 0;
 };
 
 /*
@@ -505,136 +435,6 @@ int getNumSimpleVars(ProjectionInfo *projInfo)
  * col2 was dropped, the indices for col3 and col4 get shifted by -1.
  */
 
-#if PG_VERSION_NUM < 120000
-static void
-add_projection_desc_httpheader_pg94(CHURL_HEADERS headers,
-                 ProjectionInfo *projInfo,
-                 List *qualsAttributes,
-                 Relation rel)
-{
-	int			   i;
-	int			   dropped_count;
-	int			   number;
-#if PG_VERSION_NUM < 90400
-	int			   numSimpleVars;
-#endif
-	char			long_number[sizeof(int32) * 8];
-	int				*varNumbers = projInfo->pi_varNumbers;
-	Bitmapset		*attrs_used;
-	StringInfoData	formatter;
-	TupleDesc		tupdesc;
-
-	initStringInfo(&formatter);
-	attrs_used = NULL;
-	number = 0;
-
-#if PG_VERSION_NUM >= 90400
-	/*
-	 * Non-simpleVars are added to the targetlist
-	 * we use expression_tree_walker to access attrno information
-	 * we do it through a helper function add_attnums_from_targetList
-	 */
-	if (projInfo->pi_targetlist)
-	{
-#else
-	numSimpleVars = 0;
-
-	if (!varNumbers)
-	{
-		/*
-		 * When there are not just simple Vars we need to
-		 * walk the tree to get attnums
-		 */
-#endif
-		List     *l = lappend_int(NIL, 0);
-		ListCell *lc1;
-
-		foreach(lc1, projInfo->pi_targetlist)
-		{
-			GenericExprState *gstate = (GenericExprState *) lfirst(lc1);
-			add_attnums_from_targetList((Node *) gstate->arg->expr, l);
-		}
-
-		foreach(lc1, l)
-		{
-			int attno = lfirst_int(lc1);
-			if (attno > InvalidAttrNumber)
-			{
-				attrs_used =
-					bms_add_member(attrs_used,
-									attno - FirstLowInvalidHeapAttributeNumber);
-			}
-		}
-
-		list_free(l);
-	}
-#if PG_VERSION_NUM < 90400
-	else
-	{
-		numSimpleVars = list_length(projInfo->pi_targetlist);
-	}
-#endif
-
-
-#if PG_VERSION_NUM >= 90400
-	for (i = 0; i < projInfo->pi_numSimpleVars; i++)
-#else
-	for (i = 0; varNumbers && i < numSimpleVars; i++)
-#endif
-	{
-		attrs_used =
-			bms_add_member(attrs_used,
-						 varNumbers[i] - FirstLowInvalidHeapAttributeNumber);
-	}
-
-	ListCell *attribute = NULL;
-
-	/*
-	 * AttrNumbers coming from quals
-	 */
-	foreach(attribute, qualsAttributes)
-	{
-		AttrNumber attrNumber = (AttrNumber) lfirst_int(attribute);
-		attrs_used =
-			bms_add_member(attrs_used,
-						 attrNumber + 1 - FirstLowInvalidHeapAttributeNumber);
-	}
-
-	tupdesc = RelationGetDescr(rel);
-	dropped_count = 0;
-
-	for (i = 1; i <= tupdesc->natts; i++)
-	{
-		/* Ignore dropped attributes. */
-		if (tupdesc->attrs[i - 1]->attisdropped)
-		{
-			/* keep a counter of the number of dropped attributes */
-			dropped_count++;
-			continue;
-		}
-
-		if (bms_is_member(i - FirstLowInvalidHeapAttributeNumber, attrs_used))
-		{
-			/* Shift the column index by the running dropped_count */
-			add_projection_index_header(headers, formatter,
-										i - 1 - dropped_count, long_number);
-			number++;
-		}
-	}
-
-	if (number != 0)
-	{
-		/* Convert the number of projection columns to a string */
-		pg_ltoa(number, long_number);
-		churl_headers_append(headers, "X-GP-ATTRS-PROJ", long_number);
-	}
-
-	list_free(qualsAttributes);
-	pfree(formatter.data);
-	bms_free(attrs_used);
-}
-#endif
-
 /*
  * Report projection description to the remote component, the indices of
  * dropped columns do not get reported, as if they never existed, and
@@ -650,7 +450,6 @@ add_projection_desc_httpheader_pg94(CHURL_HEADERS headers,
  * col2 was dropped, the indices for col3 and col4 get shifted by -1.
  */
 
-#if PG_VERSION_NUM >= 120000
 static void
 set_var_number(int **varNumbers, int *varNumberSize, int value, int offset)
 {
@@ -679,9 +478,8 @@ add_projection_desc_httpheader_pg12(CHURL_HEADERS headers,
   int        number;
   int        numTargetList;
   char      long_number[sizeof(int32) * 8];
-    // In versions < 120000, projInfo->pi_varNumbers contains atttribute numbers of SimpleVars
-    // Since,this pi_varNumbers doesn't exist in PG12 and above, we can add the attribute numbers by
-    // iterating on the Simple vars.
+    // projInfo->pi_varNumbers doesn't exist in PG14+, so collect attribute numbers
+    // by iterating on the simple vars.
   
   int       varNumbersSize = 0;
   int       *varNumbers = NULL;
@@ -802,7 +600,6 @@ add_projection_desc_httpheader_pg12(CHURL_HEADERS headers,
   pfree(formatter.data);
   bms_free(attrs_used);
 }
-#endif
 
 
 /*
@@ -886,7 +683,6 @@ getFormatterString(ExtTableEntry *exttbl)
 {
 	char *formatterNameSearchString = NULL;
 
-#if PG_VERSION_NUM >= 120000
 	// for GP7 the custom formatter name is among all other options of the corresponding foreign table
 	ListCell   *option;
 	foreach (option, exttbl->options) {
@@ -896,11 +692,6 @@ getFormatterString(ExtTableEntry *exttbl)
 			break;
 		}
 	}
-#else
-	// for GP5 and GP6, we only have a serialized string of formatter options,
-	// parsing it requires porting a lot of code from GP6 so return the entire serialized string
-	formatterNameSearchString = exttbl->fmtopts;
-#endif
 
 	return formatterNameSearchString;
 }
@@ -966,11 +757,7 @@ add_attnums_from_targetList(Node *node, List *attnums)
 	 */
 	if (IsA(node, Aggref))
 		return false;
-#if PG_VERSION_NUM >= 90400
 	if (IsA(node, WindowFunc))
-#else
-	if (IsA(node, WindowRef))
-#endif
 		return false;
 	return expression_tree_walker(node,
 								  add_attnums_from_targetList,
@@ -985,226 +772,8 @@ add_attnums_from_targetList(Node *node, List *attnums)
  */
 static List *
 appendCopyEncodingOptionToList(List *copyFmtOpts, int encoding) {
-	return lappend(copyFmtOpts, makeDefElem("encoding", (Node *) makeString((char *) pg_encoding_to_char(encoding))
-#if PG_VERSION_NUM >= 120000 // GP7 requires an extra parameter for makeDefElem()
-					, -1
-#endif
-					));
-}
-
-#if PG_VERSION_NUM < 90400
-/*
- * This function is copied from fileam.c in the 6X_STABLE branch.
- * In version 6, this function is no longer required to be copied.
- */
-static List *
-parseCopyFormatString(Relation rel, char *fmtstr, char fmttype)
-{
-	char	   *token;
-	const char *whitespace = " \t\n\r";
-	char		nonstd_backslash = 0;
-	int			encoding = GetDatabaseEncoding();
-	List	   *l = NIL;
-
-	token = strtokx2(fmtstr, whitespace, NULL, NULL,
-	                 0, false, true, encoding);
-
-	while (token)
-	{
-		bool		fetch_next;
-		DefElem	   *item = NULL;
-
-		fetch_next = true;
-
-		if (pg_strcasecmp(token, "header") == 0)
-		{
-			item = makeDefElem("header", (Node *)makeInteger(TRUE));
-		}
-		else if (pg_strcasecmp(token, "delimiter") == 0)
-		{
-			token = strtokx2(NULL, whitespace, NULL, "'",
-			                 nonstd_backslash, true, true, encoding);
-			if (!token)
-				goto error;
-
-			item = makeDefElem("delimiter", (Node *)makeString(pstrdup(token)));
-		}
-		else if (pg_strcasecmp(token, "null") == 0)
-		{
-			token = strtokx2(NULL, whitespace, NULL, "'",
-			                 nonstd_backslash, true, true, encoding);
-			if (!token)
-				goto error;
-
-			item = makeDefElem("null", (Node *)makeString(pstrdup(token)));
-		}
-		else if (pg_strcasecmp(token, "quote") == 0)
-		{
-			token = strtokx2(NULL, whitespace, NULL, "'",
-			                 nonstd_backslash, true, true, encoding);
-			if (!token)
-				goto error;
-
-			item = makeDefElem("quote", (Node *)makeString(pstrdup(token)));
-		}
-		else if (pg_strcasecmp(token, "escape") == 0)
-		{
-			token = strtokx2(NULL, whitespace, NULL, "'",
-			                 nonstd_backslash, true, true, encoding);
-			if (!token)
-				goto error;
-
-			item = makeDefElem("escape", (Node *)makeString(pstrdup(token)));
-		}
-		else if (pg_strcasecmp(token, "force") == 0)
-		{
-			List	   *cols = NIL;
-
-			token = strtokx2(NULL, whitespace, ",", "\"",
-			                 0, false, false, encoding);
-			if (pg_strcasecmp(token, "not") == 0)
-			{
-				token = strtokx2(NULL, whitespace, ",", "\"",
-				                 0, false, false, encoding);
-				if (pg_strcasecmp(token, "null") != 0)
-					goto error;
-				/* handle column list */
-				fetch_next = false;
-				for (;;)
-				{
-					token = strtokx2(NULL, whitespace, ",", "\"",
-					                 0, false, false, encoding);
-					if (!token || strchr(",", token[0]))
-						goto error;
-
-					cols = lappend(cols, makeString(pstrdup(token)));
-
-					/* consume the comma if any */
-					token = strtokx2(NULL, whitespace, ",", "\"",
-					                 0, false, false, encoding);
-					if (!token || token[0] != ',')
-						break;
-				}
-
-				item = makeDefElem("force_not_null", (Node *)cols);
-			}
-			else if (pg_strcasecmp(token, "quote") == 0)
-			{
-				fetch_next = false;
-				for (;;)
-				{
-					token = strtokx2(NULL, whitespace, ",", "\"",
-					                 0, false, false, encoding);
-					if (!token || strchr(",", token[0]))
-						goto error;
-
-					/*
-					 * For a '*' token the format option is force_quote_all
-					 * and we need to recreate the column list for the entire
-					 * relation.
-					 */
-					if (strcmp(token, "*") == 0)
-					{
-						int			i;
-						TupleDesc	tupdesc = RelationGetDescr(rel);
-
-						for (i = 0; i < tupdesc->natts; i++)
-						{
-							Form_pg_attribute att = tupdesc->attrs[i];
-
-							if (att->attisdropped)
-								continue;
-
-							cols = lappend(cols, makeString(NameStr(att->attname)));
-						}
-
-						/* consume the comma if any */
-						token = strtokx2(NULL, whitespace, ",", "\"",
-						                 0, false, false, encoding);
-						break;
-					}
-
-					cols = lappend(cols, makeString(pstrdup(token)));
-
-					/* consume the comma if any */
-					token = strtokx2(NULL, whitespace, ",", "\"",
-					                 0, false, false, encoding);
-					if (!token || token[0] != ',')
-						break;
-				}
-
-				item = makeDefElem("force_quote", (Node *)cols);
-			}
-			else
-				goto error;
-		}
-		else if (pg_strcasecmp(token, "fill") == 0)
-		{
-			token = strtokx2(NULL, whitespace, ",", "\"",
-			                 0, false, false, encoding);
-			if (pg_strcasecmp(token, "missing") != 0)
-				goto error;
-
-			token = strtokx2(NULL, whitespace, ",", "\"",
-			                 0, false, false, encoding);
-			if (pg_strcasecmp(token, "fields") != 0)
-				goto error;
-
-			item = makeDefElem("fill_missing_fields", (Node *)makeInteger(TRUE));
-		}
-		else if (pg_strcasecmp(token, "newline") == 0)
-		{
-			token = strtokx2(NULL, whitespace, NULL, "'",
-			                 nonstd_backslash, true, true, encoding);
-			if (!token)
-				goto error;
-
-			item = makeDefElem("newline", (Node *)makeString(pstrdup(token)));
-		}
-		else
-			goto error;
-
-		if (item)
-			l = lappend(l, item);
-
-		if (fetch_next)
-			token = strtokx2(NULL, whitespace, NULL, NULL,
-			                 0, false, false, encoding);
-	}
-
-	if (fmttype_is_text(fmttype))
-	{
-		/* TEXT is the default */
-	}
-	else if (fmttype_is_csv(fmttype))
-	{
-		/* Add FORMAT 'CSV' option to the beginning of the list */
-		l = lcons(makeDefElem("format", (Node *) makeString("csv")), l);
-	}
-	else
-		elog(ERROR, "unrecognized format type '%c'", fmttype);
-
-	return l;
-
-	error:
-	if (token)
-		ereport(ERROR,
-		        (errcode(ERRCODE_INTERNAL_ERROR),
-			        errmsg("external table internal parse error at \"%s\"",
-			               token)));
-	else
-		ereport(ERROR,
-		        (errcode(ERRCODE_INTERNAL_ERROR),
-			        errmsg("external table internal parse error at end of line")));
-}
-
-/*
- * This function is copied from fileam.c in the 6X_STABLE branch.
- * In version 6, this function is no longer required to be copied.
- */
-static List *
-appendCopyEncodingOption(List *copyFmtOpts, int encoding)
-{
-	return lappend(copyFmtOpts, makeDefElem("encoding", (Node *)makeString((char *)pg_encoding_to_char(encoding))));
+	return lappend(copyFmtOpts,
+				   makeDefElem("encoding",
+							   (Node *) makeString((char *) pg_encoding_to_char(encoding)),
+							   -1));
 }
-#endif
diff --git a/external-table/src/pxfheaders.h b/external-table/src/pxfheaders.h
index 9c864f12..9f2ec410 100644
--- a/external-table/src/pxfheaders.h
+++ b/external-table/src/pxfheaders.h
@@ -28,13 +28,9 @@
 #include "libchurl.h"
 #include "pxfuriparser.h"
 
-#if PG_VERSION_NUM >= 90400
 #include "nodes/execnodes.h"
 #include "nodes/nodeFuncs.h"
 #include "utils/rel.h"
-#else
-#include "optimizer/walkers.h"
-#endif
 
 /*
  * Contains the data necessary to build the HTTP headers required for calling on the pxf service
diff --git a/external-table/src/pxfprotocol.c b/external-table/src/pxfprotocol.c
index 4ccb1b96..bf5935ef 100644
--- a/external-table/src/pxfprotocol.c
+++ b/external-table/src/pxfprotocol.c
@@ -20,11 +20,7 @@
 
 #include "pxfbridge.h"
 #include "pxffilters.h"
-#if PG_VERSION_NUM >= 120000
 #include "extension/gp_exttable_fdw/extaccess.h"
-#else
-#include "access/fileam.h"
-#endif
 #include "utils/elog.h"
 
 /* define magic module unless run as a part of test cases */
diff --git a/external-table/src/pxfuriparser.c b/external-table/src/pxfuriparser.c
index eeee64d6..47fce006 100644
--- a/external-table/src/pxfuriparser.c
+++ b/external-table/src/pxfuriparser.c
@@ -291,13 +291,7 @@ GPHDUri_verify_no_duplicate_options(GPHDUri *uri)
 	{
 		OptionData *data = (OptionData *) lfirst(option);
 
-// For GP 5.x latest (5.29.8) the server_version_num is 80323.
-// For 6.x or later str_toupper doesn't work as it has different signature ( one extra parameter) so the asc_toupper will work for 6.x or 7.x
-#if PG_VERSION_NUM <= 80323
-		Value	   *key = makeString(str_toupper(data->key, strlen(data->key)));
-#else
 		Value	   *key = makeString(asc_toupper(data->key, strlen(data->key)));
-#endif
 
 		if (!list_member(previousKeys, key))
 			previousKeys = lappend(previousKeys, key);
diff --git a/external-table/src/pxfuriparser.h b/external-table/src/pxfuriparser.h
index f52de266..ec3f9ed7 100644
--- a/external-table/src/pxfuriparser.h
+++ b/external-table/src/pxfuriparser.h
@@ -24,10 +24,8 @@
 #include "nodes/pg_list.h"
 #include "fmgr.h"
 #include "utils/builtins.h"
-#if PG_VERSION_NUM >= 120000
 #include "lib/stringinfo.h"
 #include "nodes/value.h"
-#endif
 
 /*
  * Path constants for accessing PXF.
diff --git a/external-table/src/pxfutils.c b/external-table/src/pxfutils.c
index d8b2258d..19d7a8d1 100644
--- a/external-table/src/pxfutils.c
+++ b/external-table/src/pxfutils.c
@@ -1,9 +1,7 @@
 #include "pxfutils.h"
 
-#if PG_VERSION_NUM >= 90400
 #include "access/htup_details.h"
 #include "catalog/pg_type.h"
-#endif
 #include "catalog/pg_namespace.h"
 #include "utils/formatting.h"
 #include "utils/syscache.h"
@@ -22,13 +20,7 @@ normalize_key_name(const char *key)
 				(errcode(ERRCODE_INTERNAL_ERROR),
 				 errmsg("internal error in pxfutils.c:normalize_key_name. Parameter key is null or empty.")));
 	}
-// For GP 5.x latest ( 5.29.8) the server_version_num is 80323.
-// For 6.x or later str_toupper doesn't work as it has different signature ( one extra parameter) so the asc_toupper will work for 6.x or 7.x
-#if PG_VERSION_NUM <= 80323
-	return psprintf("X-GP-OPTIONS-%s", str_toupper(pstrdup(key), strlen(key)));
-#else
 	return psprintf("X-GP-OPTIONS-%s", asc_toupper(pstrdup(key), strlen(key)));
-#endif
 }
 
 /*
diff --git a/external-table/test/libchurl_test.c b/external-table/test/libchurl_test.c
index 32e51897..e1d4ce05 100644
--- a/external-table/test/libchurl_test.c
+++ b/external-table/test/libchurl_test.c
@@ -3,10 +3,8 @@
 #include <setjmp.h>
 #include "cmockery.h"
 
-#if PG_VERSION_NUM >= 90400
 #include "postgres.h"
 #include "utils/memutils.h"
-#endif
 
 /* Define UNIT_TESTING so that the extension can skip declaring PG_MODULE_MAGIC */
 #define UNIT_TESTING
@@ -131,9 +129,6 @@ test_churl_init_upload(void **state)
 	assert_true(context->upload_buffer != NULL);
 	assert_true(context->curl_handle != NULL);
 	assert_true(context->multi_handle != NULL);
-#if PG_VERSION_NUM < 90400
-	assert_true(context->last_http_reponse == NULL);
-#endif
 	assert_true(context->curl_still_running == 0);
 
 	/* tear down */
@@ -177,9 +172,6 @@ test_churl_init_download(void **state)
 	assert_true(context->upload_buffer != NULL);
 	assert_true(context->curl_handle != NULL);
 	assert_true(context->multi_handle != NULL);
-#if PG_VERSION_NUM < 90400
-	assert_true(context->last_http_reponse == NULL);
-#endif
 
 	/* tear down */
 	pfree(mock_curl_handle);
@@ -190,14 +182,9 @@ test_churl_init_download(void **state)
 
 /*  wrapper function to enable sideeffect testing with multiple parameters */
 static void
-#if PG_VERSION_NUM >= 90400
 write_callback_wrapper(void *ptr)
 {
 	churl_context * user_context = (churl_context *) ptr;
-#else
-write_callback_wrapper(churl_context * user_context)
-{
-#endif
 	write_callback(read_string, sizeof(char), strlen(read_string) + 1, user_context);
 }
 
diff --git a/external-table/test/mock/pxffragment_mock.c b/external-table/test/mock/pxffragment_mock.c
index 22c5b234..c522705d 100644
--- a/external-table/test/mock/pxffragment_mock.c
+++ b/external-table/test/mock/pxffragment_mock.c
@@ -16,26 +16,6 @@ get_fragments(GPHDUri *uri,
 	mock();
 }
 
-#if PG_VERSION_NUM < 90400
-void
-call_rest(GPHDUri* hadoop_uri, ClientContext* client_context, char* rest_msg)
-{
-	check_expected(hadoop_uri);
-	check_expected(client_context);
-	check_expected(rest_msg);
-	optional_assignment(hadoop_uri);
-	optional_assignment(client_context);
-	optional_assignment(rest_msg);
-	mock();
-}
-
-static void
-process_request(ClientContext* client_context, char* uri)
-{
-	mock();
-}
-#endif
-
 void
 free_fragment(FragmentData *data)
 {
diff --git a/external-table/test/mock/pxfuriparser_mock.c b/external-table/test/mock/pxfuriparser_mock.c
index 7ab5aadb..f4ce8d9a 100644
--- a/external-table/test/mock/pxfuriparser_mock.c
+++ b/external-table/test/mock/pxfuriparser_mock.c
@@ -36,12 +36,3 @@ GPHDUri_verify_core_options_exist(GPHDUri *uri, List *coreoptions)
 	mock();
 }
 
-#if PG_VERSION_NUM < 90400
-void
-GPHDUri_verify_cluster_exists(GPHDUri *uri, char* cluster)
-{
-	check_expected(uri);
-	check_expected(cluster);
-	mock();
-}
-#endif
diff --git a/external-table/test/pxfbridge_test.c b/external-table/test/pxfbridge_test.c
index 3a24a3f8..a979453f 100644
--- a/external-table/test/pxfbridge_test.c
+++ b/external-table/test/pxfbridge_test.c
@@ -3,10 +3,8 @@
 #include <setjmp.h>
 #include "cmockery.h"
 
-#if PG_VERSION_NUM >= 90400
 #include "postgres.h"
 #include "utils/memutils.h"
-#endif
 
 /* Define UNIT_TESTING so that the extension can skip declaring PG_MODULE_MAGIC */
 #define UNIT_TESTING
diff --git a/external-table/test/pxffilters_test.c b/external-table/test/pxffilters_test.c
index 6dd81eaa..d3e5612c 100644
--- a/external-table/test/pxffilters_test.c
+++ b/external-table/test/pxffilters_test.c
@@ -133,56 +133,6 @@ test__supported_operator_type_op_expr(void **state)
 	}
 }
 
-#if PG_VERSION_NUM < 90400
-void
-test__supported_operator_type_scalar_array_op_expr(void **state)
-{
-	Oid operator_oids[15][2] = {
-			{Int2EqualOperator, PXFOP_IN},
-			{Int4EqualOperator, PXFOP_IN},
-			{Int8EqualOperator, PXFOP_IN},
-			{TextEqualOperator, PXFOP_IN},
-			{Int24EqualOperator, PXFOP_IN},
-			{Int42EqualOperator, PXFOP_IN},
-			{Int84EqualOperator, PXFOP_IN},
-			{Int48EqualOperator, PXFOP_IN},
-			{Int28EqualOperator, PXFOP_IN},
-			{Int82EqualOperator, PXFOP_IN},
-			{DateEqualOperator, PXFOP_IN},
-			{Float8EqualOperator, PXFOP_IN},
-			{1120 , PXFOP_IN},
-			{BPCharEqualOperator, PXFOP_IN},
-			{BooleanEqualOperator, PXFOP_IN},
-	};
-
-	PxfFilterDesc *filter = (PxfFilterDesc*) palloc0(sizeof(PxfFilterDesc));
-
-	int array_size = sizeof(operator_oids) / sizeof(operator_oids[0]);
-	bool result = false;
-	int i = 0;
-
-	/* supported types */
-	for (; i < array_size-1; ++i)
-	{
-		result = supported_operator_type_scalar_array_op_expr(operator_oids[i][0], filter, true);
-		assert_true(result);
-		assert_true(operator_oids[i][1] == filter->op);
-	}
-
-	/* unsupported type */
-	result = supported_operator_type_op_expr(InvalidOid, filter);
-	assert_false(result);
-
-	/* go over pxf_supported_opr_scalar_array_op_expr array */
-	int nargs = sizeof(pxf_supported_opr_scalar_array_op_expr) / sizeof(dbop_pxfop_array_map);
-	assert_int_equal(nargs, 15);
-	for (i = 0; i < nargs; ++i)
-	{
-		assert_true(supported_operator_type_scalar_array_op_expr(pxf_supported_opr_op_expr[i].dbop, filter, pxf_supported_opr_scalar_array_op_expr[i].useOr));
-		assert_true(pxf_supported_opr_scalar_array_op_expr[i].pxfop == filter->op);
-	}
-}
-#endif
 
 /*
  * const_value must be palloc'ed, it will be freed by scalar_const_to_str
@@ -560,11 +510,7 @@ build_null_expression_item(int attnum, Oid attrtype, NullTestType nullType)
 {
 	ExpressionItem *expressionItem = (ExpressionItem*) palloc0(sizeof(ExpressionItem));
 	Var *vararg = build_var(attrtype, attnum);
-#if PG_VERSION_NUM >= 90400
 	NullTest *operationExpression = build_null_expr((Expr *) vararg, nullType);
-#else
-	OpExpr *operationExpression = build_null_expr(vararg, nullType);
-#endif
 
 	expressionItem->node = (Node *) operationExpression;
 	expressionItem->processed = false;
@@ -622,11 +568,7 @@ build_nested_func_expr_operand(List *columnsOids, List *attrsIndices)
 	Var *var = NULL;
 	List* args = NIL;
 	forboth(columnOidLc, columnsOids, attrIndexLc, attrsIndices) {
-#if PG_VERSION_NUM >= 90400
 		var = build_var(lfirst_oid(columnOidLc), lfirst_int(attrIndexLc));
-#else
-		var = build_var(lfirst(columnOidLc), lfirst(attrIndexLc));
-#endif
 		args = lappend(args, var);
 	}
 	FuncExpr* operandImplicitCast = build_func_expr_operand(args, COERCE_IMPLICIT_CAST);
@@ -964,13 +906,8 @@ test__extractPxfAttributes_supported_function_one_arg(void **state) {
 	int argumentColumnIndex = 6; // index starts from 0
 	bool qualsAreSupported;
 	qualsAreSupported = true;
-#if PG_VERSION_NUM >= 90400
 	List* columnsOids = list_make1_oid(DATEOID);
 	List* attrsIndices = list_make1_int(argumentColumnIndex);
-#else
-	List* columnsOids = list_make1(DATEOID);
-	List* attrsIndices = list_make1(argumentColumnIndex);
-#endif
 
 	// Create operands FuncExpr, Const
 	FuncExpr* leftop = build_nested_func_expr_operand(columnsOids, attrsIndices);
diff --git a/external-table/test/pxffragment_test.c b/external-table/test/pxffragment_test.c
index 90e60716..f88c6311 100644
--- a/external-table/test/pxffragment_test.c
+++ b/external-table/test/pxffragment_test.c
@@ -3,11 +3,9 @@
 #include <setjmp.h>
 #include "cmockery.h"
 
-#if PG_VERSION_NUM >= 90400
 #include "postgres.h"
 #include "utils/memutils.h"
 #include "cdb/cdbvars.h"
-#endif
 
 /* Define UNIT_TESTING so that the extension can skip declaring PG_MODULE_MAGIC */
 #define UNIT_TESTING
@@ -167,27 +165,6 @@ test_filter_fragments_for_segment(void **state)
 	}
 	PG_END_TRY();
 
-#if PG_VERSION_NUM < 90400
-	/* special case -- invalid transaction id */
-	old_context = CurrentMemoryContext;
-	PG_TRY();
-	{
-		test_list(0, 1, 0, 1, NULL, 0);
-		assert_false("Expected Exception");
-	}
-	PG_CATCH();
-	{
-		MemoryContextSwitchTo(old_context);
-		ErrorData  *edata = CopyErrorData();
-
-		assert_true(edata->elevel == ERROR);
-		char	   *expected_message = pstrdup("Cannot get distributed transaction identifier in filter_fragments_for_segment");
-
-		assert_string_equal(edata->message, expected_message);
-		pfree(expected_message);
-	}
-	PG_END_TRY();
-#endif
 }
 
 static void
@@ -196,12 +173,10 @@ test_list(int segindex, int segtotal, int session_id, int fragtotal, char *expec
 	/* prepare the input list */
 	List	   *list = prepare_fragment_list(fragtotal, segindex, segtotal, session_id);
 
-#if PG_VERSION_NUM >= 90400
 	if (list)
 	{
 		will_return(getgpsegmentCount, segtotal);
 	}
-#endif
 
 	/* filter the list */
 	List	   *filtered = filter_fragments_for_segment(list);
@@ -230,15 +205,8 @@ static List *
 prepare_fragment_list(int fragtotal, int segindex, int segtotal, int session_id)
 {
 	GpIdentity.segindex = segindex;
-#if PG_VERSION_NUM >= 90400
 	gp_session_id = session_id;
 	gp_command_count = 0;
-#else
-	GpIdentity.numsegments = segtotal;
-
-	if (fragtotal > 0)
-		will_return(getDistributedTransactionId, xid);
-#endif
 
 	List	   *result = NIL;
 
@@ -374,9 +342,6 @@ test_call_rest(void **state)
 
 	expect_value(print_http_headers, headers, client_context->http_headers);
 	will_be_called(print_http_headers);
-#if PG_VERSION_NUM < 90400
-	(client_context->http_headers);
-#endif
 
 	StringInfoData expected_url;
 
diff --git a/external-table/test/pxfheaders_test.c b/external-table/test/pxfheaders_test.c
index 57ff1cb5..972939fc 100644
--- a/external-table/test/pxfheaders_test.c
+++ b/external-table/test/pxfheaders_test.c
@@ -22,11 +22,9 @@
 #include <setjmp.h>
 #include "cmockery.h"
 
-#if PG_VERSION_NUM >= 90400
 #include "postgres.h"
 #include "nodes/makefuncs.h"
 #include "utils/memutils.h"
-#endif
 
 /* Define UNIT_TESTING so that the extension can skip declaring PG_MODULE_MAGIC */
 #define UNIT_TESTING
@@ -121,9 +119,6 @@ expect_external_vars()
 static void
 test_build_http_headers(void **state)
 {
-#if PG_VERSION_NUM < 90400
-	const char *whitespace = " \t\n\r";
-#endif
 	char		alignment[3];
 	ExtTableEntry    ext_tbl;
 	struct tupleDesc tuple;
@@ -137,25 +132,19 @@ test_build_http_headers(void **state)
 	option_data2->key   = "key2";
 	option_data2->value = "value2";
 
-#if PG_VERSION_NUM >= 90400
 	List *copyOpts = NIL;
-	copyOpts = lappend(copyOpts, makeDefElem("format", (Node *)makeString("csv")));
-	copyOpts = lappend(copyOpts, makeDefElem("delimiter", (Node *)makeString("|")));
-	copyOpts = lappend(copyOpts, makeDefElem("null", (Node *)makeString("")));
-	copyOpts = lappend(copyOpts, makeDefElem("escape", (Node *)makeString("\"")));
-	copyOpts = lappend(copyOpts, makeDefElem("quote", (Node *)makeString("\"")));
-	copyOpts = lappend(copyOpts, makeDefElem("encoding", (Node *)makeString("UTF8")));
-#endif
+	copyOpts = lappend(copyOpts, makeDefElem("format", (Node *)makeString("csv"), -1));
+	copyOpts = lappend(copyOpts, makeDefElem("delimiter", (Node *)makeString("|"), -1));
+	copyOpts = lappend(copyOpts, makeDefElem("null", (Node *)makeString(""), -1));
+	copyOpts = lappend(copyOpts, makeDefElem("escape", (Node *)makeString("\""), -1));
+	copyOpts = lappend(copyOpts, makeDefElem("quote", (Node *)makeString("\""), -1));
+	copyOpts = lappend(copyOpts, makeDefElem("encoding", (Node *)makeString("UTF8"), -1));
 
 	gphd_uri->options = list_make2(option_data1, option_data2);
 
 	tuple.natts = 0;
 	ext_tbl.fmtcode = 'c';
-#if PG_VERSION_NUM >= 90400
 	ext_tbl.fmtopts = "delimiter '|' null '' escape '\"' quote '\"'";
-#else
-	ext_tbl.fmtopts = NULL;
-#endif
 	ext_tbl.encoding = 6;
 	input_data->rel->rd_id = 56;
 	input_data->rel->rd_att = &tuple;
@@ -164,7 +153,6 @@ test_build_http_headers(void **state)
 
 	expect_value(GetExtTableEntry, relid, input_data->rel->rd_id);
 	will_return(GetExtTableEntry, &ext_tbl);
-#if PG_VERSION_NUM >= 90400
 	expect_value(parseCopyFormatString, rel, input_data->rel);
 	expect_value(parseCopyFormatString, fmtstr, ext_tbl.fmtopts);
 	expect_value(parseCopyFormatString, fmttype, ext_tbl.fmtcode);
@@ -172,21 +160,8 @@ test_build_http_headers(void **state)
 	expect_value(appendCopyEncodingOption, copyFmtOpts, copyOpts);
 	expect_value(appendCopyEncodingOption, encoding, ext_tbl.encoding);
 	will_return(appendCopyEncodingOption, copyOpts);
-#else
-	expect_value(strtokx2, s, NULL);
-	expect_value(strtokx2, whitespace, whitespace);
-	expect_value(strtokx2, delim, NULL);
-	expect_value(strtokx2, quote, NULL);
-	expect_value(strtokx2, escape, 0);
-	expect_value(strtokx2, e_strings, false);
-	expect_value(strtokx2, del_quotes, true);
-	expect_value(strtokx2, encoding, 0);
-	will_return(strtokx2, NIL);
-#endif
-
 	expect_string(normalize_key_name, key, "format");
 	will_return(normalize_key_name, pstrdup("X-GP-OPTIONS-FORMAT"));
-#if PG_VERSION_NUM >= 90400
 	expect_string(normalize_key_name, key, "delimiter");
 	will_return(normalize_key_name, pstrdup("X-GP-OPTIONS-DELIMITER"));
 	expect_string(normalize_key_name, key, "null");
@@ -195,18 +170,15 @@ test_build_http_headers(void **state)
 	will_return(normalize_key_name, pstrdup("X-GP-OPTIONS-ESCAPE"));
 	expect_string(normalize_key_name, key, "quote");
 	will_return(normalize_key_name, pstrdup("X-GP-OPTIONS-QUOTE"));
-#endif
 	expect_string(normalize_key_name, key, "encoding");
 	will_return(normalize_key_name, pstrdup("X-GP-OPTIONS-ENCODING"));
 
 	expect_headers_append(input_data->headers, "X-GP-FORMAT", TextFormatName);
 	expect_headers_append(input_data->headers, "X-GP-OPTIONS-FORMAT", "csv");
-#if PG_VERSION_NUM >= 90400
 	expect_headers_append(input_data->headers, "X-GP-OPTIONS-DELIMITER", "|");
 	expect_headers_append(input_data->headers, "X-GP-OPTIONS-NULL", "");
 	expect_headers_append(input_data->headers, "X-GP-OPTIONS-ESCAPE", "\"");
 	expect_headers_append(input_data->headers, "X-GP-OPTIONS-QUOTE", "\"");
-#endif
 	expect_headers_append(input_data->headers, "X-GP-OPTIONS-ENCODING", "UTF8");
 	expect_headers_append(input_data->headers, "X-GP-ATTRS", "0");
 
diff --git a/external-table/test/pxfprotocol_test.c b/external-table/test/pxfprotocol_test.c
index 76588d80..f19e6aeb 100644
--- a/external-table/test/pxfprotocol_test.c
+++ b/external-table/test/pxfprotocol_test.c
@@ -22,10 +22,8 @@
 #include <setjmp.h>
 #include "cmockery.h"
 
-#if PG_VERSION_NUM >= 90400
 #include "postgres.h"
 #include "utils/memutils.h"
-#endif
 
 /* Define UNIT_TESTING so that the extension can skip declaring PG_MODULE_MAGIC */
 #define UNIT_TESTING
diff --git a/external-table/test/pxfuriparser_test.c b/external-table/test/pxfuriparser_test.c
index b1050110..6f992533 100644
--- a/external-table/test/pxfuriparser_test.c
+++ b/external-table/test/pxfuriparser_test.c
@@ -22,10 +22,8 @@
 #include <setjmp.h>
 #include "cmockery.h"
 
-#if PG_VERSION_NUM >= 90400
 #include "postgres.h"
 #include "utils/memutils.h"
-#endif
 
 /* Define UNIT_TESTING so that the extension can skip declaring PG_MODULE_MAGIC */
 #define UNIT_TESTING
diff --git a/external-table/test/pxfutils_test.c b/external-table/test/pxfutils_test.c
index c04d9cfe..fef56be1 100644
--- a/external-table/test/pxfutils_test.c
+++ b/external-table/test/pxfutils_test.c
@@ -3,10 +3,8 @@
 #include <setjmp.h>
 #include "cmockery.h"
 
-#if PG_VERSION_NUM >= 90400
 #include "postgres.h"
 #include "utils/memutils.h"
-#endif
 
 /* Define UNIT_TESTING so that the extension can skip declaring PG_MODULE_MAGIC */
 #define UNIT_TESTING


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org