You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudberry.apache.org by ch...@apache.org on 2025/07/20 07:18:55 UTC

(cloudberry) branch cbdb-postgres-merge updated: Fix conflicts in commands

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

chenjinbao1989 pushed a commit to branch cbdb-postgres-merge
in repository https://gitbox.apache.org/repos/asf/cloudberry.git


The following commit(s) were added to refs/heads/cbdb-postgres-merge by this push:
     new 913684841d1 Fix conflicts in commands
913684841d1 is described below

commit 913684841d1fae12f7d053800242673dfac58880
Author: Jinbao Chen <ch...@gmail.com>
AuthorDate: Sun Jul 20 15:18:44 2025 +0800

    Fix conflicts in commands
---
 src/backend/commands/analyze.c         |  73 +---------
 src/backend/commands/collationcmds.c   |  40 +-----
 src/backend/commands/comment.c         |   5 -
 src/backend/commands/copyfrom.c        |  48 -------
 src/backend/commands/copyfromparse.c   |  17 ---
 src/backend/commands/copyto.c          |  89 +------------
 src/backend/commands/dbcommands.c      | 235 +++------------------------------
 src/backend/commands/dropcmds.c        |  14 +-
 src/backend/commands/explain.c         |  45 +------
 src/backend/commands/indexcmds.c       | 111 ++--------------
 src/backend/commands/lockcmds.c        |   5 -
 src/backend/commands/opclasscmds.c     |   4 -
 src/backend/commands/prepare.c         |  11 +-
 src/backend/commands/trigger.c         |  36 +----
 src/backend/commands/variable.c        |   3 -
 src/backend/commands/view.c            |  10 +-
 src/include/commands/copyto_internal.h |   1 +
 17 files changed, 52 insertions(+), 695 deletions(-)

diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c
index 75b29b58e61..eb2f367c8e2 100644
--- a/src/backend/commands/analyze.c
+++ b/src/backend/commands/analyze.c
@@ -3,7 +3,6 @@
  * analyze.c
  *	  the Postgres statistics generator
  *
-<<<<<<< HEAD
  *
  * There are a few things in Cloudberry that make this more complicated
  * than in upstream:
@@ -54,10 +53,7 @@
  *
  * TODO: explain how this works.
  *
- * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
-=======
  * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
->>>>>>> REL_16_9
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  *
@@ -187,17 +183,15 @@ static void compute_index_stats(Relation onerel, double totalrows,
 								HeapTuple *rows, int numrows,
 								MemoryContext col_context);
 static VacAttrStats *examine_attribute(Relation onerel, int attnum,
-<<<<<<< HEAD
 									   Node *index_expr, int elevel);
 static int acquire_sample_rows_dispatcher(Relation onerel, bool inh, int elevel,
-=======
-									   Node *index_expr);
+										  HeapTuple *rows, int targrows,
+										  double *totalrows, double *totaldeadrows);
 static int	acquire_sample_rows(Relation onerel, int elevel,
 								HeapTuple *rows, int targrows,
 								double *totalrows, double *totaldeadrows);
 static int	compare_rows(const void *a, const void *b, void *arg);
 static int	acquire_inherited_sample_rows(Relation onerel, int elevel,
->>>>>>> REL_16_9
 										  HeapTuple *rows, int targrows,
 										  double *totalrows, double *totaldeadrows);
 static BlockNumber acquire_index_number_of_blocks(Relation indexrel, Relation tablerel);
@@ -628,11 +622,7 @@ do_analyze_rel(Relation onerel, VacuumParams *params,
 	 */
 	if (onerel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE)
 	{
-<<<<<<< HEAD
-		List *idxs = RelationGetIndexList(onerel);
-=======
 		List	   *idxs = RelationGetIndexList(onerel);
->>>>>>> REL_16_9
 
 		Irel = NULL;
 		nindexes = 0;
@@ -1014,14 +1004,11 @@ do_analyze_rel(Relation onerel, VacuumParams *params,
 			MemoryContextResetAndDeleteChildren(col_context);
 		}
 
-<<<<<<< HEAD
 		/*
 		 * Datums exceeding WIDTH_THRESHOLD are masked as NULL in the sample, and
 		 * are used as is to evaluate index statistics. It is less likely to have
 		 * indexes on very wide columns, so the effect will be minimal.
 		 */
-=======
->>>>>>> REL_16_9
 		if (nindexes > 0)
 			compute_index_stats(onerel, totalrows,
 								indexdata, nindexes,
@@ -1047,36 +1034,9 @@ do_analyze_rel(Relation onerel, VacuumParams *params,
 							thisdata->attr_cnt, thisdata->vacattrstats);
 		}
 
-<<<<<<< HEAD
-		/*
-		 * Should we build extended statistics for this relation?
-		 *
-		 * The extended statistics catalog does not include an inheritance
-		 * flag, so we can't store statistics built both with and without
-		 * data from child relations. We can store just one set of statistics
-		 * per relation. For plain relations that's fine, but for inheritance
-		 * trees we have to pick whether to store statistics for just the
-		 * one relation or the whole tree. For plain inheritance we store
-		 * the (!inh) version, mostly for backwards compatibility reasons.
-		 * For partitioned tables that's pointless (the non-leaf tables are
-		 * always empty), so we store stats representing the whole tree.
-		 */
-		build_ext_stats = (onerel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) ? inh : (!inh);
-
-		/*
-		 * Build extended statistics (if there are any).
-		 *
-		 * For now we only build extended statistics on individual relations,
-		 * not for relations representing inheritance trees.
-		 */
-		if (build_ext_stats)
-			BuildRelationExtStatistics(onerel, totalrows, numrows, rows,
-									   attr_cnt, vacattrstats);
-=======
 		/* Build extended statistics (if there are any). */
 		BuildRelationExtStatistics(onerel, inh, totalrows, numrows, rows,
 								   attr_cnt, vacattrstats);
->>>>>>> REL_16_9
 	}
 
 	pgstat_progress_update_param(PROGRESS_ANALYZE_PHASE,
@@ -1119,7 +1079,7 @@ do_analyze_rel(Relation onerel, VacuumParams *params,
 							hasindex,
 							InvalidTransactionId,
 							InvalidMultiXactId,
-<<<<<<< HEAD
+							NULL, NULL,
 							in_outer_xact,
 							false /* isVacuum */);
 
@@ -1152,10 +1112,6 @@ do_analyze_rel(Relation onerel, VacuumParams *params,
 			}
 			ReleaseSysCache(aotup);
 		}
-=======
-							NULL, NULL,
-							in_outer_xact);
->>>>>>> REL_16_9
 
 		/* Same for indexes */
 		for (ind = 0; ind < nindexes; ind++)
@@ -1195,13 +1151,9 @@ do_analyze_rel(Relation onerel, VacuumParams *params,
 								false,
 								InvalidTransactionId,
 								InvalidMultiXactId,
-<<<<<<< HEAD
+								NULL, NULL,
 								in_outer_xact,
 								false /* isVacuum */);
-=======
-								NULL, NULL,
-								in_outer_xact);
->>>>>>> REL_16_9
 		}
 	}
 	else if (onerel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE)
@@ -1214,13 +1166,9 @@ do_analyze_rel(Relation onerel, VacuumParams *params,
 		vac_update_relstats(onerel, -1, totalrows,
 							0, hasindex, InvalidTransactionId,
 							InvalidMultiXactId,
-<<<<<<< HEAD
+							NULL, NULL,
 							in_outer_xact,
 							false /* isVacuum */);
-=======
-							NULL, NULL,
-							in_outer_xact);
->>>>>>> REL_16_9
 	}
 
 	/*
@@ -1765,7 +1713,6 @@ acquire_sample_rows(Relation onerel, int elevel,
 	nblocks = BlockSampler_Init(&bs, totalblocks, targrows, randseed);
 
 #ifdef USE_PREFETCH
-<<<<<<< HEAD
 	/*
 	 * GPDB_14_MERGE_FIXME: pre-fetching is introduced in PG14.
 	 * It's not suitable for AO tables, will get error when PrefetchBuffer
@@ -1783,12 +1730,6 @@ acquire_sample_rows(Relation onerel, int elevel,
 		if (prefetch_maximum)
 			(void) BlockSampler_Init(&prefetch_bs, totalblocks, targrows, randseed);
 	}
-=======
-	prefetch_maximum = get_tablespace_maintenance_io_concurrency(onerel->rd_rel->reltablespace);
-	/* Create another BlockSampler, using the same seed, for prefetching */
-	if (prefetch_maximum)
-		(void) BlockSampler_Init(&prefetch_bs, totalblocks, targrows, randseed);
->>>>>>> REL_16_9
 #endif
 
 	/* Report sampling block numbers */
