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 3ff2d7bc157 Fix some compile errors in executor
3ff2d7bc157 is described below
commit 3ff2d7bc157b55e02fbaecf1c117a96fd1c62858
Author: Jinbao Chen <[email protected]>
AuthorDate: Sun Sep 28 10:14:39 2025 +0800
Fix some compile errors in executor
---
src/backend/executor/execExpr.c | 22 +++++-----
src/backend/executor/execIndexing.c | 9 +++-
src/backend/executor/execMain.c | 4 --
src/backend/executor/execPartition.c | 5 ++-
src/backend/executor/execUtils.c | 6 ---
src/backend/executor/nodeAppend.c | 7 ++++
src/backend/executor/nodeHash.c | 24 -----------
src/backend/executor/nodeHashjoin.c | 7 ++--
src/backend/executor/nodeIndexonlyscan.c | 4 +-
src/backend/executor/nodeMemoize.c | 2 +-
src/backend/utils/sort/logtape.c | 71 --------------------------------
src/include/catalog/pg_directory_table.h | 3 +-
src/include/executor/nodeHash.h | 1 +
src/include/nodes/nodes.h | 1 +
src/include/portability/instr_time.h | 5 +--
src/include/postgres.h | 8 ++++
src/include/utils/logtape.h | 4 +-
src/include/utils/resscheduler.h | 2 +-
18 files changed, 51 insertions(+), 134 deletions(-)
diff --git a/src/backend/executor/execExpr.c b/src/backend/executor/execExpr.c
index 3de64637906..de93d93958f 100644
--- a/src/backend/executor/execExpr.c
+++ b/src/backend/executor/execExpr.c
@@ -3727,7 +3727,7 @@ ExecBuildAggTrans(AggState *aggstate, AggStatePerPhase
phase,
ExprState *state = makeNode(ExprState);
PlanState *parent = &aggstate->ss.ps;
ExprEvalStep scratch = {0};
- LastAttnumInfo deform = {0, 0, 0};
+ ExprSetupInfo deform = {0, 0, 0, NIL};
state->expr = (Expr *) aggstate;
state->parent = parent;
@@ -3745,16 +3745,16 @@ ExecBuildAggTrans(AggState *aggstate, AggStatePerPhase
phase,
if (!bms_is_member(transno, aggstate->aggs_used))
continue;
- get_last_attnums_walker((Node *)
pertrans->aggref->aggdirectargs,
- &deform);
- get_last_attnums_walker((Node *) pertrans->aggref->args,
- &deform);
- get_last_attnums_walker((Node *) pertrans->aggref->aggorder,
- &deform);
- get_last_attnums_walker((Node *) pertrans->aggref->aggdistinct,
- &deform);
- get_last_attnums_walker((Node *) pertrans->aggref->aggfilter,
- &deform);
+ expr_setup_walker((Node *) pertrans->aggref->aggdirectargs,
+ &deform);
+ expr_setup_walker((Node *) pertrans->aggref->args,
+ &deform);
+ expr_setup_walker((Node *) pertrans->aggref->aggorder,
+ &deform);
+ expr_setup_walker((Node *) pertrans->aggref->aggdistinct,
+ &deform);
+ expr_setup_walker((Node *) pertrans->aggref->aggfilter,
+ &deform);
if (aggstate->AggExprId_AttrNum > 0)
deform.last_outer = Max(deform.last_outer,
diff --git a/src/backend/executor/execIndexing.c
b/src/backend/executor/execIndexing.c
index 156e8d2b8a9..689bb6f4825 100644
--- a/src/backend/executor/execIndexing.c
+++ b/src/backend/executor/execIndexing.c
@@ -136,6 +136,10 @@ static bool check_exclusion_or_unique_constraint(Relation
heap, Relation index,
static bool index_recheck_constraint(Relation index, Oid *constr_procs,
Datum
*existing_values, bool *existing_isnull,
Datum
*new_values);
+static bool index_unchanged_by_update(ResultRelInfo *resultRelInfo, EState
*estate,
+
IndexInfo *indexInfo, Relation indexRelation);
+static bool index_expression_changed_walker(Node *node,
+
Bitmapset *allUpdatedCols);
/* ----------------------------------------------------------------
* ExecOpenIndices
@@ -431,7 +435,10 @@ ExecInsertIndexTuples(ResultRelInfo *resultRelInfo,
* This is a workaround for a bug in PostgreSQL 14. In
practice this
* won't make much difference for current users of the hint.
*/
- indexUnchanged = update;
+ indexUnchanged = update &&
index_unchanged_by_update(resultRelInfo,
+
estate,
+
indexInfo,
+
indexRelation);
satisfiesConstraint =
index_insert(indexRelation, /* index relation */
diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c
index c182a406cb3..945bfdc0beb 100644
--- a/src/backend/executor/execMain.c
+++ b/src/backend/executor/execMain.c
@@ -1742,9 +1742,6 @@ ExecCheckXactReadOnly(PlannedStmt *plannedstmt)
continue;
if (isTempNamespace(get_rel_namespace(perminfo->relid)))
- continue;
-
- if (isTempNamespace(get_rel_namespace(rte->relid)))
{
ExecutorMarkTransactionDoesWrites();
continue;
@@ -2842,7 +2839,6 @@ ExecutePlan(QueryDesc *queryDesc,
{
EState *estate = queryDesc->estate;
PlanState *planstate = queryDesc->planstate;
- bool use_parallel_mode;
TupleTableSlot *slot;
uint64 current_tuple_count;
diff --git a/src/backend/executor/execPartition.c
b/src/backend/executor/execPartition.c
index 01e1dbffd05..7bad41f294e 100644
--- a/src/backend/executor/execPartition.c
+++ b/src/backend/executor/execPartition.c
@@ -1899,7 +1899,8 @@ ExecInitPartitionPruning(PlanState *planstate,
* Perform an initial partition prune pass, if required.
*/
if (prunestate->do_initial_prune)
- *initially_valid_subplans =
ExecFindMatchingSubPlans(prunestate, true);
+ *initially_valid_subplans =
ExecFindMatchingSubPlans(prunestate, true,
+
NULL, -1, NULL);
else
{
/* No pruning, so we'll need to initialize all subplans */
@@ -2382,7 +2383,7 @@ ExecAddMatchingSubPlans(PartitionPruneState *prunestate,
Bitmapset *result)
{
Bitmapset *thisresult;
- thisresult = ExecFindMatchingSubPlans(prunestate, NULL, -1, NIL);
+ thisresult = ExecFindMatchingSubPlans(prunestate, true, NULL, -1, NIL);
result = bms_add_members(result, thisresult);
diff --git a/src/backend/executor/execUtils.c b/src/backend/executor/execUtils.c
index f5631dfc938..f9d5719fbe3 100644
--- a/src/backend/executor/execUtils.c
+++ b/src/backend/executor/execUtils.c
@@ -2144,9 +2144,6 @@ void mppExecutorFinishup(QueryDesc *queryDesc)
if (ProcessDispatchResult_hook)
ProcessDispatchResult_hook(ds);
- /* collect pgstat from QEs for current transaction level */
- pgstat_combine_from_qe(pr, primaryWriterSliceIndex);
-
/* get num of rows processed from writer QEs. */
estate->es_processed +=
cdbdisp_sumCmdTuples(pr, primaryWriterSliceIndex);
@@ -2222,9 +2219,6 @@ uint64 mppExecutorWait(QueryDesc *queryDesc)
if (ProcessDispatchResult_hook)
ProcessDispatchResult_hook(ds);
- /* collect pgstat from QEs for current transaction level */
- pgstat_combine_from_qe(pr, primaryWriterSliceIndex);
-
if (queryDesc->planstate->instrument &&
queryDesc->planstate->instrument->need_cdb)
{
cdbexplain_recvExecStats(queryDesc->planstate,
ds->primaryResults,
diff --git a/src/backend/executor/nodeAppend.c
b/src/backend/executor/nodeAppend.c
index 54c8a4687b7..47f5773042f 100644
--- a/src/backend/executor/nodeAppend.c
+++ b/src/backend/executor/nodeAppend.c
@@ -563,6 +563,7 @@ choose_next_subplan_locally(AppendState *node)
{
int whichplan = node->as_whichplan;
int nextplan;
+ Append *plan = (Append *) node->ps.plan;
/* We should never be called when there are no subplans */
Assert(node->as_nplans > 0);
@@ -1114,6 +1115,12 @@ ExecAppendAsyncEventWait(AppendState *node)
WAIT_EVENT_APPEND_READY);
}
}
+ PG_FINALLY();
+ {
+ FreeWaitEventSet(node->as_eventset);
+ node->as_eventset = NULL;
+ }
+ PG_END_TRY();
/*
* No need for further processing if there are no configured events
other
diff --git a/src/backend/executor/nodeHash.c b/src/backend/executor/nodeHash.c
index 22a8f0b3589..84af1afa47c 100644
--- a/src/backend/executor/nodeHash.c
+++ b/src/backend/executor/nodeHash.c
@@ -1042,7 +1042,6 @@ ExecChooseHashTableSize(double ntuples, int tupwidth,
bool useskew,
* more buckets if we have memory to spare */
double dbuckets_lower;
double dbuckets_upper;
- double dbuckets;
/* divide our tuple row-count estimate by our the number of
* tuples we'd like in a bucket: this produces a small bucket
@@ -1415,7 +1414,6 @@ ExecParallelHashIncreaseNumBatches(HashJoinTable
hashtable)
double dtuples;
double dbuckets;
int new_nbuckets;
- uint32 max_buckets;
/*
* We probably also need a smaller
bucket array. How many
@@ -4315,28 +4313,6 @@ get_hash_memory_limit(void)
return (size_t) mem_limit;
}
-/*
- * Convert the hash memory limit to an integer number of kilobytes,
- * that is something comparable to work_mem. Like work_mem, we clamp
- * the result to ensure that multiplying it by 1024 fits in a long int.
- *
- * This is deprecated since it may understate the actual memory limit.
- * It is unused in core and will eventually be removed.
- */
-size_t
-get_hash_memory_limit(void)
-{
- double mem_limit;
-
- /* Do initial calculation in double arithmetic */
- mem_limit = (double) work_mem * hash_mem_multiplier * 1024.0;
-
- /* Clamp in case it doesn't fit in size_t */
- mem_limit = Min(mem_limit, (double) SIZE_MAX);
-
- return (size_t) mem_limit;
-}
-
/*
* Convert AttrFilter to ScanKeyData and send these runtime filters to the
* target node(seqscan).
diff --git a/src/backend/executor/nodeHashjoin.c
b/src/backend/executor/nodeHashjoin.c
index 6c97a4bd48e..acfd17a9923 100644
--- a/src/backend/executor/nodeHashjoin.c
+++ b/src/backend/executor/nodeHashjoin.c
@@ -1564,7 +1564,7 @@ ExecParallelHashJoinNewBatch(HashJoinState *hjstate)
if (hashtable->nbatch == 1 && batchno == 0 &&
((HashJoin *)hjstate->js.ps.plan)->batch0_barrier)
{
- Assert(phase == PHJ_BATCH_PROBING);
+ Assert(phase == PHJ_BATCH_PROBE);
batch0_barrier = &pstate->batch0_barrier;
BarrierArriveAndWait(batch0_barrier,
WAIT_EVENT_PARALLEL_FINISH);
@@ -2303,6 +2303,7 @@ CreateRuntimeFilter(HashJoinState* hjstate)
HashState *hstate;
AttrFilter *attr_filter;
ListCell *lc;
+ ListCell *lc2;
List *targets;
/*
@@ -2348,9 +2349,9 @@ CreateRuntimeFilter(HashJoinState* hjstate)
if (lattno == -1 || targets == NULL)
continue;
- foreach(lc, targets)
+ foreach(lc2, targets)
{
- PlanState *target = lfirst(lc);
+ PlanState *target = lfirst(lc2);
Assert(IsA(target, SeqScanState));
attr_filter = CreateAttrFilter(target, lattno, rattno,
diff --git a/src/backend/executor/nodeIndexonlyscan.c
b/src/backend/executor/nodeIndexonlyscan.c
index da047413c0b..2dfffadb40f 100644
--- a/src/backend/executor/nodeIndexonlyscan.c
+++ b/src/backend/executor/nodeIndexonlyscan.c
@@ -540,6 +540,7 @@ ExecInitIndexOnlyScanForPartition(IndexOnlyScan *node,
EState *estate, int eflag
{
IndexOnlyScanState *indexstate;
LOCKMODE lockmode;
+ Relation indexRelation;
TupleDesc tupDesc;
int indnkeyatts;
int namecount;
@@ -610,7 +611,8 @@ ExecInitIndexOnlyScanForPartition(IndexOnlyScan *node,
EState *estate, int eflag
/* Open the index relation. */
lockmode = exec_rt_fetch(node->scan.scanrelid, estate)->rellockmode;
- indexstate->ioss_RelationDesc = index_open(indexid, lockmode);
+ indexRelation = index_open(indexid, lockmode);
+ indexstate->ioss_RelationDesc = indexRelation;
/*
* Initialize index-specific scan state
diff --git a/src/backend/executor/nodeMemoize.c
b/src/backend/executor/nodeMemoize.c
index 27234ebaa11..ccf3df74225 100644
--- a/src/backend/executor/nodeMemoize.c
+++ b/src/backend/executor/nodeMemoize.c
@@ -248,7 +248,7 @@ MemoizeHash_equal(struct memoize_hash *tb, const MemoizeKey
*key1,
attr->attbyval,
attr->attlen))
return false;
}
- return true
+ return true;
}
else
{
diff --git a/src/backend/utils/sort/logtape.c b/src/backend/utils/sort/logtape.c
index 96a8dac350a..8bf97b4538b 100644
--- a/src/backend/utils/sort/logtape.c
+++ b/src/backend/utils/sort/logtape.c
@@ -737,77 +737,6 @@ ltsCreateTape(LogicalTapeSet *lts)
return lt;
}
-/*
- * Close a logical tape.
- *
- * Each tape is initialized in write state. Serial callers pass ntapes,
- * NULL argument for shared, and -1 for worker. Parallel worker callers
- * pass ntapes, a shared file handle, NULL shared argument, and their own
- * worker number. Leader callers, which claim shared worker tapes here,
- * must supply non-sentinel values for all arguments except worker number,
- * which should be -1.
- *
- * Leader caller is passing back an array of metadata each worker captured
- * when LogicalTapeFreeze() was called for their final result tapes. Passed
- * tapes array is actually sized ntapes - 1, because it includes only
- * worker tapes, whereas leader requires its own leader tape. Note that we
- * rely on the assumption that reclaimed worker tapes will only be read
- * from once by leader, and never written to again (tapes are initialized
- * for writing, but that's only to be consistent). Leader may not write to
- * its own tape purely due to a restriction in the shared buffile
- * infrastructure that may be lifted in the future.
- */
-LogicalTapeSet *
-LogicalTapeSetCreate(int ntapes, bool preallocate, TapeShare *shared,
- SharedFileSet *fileset, int worker)
-{
- LogicalTapeSet *lts;
- int i;
-
- /*
- * Create top-level struct including per-tape LogicalTape structs.
- */
- Assert(ntapes > 0);
- lts = (LogicalTapeSet *) palloc(sizeof(LogicalTapeSet));
- lts->nBlocksAllocated = 0L;
- lts->nBlocksWritten = 0L;
- lts->nHoleBlocks = 0L;
- lts->forgetFreeSpace = false;
- lts->freeBlocksLen = 32; /* reasonable initial guess */
- lts->freeBlocks = (long *) palloc(lts->freeBlocksLen * sizeof(long));
- lts->nFreeBlocks = 0;
- lts->enable_prealloc = preallocate;
- lts->nTapes = ntapes;
- lts->tapes = (LogicalTape *) palloc(ntapes * sizeof(LogicalTape));
-
- for (i = 0; i < ntapes; i++)
- ltsInitTape(<s->tapes[i]);
-
- /*
- * Create temp BufFile storage as required.
- *
- * Leader concatenates worker tapes, which requires special adjustment
to
- * final tapeset data. Things are simpler for the worker case and the
- * serial case, though. They are generally very similar -- workers use
a
- * shared fileset, whereas serial sorts use a conventional serial
BufFile.
- */
- if (shared)
- ltsConcatWorkerTapes(lts, shared, fileset);
- else if (fileset)
- {
- char filename[MAXPGPATH];
- workfile_set *work_set;
-
- pg_itoa(worker, filename);
- work_set = workfile_mgr_create_set("LogicalTape", filename,
false /* hold pin */);
- lts->pfile = BufFileCreateShared(fileset, filename, work_set);
- }
- else
- lts->pfile = BufFileCreateTemp("LogicalTape", false);
-
- return lts;
-}
-
/*
* Close a logical tape set and release all resources.
* Note: This doesn't return any blocks to the free list! You must read
diff --git a/src/include/catalog/pg_directory_table.h
b/src/include/catalog/pg_directory_table.h
index fb8c33d1711..4c1c3774b0c 100644
--- a/src/include/catalog/pg_directory_table.h
+++ b/src/include/catalog/pg_directory_table.h
@@ -49,8 +49,7 @@ typedef FormData_pg_directory_table *Form_pg_directory_table;
DECLARE_TOAST(pg_directory_table, 8546, 8547);
-DECLARE_UNIQUE_INDEX_PKEY(pg_directory_table_relid_index, 8548, on
pg_directory_table using btree(dtrelid oid_ops));
-#define DirectoryTableRelidIndexId 8548
+DECLARE_UNIQUE_INDEX_PKEY(pg_directory_table_relid_index, 8548,
DirectoryTableRelidIndexId, on pg_directory_table using btree(dtrelid oid_ops));
typedef struct DirectoryTable
{
diff --git a/src/include/executor/nodeHash.h b/src/include/executor/nodeHash.h
index 5f4f491a58b..d04941b27a3 100644
--- a/src/include/executor/nodeHash.h
+++ b/src/include/executor/nodeHash.h
@@ -91,6 +91,7 @@ extern void ExecHashAccumInstrumentation(HashInstrumentation
*instrument,
extern void ExecHashTableExplainInit(HashState *hashState, HashJoinState
*hjstate,
HashJoinTable hashtable);
extern void ExecHashTableExplainBatchEnd(HashState *hashState, HashJoinTable
hashtable);
+extern void ExecHashTableReset(HashState *hashState, HashJoinTable hashtable);
static inline int
ExecHashRowSize(int tupwidth)
diff --git a/src/include/nodes/nodes.h b/src/include/nodes/nodes.h
index a61a77ea51a..5dbb522a1d0 100644
--- a/src/include/nodes/nodes.h
+++ b/src/include/nodes/nodes.h
@@ -616,6 +616,7 @@ typedef enum NodeTag
T_Constraint,
T_DefElem,
T_RangeTblEntry,
+ T_RTEPermissionInfo,
T_RangeTblFunction,
T_TableSampleClause,
T_WithCheckOption,
diff --git a/src/include/portability/instr_time.h
b/src/include/portability/instr_time.h
index 4cae6a12e34..1f6e51ae75e 100644
--- a/src/include/portability/instr_time.h
+++ b/src/include/portability/instr_time.h
@@ -122,11 +122,8 @@ pg_clock_gettime_ns(void)
#define INSTR_TIME_SET_CURRENT(t) \
((t) = pg_clock_gettime_ns())
-#ifdef CLOCK_MONOTONIC_COARSE
-#define INSTR_TIME_SET_CURRENT_COARSE(t) ((void)
clock_gettime(CLOCK_MONOTONIC_COARSE, &(t)))
-#else
#define INSTR_TIME_SET_CURRENT_COARSE(t) INSTR_TIME_SET_CURRENT(t)
-#endif
+
#define INSTR_TIME_ASSIGN(x,y) ((x).tv_sec = (y).tv_sec, (x).tv_nsec =
(y).tv_nsec)
diff --git a/src/include/postgres.h b/src/include/postgres.h
index 2fcbceba7bd..06c13d296b5 100644
--- a/src/include/postgres.h
+++ b/src/include/postgres.h
@@ -538,6 +538,14 @@ Float8GetDatum(float8 X)
extern Datum Float8GetDatum(float8 X);
#endif
+
+static inline bool IsAligned(void *p, int align)
+{
+ int64 i = (int64) PointerGetDatum(p);
+ return ((i & (align-1)) == 0);
+}
+
+
/* ----------------------------------------------------------------
* Section 3: exception handling backend
support
* ----------------------------------------------------------------
diff --git a/src/include/utils/logtape.h b/src/include/utils/logtape.h
index ebb448cb5e7..34fa2602f41 100644
--- a/src/include/utils/logtape.h
+++ b/src/include/utils/logtape.h
@@ -61,9 +61,7 @@ typedef struct TapeShare
extern char * LogicalTapeGetBufFilename(const LogicalTapeSet *lts);
-extern LogicalTapeSet *LogicalTapeSetCreate(int ntapes, bool preallocate,
-
TapeShare *shared,
-
SharedFileSet *fileset, int worker);
+extern LogicalTapeSet *LogicalTapeSetCreate(bool preallocate, SharedFileSet
*fileset, int worker);
extern void LogicalTapeClose(LogicalTape *lt);
extern void LogicalTapeSetClose(LogicalTapeSet *lts);
extern LogicalTape *LogicalTapeCreate(LogicalTapeSet *lts);
diff --git a/src/include/utils/resscheduler.h b/src/include/utils/resscheduler.h
index aa815c7002c..e0194fc6bc8 100644
--- a/src/include/utils/resscheduler.h
+++ b/src/include/utils/resscheduler.h
@@ -94,7 +94,7 @@ typedef struct ResPortalIncrement
uint32 portalId; /* Portal Id */
bool isHold; /* Holdable
cursor? */
bool isCommitted; /* 1st commit complete?
*/
- SHM_QUEUE portalLink; /* List link in
PROCLOCKS list
+ dlist_head portalLink; /* List link in
PROCLOCKS list
of ResPortalIncrements. */
/* The increments - use Cost as it has a suitably large range. */
Cost increments[NUM_RES_LIMIT_TYPES];
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]