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 9f4f665ab1a Fix some compile error for header file
9f4f665ab1a is described below
commit 9f4f665ab1a7b2af5af0ff3ba29b48a295dfcf61
Author: Jinbao Chen <[email protected]>
AuthorDate: Mon Sep 22 18:15:42 2025 +0800
Fix some compile error for header file
---
src/backend/Makefile | 4 +-
src/backend/access/transam/xloginsert.c | 6 +-
src/backend/nodes/Makefile | 70 ---
src/include/access/htup_details.h | 83 ---
src/include/access/xloginsert.h | 4 +-
src/include/access/xlogreader.h | 9 -
.../catalog/gp_segment_configuration_indexing.h | 6 +-
src/include/nodes/nodes.h | 660 ++++++++++++++++++++-
src/include/nodes/pathnodes.h | 17 -
src/include/nodes/plannodes.h | 1 -
src/include/nodes/value.h | 10 +
src/include/port/pg_bitutils.h | 20 -
src/include/portability/instr_time.h | 120 ----
src/include/storage/lock.h | 2 +-
src/include/tcop/cmdtag.h | 2 +-
src/include/tcop/dest.h | 4 -
src/include/utils/portal.h | 3 -
src/include/utils/rel.h | 3 +-
18 files changed, 682 insertions(+), 342 deletions(-)
diff --git a/src/backend/Makefile b/src/backend/Makefile
index 3b07e9b435e..fb9d5e5aceb 100644
--- a/src/backend/Makefile
+++ b/src/backend/Makefile
@@ -168,8 +168,8 @@ submake-catalog-headers:
$(MAKE) -C catalog distprep generated-header-symlinks
# run this unconditionally to avoid needing to know its dependencies here:
-submake-nodes-headers:
- $(MAKE) -C nodes distprep generated-header-symlinks
+#submake-nodes-headers:
+# $(MAKE) -C nodes distprep generated-header-symlinks
# run this unconditionally to avoid needing to know its dependencies here:
submake-utils-headers:
diff --git a/src/backend/access/transam/xloginsert.c
b/src/backend/access/transam/xloginsert.c
index e63cf0c3a56..6a218b99aac 100644
--- a/src/backend/access/transam/xloginsert.c
+++ b/src/backend/access/transam/xloginsert.c
@@ -1422,7 +1422,7 @@ InitXLogInsert(void)
* Get RelFileNode/ForkNumber/BlockNumber of XLog register block if any.
*/
bool
-GetXLogRegisterBufferTagIfAny(RelFileNode *rnode, ForkNumber *forknum,
BlockNumber *blkno)
+GetXLogRegisterBufferTagIfAny(RelFileLocator *rnode, ForkNumber *forknum,
BlockNumber *blkno)
{
for (int i = 0; i < max_registered_block_id; i++)
{
@@ -1443,12 +1443,12 @@ GetNumXLogRegisterBuffers(void)
* Caller should make sure the block_id is valid(block_id <
max_registered_block_id).
*/
bool
-GetXLogRegisterBuffer(int block_id, RelFileNode *rnode, ForkNumber *forknum,
BlockNumber *blkno, Page *page)
+GetXLogRegisterBuffer(int block_id, RelFileLocator *rnode, ForkNumber
*forknum, BlockNumber *blkno, Page *page)
{
if (registered_buffers[block_id].in_use)
{
if (rnode)
- *rnode = registered_buffers[block_id].rnode;
+ *rnode = registered_buffers[block_id].rlocator;
if (forknum)
*forknum = registered_buffers[block_id].forkno;
if (blkno)
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index aa3ae2f8f31..93dc5538c96 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -12,8 +12,6 @@ subdir = src/backend/nodes
top_builddir = ../../..
include $(top_builddir)/src/Makefile.global
-override CPPFLAGS := -I. -I$(srcdir) $(CPPFLAGS)
-
OBJS = \
bitmapset.o \
copyfuncs.o \
@@ -21,14 +19,12 @@ OBJS = \
extensible.o \
list.o \
makefuncs.o \
- multibitmapset.o \
nodeFuncs.o \
nodes.o \
outfast.o \
outfuncs.o \
params.o \
print.o \
- queryjumblefuncs.o \
read.o \
readfast.o \
readfuncs.o \
@@ -40,69 +36,3 @@ readfast.o: readfuncs.c readfast.c readfuncs_common.c
outfast.o: outfuncs.c outfast.c outfuncs_common.c
include $(top_srcdir)/src/backend/common.mk
-
-# The principal node-defining headers are listed in their inclusion order,
-# to ensure cross-file subtyping works correctly. The rest can just be
-# listed alphabetically.
-# Caution: re-ordering this list risks ABI breakage!
-node_headers = \
- nodes/nodes.h \
- nodes/primnodes.h \
- nodes/parsenodes.h \
- nodes/pathnodes.h \
- nodes/plannodes.h \
- nodes/execnodes.h \
- access/amapi.h \
- access/sdir.h \
- access/tableam.h \
- access/tsmapi.h \
- commands/event_trigger.h \
- commands/trigger.h \
- executor/tuptable.h \
- foreign/fdwapi.h \
- nodes/bitmapset.h \
- nodes/extensible.h \
- nodes/lockoptions.h \
- nodes/miscnodes.h \
- nodes/replnodes.h \
- nodes/supportnodes.h \
- nodes/value.h \
- utils/rel.h
-
-# see also catalog/Makefile for an explanation of these make rules
-
-all: distprep generated-header-symlinks
-
-distprep: node-support-stamp
-
-.PHONY: generated-header-symlinks
-
-generated-header-symlinks: $(top_builddir)/src/include/nodes/header-stamp
-
-# node-support-stamp records the last time we ran gen_node_support.pl.
-# We don't rely on the timestamps of the individual output files,
-# because the Perl script won't update them if they didn't change (to
-# avoid unnecessary recompiles).
-node-support-stamp: gen_node_support.pl $(addprefix
$(top_srcdir)/src/include/,$(node_headers))
- $(PERL) $^
- touch $@
-
-# These generated headers must be symlinked into builddir/src/include/,
-# using absolute links for the reasons explained in src/backend/Makefile.
-# We use header-stamp to record that we've done this because the symlinks
-# themselves may appear older than node-support-stamp.
-$(top_builddir)/src/include/nodes/header-stamp: node-support-stamp
- prereqdir=`cd '$(dir $<)' >/dev/null && pwd` && \
- cd '$(dir $@)' && for file in nodetags.h; do \
- rm -f $$file && $(LN_S) "$$prereqdir/$$file" . ; \
- done
- touch $@
-
-copyfuncs.o: copyfuncs.c copyfuncs.funcs.c copyfuncs.switch.c |
node-support-stamp
-equalfuncs.o: equalfuncs.c equalfuncs.funcs.c equalfuncs.switch.c |
node-support-stamp
-outfuncs.o: outfuncs.c outfuncs.funcs.c outfuncs.switch.c | node-support-stamp
-queryjumblefuncs.o: queryjumblefuncs.c queryjumblefuncs.funcs.c
queryjumblefuncs.switch.c | node-support-stamp
-readfuncs.o: readfuncs.c readfuncs.funcs.c readfuncs.switch.c |
node-support-stamp
-
-maintainer-clean: clean
- rm -f node-support-stamp $(addsuffix funcs.funcs.c,copy equal out
queryjumble read) $(addsuffix funcs.switch.c,copy equal out queryjumble read)
nodetags.h
diff --git a/src/include/access/htup_details.h
b/src/include/access/htup_details.h
index 8023022d769..cb368894656 100644
--- a/src/include/access/htup_details.h
+++ b/src/include/access/htup_details.h
@@ -713,89 +713,6 @@ extern Datum heap_getsysattr(HeapTuple tup, int attnum,
TupleDesc tupleDesc,
extern Datum getmissingattr(TupleDesc tupleDesc,
int attnum, bool
*isnull);
-/* ----------------
- * fastgetattr
- *
- * Fetch a user attribute's value as a Datum (might be either a
- * value, or a pointer into the data area of the tuple).
- *
- * This must not be used when a system attribute might be
requested.
- * Furthermore, the passed attnum MUST be valid. Use
heap_getattr()
- * instead, if in doubt.
- *
- * This gets called many times, so we macro the cacheable and NULL
- * lookups, and call nocachegetattr() for the rest.
- *
- * CDB: Implemented as inline function instead of macro.
- * ----------------
- */
-static inline Datum
-fastgetattr(HeapTuple tup, int attnum, TupleDesc tupleDesc, bool *isnull)
-{
- Datum result;
- Form_pg_attribute att = TupleDescAttr(tupleDesc, attnum - 1);
-
- Assert(attnum > 0);
-
- *isnull = false;
-
- if (HeapTupleNoNulls(tup))
- {
- if (att->attcacheoff >= 0)
- result = fetchatt(att,
- (char *)tup->t_data +
tup->t_data->t_hoff +
- att->attcacheoff);
- else
- result = nocachegetattr(tup, attnum, tupleDesc);
- }
- else if (att_isnull(attnum-1, tup->t_data->t_bits))
- {
- result = Int32GetDatum(0);
- *isnull = true;
- }
- else
- result = nocachegetattr(tup, attnum, tupleDesc);
-
- return result;
-} /* fastgetattr */
-
-
-/* ----------------
- * heap_getattr
- *
- * Extract an attribute of a heap tuple and return it as a Datum.
- * This works for either system or user attributes. The given
attnum
- * is properly range-checked.
- *
- * If the field in question has a NULL value, we return a zero
Datum
- * and set *isnull == true. Otherwise, we set *isnull == false.
- *
- * <tup> is the pointer to the heap tuple. <attnum> is the
attribute
- * number of the column (field) caller wants. <tupleDesc> is a
- * pointer to the structure describing the row and all its fields.
- *
- * GPDB: Implemented as inline function instead of macro.
- * ----------------
- */
-static inline Datum
-heap_getattr(HeapTuple tup, int attnum, TupleDesc tupleDesc, bool *isnull)
-{
- Datum result;
-
- Assert(tup != NULL);
-
- if (attnum > (int)HeapTupleHeaderGetNatts(tup->t_data))
- {
- result = getmissingattr(tupleDesc, attnum, isnull);
- }
- else if (attnum > 0)
- result = fastgetattr(tup, attnum, tupleDesc, isnull);
- else
- result = heap_getsysattr(tup, attnum, tupleDesc, isnull);
-
- return result;
-} /* heap_getattr */
-
/* prototypes for functions in common/heaptuple.c */
extern Size heap_compute_data_size(TupleDesc tupleDesc,
Datum
*values, bool *isnull);
diff --git a/src/include/access/xloginsert.h b/src/include/access/xloginsert.h
index 8c2082c906e..2b8bc87fe3b 100644
--- a/src/include/access/xloginsert.h
+++ b/src/include/access/xloginsert.h
@@ -44,9 +44,9 @@ typedef void * (*RecordAssembleFunc)(RmgrId rmid, uint8 info,
typedef XLogRecPtr (*XLogInsert_hook_type)(RmgrId rmid, uint8 info,
TransactionId headerXid, uint8 curinsert_flags, RecordAssembleFunc
recordAssembleFunc);
extern PGDLLIMPORT XLogInsert_hook_type XLogInsert_hook;
-extern bool GetXLogRegisterBufferTagIfAny(RelFileNode *rnode, ForkNumber
*forknum, BlockNumber *blkno);
+extern bool GetXLogRegisterBufferTagIfAny(RelFileLocator *rnode, ForkNumber
*forknum, BlockNumber *blkno);
extern int GetNumXLogRegisterBuffers(void);
-extern bool GetXLogRegisterBuffer(int block_id, RelFileNode *rnode, ForkNumber
*forknum, BlockNumber *blkno, char **page);
+extern bool GetXLogRegisterBuffer(int block_id, RelFileLocator *rnode,
ForkNumber *forknum, BlockNumber *blkno, char **page);
extern char *GetXLogRegisterRdata(int rdata_index);
/* prototypes for public functions in xloginsert.c: */
diff --git a/src/include/access/xlogreader.h b/src/include/access/xlogreader.h
index 0f0805138eb..9c217194d03 100644
--- a/src/include/access/xlogreader.h
+++ b/src/include/access/xlogreader.h
@@ -309,15 +309,6 @@ struct XLogReaderState
/* Buffer to hold error message */
char *errormsg_buf;
- /*
- * Set at the end of recovery: the start point of a partial record at
the
- * end of WAL (InvalidXLogRecPtr if there wasn't one), and the start
- * location of its first contrecord that went missing.
- */
- XLogRecPtr abortedRecPtr;
- XLogRecPtr missingContrecPtr;
- /* Set when XLP_FIRST_IS_OVERWRITE_CONTRECORD is found */
- XLogRecPtr overwrittenRecPtr;
bool errormsg_deferred;
/*
diff --git a/src/include/catalog/gp_segment_configuration_indexing.h
b/src/include/catalog/gp_segment_configuration_indexing.h
index 6dd844353cc..b4d2ac669db 100644
--- a/src/include/catalog/gp_segment_configuration_indexing.h
+++ b/src/include/catalog/gp_segment_configuration_indexing.h
@@ -14,9 +14,7 @@
#include "catalog/genbki.h"
-DECLARE_UNIQUE_INDEX(gp_segment_config_content_preferred_role_warehouse_index,
7139, on gp_segment_configuration using btree(content int2_ops, preferred_role
char_ops, warehouseid oid_ops));
-#define GpSegmentConfigContentPreferred_roleWarehouseIndexId 7139
-DECLARE_UNIQUE_INDEX(gp_segment_config_dbid_warehouse_index, 7140, on
gp_segment_configuration using btree(dbid int2_ops, warehouseid oid_ops));
-#define GpSegmentConfigDbidWarehouseIndexId 7140
+DECLARE_UNIQUE_INDEX(gp_segment_config_content_preferred_role_warehouse_index,
7139, GpSegmentConfigContentPreferred_roleWarehouseIndexId, on
gp_segment_configuration using btree(content int2_ops, preferred_role char_ops,
warehouseid oid_ops));
+DECLARE_UNIQUE_INDEX(gp_segment_config_dbid_warehouse_index, 7140,
GpSegmentConfigDbidWarehouseIndexId, on gp_segment_configuration using
btree(dbid int2_ops, warehouseid oid_ops));
#endif // GP_SEGMENT_CONFIGURATION_INDEXING_H
diff --git a/src/include/nodes/nodes.h b/src/include/nodes/nodes.h
index 92011ec3f5d..3d62d01651a 100644
--- a/src/include/nodes/nodes.h
+++ b/src/include/nodes/nodes.h
@@ -29,7 +29,665 @@ typedef enum NodeTag
{
T_Invalid = 0,
-#include "nodes/nodetags.h"
+ /*
+ * TAGS FOR EXECUTOR NODES (execnodes.h)
+ */
+ T_IndexInfo,
+ T_ExprContext,
+ T_ProjectionInfo,
+ T_JunkFilter,
+ T_OnConflictSetState,
+ T_ResultRelInfo,
+ T_EState,
+ T_TupleTableSlot,
+ T_CdbProcess,
+ T_SliceTable,
+ T_CursorPosInfo,
+ T_PartitionState,
+ T_QueryDispatchDesc,
+ T_OidAssignment,
+
+ /*
+ * TAGS FOR PLAN NODES (plannodes.h)
+ */
+ T_Plan,
+ T_Scan,
+ T_Join,
+
+ /* Real plan node starts below. Scan and Join are "Virtual nodes",
+ * It will take the form of IndexScan, SeqScan, etc.
+ * CteScan will take the form of SubqueryScan.
+ */
+ T_Result,
+ T_Plan_Start = T_Result,
+ T_ProjectSet,
+ T_ModifyTable,
+ T_Append,
+ T_MergeAppend,
+ T_RecursiveUnion,
+ T_Sequence,
+ T_BitmapAnd,
+ T_BitmapOr,
+ T_SeqScan,
+ T_DynamicSeqScan,
+ T_SampleScan,
+ T_IndexScan,
+ T_DynamicIndexScan,
+ T_DynamicIndexOnlyScan,
+ T_IndexOnlyScan,
+ T_BitmapIndexScan,
+ T_DynamicBitmapIndexScan,
+ T_BitmapHeapScan,
+ T_DynamicBitmapHeapScan,
+ T_TidScan,
+ T_TidRangeScan,
+ T_SubqueryScan,
+ T_FunctionScan,
+ T_TableFunctionScan,
+ T_ValuesScan,
+ T_TableFuncScan,
+ T_CteScan,
+ T_NamedTuplestoreScan,
+ T_WorkTableScan,
+ T_ForeignScan,
+ T_DynamicForeignScan,
+ T_CustomScan,
+ T_NestLoop,
+ T_MergeJoin,
+ T_HashJoin,
+ T_Material,
+ T_Memoize,
+ T_Sort,
+ T_IncrementalSort,
+ T_Group,
+ T_Agg,
+ T_TupleSplit,
+ T_WindowAgg,
+ T_Unique,
+ T_Gather,
+ T_GatherMerge,
+ T_Hash,
+ T_RuntimeFilter,
+ T_SetOp,
+ T_LockRows,
+ T_Limit,
+ T_Motion,
+ T_ShareInputScan,
+ T_SplitUpdate,
+ T_AssertOp,
+ T_PartitionSelector,
+ T_Plan_End,
+ /* these aren't subclasses of Plan: */
+ T_NestLoopParam,
+ T_PlanRowMark,
+ T_PartitionPruneInfo,
+ T_PartitionedRelPruneInfo,
+ T_PartitionPruneStepOp,
+ T_PartitionPruneStepCombine,
+ T_PlanInvalItem,
+
+ /*
+ * TAGS FOR PLAN STATE NODES (execnodes.h)
+ *
+ * These should correspond one-to-one with Plan node types.
+ */
+ T_PlanState,
+ T_ScanState,
+ T_JoinState,
+
+ /* Real plan node starts below. Scan and Join are "Virtal nodes",
+ * It will take the form of IndexScan, SeqScan, etc.
+ */
+ T_ResultState,
+ T_ProjectSetState,
+ T_ModifyTableState,
+ T_AppendState,
+ T_MergeAppendState,
+ T_RecursiveUnionState,
+ T_SequenceState,
+ T_BitmapAndState,
+ T_BitmapOrState,
+ T_SeqScanState,
+ T_DynamicSeqScanState,
+ T_SampleScanState,
+ T_IndexScanState,
+ T_DynamicIndexScanState,
+ T_DynamicIndexOnlyScanState,
+ T_IndexOnlyScanState,
+ T_BitmapIndexScanState,
+ T_DynamicBitmapIndexScanState,
+ T_BitmapHeapScanState,
+ T_DynamicBitmapHeapScanState,
+ T_TidScanState,
+ T_TidRangeScanState,
+ T_SubqueryScanState,
+ T_FunctionScanState,
+ T_TableFunctionState,
+ T_TableFuncScanState,
+ T_ValuesScanState,
+ T_CteScanState,
+ T_NamedTuplestoreScanState,
+ T_WorkTableScanState,
+ T_ForeignScanState,
+ T_DynamicForeignScanState,
+ T_CustomScanState,
+ T_NestLoopState,
+ T_MergeJoinState,
+ T_HashJoinState,
+ T_MaterialState,
+ T_MemoizeState,
+ T_SortState,
+ T_IncrementalSortState,
+ T_GroupState,
+ T_AggState,
+ T_TupleSplitState,
+ T_WindowAggState,
+ T_UniqueState,
+ T_GatherState,
+ T_GatherMergeState,
+ T_HashState,
+ T_RuntimeFilterState,
+ T_SetOpState,
+ T_LockRowsState,
+ T_LimitState,
+ T_MotionState,
+ T_ShareInputScanState,
+ T_SplitUpdateState,
+ T_AssertOpState,
+ T_PartitionSelectorState,
+
+ /*
+ * TupleDesc and ParamListInfo are not Nodes as such, but you can wrap
+ * them in TupleDescNode and SerializedParams structs for serialization.
+ */
+ T_TupleDescNode,
+ T_SerializedParams,
+
+ /*
+ * TAGS FOR PRIMITIVE NODES (primnodes.h)
+ */
+ T_Alias,
+ T_RangeVar,
+ T_TableFunc,
+ T_Expr,
+ T_Var,
+ T_Const,
+ T_Param,
+ T_DQAExpr,
+ T_Aggref,
+ T_GroupingFunc,
+ T_WindowFunc,
+ T_SubscriptingRef,
+ T_FuncExpr,
+ T_NamedArgExpr,
+ T_OpExpr,
+ T_DistinctExpr,
+ T_NullIfExpr,
+ T_ScalarArrayOpExpr,
+ T_BoolExpr,
+ T_SubLink,
+ T_SubPlan,
+ T_AlternativeSubPlan,
+ T_FieldSelect,
+ T_FieldStore,
+ T_RelabelType,
+ T_CoerceViaIO,
+ T_ArrayCoerceExpr,
+ T_ConvertRowtypeExpr,
+ T_CollateExpr,
+ T_CaseExpr,
+ T_CaseWhen,
+ T_CaseTestExpr,
+ T_ArrayExpr,
+ T_RowExpr,
+ T_RowCompareExpr,
+ T_CoalesceExpr,
+ T_MinMaxExpr,
+ T_SQLValueFunction,
+ T_XmlExpr,
+ T_NullTest,
+ T_BooleanTest,
+ T_CoerceToDomain,
+ T_CoerceToDomainValue,
+ T_SetToDefault,
+ T_CurrentOfExpr,
+ T_NextValueExpr,
+ T_InferenceElem,
+ T_TargetEntry,
+ T_RangeTblRef,
+ T_JoinExpr,
+ T_FromExpr,
+ T_OnConflictExpr,
+ T_IntoClause,
+ T_CopyIntoClause,
+ T_RefreshClause,
+ T_Flow,
+ T_GroupId,
+ T_GroupingSetId,
+ T_AggExprId,
+ T_RowIdExpr,
+ T_DistributedBy,
+ T_DMLActionExpr,
+
+ /*
+ * TAGS FOR EXPRESSION STATE NODES (execnodes.h)
+ *
+ * ExprState represents the evaluation state for a whole expression
tree.
+ * Most Expr-based plan nodes do not have a corresponding expression
state
+ * node, they're fully handled within execExpr* - but sometimes the
state
+ * needs to be shared with other parts of the executor, as for example
+ * with SubPlanState, which nodeSubplan.c has to modify.
+ */
+ T_ExprState,
+ T_WindowFuncExprState,
+ T_SetExprState,
+ T_SubPlanState,
+ T_DomainConstraintState,
+ T_AggExprIdState,
+ T_RowIdExprState,
+
+ /*
+ * TAGS FOR PLANNER NODES (pathnodes.h)
+ */
+ T_PlannerInfo,
+ T_PlannerGlobal,
+ T_RelOptInfo,
+ T_IndexOptInfo,
+ T_ForeignKeyOptInfo,
+ T_ParamPathInfo,
+ T_RelAggInfo,
+ T_Path,
+ T_AppendOnlyPath,
+ T_AOCSPath,
+ T_ExternalPath,
+ T_CtePath,
+ T_IndexPath,
+ T_BitmapHeapPath,
+ T_BitmapAndPath,
+ T_BitmapOrPath,
+ T_TidPath,
+ T_TidRangePath,
+ T_SubqueryScanPath,
+ T_TableFunctionScanPath,
+ T_ForeignPath,
+ T_CustomPath,
+ T_NestPath,
+ T_MergePath,
+ T_HashPath,
+ T_RuntimeFilterPath,
+ T_AppendPath,
+ T_MergeAppendPath,
+ T_GroupResultPath,
+ T_MaterialPath,
+ T_MemoizePath,
+ T_UniquePath,
+ T_GatherPath,
+ T_GatherMergePath,
+ T_ProjectionPath,
+ T_ProjectSetPath,
+ T_SortPath,
+ T_IncrementalSortPath,
+ T_GroupPath,
+ T_UpperUniquePath,
+ T_AggPath,
+ T_GroupingSetsPath,
+ T_MinMaxAggPath,
+ T_WindowAggPath,
+ T_TupleSplitPath,
+ T_SetOpPath,
+ T_RecursiveUnionPath,
+ T_LockRowsPath,
+ T_ModifyTablePath,
+ T_LimitPath,
+ /* these aren't subclasses of Path: */
+ T_EquivalenceClass,
+ T_EquivalenceMember,
+ T_PathKey,
+ T_PathTarget,
+ T_RestrictInfo,
+ T_IndexClause,
+ T_PlaceHolderVar,
+ T_SpecialJoinInfo,
+ T_AppendRelInfo,
+ T_RowIdentityVarInfo,
+ T_PlaceHolderInfo,
+ T_GroupedVarInfo,
+ T_MinMaxAggInfo,
+ T_SegfileMapNode,
+ T_PlannerParamItem,
+ T_RollupData,
+ T_GroupingSetData,
+ T_StatisticExtInfo,
+
+ /* Tags for MPP planner nodes (relation.h) */
+ T_CdbMotionPath = 580,
+ T_PartitionSelectorPath,
+ T_SplitUpdatePath,
+ T_CdbRelColumnInfo,
+ T_DistributionKey,
+
+ /*
+ * TAGS FOR MEMORY NODES (memnodes.h)
+ */
+ T_MemoryContext,
+ T_AllocSetContext,
+ T_SlabContext,
+ T_GenerationContext,
+ T_MemoryAccount,
+
+ /*
+ * TAGS FOR VALUE NODES (value.h)
+ */
+ T_Value,
+ T_Integer,
+ T_Float,
+ T_String,
+ T_BitString,
+ T_Null,
+
+ /*
+ * TAGS FOR LIST NODES (pg_list.h)
+ */
+ T_List,
+ T_IntList,
+ T_OidList,
+
+ /*
+ * TAGS FOR EXTENSIBLE NODES (extensible.h)
+ */
+ T_ExtensibleNode,
+
+ /*
+ * TAGS FOR STATEMENT NODES (mostly in parsenodes.h)
+ */
+ T_RawStmt,
+ T_Query,
+ T_PlannedStmt,
+ T_InsertStmt,
+ T_DeleteStmt,
+ T_UpdateStmt,
+ T_SelectStmt,
+ T_ReturnStmt,
+ T_PLAssignStmt,
+ T_AlterTableStmt,
+ T_AlterTableCmd,
+ T_AlterDomainStmt,
+ T_SetOperationStmt,
+ T_GrantStmt,
+ T_GrantRoleStmt,
+ T_AlterDefaultPrivilegesStmt,
+ T_ClosePortalStmt,
+ T_ClusterStmt,
+ T_CopyStmt,
+ T_CreateStmt,
+ T_SingleRowErrorDesc,
+ T_ExtTableTypeDesc,
+ T_CreateExternalStmt,
+ T_DefineStmt,
+ T_DropStmt,
+ T_TruncateStmt,
+ T_CommentStmt,
+ T_FetchStmt,
+ T_IndexStmt,
+ T_CreateFunctionStmt,
+ T_AlterFunctionStmt,
+ T_DoStmt,
+ T_RenameStmt,
+ T_RuleStmt,
+ T_NotifyStmt,
+ T_ListenStmt,
+ T_UnlistenStmt,
+ T_TransactionStmt,
+ T_ViewStmt,
+ T_LoadStmt,
+ T_CreateDomainStmt,
+ T_CreatedbStmt,
+ T_DropdbStmt,
+ T_VacuumStmt,
+ T_ExplainStmt,
+ T_CreateTableAsStmt,
+ T_CreateSeqStmt,
+ T_AlterSeqStmt,
+ T_VariableSetStmt,
+ T_VariableShowStmt,
+ T_DiscardStmt,
+ T_CreateTrigStmt,
+ T_CreatePLangStmt,
+ T_CreateRoleStmt,
+ T_AlterRoleStmt,
+ T_DropRoleStmt,
+ T_CreateProfileStmt,
+ T_AlterProfileStmt,
+ T_DropProfileStmt,
+ T_CreateQueueStmt,
+ T_AlterQueueStmt,
+ T_DropQueueStmt,
+ T_CreateResourceGroupStmt,
+ T_DropResourceGroupStmt,
+ T_AlterResourceGroupStmt,
+ T_LockStmt,
+ T_ConstraintsSetStmt,
+ T_ReindexStmt,
+ T_CheckPointStmt,
+ T_CreateSchemaStmt,
+ T_AlterSchemaStmt,
+ T_CreateTagStmt,
+ T_AlterTagStmt,
+ T_DropTagStmt,
+ T_AlterDatabaseStmt,
+ T_AlterDatabaseSetStmt,
+ T_AlterRoleSetStmt,
+ T_CreateConversionStmt,
+ T_CreateCastStmt,
+ T_CreateOpClassStmt,
+ T_CreateOpFamilyStmt,
+ T_AlterOpFamilyStmt,
+ T_PrepareStmt,
+ T_ExecuteStmt,
+ T_DeallocateStmt,
+ T_DeclareCursorStmt,
+ T_CreateTableSpaceStmt,
+ T_DropTableSpaceStmt,
+ T_AlterObjectDependsStmt,
+ T_AlterObjectSchemaStmt,
+ T_AlterOwnerStmt,
+ T_AlterOperatorStmt,
+ T_AlterTypeStmt,
+ T_DropOwnedStmt,
+ T_ReassignOwnedStmt,
+ T_CompositeTypeStmt,
+ T_CreateEnumStmt,
+ T_CreateRangeStmt,
+ T_AlterEnumStmt,
+ T_AlterTSDictionaryStmt,
+ T_AlterTSConfigurationStmt,
+ T_CreateFdwStmt,
+ T_AlterFdwStmt,
+ T_CreateForeignServerStmt,
+ T_AlterForeignServerStmt,
+ T_CreateStorageServerStmt,
+ T_AlterStorageServerStmt,
+ T_DropStorageServerStmt,
+ T_CreateUserMappingStmt,
+ T_AlterUserMappingStmt,
+ T_DropUserMappingStmt,
+ T_CreateStorageUserMappingStmt,
+ T_AlterStorageUserMappingStmt,
+ T_DropStorageUserMappingStmt,
+ T_AlterTableSpaceOptionsStmt,
+ T_AlterTableMoveAllStmt,
+ T_SecLabelStmt,
+ T_CreateForeignTableStmt,
+ T_ImportForeignSchemaStmt,
+ T_CreateExtensionStmt,
+ T_AlterExtensionStmt,
+ T_AlterExtensionContentsStmt,
+ T_CreateEventTrigStmt,
+ T_AlterEventTrigStmt,
+ T_RefreshMatViewStmt,
+ T_ReplicaIdentityStmt,
+ T_AlterSystemStmt,
+ T_CreatePolicyStmt,
+ T_AlterPolicyStmt,
+ T_CreateTransformStmt,
+ T_CreateAmStmt,
+ T_CreatePublicationStmt,
+ T_AlterPublicationStmt,
+ T_CreateSubscriptionStmt,
+ T_AlterSubscriptionStmt,
+ T_DropSubscriptionStmt,
+ T_CreateStatsStmt,
+ T_AlterCollationStmt,
+ T_CallStmt,
+ T_AlterStatsStmt,
+ T_CreateTaskStmt,
+ T_AlterTaskStmt,
+ T_DropTaskStmt,
+
+ /* GPDB additions */
+ T_PartitionBy,
+ T_PartitionRangeItem,
+ T_PartitionValuesSpec,
+ T_CreateDirectoryTableStmt,
+ T_AlterDirectoryTableStmt,
+ T_DropDirectoryTableStmt,
+ T_CreateFileSpaceStmt,
+ T_FileSpaceEntry,
+ T_DropFileSpaceStmt,
+ T_TableValueExpr,
+ T_DenyLoginInterval,
+ T_DenyLoginPoint,
+ T_AlteredTableInfo,
+ T_NewConstraint,
+ T_NewColumnValue,
+ T_GpPartitionDefinition,
+ T_GpPartDefElem,
+ T_GpPartitionRangeItem,
+ T_GpPartitionRangeSpec,
+ T_GpPartitionListSpec,
+ T_GpAlterPartitionId,
+ T_GpDropPartitionCmd,
+ T_GpSplitPartitionCmd,
+ T_GpAlterPartitionCmd,
+ T_CreateWarehouseStmt,
+ T_DropWarehouseStmt,
+ T_AddForeignSegStmt,
+
+ /*
+ * TAGS FOR PARSE TREE NODES (parsenodes.h)
+ */
+ T_A_Expr,
+ T_ColumnRef,
+ T_ParamRef,
+ T_A_Const,
+ T_FuncCall,
+ T_A_Star,
+ T_A_Indices,
+ T_A_Indirection,
+ T_A_ArrayExpr,
+ T_ResTarget,
+ T_MultiAssignRef,
+ T_TypeCast,
+ T_CollateClause,
+ T_SortBy,
+ T_WindowDef,
+ T_RangeSubselect,
+ T_RangeFunction,
+ T_RangeTableSample,
+ T_RangeTableFunc,
+ T_RangeTableFuncCol,
+ T_TypeName,
+ T_ColumnDef,
+ T_IndexElem,
+ T_StatsElem,
+ T_Constraint,
+ T_DefElem,
+ T_RangeTblEntry,
+ T_RangeTblFunction,
+ T_TableSampleClause,
+ T_WithCheckOption,
+ T_SortGroupClause,
+ T_GroupingSet,
+ T_WindowClause,
+ T_ObjectWithArgs,
+ T_AccessPriv,
+ T_CreateOpClassItem,
+ T_TableLikeClause,
+ T_FunctionParameter,
+ T_LockingClause,
+ T_RowMarkClause,
+ T_XmlSerialize,
+ T_WithClause,
+ T_InferClause,
+ T_OnConflictClause,
+ T_CTESearchClause,
+ T_CTECycleClause,
+ T_CommonTableExpr,
+ T_ColumnReferenceStorageDirective,
+ T_DistributionKeyElem,
+ T_RoleSpec,
+ T_TriggerTransition,
+ T_PartitionElem,
+ T_PartitionSpec,
+ T_PartitionBoundSpec,
+ T_PartitionRangeDatum,
+ T_PartitionCmd,
+ T_VacuumRelation,
+
+ T_Bitmapset,
+
+ /*
+ * TAGS FOR REPLICATION GRAMMAR PARSE NODES (replnodes.h)
+ */
+ T_IdentifySystemCmd,
+ T_BaseBackupCmd,
+ T_CreateReplicationSlotCmd,
+ T_DropReplicationSlotCmd,
+ T_StartReplicationCmd,
+ T_TimeLineHistoryCmd,
+ T_SQLCmd,
+
+ /*
+ * TAGS FOR RANDOM OTHER STUFF
+ *
+ * These are objects that aren't part of parse/plan/execute node tree
+ * structures, but we give them NodeTags anyway for identification
+ * purposes (usually because they are involved in APIs where we want to
+ * pass multiple object types through the same pointer).
+ */
+ T_TriggerData, /* in commands/trigger.h */
+ T_EventTriggerData, /* in commands/event_trigger.h
*/
+ T_ReturnSetInfo, /* in nodes/execnodes.h */
+ T_WindowObjectData, /* private in nodeWindowAgg.c */
+ T_TIDBitmap, /* in nodes/tidbitmap.h */
+ T_InlineCodeBlock, /* in nodes/parsenodes.h */
+ T_FdwRoutine, /* in foreign/fdwapi.h */
+ T_IndexAmRoutine, /* in access/amapi.h */
+ T_TableAmRoutine, /* in access/tableam.h */
+ T_TsmRoutine, /* in access/tsmapi.h */
+ T_ForeignKeyCacheInfo, /* in utils/rel.h */
+ T_CallContext, /* in nodes/parsenodes.h */
+ T_SupportRequestSimplify, /* in nodes/supportnodes.h */
+ T_SupportRequestSelectivity, /* in nodes/supportnodes.h */
+ T_SupportRequestCost, /* in nodes/supportnodes.h */
+ T_SupportRequestRows, /* in nodes/supportnodes.h */
+ T_SupportRequestIndexCondition /* in nodes/supportnodes.h */
+
+ ,
+ T_StreamBitmap, /* in nodes/tidbitmap.h */
+ T_FormatterData, /* in access/formatter.h */
+ T_ExtProtocolData, /* in access/extprotocol.h */
+ T_ExtProtocolValidatorData, /* in access/extprotocol.h */
+ T_ExternalScanInfo, /* in access/plannodes.h */
+ T_CookedConstraint, /* in catalog/heap.h */
+
+ /* CDB: tags for random other stuff */
+ T_CdbExplain_StatHdr = 1000, /* in cdb/cdbexplain.c */
+ T_GpPolicy, /* in
catalog/gp_distribution_policy.h */
+ T_RetrieveStmt,
+ T_ReindexIndexInfo, /* in nodes/parsenodes.h */
+ T_EphemeralNamedRelationInfo, /* utils/queryenvironment.h */
+
} NodeTag;
/*
diff --git a/src/include/nodes/pathnodes.h b/src/include/nodes/pathnodes.h
index 8946fbd087a..636cf8a6850 100644
--- a/src/include/nodes/pathnodes.h
+++ b/src/include/nodes/pathnodes.h
@@ -213,9 +213,6 @@ typedef struct PlannerGlobal
/* highest plan node ID assigned */
int lastPlanNodeId;
- /* redo plan when TransactionXmin changes? */
- bool transientPlan;
-
/* is plan specific to current role? */
bool dependsOnRole;
@@ -399,9 +396,6 @@ struct PlannerInfo
/* list of active EquivalenceClasses */
List *eq_classes;
- /* set true once ECs are canonical */
- bool ec_merging_done;
-
List *list_cteplaninfo; /* list of CtePlannerInfo, one for each
CTE */
/*
@@ -414,12 +408,6 @@ struct PlannerInfo
/* list of "canonical" PathKeys */
List *canon_pathkeys;
- /*
- * list of OuterJoinClauseInfos for mergejoinable outer join clauses
- * w/nonnullable var on left
- */
- List *left_join_clauses;
-
/*
* list of OuterJoinClauseInfos for mergejoinable outer join clauses
* w/nonnullable var on right
@@ -477,9 +465,6 @@ struct PlannerInfo
/* allocated size of array */
int placeholder_array_size
pg_node_attr(read_write_ignore);
- /* list of ForeignKeyOptInfos */
- List *fkey_list;
-
/* desired pathkeys for query_planner() */
List *query_pathkeys;
@@ -489,8 +474,6 @@ struct PlannerInfo
/* hint on where the result of the query will be needed. Null if not
known */
CdbPathLocus final_locus;
- List *initial_rels; /* RelOptInfos we are now trying to
join */
-
/*
* The number of elements in the group_pathkeys list which belong to the
* GROUP BY clause. Additional ones belong to ORDER BY / DISTINCT
diff --git a/src/include/nodes/plannodes.h b/src/include/nodes/plannodes.h
index d65293a0453..05d39a91193 100644
--- a/src/include/nodes/plannodes.h
+++ b/src/include/nodes/plannodes.h
@@ -738,7 +738,6 @@ typedef struct IndexOnlyScan
List *indexorderby; /* list of index ORDER BY exprs */
List *indextlist; /* TargetEntry list describing index's
cols */
ScanDirection indexorderdir; /* forward or backward or don't care */
- List *recheckqual; /* index quals in recheckable form */
} IndexOnlyScan;
/*
diff --git a/src/include/nodes/value.h b/src/include/nodes/value.h
index b24c4c1afef..cd6b1229bca 100644
--- a/src/include/nodes/value.h
+++ b/src/include/nodes/value.h
@@ -76,6 +76,16 @@ typedef struct BitString
char *bsval;
} BitString;
+typedef struct Value
+{
+ NodeTag type; /* tag appropriately (eg.
T_String) */
+ union ValUnion2
+ {
+ int ival; /* machine integer */
+ char *str; /* string */
+ } val;
+} Value;
+
#define intVal(v) (castNode(Integer, v)->ival)
#define floatVal(v) atof(castNode(Float, v)->fval)
#define boolVal(v) (castNode(Boolean, v)->boolval)
diff --git a/src/include/port/pg_bitutils.h b/src/include/port/pg_bitutils.h
index 44c42ab3246..21a4fa03410 100644
--- a/src/include/port/pg_bitutils.h
+++ b/src/include/port/pg_bitutils.h
@@ -220,16 +220,6 @@ pg_nextpower2_64(uint64 num)
return ((uint64) 1) << (pg_leftmost_one_pos64(num) + 1);
}
-/*
- * pg_nextpower2_size_t
- * Returns the next higher power of 2 above 'num', for a size_t
input.
- */
-#if SIZEOF_SIZE_T == 4
-#define pg_nextpower2_size_t(num) pg_nextpower2_32(num)
-#else
-#define pg_nextpower2_size_t(num) pg_nextpower2_64(num)
-#endif
-
/*
* pg_prevpower2_32
* Returns the next lower power of 2 below 'num', or 'num' if it's
@@ -256,16 +246,6 @@ pg_prevpower2_64(uint64 num)
return ((uint64) 1) << pg_leftmost_one_pos64(num);
}
-/*
- * pg_prevpower2_size_t
- * Returns the next lower power of 2 below 'num', for a size_t
input.
- */
-#if SIZEOF_SIZE_T == 4
-#define pg_prevpower2_size_t(num) pg_prevpower2_32(num)
-#else
-#define pg_prevpower2_size_t(num) pg_prevpower2_64(num)
-#endif
-
/*
* pg_ceil_log2_32
* Returns equivalent of ceil(log2(num))
diff --git a/src/include/portability/instr_time.h
b/src/include/portability/instr_time.h
index 4193ade6a91..4cae6a12e34 100644
--- a/src/include/portability/instr_time.h
+++ b/src/include/portability/instr_time.h
@@ -130,126 +130,6 @@ pg_clock_gettime_ns(void)
#define INSTR_TIME_ASSIGN(x,y) ((x).tv_sec = (y).tv_sec, (x).tv_nsec =
(y).tv_nsec)
-#define INSTR_TIME_ADD(x,y) \
- do { \
- (x).tv_sec += (y).tv_sec; \
- (x).tv_nsec += (y).tv_nsec; \
- /* Normalize */ \
- while ((x).tv_nsec >= 1000000000) \
- { \
- (x).tv_nsec -= 1000000000; \
- (x).tv_sec++; \
- } \
- } while (0)
-
-#define INSTR_TIME_SUBTRACT(x,y) \
- do { \
- (x).tv_sec -= (y).tv_sec; \
- (x).tv_nsec -= (y).tv_nsec; \
- /* Normalize */ \
- while ((x).tv_nsec < 0) \
- { \
- (x).tv_nsec += 1000000000; \
- (x).tv_sec--; \
- } \
- } while (0)
-
-#define INSTR_TIME_ACCUM_DIFF(x,y,z) \
- do { \
- (x).tv_sec += (y).tv_sec - (z).tv_sec; \
- (x).tv_nsec += (y).tv_nsec - (z).tv_nsec; \
- /* Normalize after each add to avoid overflow/underflow of
tv_nsec */ \
- while ((x).tv_nsec < 0) \
- { \
- (x).tv_nsec += 1000000000; \
- (x).tv_sec--; \
- } \
- while ((x).tv_nsec >= 1000000000) \
- { \
- (x).tv_nsec -= 1000000000; \
- (x).tv_sec++; \
- } \
- } while (0)
-
-#define INSTR_TIME_GET_DOUBLE(t) \
- (((double) (t).tv_sec) + ((double) (t).tv_nsec) / 1000000000.0)
-
-#define INSTR_TIME_GET_MILLISEC(t) \
- (((double) (t).tv_sec * 1000.0) + ((double) (t).tv_nsec) / 1000000.0)
-
-#define INSTR_TIME_GET_MICROSEC(t) \
- (((uint64) (t).tv_sec * (uint64) 1000000) + (uint64) ((t).tv_nsec /
1000))
-
-#else /* !HAVE_CLOCK_GETTIME
*/
-
-/* Use gettimeofday() */
-
-#include <sys/time.h>
-
-typedef struct timeval instr_time;
-
-#define INSTR_TIME_IS_ZERO(t) ((t).tv_usec == 0 && (t).tv_sec == 0)
-
-#define INSTR_TIME_SET_ZERO(t) ((t).tv_sec = 0, (t).tv_usec = 0)
-
-#define INSTR_TIME_SET_CURRENT(t) gettimeofday(&(t), NULL)
-
-#define INSTR_TIME_SET_CURRENT_COARSE(t) INSTR_TIME_SET_CURRENT(t)
-
-#define INSTR_TIME_ASSIGN(x,y) ((x).tv_sec = (y).tv_sec, (x).tv_usec =
(y).tv_usec)
-
-#define INSTR_TIME_ADD(x,y) \
- do { \
- (x).tv_sec += (y).tv_sec; \
- (x).tv_usec += (y).tv_usec; \
- /* Normalize */ \
- while ((x).tv_usec >= 1000000) \
- { \
- (x).tv_usec -= 1000000; \
- (x).tv_sec++; \
- } \
- } while (0)
-
-#define INSTR_TIME_SUBTRACT(x,y) \
- do { \
- (x).tv_sec -= (y).tv_sec; \
- (x).tv_usec -= (y).tv_usec; \
- /* Normalize */ \
- while ((x).tv_usec < 0) \
- { \
- (x).tv_usec += 1000000; \
- (x).tv_sec--; \
- } \
- } while (0)
-
-#define INSTR_TIME_ACCUM_DIFF(x,y,z) \
- do { \
- (x).tv_sec += (y).tv_sec - (z).tv_sec; \
- (x).tv_usec += (y).tv_usec - (z).tv_usec; \
- /* Normalize after each add to avoid overflow/underflow of
tv_usec */ \
- while ((x).tv_usec < 0) \
- { \
- (x).tv_usec += 1000000; \
- (x).tv_sec--; \
- } \
- while ((x).tv_usec >= 1000000) \
- { \
- (x).tv_usec -= 1000000; \
- (x).tv_sec++; \
- } \
- } while (0)
-
-#define INSTR_TIME_GET_DOUBLE(t) \
- (((double) (t).tv_sec) + ((double) (t).tv_usec) / 1000000.0)
-
-#define INSTR_TIME_GET_MILLISEC(t) \
- (((double) (t).tv_sec * 1000.0) + ((double) (t).tv_usec) / 1000.0)
-
-#define INSTR_TIME_GET_MICROSEC(t) \
- (((uint64) (t).tv_sec * (uint64) 1000000) + (uint64) (t).tv_usec)
-
-#endif /* HAVE_CLOCK_GETTIME */
-
#define INSTR_TIME_GET_NANOSEC(t) \
((int64) (t).ticks)
diff --git a/src/include/storage/lock.h b/src/include/storage/lock.h
index a1ea7501b62..2f5ba015a3e 100644
--- a/src/include/storage/lock.h
+++ b/src/include/storage/lock.h
@@ -428,7 +428,7 @@ typedef struct PROCLOCK
dlist_node procLink; /* list link in PGPROC's list
of proclocks */
int nLocks; /* total number of
times lock is held by
this
process, used by resource scheduler */
- SHM_QUEUE portalLinks; /* list of ResPortalIncrements for this
+ dlist_node portalLinks; /* list of ResPortalIncrements for this
proclock,
used by resource scheduler */
} PROCLOCK;
diff --git a/src/include/tcop/cmdtag.h b/src/include/tcop/cmdtag.h
index 1e7514dcff7..a2c74b97309 100644
--- a/src/include/tcop/cmdtag.h
+++ b/src/include/tcop/cmdtag.h
@@ -14,7 +14,7 @@
#define CMDTAG_H
/* buffer size required for command completion tags */
-#define COMPLETION_TAG_BUFSIZE 64
+#define COMPLETION_TAG_BUFSIZE 72
#define PG_CMDTAG(tag, name, evtrgok, rwrok, rowcnt) \
tag,
diff --git a/src/include/tcop/dest.h b/src/include/tcop/dest.h
index 2045b079e10..b3421fb32a0 100644
--- a/src/include/tcop/dest.h
+++ b/src/include/tcop/dest.h
@@ -71,10 +71,6 @@
#include "tcop/cmdtag.h"
-/* buffer size to use for command completion tags */
-#define COMPLETION_TAG_BUFSIZE 72
-
-
/* ----------------
* CommandDest is a simplistic means of identifying the desired
* destination. Someday this will probably need to be improved.
diff --git a/src/include/utils/portal.h b/src/include/utils/portal.h
index 49a9539393c..fbdfbee82d8 100644
--- a/src/include/utils/portal.h
+++ b/src/include/utils/portal.h
@@ -221,9 +221,6 @@ typedef struct PortalData
TimestampTz creation_time; /* time at which this portal was
defined */
bool visible; /* include this portal in
pg_cursors? */
- /* Stuff added at the end to avoid ABI break in stable branches: */
- int createLevel; /* creating subxact's nesting
level */
-
/* MPP: is this portal a CURSOR, or protocol level portal? */
bool is_extended_query; /* simple or extended query
protocol? */
} PortalData;
diff --git a/src/include/utils/rel.h b/src/include/utils/rel.h
index dfe72fa57dc..b1cf6ec01f4 100644
--- a/src/include/utils/rel.h
+++ b/src/include/utils/rel.h
@@ -699,7 +699,8 @@ static inline SMgrRelation
RelationGetSmgr(Relation rel)
{
if (unlikely(rel->rd_smgr == NULL))
- smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_locator,
rel->rd_backend));
+ smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_locator,
rel->rd_backend,
+
SMGR_MD, rel));
return rel->rd_smgr;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]