@@ -4468,7 +4409,6 @@ compute_scalar_stats(VacAttrStatsP stats,
 }
 
 /*
-<<<<<<< HEAD
  *	merge_leaf_stats() -- merge leaf stats for the root
  *
  *	We use this when we can find "=" and "<" operators for the datatype.
@@ -4975,9 +4915,6 @@ merge_leaf_stats(VacAttrStatsP stats,
 
 /*
  * qsort_arg comparator for sorting ScalarItems
-=======
- * Comparator for sorting ScalarItems
->>>>>>> REL_16_9
  *
  * Aside from sorting the items, we update the tupnoLink[] array
  * whenever two ScalarItems are found to contain equal datums.  The array
diff --git a/src/backend/commands/collationcmds.c b/src/backend/commands/collationcmds.c
index fcbabbc904f..19525961573 100644
--- a/src/backend/commands/collationcmds.c
+++ b/src/backend/commands/collationcmds.c
@@ -922,12 +922,6 @@ pg_import_system_collations(PG_FUNCTION_ARGS)
 			enc = create_collation_from_locale(localebuf, nspid, &nvalid, &ncreated);
 			if (enc < 0)
 				continue;
-<<<<<<< HEAD
-			}
-			if (!PG_VALID_BE_ENCODING(enc))
-				continue;		/* ignore locales for client-only encodings */
-			if (enc == PG_SQL_ASCII)
-				continue;		/* C/POSIX are already in the catalog */
 			/*
 			 * Greenplum specific behavior: this function in Greenplum can only be called after a full cluster is
 			 * built, this is different from Postgres which might call this function during initdb. When reaching
@@ -935,35 +929,7 @@ pg_import_system_collations(PG_FUNCTION_ARGS)
 			 * encoding because they cannot be used in this database.
 			 */
 			if (enc != GetDatabaseEncoding())
-				continue;       /* Ignore collations incompatible with database encoding */ 
-
-			/* count valid locales found in operating system */
-			nvalid++;
-
-			/*
-			 * Create a collation named the same as the locale, but quietly
-			 * doing nothing if it already exists.  This is the behavior we
-			 * need even at initdb time, because some versions of "locale -a"
-			 * can report the same locale name more than once.  And it's
-			 * convenient for later import runs, too, since you just about
-			 * always want to add on new locales without a lot of chatter
-			 * about existing ones.
-			 */
-			collid = CollationCreate(localebuf, nspid, GetUserId(),
-									 COLLPROVIDER_LIBC, true, enc,
-									 localebuf, localebuf,
-									 get_collation_actual_version(COLLPROVIDER_LIBC, localebuf),
-									 true, true);
-			if (OidIsValid(collid))
-			{
-				DispatchCollationCreate(localebuf, localebuf, nspid, "libc");
-				ncreated++;
-
-				/* Must do CCI between inserts to handle duplicates correctly */
-				CommandCounterIncrement();
-			}
-=======
->>>>>>> REL_16_9
+				continue;       /* Ignore collations incompatible with database encoding */
 
 			/*
 			 * Generate aliases such as "en_US" in addition to "en_US.utf8"
@@ -1063,11 +1029,7 @@ pg_import_system_collations(PG_FUNCTION_ARGS)
 			const char *name;
 			char	   *langtag;
 			char	   *icucomment;
-<<<<<<< HEAD
-			const char *collcollate;
 			char	   *collname;
-=======
->>>>>>> REL_16_9
 			Oid			collid;
 
 			if (i == -1)
diff --git a/src/backend/commands/comment.c b/src/backend/commands/comment.c
index 20bfb2b65f3..17e9f5d25f5 100644
--- a/src/backend/commands/comment.c
+++ b/src/backend/commands/comment.c
@@ -102,14 +102,9 @@ CommentObject(CommentStmt *stmt)
 				relation->rd_rel->relkind != RELKIND_PARTITIONED_TABLE)
 				ereport(ERROR,
 						(errcode(ERRCODE_WRONG_OBJECT_TYPE),
-<<<<<<< HEAD
-						 errmsg("\"%s\" is not a table, directory table, view, materialized view, composite type, or foreign table",
-								RelationGetRelationName(relation))));
-=======
 						 errmsg("cannot set comment on relation \"%s\"",
 								RelationGetRelationName(relation)),
 						 errdetail_relkind_not_supported(relation->rd_rel->relkind)));
->>>>>>> REL_16_9
 			break;
 		default:
 			break;
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 0b0eddb44d0..30a1f6c3af6 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -481,31 +481,7 @@ CopyMultiInsertBufferFlush(CopyMultiInsertInfo *miinfo,
 	TupleTableSlot **slots = buffer->slots;
 	int			i;
 
-<<<<<<< HEAD
-	/*
-	 * Print error context information correctly, if one of the operations
-	 * below fails.
-	 */
-	cstate->line_buf_valid = false;
-	save_cur_lineno = cstate->cur_lineno;
-
-	/*
-	 * table_multi_insert may leak memory, so switch to short-lived memory
-	 * context before calling it.
-	 */
-	oldcontext = MemoryContextSwitchTo(GetPerTupleMemoryContext(estate));
-	table_multi_insert(resultRelInfo->ri_RelationDesc,
-					   slots,
-					   nused,
-					   mycid,
-					   ti_options,
-					   buffer->bistate);
-	MemoryContextSwitchTo(oldcontext);
-
-	for (i = 0; i < nused; i++)
-=======
 	if (resultRelInfo->ri_FdwRoutine)
