From 368d46e17eaff4b79a8451713169c3580348c3fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Herrera?= Date: Wed, 1 Apr 2026 15:06:15 +0200 Subject: [PATCH v5 1/3] Fix callers of heap_insert and siblings to use uint32 for options, not int Oversight in commit 1bd6f22f43ac: I was way too optimistic about the compiler letting me know what variables needed to be updated, and missed a few of them. Clean it up. Reported-by: Chao Li Discussion: https://postgr.es/m/40E570EE-5A60-49D8-B8F7-2F8F2B7C8DFA@gmail.com --- src/backend/access/common/toast_internals.c | 2 +- src/backend/access/heap/heaptoast.c | 2 +- src/backend/access/heap/hio.c | 2 +- src/backend/access/heap/rewriteheap.c | 2 +- src/backend/access/table/toast_helper.c | 2 +- src/backend/commands/copyfrom.c | 8 ++++---- src/backend/commands/createas.c | 2 +- src/backend/commands/matview.c | 2 +- src/backend/commands/tablecmds.c | 8 ++++---- src/include/access/heaptoast.h | 2 +- src/include/access/hio.h | 2 +- src/include/access/toast_helper.h | 2 +- src/include/access/toast_internals.h | 2 +- 13 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/backend/access/common/toast_internals.c b/src/backend/access/common/toast_internals.c index 4d0da07135e..77d42e7ed65 100644 --- a/src/backend/access/common/toast_internals.c +++ b/src/backend/access/common/toast_internals.c @@ -117,7 +117,7 @@ toast_compress_datum(Datum value, char cmethod) */ Datum toast_save_datum(Relation rel, Datum value, - varlena *oldexternal, int options) + varlena *oldexternal, uint32 options) { Relation toastrel; Relation *toastidxs; diff --git a/src/backend/access/heap/heaptoast.c b/src/backend/access/heap/heaptoast.c index ba541bd60c9..03f885a25b0 100644 --- a/src/backend/access/heap/heaptoast.c +++ b/src/backend/access/heap/heaptoast.c @@ -94,7 +94,7 @@ heap_toast_delete(Relation rel, HeapTuple oldtup, bool is_speculative) */ HeapTuple heap_toast_insert_or_update(Relation rel, HeapTuple newtup, HeapTuple oldtup, - int options) + uint32 options) { HeapTuple result_tuple; TupleDesc tupleDesc; diff --git a/src/backend/access/heap/hio.c b/src/backend/access/heap/hio.c index 1097f44a74e..e96e0f77d92 100644 --- a/src/backend/access/heap/hio.c +++ b/src/backend/access/heap/hio.c @@ -498,7 +498,7 @@ RelationAddBlocks(Relation relation, BulkInsertState bistate, */ Buffer RelationGetBufferForTuple(Relation relation, Size len, - Buffer otherBuffer, int options, + Buffer otherBuffer, uint32 options, BulkInsertState bistate, Buffer *vmbuffer, Buffer *vmbuffer_other, int num_pages) diff --git a/src/backend/access/heap/rewriteheap.c b/src/backend/access/heap/rewriteheap.c index 6b19ac3030d..f707b102c72 100644 --- a/src/backend/access/heap/rewriteheap.c +++ b/src/backend/access/heap/rewriteheap.c @@ -618,7 +618,7 @@ raw_heap_insert(RewriteState state, HeapTuple tup) } else if (HeapTupleHasExternal(tup) || tup->t_len > TOAST_TUPLE_THRESHOLD) { - int options = HEAP_INSERT_SKIP_FSM; + uint32 options = HEAP_INSERT_SKIP_FSM; /* * While rewriting the heap for VACUUM FULL / CLUSTER, make sure data diff --git a/src/backend/access/table/toast_helper.c b/src/backend/access/table/toast_helper.c index 0d792a60ca0..2f2022d9951 100644 --- a/src/backend/access/table/toast_helper.c +++ b/src/backend/access/table/toast_helper.c @@ -253,7 +253,7 @@ toast_tuple_try_compression(ToastTupleContext *ttc, int attribute) * Move an attribute to external storage. */ void -toast_tuple_externalize(ToastTupleContext *ttc, int attribute, int options) +toast_tuple_externalize(ToastTupleContext *ttc, int attribute, uint32 options) { Datum *value = &ttc->ttc_values[attribute]; Datum old_value = *value; diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c index aa253b587aa..64ac3063c61 100644 --- a/src/backend/commands/copyfrom.c +++ b/src/backend/commands/copyfrom.c @@ -101,7 +101,7 @@ typedef struct CopyMultiInsertInfo CopyFromState cstate; /* Copy state for this CopyMultiInsertInfo */ EState *estate; /* Executor state used for COPY */ CommandId mycid; /* Command Id used for COPY */ - int ti_options; /* table insert options */ + uint32 ti_options; /* table insert options */ } CopyMultiInsertInfo; @@ -401,7 +401,7 @@ CopyMultiInsertInfoSetupBuffer(CopyMultiInsertInfo *miinfo, static void CopyMultiInsertInfoInit(CopyMultiInsertInfo *miinfo, ResultRelInfo *rri, CopyFromState cstate, EState *estate, CommandId mycid, - int ti_options) + uint32 ti_options) { miinfo->multiInsertBuffers = NIL; miinfo->bufferedTuples = 0; @@ -535,7 +535,7 @@ CopyMultiInsertBufferFlush(CopyMultiInsertInfo *miinfo, else { CommandId mycid = miinfo->mycid; - int ti_options = miinfo->ti_options; + uint32 ti_options = miinfo->ti_options; bool line_buf_valid = cstate->line_buf_valid; uint64 save_cur_lineno = cstate->cur_lineno; MemoryContext oldcontext; @@ -792,7 +792,7 @@ CopyFrom(CopyFromState cstate) PartitionTupleRouting *proute = NULL; ErrorContextCallback errcallback; CommandId mycid = GetCurrentCommandId(true); - int ti_options = 0; /* start with default options for insert */ + uint32 ti_options = 0; /* start with default options for insert */ BulkInsertState bistate = NULL; CopyInsertMethod insertMethod; CopyMultiInsertInfo multiInsertInfo = {0}; /* pacify compiler */ diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c index 270e9bf3110..6dbb831ca89 100644 --- a/src/backend/commands/createas.c +++ b/src/backend/commands/createas.c @@ -56,7 +56,7 @@ typedef struct Relation rel; /* relation to write to */ ObjectAddress reladdr; /* address of rel, for ExecCreateTableAs */ CommandId output_cid; /* cmin to insert in output tuples */ - int ti_options; /* table_tuple_insert performance options */ + uint32 ti_options; /* table_tuple_insert performance options */ BulkInsertState bistate; /* bulk insert state */ } DR_intorel; diff --git a/src/backend/commands/matview.c b/src/backend/commands/matview.c index 81a55a33ef2..d3be8939011 100644 --- a/src/backend/commands/matview.c +++ b/src/backend/commands/matview.c @@ -49,7 +49,7 @@ typedef struct /* These fields are filled by transientrel_startup: */ Relation transientrel; /* relation to write to */ CommandId output_cid; /* cmin to insert in output tuples */ - int ti_options; /* table_tuple_insert performance options */ + uint32 ti_options; /* table_tuple_insert performance options */ BulkInsertState bistate; /* bulk insert state */ } DR_transientrel; diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 8b4ebc6f226..0ce2e81f9c2 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -6195,7 +6195,7 @@ ATRewriteTable(AlteredTableInfo *tab, Oid OIDNewHeap) EState *estate; CommandId mycid; BulkInsertState bistate; - int ti_options; + uint32 ti_options; ExprState *partqualstate = NULL; /* @@ -22835,7 +22835,7 @@ MergePartitionsMoveRows(List **wqueue, List *mergingPartitions, Relation newPart ListCell *ltab; /* The FSM is empty, so don't bother using it. */ - int ti_options = TABLE_INSERT_SKIP_FSM; + uint32 ti_options = TABLE_INSERT_SKIP_FSM; BulkInsertState bistate; /* state of bulk inserts for partition */ TupleTableSlot *dstslot; @@ -23226,7 +23226,7 @@ createSplitPartitionContext(Relation partRel) * deleteSplitPartitionContext: delete context for partition */ static void -deleteSplitPartitionContext(SplitPartitionContext *pc, List **wqueue, int ti_options) +deleteSplitPartitionContext(SplitPartitionContext *pc, List **wqueue, uint32 ti_options) { ListCell *ltab; @@ -23268,7 +23268,7 @@ SplitPartitionMoveRows(List **wqueue, Relation rel, Relation splitRel, List *partlist, List *newPartRels) { /* The FSM is empty, so don't bother using it. */ - int ti_options = TABLE_INSERT_SKIP_FSM; + uint32 ti_options = TABLE_INSERT_SKIP_FSM; CommandId mycid; EState *estate; ListCell *listptr, diff --git a/src/include/access/heaptoast.h b/src/include/access/heaptoast.h index 725c0ce7554..631cb1836b9 100644 --- a/src/include/access/heaptoast.h +++ b/src/include/access/heaptoast.h @@ -95,7 +95,7 @@ * ---------- */ extern HeapTuple heap_toast_insert_or_update(Relation rel, HeapTuple newtup, - HeapTuple oldtup, int options); + HeapTuple oldtup, uint32 options); /* ---------- * heap_toast_delete - diff --git a/src/include/access/hio.h b/src/include/access/hio.h index d8e63a54ea5..60cfc375fd5 100644 --- a/src/include/access/hio.h +++ b/src/include/access/hio.h @@ -54,7 +54,7 @@ typedef struct BulkInsertStateData extern void RelationPutHeapTuple(Relation relation, Buffer buffer, HeapTuple tuple, bool token); extern Buffer RelationGetBufferForTuple(Relation relation, Size len, - Buffer otherBuffer, int options, + Buffer otherBuffer, uint32 options, BulkInsertStateData *bistate, Buffer *vmbuffer, Buffer *vmbuffer_other, int num_pages); diff --git a/src/include/access/toast_helper.h b/src/include/access/toast_helper.h index e8ecb995cb3..2ec92397f26 100644 --- a/src/include/access/toast_helper.h +++ b/src/include/access/toast_helper.h @@ -107,7 +107,7 @@ extern int toast_tuple_find_biggest_attribute(ToastTupleContext *ttc, bool check_main); extern void toast_tuple_try_compression(ToastTupleContext *ttc, int attribute); extern void toast_tuple_externalize(ToastTupleContext *ttc, int attribute, - int options); + uint32 options); extern void toast_tuple_cleanup(ToastTupleContext *ttc); extern void toast_delete_external(Relation rel, const Datum *values, const bool *isnull, diff --git a/src/include/access/toast_internals.h b/src/include/access/toast_internals.h index d382db34262..bf45889a642 100644 --- a/src/include/access/toast_internals.h +++ b/src/include/access/toast_internals.h @@ -50,7 +50,7 @@ extern Oid toast_get_valid_index(Oid toastoid, LOCKMODE lock); extern void toast_delete_datum(Relation rel, Datum value, bool is_speculative); extern Datum toast_save_datum(Relation rel, Datum value, - varlena *oldexternal, int options); + varlena *oldexternal, uint32 options); extern int toast_open_indexes(Relation toastrel, LOCKMODE lock, -- 2.47.3