->>>>>>> REL_16_9
 	{
 		int			batch_size = resultRelInfo->ri_BatchSize;
 		int			sent = 0;
@@ -692,7 +668,6 @@ CopyMultiInsertBufferCleanup(CopyMultiInsertInfo *miinfo,
 	for (i = 0; i < MAX_BUFFERED_TUPLES && buffer->slots[i] != NULL; i++)
 		ExecDropSingleTupleTableSlot(buffer->slots[i]);
 
-<<<<<<< HEAD
 	if (RelationIsNonblockRelation(buffer->resultRelInfo->ri_RelationDesc))
 	{
 		/*
@@ -706,13 +681,9 @@ CopyMultiInsertBufferCleanup(CopyMultiInsertInfo *miinfo,
 		return;
 	}
 
-	table_finish_bulk_insert(buffer->resultRelInfo->ri_RelationDesc,
-							 miinfo->ti_options);
-=======
 	if (resultRelInfo->ri_FdwRoutine == NULL)
 		table_finish_bulk_insert(resultRelInfo->ri_RelationDesc,
 								 miinfo->ti_options);
->>>>>>> REL_16_9
 
 	pfree(buffer);
 }
@@ -2931,18 +2902,7 @@ BeginCopyFrom(ParseState *pstate,
 	else
 	{
 		cstate->need_transcoding = true;
-<<<<<<< HEAD
 		cstate->conversion_proc = FindDefaultConversionProc(cstate->file_encoding, GetDatabaseEncoding());
-=======
-		cstate->conversion_proc = FindDefaultConversionProc(cstate->file_encoding,
-															GetDatabaseEncoding());
-		if (!OidIsValid(cstate->conversion_proc))
-			ereport(ERROR,
-					(errcode(ERRCODE_UNDEFINED_FUNCTION),
-					 errmsg("default conversion function for encoding \"%s\" to \"%s\" does not exist",
-							pg_encoding_to_char(cstate->file_encoding),
-							pg_encoding_to_char(GetDatabaseEncoding()))));
->>>>>>> REL_16_9
 	}
 
 	/*
@@ -2959,7 +2919,6 @@ BeginCopyFrom(ParseState *pstate,
 
 	cstate->whereClause = whereClause;
 
-<<<<<<< HEAD
 	/*
 	 * Determine the mode
 	 */
@@ -2981,13 +2940,6 @@ BeginCopyFrom(ParseState *pstate,
 		cstate->dispatch_mode = COPY_EXECUTOR;
 	else
 		cstate->dispatch_mode = COPY_DIRECT;
-
-	MemoryContextSwitchTo(oldcontext);
-
-	oldcontext = MemoryContextSwitchTo(cstate->copycontext);
-
-=======
->>>>>>> REL_16_9
 	/* Initialize state variables */
 	// cstate->eol_type = EOL_UNKNOWN; /* GPDB: don't overwrite value set in ProcessCopyOptions */
 	cstate->cur_relname = RelationGetRelationName(cstate->rel);
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 8e499568d81..24e38ca6868 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -72,11 +72,8 @@
 #include "miscadmin.h"
 #include "pgstat.h"
 #include "port/pg_bswap.h"
-<<<<<<< HEAD
 #include "utils/elog.h"
-=======
 #include "utils/builtins.h"
->>>>>>> REL_16_9
 #include "utils/memutils.h"
 #include "utils/rel.h"
 
@@ -760,8 +757,6 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 }
 
 /*
-<<<<<<< HEAD
-=======
  * Read raw fields in the next line for COPY FROM in text or csv mode.
  * Return false if no more lines.
  *
@@ -1066,7 +1061,6 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 }
 
 /*
->>>>>>> REL_16_9
  * Read the next input line and stash it in line_buf.
  *
  * Result is true if read was terminated by EOF, false if terminated
@@ -1206,23 +1200,12 @@ CopyReadLineText(CopyFromState cstate)
 		char		c;
 
 		/*
-<<<<<<< HEAD
-		 * Load more data if needed.  Ideally we would just force four bytes
-		 * of read-ahead and avoid the many calls to
-		 * IF_NEED_REFILL_AND_NOT_EOF_CONTINUE(), but the COPY_OLD_FE protocol
-		 * does not allow us to read too far ahead or we might read into the
-		 * next data, so we read-ahead only as far we know we can.  One
-		 * optimization would be to read-ahead four byte here if
-		 * cstate->copy_src != COPY_FRONTEND, but it hardly seems worth it,
-		 * considering the size of the buffer.
-=======
 		 * Load more data if needed.
 		 *
 		 * TODO: We could just force four bytes of read-ahead and avoid the
 		 * many calls to IF_NEED_REFILL_AND_NOT_EOF_CONTINUE().  That was
 		 * unsafe with the old v2 COPY protocol, but we don't support that
 		 * anymore.
->>>>>>> REL_16_9
 		 */
 		if (input_buf_ptr >= copy_buf_len || need_data)
 		{
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 13eb82ccf49..c29020ce365 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -52,10 +52,9 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-<<<<<<< HEAD
 #include "cdb/cdbdisp_query.h"
 #include "cdb/cdbvars.h"
-=======
+
 /*
  * Represents the different dest cases we need to worry about at
  * the bottom level
@@ -66,46 +65,10 @@ typedef enum CopyDest
 	COPY_FRONTEND,				/* to frontend */
 	COPY_CALLBACK				/* to callback function */
 } CopyDest;
->>>>>>> REL_16_9
 
 #define EXEC_DATA_P 0
 
-<<<<<<< HEAD
 extern CopyStmt *glob_copystmt;
-=======
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
-/* DestReceiver for COPY (query) TO */
-typedef struct
-{
-	DestReceiver pub;			/* publicly-known function pointers */
-	CopyToState cstate;			/* CopyToStateData for the command */
-	uint64		processed;		/* # of tuples processed */
-} DR_copy;
->>>>>>> REL_16_9
 
 /* NOTE: there's a copy of this in copyfromparse.c */
 static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
@@ -113,15 +76,10 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 /* non-export function prototypes */
 static void EndCopy(CopyToState cstate);
-<<<<<<< HEAD
-static void CopyAttributeOutText(CopyToState cstate, char *string);
-static void CopyAttributeOutCSV(CopyToState cstate, char *string,
-=======
 static void ClosePipeToProgram(CopyToState cstate);
 static void CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot);
 static void CopyAttributeOutText(CopyToState cstate, const char *string);
 static void CopyAttributeOutCSV(CopyToState cstate, const char *string,
->>>>>>> REL_16_9
 								bool use_quote, bool single_attr);
 static uint64 CopyToDispatch(CopyToState cstate);
 static void CopyToDispatchFlush(CopyToState cstate);
@@ -255,19 +213,8 @@ void CopySendEndOfRow(CopyToState cstate)
 			(void) pq_putmessage('d', fe_msgbuf->data, fe_msgbuf->len);
 			break;
 		case COPY_CALLBACK:
-<<<<<<< HEAD
-			/* we don't actually do the write here, we let the caller do it */
-#ifndef WIN32
-			CopySendChar(cstate, '\n');
-#else
-			CopySendString(cstate, "\r\n");
-#endif
-			return; /* don't want to reset msgbuf quite yet */
-
-=======
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
->>>>>>> REL_16_9
 	}
 
 	/* Update the progress */
@@ -331,13 +278,7 @@ BeginCopyTo(ParseState *pstate,
 			List *options)
 {
 	CopyToState cstate;
-<<<<<<< HEAD
 	bool		pipe;
-=======
-	bool		pipe = (filename == NULL && data_dest_cb == NULL);
-	TupleDesc	tupDesc;
-	int			num_phys_attrs;
->>>>>>> REL_16_9
 	MemoryContext oldcontext;
 	const int	progress_cols[] = {
 		PROGRESS_COPY_COMMAND,
@@ -1225,15 +1166,9 @@ BeginCopy(ParseState *pstate,
 		 * function and is executed repeatedly.  (See also the same hack in
 		 * DECLARE CURSOR and PREPARE.)  XXX FIXME someday.
 		 */
-<<<<<<< HEAD
-		rewritten = pg_analyze_and_rewrite(copyObject(raw_query),
-										   pstate->p_sourcetext, NULL, 0,
-										   NULL);
-=======
-		rewritten = pg_analyze_and_rewrite_fixedparams(raw_query,
+		rewritten = pg_analyze_and_rewrite_fixedparams(copyObject(raw_query),
 													   pstate->p_sourcetext, NULL, 0,
 													   NULL);
->>>>>>> REL_16_9
 
 		/* check that we got back something we can work with */
 		if (rewritten == NIL)
@@ -1435,22 +1370,10 @@ BeginCopy(ParseState *pstate,
 
 	cstate->copy_dest = COPY_FILE;	/* default */
 
-<<<<<<< HEAD
 	MemoryContextSwitchTo(oldcontext);
 
 	return cstate;
 }
-=======
-	if (data_dest_cb)
-	{
-		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
-		cstate->data_dest_cb = data_dest_cb;
-	}
-	else if (pipe)
-	{
-		progress_vals[1] = PROGRESS_COPY_TYPE_PIPE;
->>>>>>> REL_16_9
 
 CopyToState
 BeginCopyToOnSegment(QueryDesc *queryDesc)
@@ -1945,11 +1868,6 @@ CopyToDispatchDirectoryTable(CopyToState cstate)
 static uint64
 CopyTo(CopyToState cstate)
 {
-<<<<<<< HEAD
-=======
-	bool		pipe = (cstate->filename == NULL && cstate->data_dest_cb == NULL);
-	bool		fe_copy = (pipe && whereToSendOutput == DestRemote);
->>>>>>> REL_16_9
 	TupleDesc	tupDesc;
 	int			num_phys_attrs;
 	ListCell   *cur;
@@ -2477,8 +2395,6 @@ BeginCopyToDirectoryTable(ParseState *pstate,
 	return cstate;
 }
 
-<<<<<<< HEAD
-=======
 /*
  * Send text representation of one attribute, with conversion and escaping
  */
@@ -2788,4 +2704,3 @@ CreateCopyDestReceiver(void)
 
 	return (DestReceiver *) self;
 }
->>>>>>> REL_16_9
diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c
index 1199891056c..5ccfeffa134 100644
--- a/src/backend/commands/dbcommands.c
+++ b/src/backend/commands/dbcommands.c
@@ -8,13 +8,9 @@
  * stepping on each others' toes.  Formerly we used table-level locks
  * on pg_database, but that's too coarse-grained.
  *
-<<<<<<< HEAD
  * Portions Copyright (c) 2005-2010, Greenplum inc
  * Portions Copyright (c) 2012-Present VMware, Inc. or its affiliates.
- * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
-=======
  * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
->>>>>>> REL_16_9
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  *
@@ -46,12 +42,9 @@
 #include "catalog/indexing.h"
 #include "catalog/objectaccess.h"
 #include "catalog/pg_authid.h"
-<<<<<<< HEAD
 #include "catalog/pg_class.h"
 #include "catalog/pg_namespace.h"
-=======
 #include "catalog/pg_collation.h"
->>>>>>> REL_16_9
 #include "catalog/pg_database.h"
 #include "catalog/pg_db_role_setting.h"
 #include "catalog/pg_subscription.h"
@@ -63,11 +56,8 @@
 #include "commands/defrem.h"
 #include "commands/seclabel.h"
 #include "commands/tablespace.h"
-<<<<<<< HEAD
 #include "commands/tag.h"
-=======
 #include "common/file_perm.h"
->>>>>>> REL_16_9
 #include "mb/pg_wchar.h"
 #include "miscadmin.h"
 #include "pgstat.h"
@@ -89,7 +79,6 @@
 #include "utils/snapmgr.h"
 #include "utils/syscache.h"
 
-<<<<<<< HEAD
 #include "catalog/oid_dispatch.h"
 #include "cdb/cdbdisp_query.h"
 #include "cdb/cdbdispatchresult.h"
@@ -98,7 +87,7 @@
 #include "cdb/cdbvars.h"
 
 #include "utils/pg_rusage.h"
-=======
+
 /*
  * Create database strategy.
  *
@@ -114,7 +103,6 @@ typedef enum CreateDBStrategy
 	CREATEDB_WAL_LOG,
 	CREATEDB_FILE_COPY
 } CreateDBStrategy;
->>>>>>> REL_16_9
 
 typedef struct
 {
@@ -644,6 +632,13 @@ CreateDatabaseUsingFileCopy(Oid src_dboid, Oid dst_dboid, Oid src_tsid,
 
 		dstpath = GetDatabasePath(dst_dboid, dsttablespace);
 
+		/*
+		 * Register the database directory to PendingDBDelete link list
+		 * for cleanup in txn abort.
+		 */
+		ScheduleDbDirDelete(dst_dboid, dsttablespace, false);
+
+
 		/*
 		 * Copy this subdirectory to the new location
 		 *
@@ -710,13 +705,7 @@ CreateDatabaseUsingFileCopy(Oid src_dboid, Oid dst_dboid, Oid src_tsid,
 Oid
 createdb(ParseState *pstate, const CreatedbStmt *stmt)
 {
-<<<<<<< HEAD
-	TableScanDesc scan;
-	Relation	rel;
 	Oid			src_dboid = InvalidOid;
-=======
-	Oid			src_dboid;
->>>>>>> REL_16_9
 	Oid			src_owner;
 	int			src_encoding = -1;
 	char	   *src_collate = NULL;
@@ -1382,12 +1371,6 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt)
 	 */
 	pg_database_rel = table_open(DatabaseRelationId, RowExclusiveLock);
 
-<<<<<<< HEAD
-	if (Gp_role == GP_ROLE_EXECUTE)
-		dboid = GetPreassignedOidForDatabase(dbname);
-	else
-	{
-=======
 	/*
 	 * If database OID is configured, check if the OID is already in use or
 	 * data directory already exists.
@@ -1410,20 +1393,21 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt)
 	else
 	{
 		/* Select an OID for the new database if is not explicitly configured. */
->>>>>>> REL_16_9
-		do
+		if (Gp_role == GP_ROLE_EXECUTE)
+			dboid = GetPreassignedOidForDatabase(dbname);
+		else
 		{
-			dboid = GetNewOidWithIndex(pg_database_rel, DatabaseOidIndexId,
-									   Anum_pg_database_oid);
-		} while (check_db_file_conflict(dboid));
-<<<<<<< HEAD
-
-		if (Gp_role == GP_ROLE_DISPATCH)
-			RememberAssignedOidForDatabase(dbname, dboid);
-=======
->>>>>>> REL_16_9
+			do
+			{
+				dboid = GetNewOidWithIndex(pg_database_rel, DatabaseOidIndexId,
+										   Anum_pg_database_oid);
+			} while (check_db_file_conflict(dboid));
+		}
 	}
 
+	if (Gp_role == GP_ROLE_DISPATCH)
+		RememberAssignedOidForDatabase(dbname, dboid);
+
 	/*
 	 * Insert a new tuple into pg_database.  This establishes our ownership of
 	 * the new database name (anyone else trying to insert the same name will
@@ -1446,8 +1430,6 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt)
 	new_record[Anum_pg_database_datfrozenxid - 1] = TransactionIdGetDatum(src_frozenxid);
 	new_record[Anum_pg_database_datminmxid - 1] = TransactionIdGetDatum(src_minmxid);
 	new_record[Anum_pg_database_dattablespace - 1] = ObjectIdGetDatum(dst_deftablespace);
-<<<<<<< HEAD
-=======
 	new_record[Anum_pg_database_datcollate - 1] = CStringGetTextDatum(dbcollate);
 	new_record[Anum_pg_database_datctype - 1] = CStringGetTextDatum(dbctype);
 	if (dbiculocale)
@@ -1463,7 +1445,6 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt)
 	else
 		new_record_nulls[Anum_pg_database_datcollversion - 1] = true;
 
->>>>>>> REL_16_9
 	/*
 	 * We deliberately set datacl to default (NULL), rather than copying it
 	 * from the template database.  Copying it would be a bad idea when the
@@ -1565,117 +1546,12 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt)
 		 * Otherwise, call CreateDatabaseUsingFileCopy that will copy the
 		 * database file by file.
 		 */
-<<<<<<< HEAD
-		rel = table_open(TableSpaceRelationId, AccessShareLock);
-		scan = table_beginscan_catalog(rel, 0, NULL);
-		while ((tuple = heap_getnext(scan, ForwardScanDirection)) != NULL)
-		{
-			Form_pg_tablespace spaceform = (Form_pg_tablespace) GETSTRUCT(tuple);
-			Oid			srctablespace = spaceform->oid;
-			Oid			dsttablespace;
-			char	   *srcpath;
-			char	   *dstpath;
-			struct stat st;
-
-			/* No need to copy global tablespace */
-			if (srctablespace == GLOBALTABLESPACE_OID)
-				continue;
-
-			srcpath = GetDatabasePath(src_dboid, srctablespace);
-
-			if (stat(srcpath, &st) < 0 || !S_ISDIR(st.st_mode) ||
-				directory_is_empty(srcpath))
-			{
-				/* Assume we can ignore it */
-				pfree(srcpath);
-				continue;
-			}
-
-			if (srctablespace == src_deftablespace)
-				dsttablespace = dst_deftablespace;
-			else
-				dsttablespace = srctablespace;
-
-			dstpath = GetDatabasePath(dboid, dsttablespace);
-
-			/*
-			 * Register the database directory to PendingDBDelete link list
-			 * for cleanup in txn abort.
-			 */
-			ScheduleDbDirDelete(dboid, dsttablespace, false);
-
-			/*
-			 * Copy this subdirectory to the new location
-			 *
-			 * We don't need to copy subdirectories
-			 */
-			copydir(srcpath, dstpath, false);
-
-			SIMPLE_FAULT_INJECTOR("create_db_after_file_copy");
-
-			/* Record the filesystem change in XLOG */
-			{
-				xl_dbase_create_rec xlrec;
-
-				xlrec.db_id = dboid;
-				xlrec.tablespace_id = dsttablespace;
-				xlrec.src_db_id = src_dboid;
-				xlrec.src_tablespace_id = srctablespace;
-
-				XLogBeginInsert();
-				XLogRegisterData((char *) &xlrec, sizeof(xl_dbase_create_rec));
-
-				(void) XLogInsert(RM_DBASE_ID,
-								  XLOG_DBASE_CREATE | XLR_SPECIAL_REL_UPDATE);
-			}
-			
-			pfree(srcpath);
-			pfree(dstpath);
-		}
-
-		SIMPLE_FAULT_INJECTOR("after_xlog_create_database");
-
-		table_endscan(scan);
-		table_close(rel, AccessShareLock);
-
-		/*
-		 * We force a checkpoint before committing.  This effectively means
-		 * that committed XLOG_DBASE_CREATE operations will never need to be
-		 * replayed (at least not in ordinary crash recovery; we still have to
-		 * make the XLOG entry for the benefit of PITR operations). This
-		 * avoids two nasty scenarios:
-		 *
-		 * #1: When PITR is off, we don't XLOG the contents of newly created
-		 * indexes; therefore the drop-and-recreate-whole-directory behavior
-		 * of DBASE_CREATE replay would lose such indexes.
-		 *
-		 * #2: Since we have to recopy the source database during DBASE_CREATE
-		 * replay, we run the risk of copying changes in it that were
-		 * committed after the original CREATE DATABASE command but before the
-		 * system crash that led to the replay.  This is at least unexpected
-		 * and at worst could lead to inconsistencies, eg duplicate table
-		 * names.
-		 *
-		 * (Both of these were real bugs in releases 8.0 through 8.0.3.)
-		 *
-		 * In PITR replay, the first of these isn't an issue, and the second
-		 * is only a risk if the CREATE DATABASE and subsequent template
-		 * database change both occur while a base backup is being taken.
-		 * There doesn't seem to be much we can do about that except document
-		 * it as a limitation.
-		 *
-		 * Perhaps if we ever implement CREATE DATABASE in a less cheesy way,
-		 * we can avoid this.
-		 */
-		RequestCheckpoint(CHECKPOINT_IMMEDIATE | CHECKPOINT_FORCE | CHECKPOINT_WAIT);
-=======
 		if (dbstrategy == CREATEDB_WAL_LOG)
 			CreateDatabaseUsingWalLog(src_dboid, dboid, src_deftablespace,
 									  dst_deftablespace);
 		else
 			CreateDatabaseUsingFileCopy(src_dboid, dboid, src_deftablespace,
 										dst_deftablespace);
->>>>>>> REL_16_9
 
 		/*
 		 * Close pg_database, but keep lock till commit.
@@ -1824,11 +1700,7 @@ dropdb(const char *dbname, bool missing_ok, bool force)
 	pgdbrel = table_open(DatabaseRelationId, RowExclusiveLock);
 
 	if (!get_db_info(dbname, AccessExclusiveLock, &db_id, NULL, NULL,
-<<<<<<< HEAD
-					 &db_istemplate, NULL, NULL, NULL, NULL, &defaultTablespace, NULL, NULL))
-=======
 					 &db_istemplate, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL))
->>>>>>> REL_16_9
 	{
 		if (!missing_ok)
 		{
@@ -1943,7 +1815,6 @@ dropdb(const char *dbname, bool missing_ok, bool force)
 				 errdetail_busy_db(notherbackends, npreparedxacts)));
 
 	/*
-<<<<<<< HEAD
 	 * Free the database on the segDBs
 	 */
 	if (Gp_role == GP_ROLE_DISPATCH)
@@ -1977,8 +1848,6 @@ dropdb(const char *dbname, bool missing_ok, bool force)
 	ReleaseSysCache(tup);
 
 	/*
-=======
->>>>>>> REL_16_9
 	 * Delete any comments or security labels associated with the database.
 	 */
 	DeleteSharedComments(db_id, DatabaseRelationId);
@@ -2049,12 +1918,6 @@ dropdb(const char *dbname, bool missing_ok, bool force)
 	 */
 	DropDatabaseBuffers(db_id);
 
-	/*
-<<<<<<< HEAD
-	 * Tell the stats collector to forget it immediately, too.
-	 */
-	pgstat_drop_database(db_id);
-	
 	/* MPP-6929: metadata tracking */
 	if (Gp_role == GP_ROLE_DISPATCH)
 		MetaTrackDropObject(DatabaseRelationId, db_id);
@@ -2065,8 +1928,6 @@ dropdb(const char *dbname, bool missing_ok, bool force)
 	pgstat_drop_database(db_id);
 
 	/*
-=======
->>>>>>> REL_16_9
 	 * Tell checkpointer to forget any pending fsync and unlink requests for
 	 * files in the database; else the fsyncs will fail at next checkpoint, or
 	 * worse, it will delete files that belong to a newly created database
@@ -2415,14 +2276,12 @@ movedb(const char *dbname, const char *tblspcname)
 							PointerGetDatum(&fparms));
 #endif
 	{
-<<<<<<< HEAD
-		ScheduleDbDirDelete(db_id, dst_tblspcoid, false);
-=======
 		Datum		new_record[Natts_pg_database] = {0};
 		bool		new_record_nulls[Natts_pg_database] = {0};
 		bool		new_record_repl[Natts_pg_database] = {0};
 
->>>>>>> REL_16_9
+		ScheduleDbDirDelete(db_id, dst_tblspcoid, false);
+
 		/*
 		 * Copy files from the old tablespace to the new one
 		 */
@@ -2536,7 +2395,6 @@ movedb(const char *dbname, const char *tblspcname)
 		MoveDbSessionLockRelease();
 	}
 
-<<<<<<< HEAD
 	/*
 	 * register the db_id with pending deletes list to schedule removing database
 	 * directory on transaction commit.
@@ -2546,14 +2404,6 @@ movedb(const char *dbname, const char *tblspcname)
 	pfree(src_dbpath);
 	pfree(dst_dbpath);
 	SIMPLE_FAULT_INJECTOR("inside_move_db_transaction");
-=======
-	/* Now it's safe to release the database lock */
-	UnlockSharedObjectForSession(DatabaseRelationId, db_id, 0,
-								 AccessExclusiveLock);
-
-	pfree(src_dbpath);
-	pfree(dst_dbpath);
->>>>>>> REL_16_9
 }
 
 /*
@@ -2787,12 +2637,6 @@ AlterDatabase(ParseState *pstate, AlterDatabaseStmt *stmt, bool isTopLevel)
 	newtuple = heap_modify_tuple(tuple, RelationGetDescr(rel), new_record,
 								 new_record_nulls, new_record_repl);
 	CatalogTupleUpdate(rel, &tuple->t_self, newtuple);
-<<<<<<< HEAD
-	
-=======
-	UnlockTuple(rel, &tuple->t_self, InplaceUpdateTupleLock);
-
->>>>>>> REL_16_9
 	InvokeObjectPostAlterHook(DatabaseRelationId, dboid, 0);
 
 	systable_endscan(scan);
@@ -3618,11 +3462,7 @@ dbase_redo(XLogReaderState *record)
 			(xl_dbase_create_file_copy_rec *) XLogRecGetData(record);
 		char	   *src_path;
 		char	   *dst_path;
-<<<<<<< HEAD
 		char	   *parentdir;
-=======
-		char	   *parent_path;
->>>>>>> REL_16_9
 		struct stat st;
 
 		src_path = GetDatabasePath(xlrec->src_db_id, xlrec->src_tablespace_id);
@@ -3643,7 +3483,6 @@ dbase_redo(XLogReaderState *record)
 		}
 
 		/*
-<<<<<<< HEAD
 		 * It is possible that the tablespace was later dropped, but we are
 		 * re-redoing database create before that. In that case,
 		 * either src_path or dst_path is probably missing here and needs to
@@ -3666,33 +3505,6 @@ dbase_redo(XLogReaderState *record)
 							parentdir)));
 		}
 		pfree(parentdir);
-=======
-		 * If the parent of the target path doesn't exist, create it now. This
-		 * enables us to create the target underneath later.
-		 */
-		parent_path = pstrdup(dst_path);
-		get_parent_directory(parent_path);
-		if (stat(parent_path, &st) < 0)
-		{
-			if (errno != ENOENT)
-				ereport(FATAL,
-						errmsg("could not stat directory \"%s\": %m",
-							   dst_path));
-
-			/* create the parent directory if needed and valid */
-			recovery_create_dbdir(parent_path, true);
-		}
-		pfree(parent_path);
-
-		/*
-		 * There's a case where the copy source directory is missing for the
-		 * same reason above.  Create the empty source directory so that
-		 * copydir below doesn't fail.  The directory will be dropped soon by
-		 * recovery.
-		 */
-		if (stat(src_path, &st) < 0 && errno == ENOENT)
-			recovery_create_dbdir(src_path, false);
->>>>>>> REL_16_9
 
 		/*
 		 * Force dirty buffers out to disk, to ensure source database is
@@ -3712,8 +3524,6 @@ dbase_redo(XLogReaderState *record)
 
 		pfree(src_path);
 		pfree(dst_path);
-<<<<<<< HEAD
-=======
 	}
 	else if (info == XLOG_DBASE_CREATE_WAL_LOG)
 	{
@@ -3733,7 +3543,6 @@ dbase_redo(XLogReaderState *record)
 		CreateDirAndVersionFile(dbpath, xlrec->db_id, xlrec->tablespace_id,
 								true);
 		pfree(dbpath);
->>>>>>> REL_16_9
 	}
 	else if (info == XLOG_DBASE_DROP)
 	{
diff --git a/src/backend/commands/dropcmds.c b/src/backend/commands/dropcmds.c
index 4fa28969be5..b8d1a10bc68 100644
--- a/src/backend/commands/dropcmds.c
+++ b/src/backend/commands/dropcmds.c
@@ -488,14 +488,6 @@ does_not_exist_skipping(ObjectType objtype, Node *object)
 			msg = gettext_noop("publication \"%s\" does not exist, skipping");
 			name = strVal(object);
 			break;
-<<<<<<< HEAD
-		case OBJECT_EXTPROTOCOL:
-			msg = gettext_noop("protocol \"%s\" does not exist, skipping");
-			name = strVal((Value *) object);
-			break;
-		default:
-			elog(ERROR, "unrecognized object type: %d", (int) objtype);
-=======
 
 		case OBJECT_COLUMN:
 		case OBJECT_DATABASE:
@@ -514,7 +506,6 @@ does_not_exist_skipping(ObjectType objtype, Node *object)
 			 * is probably wrong or should be revisited.
 			 */
 			elog(ERROR, "unsupported object type: %d", (int) objtype);
->>>>>>> REL_16_9
 			break;
 
 		case OBJECT_AMOP:
@@ -532,7 +523,10 @@ does_not_exist_skipping(ObjectType objtype, Node *object)
 			/* These are currently not used or needed. */
 			elog(ERROR, "unsupported object type: %d", (int) objtype);
 			break;
-
+		case OBJECT_EXTPROTOCOL:
+			msg = gettext_noop("protocol \"%s\" does not exist, skipping");
+			name = strVal((Value *) object);
+			break;
 			/* no default, to let compiler warn about missing case */
 	}
 	if (!msg)
diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c
index a7fcbdd9f42..e1a42e5ad86 100644
--- a/src/backend/commands/explain.c
+++ b/src/backend/commands/explain.c
@@ -3,13 +3,9 @@
  * explain.c
  *	  Explain query execution plans
  *
-<<<<<<< HEAD
  * Portions Copyright (c) 2005-2010, Greenplum inc
  * Portions Copyright (c) 2012-Present VMware, Inc. or its affiliates.
- * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
-=======
  * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
->>>>>>> REL_16_9
  * Portions Copyright (c) 1994-5, Regents of the University of California
  *
  * IDENTIFICATION
@@ -141,7 +137,6 @@ static void show_windowagg_keys(WindowAggState *waggstate, List *ancestors, Expl
 static void show_incremental_sort_info(IncrementalSortState *incrsortstate,
 									   ExplainState *es);
 static void show_hash_info(HashState *hashstate, ExplainState *es);
-<<<<<<< HEAD
 static void show_runtime_filter_info(RuntimeFilterState *rfstate,
 									 ExplainState *es);
 static void show_pushdown_runtime_filter_info(const char *qlabel,
@@ -150,11 +145,6 @@ static void show_pushdown_runtime_filter_info(const char *qlabel,
 static void show_memoize_info(MemoizeState *mstate, List *ancestors,
 							  ExplainState *es);
 static void show_hashagg_info(AggState *hashstate, ExplainState *es);
-=======
-static void show_memoize_info(MemoizeState *mstate, List *ancestors,
-							  ExplainState *es);
-static void show_hashagg_info(AggState *aggstate, ExplainState *es);
->>>>>>> REL_16_9
 static void show_tidbitmap_info(BitmapHeapScanState *planstate,
 								ExplainState *es);
 static void show_instrumentation_count(const char *qlabel, int which,
@@ -828,28 +818,9 @@ ExplainOnePlan(PlannedStmt *plannedstmt, IntoClause *into, ExplainState *es,
 	/* Create textual dump of plan tree */
 	ExplainPrintPlan(es, queryDesc);
 
-<<<<<<< HEAD
 	if (cursorOptions & CURSOR_OPT_PARALLEL_RETRIEVE)
 		ExplainParallelRetrieveCursor(es, queryDesc);
 
-	/*
-	 * COMPUTE_QUERY_ID_REGRESS means COMPUTE_QUERY_ID_AUTO, but we don't show
-	 * the queryid in any of the EXPLAIN plans to keep stable the results
-	 * generated by regression test suites.
-	 */
-	if (es->verbose && plannedstmt->queryId != UINT64CONST(0) &&
-		compute_query_id != COMPUTE_QUERY_ID_REGRESS)
-	{
-		/*
-		 * Output the queryid as an int64 rather than a uint64 so we match
-		 * what would be seen in the BIGINT pg_stat_statements.queryid column.
-		 */
-		ExplainPropertyInteger("Query Identifier", NULL, (int64)
-							   plannedstmt->queryId, es);
-	}
-
-=======
->>>>>>> REL_16_9
 	/* Show buffer usage in planning */
 	if (bufusage)
 	{
@@ -1071,7 +1042,6 @@ ExplainPrintPlan(ExplainState *es, QueryDesc *queryDesc)
 	 * If requested, include information about GUC parameters with values that
 	 * don't match the built-in defaults.
 	 */
-<<<<<<< HEAD
 	ExplainPrintSettings(es, queryDesc->plannedstmt->planGen);
 }
 
@@ -1139,8 +1109,6 @@ ExplainPrintSliceTable(ExplainState *es, QueryDesc *queryDesc)
 	}
 
 	ExplainCloseGroup("Slice Table", "Slice Table", false, es);
-=======
-	ExplainPrintSettings(es);
 
 	/*
 	 * COMPUTE_QUERY_ID_REGRESS means COMPUTE_QUERY_ID_AUTO, but we don't show
@@ -1157,7 +1125,6 @@ ExplainPrintSliceTable(ExplainState *es, QueryDesc *queryDesc)
 		ExplainPropertyInteger("Query Identifier", NULL, (int64)
 							   queryDesc->plannedstmt->queryId, es);
 	}
->>>>>>> REL_16_9
 }
 
 /*
@@ -2210,13 +2177,11 @@ ExplainNode(PlanState *planstate, List *ancestors,
 					case JOIN_ANTI:
 						jointype = "Anti";
 						break;
-<<<<<<< HEAD
 					case JOIN_LASJ_NOTIN:
 						jointype = "Left Anti Semi (Not-In)";
-=======
+						break;
 					case JOIN_RIGHT_ANTI:
 						jointype = "Right Anti";
->>>>>>> REL_16_9
 						break;
 					default:
 						jointype = "???";
@@ -2816,9 +2781,6 @@ ExplainNode(PlanState *planstate, List *ancestors,
 				show_instrumentation_count("Rows Removed by Filter", 1,
 										   planstate, es);
 			break;
-<<<<<<< HEAD
-#if 0 /* Group node has been disabled in GPDB */
-=======
 		case T_WindowAgg:
 			show_upper_qual(plan->qual, "Filter", planstate, ancestors, es);
 			if (plan->qual)
@@ -2827,7 +2789,7 @@ ExplainNode(PlanState *planstate, List *ancestors,
 			show_upper_qual(((WindowAgg *) plan)->runConditionOrig,
 							"Run Condition", planstate, ancestors, es);
 			break;
->>>>>>> REL_16_9
+#if 0 /* Group node has been disabled in GPDB */
 		case T_Group:
 			show_group_keys(castNode(GroupState, planstate), ancestors, es);
 			show_upper_qual(plan->qual, "Filter", planstate, ancestors, es);
@@ -2880,7 +2842,6 @@ ExplainNode(PlanState *planstate, List *ancestors,
 		case T_Hash:
 			show_hash_info(castNode(HashState, planstate), es);
 			break;
-<<<<<<< HEAD
 		case T_RuntimeFilter:
 			show_runtime_filter_info(castNode(RuntimeFilterState, planstate),
 									 es);
@@ -2912,8 +2873,6 @@ ExplainNode(PlanState *planstate, List *ancestors,
 		case T_Append:
 			show_join_pruning_info(((Append *) plan)->join_prune_paramids, es);
 			break;
-=======
->>>>>>> REL_16_9
 		case T_Memoize:
 			show_memoize_info(castNode(MemoizeState, planstate), ancestors,
 							  es);
diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c
index 3a75eb85ace..bbcbb2b2da3 100644
--- a/src/backend/commands/indexcmds.c
+++ b/src/backend/commands/indexcmds.c
@@ -3,13 +3,9 @@
  * indexcmds.c
  *	  POSTGRES define and remove index code.
  *
-<<<<<<< HEAD
  * Portions Copyright (c) 2005-2010, Greenplum inc
  * Portions Copyright (c) 2012-Present VMware, Inc. or its affiliates.
- * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
-=======
  * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
->>>>>>> REL_16_9
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  *
@@ -35,11 +31,8 @@
 #include "catalog/pg_am.h"
 #include "catalog/pg_collation.h"
 #include "catalog/pg_constraint.h"
-<<<<<<< HEAD
 #include "catalog/pg_directory_table.h"
-=======
 #include "catalog/pg_database.h"
->>>>>>> REL_16_9
 #include "catalog/pg_inherits.h"
 #include "catalog/pg_namespace.h"
 #include "catalog/pg_opclass.h"
@@ -124,16 +117,9 @@ static void RangeVarCallbackForReindexIndex(const RangeVar *relation,
 											Oid relId, Oid oldRelId, void *arg);
 static Oid	ReindexTable(ReindexStmt *stmt, ReindexParams *params,
 						 bool isTopLevel);
-<<<<<<< HEAD
 static void ReindexMultipleTables(ReindexStmt *stmt, ReindexParams *params);
 static void reindex_error_callback(void *args);
 static void ReindexPartitions(ReindexStmt *stmt, Oid relid, ReindexParams *params,
-=======
-static void ReindexMultipleTables(const char *objectName,
-								  ReindexObjectType objectKind, ReindexParams *params);
-static void reindex_error_callback(void *arg);
-static void ReindexPartitions(Oid relid, ReindexParams *params,
->>>>>>> REL_16_9
 							  bool isTopLevel);
 static void ReindexMultipleInternal(ReindexStmt *stmt, List *relids,
 									ReindexParams *params);
@@ -765,7 +751,7 @@ DefineIndex(Oid relationId,
 	LockRelId	heaprelid;
 	LOCKTAG		heaplocktag;
 	LOCKMODE	lockmode;
-<<<<<<< HEAD
+	Snapshot	snapshot;
 	Oid			root_save_userid;
 	int			root_save_sec_context;
 	int			root_save_nestlevel;
@@ -785,12 +771,6 @@ DefineIndex(Oid relationId,
 		 */
 		shouldDispatch = false;
 	}
-=======
-	Snapshot	snapshot;
-	Oid			root_save_userid;
-	int			root_save_sec_context;
-	int			root_save_nestlevel;
->>>>>>> REL_16_9
 
 	root_save_nestlevel = NewGUCNestLevel();
 
@@ -992,13 +972,8 @@ DefineIndex(Oid relationId,
 	{
 		AclResult	aclresult;
 
-<<<<<<< HEAD
-		aclresult = pg_namespace_aclcheck(namespaceId, root_save_userid,
-										  ACL_CREATE);
-=======
 		aclresult = object_aclcheck(NamespaceRelationId, namespaceId, root_save_userid,
 									ACL_CREATE);
->>>>>>> REL_16_9
 		if (aclresult != ACLCHECK_OK)
 			aclcheck_error(aclresult, OBJECT_SCHEMA,
 						   get_namespace_name(namespaceId));
@@ -1041,13 +1016,8 @@ DefineIndex(Oid relationId,
 	{
 		AclResult	aclresult;
 
-<<<<<<< HEAD
-		aclresult = pg_tablespace_aclcheck(tablespaceId, root_save_userid,
-										   ACL_CREATE);
-=======
 		aclresult = object_aclcheck(TableSpaceRelationId, tablespaceId, root_save_userid,
 									ACL_CREATE);
->>>>>>> REL_16_9
 		if (aclresult != ACLCHECK_OK)
 			aclcheck_error(aclresult, OBJECT_TABLESPACE,
 						   get_tablespace_name(tablespaceId));
@@ -1656,7 +1626,6 @@ DefineIndex(Oid relationId,
 	}
 
 	/*
-<<<<<<< HEAD
 	 * Create tag description.
 	 */
 	if (stmt->tags)
@@ -1685,12 +1654,7 @@ DefineIndex(Oid relationId,
 	 * some index function changed a behavior-affecting GUC, e.g. xmloption,
 	 * that affects subsequent steps.  This improves bug-compatibility with
 	 * older PostgreSQL versions.  They did the AtEOXact_GUC() here for the
-	 * purpose of clearing the above default_tablespace change.
-=======
-	 * Roll back any GUC changes executed by index functions, and keep
-	 * subsequent changes local to this command.  This is essential if some
-	 * index function changed a behavior-affecting GUC, e.g. search_path.
->>>>>>> REL_16_9
+	 * purpose of clearing the above default_tablespace change
 	 */
 	AtEOXact_GUC(false, root_save_nestlevel);
 	root_save_nestlevel = NewGUCNestLevel();
@@ -1964,36 +1928,16 @@ DefineIndex(Oid relationId,
 					Assert(GetUserId() == child_save_userid);
 					SetUserIdAndSecContext(root_save_userid,
 										   root_save_sec_context);
-<<<<<<< HEAD
 					DefineIndex(childRelid, childStmt,
-								InvalidOid, /* no predefined OID */
-								indexRelationId,	/* this is our child */
-								createdConstraintId,
-								is_alter_table, check_rights, check_not_in_use,
-								skip_build, quiet);
-					SetUserIdAndSecContext(child_save_userid,
-										   child_save_sec_context);
-=======
-					childAddr =
-						DefineIndex(childRelid, childStmt,
-									InvalidOid, /* no predefined OID */
-									indexRelationId,	/* this is our child */
-									createdConstraintId,
-									-1,
-									is_alter_table, check_rights,
-									check_not_in_use,
-									skip_build, quiet);
+							InvalidOid, /* no predefined OID */
+							indexRelationId,	/* this is our child */
+							createdConstraintId,
+							-1,
+							is_alter_table, check_rights,
+							check_not_in_use,
+							skip_build, quiet);
 					SetUserIdAndSecContext(child_save_userid,
 										   child_save_sec_context);
-
-					/*
-					 * Check if the index just created is valid or not, as it
-					 * could be possible that it has been switched as invalid
-					 * when recursing across multiple partition levels.
-					 */
-					if (!get_index_isvalid(childAddr.objectId))
-						invalidate_parent = true;
->>>>>>> REL_16_9
 				}
 
 				free_attrmap(attmap);
@@ -2067,7 +2011,6 @@ DefineIndex(Oid relationId,
 		return address;
 	}
 
-<<<<<<< HEAD
 	stmt->idxname = indexRelationName;
 	if (shouldDispatch)
 	{
@@ -2091,12 +2034,6 @@ DefineIndex(Oid relationId,
 	SetUserIdAndSecContext(root_save_userid, root_save_sec_context);
 
 	if (!concurrent || Gp_role == GP_ROLE_EXECUTE)
-=======
-	AtEOXact_GUC(false, root_save_nestlevel);
-	SetUserIdAndSecContext(root_save_userid, root_save_sec_context);
-
-	if (!concurrent)
->>>>>>> REL_16_9
 	{
 		/* Close the heap and we're done, in the non-concurrent case */
 		table_close(rel, NoLock);
@@ -3647,11 +3584,7 @@ ReindexMultipleTables(ReindexStmt *stmt, ReindexParams *params)
 	bool		concurrent_warning = false;
 	bool		tablespace_warning = false;
 
-<<<<<<< HEAD
 	Assert(Gp_role != GP_ROLE_EXECUTE);
-	AssertArg(objectName);
-=======
->>>>>>> REL_16_9
 	Assert(objectKind == REINDEX_OBJECT_SCHEMA ||
 		   objectKind == REINDEX_OBJECT_SYSTEM ||
 		   objectKind == REINDEX_OBJECT_DATABASE);
@@ -4275,14 +4208,8 @@ ReindexRelationConcurrently(ReindexStmt *stmt, Oid relationOid, ReindexParams *p
 						{
 							ReindexIndexInfo *idx;
 
-<<<<<<< HEAD
 							/* Save the list of relation OIDs in private context */
 							oldcontext = MemoryContextSwitchTo(private_context);
-=======
-						idx = palloc_object(ReindexIndexInfo);
-						idx->indexId = cellOid;
-						/* other fields set later */
->>>>>>> REL_16_9
 
 							idx = makeNode(ReindexIndexInfo);
 							idx->indexId = cellOid;
@@ -4332,18 +4259,11 @@ ReindexRelationConcurrently(ReindexStmt *stmt, Oid relationOid, ReindexParams *p
 							{
 								ReindexIndexInfo *idx;
 
-<<<<<<< HEAD
 								/*
 								* Save the list of relation OIDs in private
 								* context
 								*/
 								oldcontext = MemoryContextSwitchTo(private_context);
-=======
-							idx = palloc_object(ReindexIndexInfo);
-							idx->indexId = cellOid;
-							indexIds = lappend(indexIds, idx);
-							/* other fields set later */
->>>>>>> REL_16_9
 
 								idx = makeNode(ReindexIndexInfo);
 								idx->indexId = cellOid;
@@ -4430,11 +4350,7 @@ ReindexRelationConcurrently(ReindexStmt *stmt, Oid relationOid, ReindexParams *p
 				 * Save the list of relation OIDs in private context.  Note
 				 * that invalid indexes are allowed here.
 				 */
-<<<<<<< HEAD
 				idx = makeNode(ReindexIndexInfo);
-=======
-				idx = palloc_object(ReindexIndexInfo);
->>>>>>> REL_16_9
 				idx->indexId = relationOid;
 				indexIds = lappend(indexIds, idx);
 				/* other fields set later */
@@ -4944,11 +4860,7 @@ reindex_concurrently_create_indexes(MemoryContext oldcontext,
 		 */
 		oldcontext = MemoryContextSwitchTo(private_context);
 
-<<<<<<< HEAD
 		newidx = makeNode(ReindexIndexInfo);
-=======
-		newidx = palloc_object(ReindexIndexInfo);
->>>>>>> REL_16_9
 		newidx->indexId = newIndexId;
 		newidx->safe = idx->safe;
 		newidx->tableId = idx->tableId;
@@ -4964,13 +4876,8 @@ reindex_concurrently_create_indexes(MemoryContext oldcontext,
 		 */
 		lockrelid = palloc_object(LockRelId);
 		*lockrelid = indexRel->rd_lockInfo.lockRelId;
-<<<<<<< HEAD
 		*relationLocks = lappend(*relationLocks, lockrelid);
 		lockrelid = palloc(sizeof(*lockrelid));
-=======
-		relationLocks = lappend(relationLocks, lockrelid);
-		lockrelid = palloc_object(LockRelId);
->>>>>>> REL_16_9
 		*lockrelid = newIndexRel->rd_lockInfo.lockRelId;
 		*relationLocks = lappend(*relationLocks, lockrelid);
 
diff --git a/src/backend/commands/lockcmds.c b/src/backend/commands/lockcmds.c
index c7f0e41f014..0b9588312ed 100644
--- a/src/backend/commands/lockcmds.c
+++ b/src/backend/commands/lockcmds.c
@@ -111,14 +111,9 @@ RangeVarCallbackForLockTable(const RangeVar *rv, Oid relid, Oid oldrelid,
 		relkind != RELKIND_VIEW && relkind != RELKIND_DIRECTORY_TABLE)
 		ereport(ERROR,
 				(errcode(ERRCODE_WRONG_OBJECT_TYPE),
-<<<<<<< HEAD
-				 errmsg("\"%s\" is not a table, directory table or view",
-						rv->relname)));
-=======
 				 errmsg("cannot lock relation \"%s\"",
 						rv->relname),
 				 errdetail_relkind_not_supported(relkind)));
->>>>>>> REL_16_9
 
 #if 0 /* Upstream code not applicable to GPDB */
 	/*
diff --git a/src/backend/commands/opclasscmds.c b/src/backend/commands/opclasscmds.c
index 55b584988a9..ee7919791aa 100644
--- a/src/backend/commands/opclasscmds.c
+++ b/src/backend/commands/opclasscmds.c
@@ -822,7 +822,6 @@ DefineOpFamily(CreateOpFamilyStmt *stmt)
 				 errmsg("must be superuser to create an operator family")));
 
 	/* Insert pg_opfamily catalog entry */
-<<<<<<< HEAD
 	ObjectAddress objAddr;
 	objAddr = CreateOpFamily(stmt, opfname, namespaceoid, amoid);
 
@@ -837,9 +836,6 @@ DefineOpFamily(CreateOpFamilyStmt *stmt)
 	}
 
 	return objAddr;
-=======
-	return CreateOpFamily(stmt, opfname, namespaceoid, amoid);
->>>>>>> REL_16_9
 }
 
 
diff --git a/src/backend/commands/prepare.c b/src/backend/commands/prepare.c
index 0946d931e88..871b84bf37b 100644
--- a/src/backend/commands/prepare.c
+++ b/src/backend/commands/prepare.c
@@ -63,12 +63,10 @@ PrepareQuery(ParseState *pstate, PrepareStmt *stmt,
 	CachedPlanSource *plansource;
 	Oid		   *argtypes = NULL;
 	int			nargs;
+	Query	   *query;
 	List	   *query_list;
-<<<<<<< HEAD
-	int			i;
+ 	int			i;
 	NodeTag		srctag;  /* GPDB */
-=======
->>>>>>> REL_16_9
 
 	/*
 	 * Disallow empty-string statement name (conflicts with protocol-level
@@ -121,7 +119,6 @@ PrepareQuery(ParseState *pstate, PrepareStmt *stmt,
 	 * information about unknown parameters to be deduced from context.
 	 * Rewrite the query. The result could be 0, 1, or many queries.
 	 */
-<<<<<<< HEAD
 	query = parse_analyze_varparams(rawstmt, pstate->p_sourcetext,
 									&argtypes, &nargs);
 
@@ -166,10 +163,6 @@ PrepareQuery(ParseState *pstate, PrepareStmt *stmt,
 
 	/* Rewrite the query. The result could be 0, 1, or many queries. */
 	query_list = QueryRewrite(query);
-=======
-	query_list = pg_analyze_and_rewrite_varparams(rawstmt, pstate->p_sourcetext,
-												  &argtypes, &nargs, NULL);
->>>>>>> REL_16_9
 
 	/* Finish filling in the CachedPlanSource */
 	CompleteCachedPlan(plansource,
diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c
index e84321a79e6..09732b2b6d9 100644
--- a/src/backend/commands/trigger.c
+++ b/src/backend/commands/trigger.c
@@ -929,8 +929,7 @@ CreateTriggerFiringOn(CreateTrigStmt *stmt, const char *queryString,
 															 CStringGetDatum(trigname));
 	values[Anum_pg_trigger_tgfoid - 1] = ObjectIdGetDatum(funcoid);
 	values[Anum_pg_trigger_tgtype - 1] = Int16GetDatum(tgtype);
-<<<<<<< HEAD
-	
+
 	/*
 	 * Special for Apache Cloudberry: Ignore foreign keys for now. Create
 	 * the triggers to back them as 'disabled'.
@@ -953,12 +952,7 @@ CreateTriggerFiringOn(CreateTrigStmt *stmt, const char *queryString,
 			elog(WARNING, "unrecognized internal trigger function %u", funcoid);
 	}
 	values[Anum_pg_trigger_tgenabled - 1] = CharGetDatum(tgenabled);
-
-	values[Anum_pg_trigger_tgisinternal - 1] = BoolGetDatum(isInternal || in_partition);
-=======
-	values[Anum_pg_trigger_tgenabled - 1] = trigger_fires_when;
 	values[Anum_pg_trigger_tgisinternal - 1] = BoolGetDatum(isInternal);
->>>>>>> REL_16_9
 	values[Anum_pg_trigger_tgconstrrelid - 1] = ObjectIdGetDatum(constrrelid);
 	values[Anum_pg_trigger_tgconstrindid - 1] = ObjectIdGetDatum(indexOid);
 	values[Anum_pg_trigger_tgconstraint - 1] = ObjectIdGetDatum(constraintOid);
@@ -1274,11 +1268,7 @@ CreateTriggerFiringOn(CreateTrigStmt *stmt, const char *queryString,
 
 			CreateTriggerFiringOn(childStmt, queryString,
 								  partdesc->oids[i], refRelOid,
-<<<<<<< HEAD
-								  InvalidOid, indexOnChild,
-=======
 								  InvalidOid, InvalidOid,
->>>>>>> REL_16_9
 								  funcoid, trigoid, qual,
 								  isInternal, true, trigger_fires_when);
 
@@ -1526,14 +1516,9 @@ RangeVarCallbackForRenameTrigger(const RangeVar *rv, Oid relid, Oid oldrelid,
 		form->relkind != RELKIND_PARTITIONED_TABLE)
 		ereport(ERROR,
 				(errcode(ERRCODE_WRONG_OBJECT_TYPE),
-<<<<<<< HEAD
-				 errmsg("\"%s\" is not a table, directory table, view, or foreign table",
-						rv->relname)));
-=======
 				 errmsg("relation \"%s\" cannot have triggers",
 						rv->relname),
 				 errdetail_relkind_not_supported(form->relkind)));
->>>>>>> REL_16_9
 
 	/* you must own the table to rename one of its triggers */
 	if (!object_ownercheck(RelationRelationId, relid, GetUserId()))
@@ -2640,21 +2625,12 @@ ExecARInsertTriggers(EState *estate, ResultRelInfo *relinfo,
 
 	if ((trigdesc && trigdesc->trig_insert_after_row) ||
 		(transition_capture && transition_capture->tcs_insert_new_table))
-<<<<<<< HEAD
-	{
-		AfterTriggerSaveEvent(estate, relinfo, TRIGGER_EVENT_INSERT,
-							  true, NULL, slot,
-							  recheckIndexes, NULL,
-							  transition_capture);
-	}
-=======
 		AfterTriggerSaveEvent(estate, relinfo, NULL, NULL,
 							  TRIGGER_EVENT_INSERT,
 							  true, NULL, slot,
 							  recheckIndexes, NULL,
 							  transition_capture,
 							  false);
->>>>>>> REL_16_9
 }
 
 bool
@@ -5387,23 +5363,17 @@ AfterTriggerFreeQuery(AfterTriggersQueryData *qs)
 		ts = table->old_upd_tuplestore;
 		table->old_upd_tuplestore = NULL;
 		if (ts)
-<<<<<<< HEAD
 			release_or_prolong_tuplestore(ts, table->prolonged);
-		ts = table->new_tuplestore;
-		table->new_tuplestore = NULL;
-=======
-			tuplestore_end(ts);
 		ts = table->new_upd_tuplestore;
 		table->new_upd_tuplestore = NULL;
 		if (ts)
-			tuplestore_end(ts);
+			release_or_prolong_tuplestore(ts, table->prolonged);
 		ts = table->old_del_tuplestore;
 		table->old_del_tuplestore = NULL;
 		if (ts)
-			tuplestore_end(ts);
+			release_or_prolong_tuplestore(ts, table->prolonged);
 		ts = table->new_ins_tuplestore;
 		table->new_ins_tuplestore = NULL;
->>>>>>> REL_16_9
 		if (ts)
 			release_or_prolong_tuplestore(ts, table->prolonged);
 		if (table->storeslot)
diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c
index 474a97763dd..a872ce5028a 100644
--- a/src/backend/commands/variable.c
+++ b/src/backend/commands/variable.c
@@ -24,12 +24,9 @@
 #include "access/xlog.h"
 #include "access/xlogprefetcher.h"
 #include "catalog/pg_authid.h"
-<<<<<<< HEAD
 #include "cdb/cdbvars.h"
 #include "commands/variable.h"
-=======
 #include "common/string.h"
->>>>>>> REL_16_9
 #include "mb/pg_wchar.h"
 #include "miscadmin.h"
 #include "postmaster/postmaster.h"
diff --git a/src/backend/commands/view.c b/src/backend/commands/view.c
index ed7a47a97cd..5b96c37956e 100644
--- a/src/backend/commands/view.c
+++ b/src/backend/commands/view.c
@@ -3,13 +3,9 @@
  * view.c
  *	  use rewrite rules to construct views
  *
-<<<<<<< HEAD
  * Portions Copyright (c) 2006-2008, Greenplum inc
  * Portions Copyright (c) 2012-Present VMware, Inc. or its affiliates.
- * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
-=======
  * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
->>>>>>> REL_16_9
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  *
@@ -402,15 +398,11 @@ DefineView(ViewStmt *stmt, const char *queryString,
 		rawstmt->stmt_location = stmt_location;
 		rawstmt->stmt_len = stmt_len;
 
-<<<<<<< HEAD
-		viewParse = parse_analyze(rawstmt, queryString, NULL, 0, NULL);
+		viewParse = parse_analyze_fixedparams(rawstmt, queryString, NULL, 0, NULL);
 	}
 	else
 		viewParse = (Query *) stmt->query;
 	viewParse_orig = copyObject(viewParse);
-=======
-	viewParse = parse_analyze_fixedparams(rawstmt, queryString, NULL, 0, NULL);
->>>>>>> REL_16_9
 
 	/*
 	 * The grammar should ensure that the result is a single SELECT Query.
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
index 35a2985878c..120a459f2d5 100644
--- a/src/include/commands/copyto_internal.h
+++ b/src/include/commands/copyto_internal.h
@@ -53,6 +53,7 @@ typedef struct CopyToStateData
 	char	   *filename;		/* filename, or NULL for STDOUT */
 	char	   *dirfilename;	/* filename of directory table, not NULL for copy directory table to */
 	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
 
 	CopyFormatOptions opts;
 	Node	   *whereClause;	/* WHERE condition (or NULL) */


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