diff options
Diffstat (limited to 'src/backend')
30 files changed, 107 insertions, 103 deletions
diff --git a/src/backend/access/gin/ginentrypage.c b/src/backend/access/gin/ginentrypage.c index c0592367700..94f49d72a98 100644 --- a/src/backend/access/gin/ginentrypage.c +++ b/src/backend/access/gin/ginentrypage.c @@ -171,7 +171,7 @@ ginReadTuple(GinState *ginstate, OffsetNumber attnum, IndexTuple itup, { if (nipd > 0) { - ipd = ginPostingListDecode((GinPostingList *) ptr, &ndecoded); + ipd = ginPostingListDecode(ptr, &ndecoded); if (nipd != ndecoded) elog(ERROR, "number of items mismatch in GIN entry tuple, %d in tuple header, %d decoded", nipd, ndecoded); diff --git a/src/backend/access/heap/heaptoast.c b/src/backend/access/heap/heaptoast.c index e148c9be482..60e765fbfce 100644 --- a/src/backend/access/heap/heaptoast.c +++ b/src/backend/access/heap/heaptoast.c @@ -569,7 +569,7 @@ toast_build_flattened_tuple(TupleDesc tupleDesc, int num_to_free; int i; Datum new_values[MaxTupleAttributeNumber]; - Pointer freeable_values[MaxTupleAttributeNumber]; + void *freeable_values[MaxTupleAttributeNumber]; /* * We can pass the caller's isnull array directly to heap_form_tuple, but @@ -593,7 +593,7 @@ toast_build_flattened_tuple(TupleDesc tupleDesc, { new_value = detoast_external_attr(new_value); new_values[i] = PointerGetDatum(new_value); - freeable_values[num_to_free++] = (Pointer) new_value; + freeable_values[num_to_free++] = new_value; } } } diff --git a/src/backend/access/heap/pruneheap.c b/src/backend/access/heap/pruneheap.c index 5af84b4c875..ca44225a10e 100644 --- a/src/backend/access/heap/pruneheap.c +++ b/src/backend/access/heap/pruneheap.c @@ -158,8 +158,8 @@ typedef struct /* Local functions */ static void prune_freeze_setup(PruneFreezeParams *params, - TransactionId new_relfrozen_xid, - MultiXactId new_relmin_mxid, + TransactionId *new_relfrozen_xid, + MultiXactId *new_relmin_mxid, const PruneFreezeResult *presult, PruneState *prstate); static void prune_freeze_plan(Oid reloid, Buffer buffer, @@ -325,8 +325,8 @@ heap_page_prune_opt(Relation relation, Buffer buffer) */ static void prune_freeze_setup(PruneFreezeParams *params, - TransactionId new_relfrozen_xid, - MultiXactId new_relmin_mxid, + TransactionId *new_relfrozen_xid, + MultiXactId *new_relmin_mxid, const PruneFreezeResult *presult, PruneState *prstate) { @@ -362,15 +362,15 @@ prune_freeze_setup(PruneFreezeParams *params, prstate->pagefrz.freeze_required = false; if (prstate->attempt_freeze) { - prstate->pagefrz.FreezePageRelfrozenXid = new_relfrozen_xid; - prstate->pagefrz.NoFreezePageRelfrozenXid = new_relfrozen_xid; - prstate->pagefrz.FreezePageRelminMxid = new_relmin_mxid; - prstate->pagefrz.NoFreezePageRelminMxid = new_relmin_mxid; + Assert(new_relfrozen_xid && new_relmin_mxid); + prstate->pagefrz.FreezePageRelfrozenXid = *new_relfrozen_xid; + prstate->pagefrz.NoFreezePageRelfrozenXid = *new_relfrozen_xid; + prstate->pagefrz.FreezePageRelminMxid = *new_relmin_mxid; + prstate->pagefrz.NoFreezePageRelminMxid = *new_relmin_mxid; } else { - Assert(new_relfrozen_xid == InvalidTransactionId && - new_relmin_mxid == InvalidMultiXactId); + Assert(!new_relfrozen_xid && !new_relmin_mxid); prstate->pagefrz.FreezePageRelminMxid = InvalidMultiXactId; prstate->pagefrz.NoFreezePageRelminMxid = InvalidMultiXactId; prstate->pagefrz.FreezePageRelfrozenXid = InvalidTransactionId; @@ -823,12 +823,8 @@ heap_page_prune_and_freeze(PruneFreezeParams *params, /* Initialize prstate */ prune_freeze_setup(params, - new_relfrozen_xid ? - *new_relfrozen_xid : InvalidTransactionId, - new_relmin_mxid ? - *new_relmin_mxid : InvalidMultiXactId, - presult, - &prstate); + new_relfrozen_xid, new_relmin_mxid, + presult, &prstate); /* * Examine all line pointers and tuple visibility information to determine diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c index 27f02faec80..8ed3fd9d071 100644 --- a/src/backend/access/transam/multixact.c +++ b/src/backend/access/transam/multixact.c @@ -909,6 +909,7 @@ RecordNewMultiXact(MultiXactId multi, MultiXactOffset offset, int64 next_pageno; int next_entryno; MultiXactOffset *next_offptr; + MultiXactOffset next_offset; LWLock *lock; LWLock *prevlock = NULL; @@ -976,11 +977,15 @@ RecordNewMultiXact(MultiXactId multi, MultiXactOffset offset, next_offptr += next_entryno; } - if (*next_offptr != offset + nmembers) + /* Like in GetNewMultiXactId(), skip over offset 0 */ + next_offset = offset + nmembers; + if (next_offset == 0) + next_offset = 1; + if (*next_offptr != next_offset) { /* should already be set to the correct value, or not at all */ Assert(*next_offptr == 0); - *next_offptr = offset + nmembers; + *next_offptr = next_offset; MultiXactOffsetCtl->shared->page_dirty[slotno] = true; } diff --git a/src/backend/access/transam/xlogwait.c b/src/backend/access/transam/xlogwait.c index 98aa5f1e4a2..84613fc39c7 100644 --- a/src/backend/access/transam/xlogwait.c +++ b/src/backend/access/transam/xlogwait.c @@ -321,7 +321,7 @@ WaitForLSN(WaitLSNType lsnType, XLogRecPtr targetLSN, int64 timeout) Assert(waitLSNState); /* Should have a valid proc number */ - Assert(MyProcNumber >= 0 && MyProcNumber < MaxBackends); + Assert(MyProcNumber >= 0 && MyProcNumber < MaxBackends + NUM_AUXILIARY_PROCS); if (timeout > 0) { diff --git a/src/backend/catalog/aclchk.c b/src/backend/catalog/aclchk.c index d183f2990ce..cb496e018c5 100644 --- a/src/backend/catalog/aclchk.c +++ b/src/backend/catalog/aclchk.c @@ -3125,7 +3125,7 @@ object_aclmask_ext(Oid classid, Oid objectid, Oid roleid, result = aclmask(acl, roleid, ownerId, mask, how); /* if we have a detoasted copy, free it */ - if (acl && (Pointer) acl != DatumGetPointer(aclDatum)) + if (acl && acl != DatumGetPointer(aclDatum)) pfree(acl); ReleaseSysCache(tuple); @@ -3255,7 +3255,7 @@ pg_attribute_aclmask_ext(Oid table_oid, AttrNumber attnum, Oid roleid, result = aclmask(acl, roleid, ownerId, mask, how); /* if we have a detoasted copy, free it */ - if (acl && (Pointer) acl != DatumGetPointer(aclDatum)) + if (acl && acl != DatumGetPointer(aclDatum)) pfree(acl); ReleaseSysCache(attTuple); @@ -3362,7 +3362,7 @@ pg_class_aclmask_ext(Oid table_oid, Oid roleid, AclMode mask, result = aclmask(acl, roleid, ownerId, mask, how); /* if we have a detoasted copy, free it */ - if (acl && (Pointer) acl != DatumGetPointer(aclDatum)) + if (acl && acl != DatumGetPointer(aclDatum)) pfree(acl); ReleaseSysCache(tuple); @@ -3454,7 +3454,7 @@ pg_parameter_aclmask(const char *name, Oid roleid, AclMode mask, AclMaskHow how) result = aclmask(acl, roleid, BOOTSTRAP_SUPERUSERID, mask, how); /* if we have a detoasted copy, free it */ - if (acl && (Pointer) acl != DatumGetPointer(aclDatum)) + if (acl && acl != DatumGetPointer(aclDatum)) pfree(acl); ReleaseSysCache(tuple); @@ -3509,7 +3509,7 @@ pg_parameter_acl_aclmask(Oid acl_oid, Oid roleid, AclMode mask, AclMaskHow how) result = aclmask(acl, roleid, BOOTSTRAP_SUPERUSERID, mask, how); /* if we have a detoasted copy, free it */ - if (acl && (Pointer) acl != DatumGetPointer(aclDatum)) + if (acl && acl != DatumGetPointer(aclDatum)) pfree(acl); ReleaseSysCache(tuple); @@ -3589,7 +3589,7 @@ pg_largeobject_aclmask_snapshot(Oid lobj_oid, Oid roleid, result = aclmask(acl, roleid, ownerId, mask, how); /* if we have a detoasted copy, free it */ - if (acl && (Pointer) acl != DatumGetPointer(aclDatum)) + if (acl && acl != DatumGetPointer(aclDatum)) pfree(acl); systable_endscan(scan); @@ -3683,7 +3683,7 @@ pg_namespace_aclmask_ext(Oid nsp_oid, Oid roleid, result = aclmask(acl, roleid, ownerId, mask, how); /* if we have a detoasted copy, free it */ - if (acl && (Pointer) acl != DatumGetPointer(aclDatum)) + if (acl && acl != DatumGetPointer(aclDatum)) pfree(acl); ReleaseSysCache(tuple); @@ -3819,7 +3819,7 @@ pg_type_aclmask_ext(Oid type_oid, Oid roleid, AclMode mask, AclMaskHow how, result = aclmask(acl, roleid, ownerId, mask, how); /* if we have a detoasted copy, free it */ - if (acl && (Pointer) acl != DatumGetPointer(aclDatum)) + if (acl && acl != DatumGetPointer(aclDatum)) pfree(acl); ReleaseSysCache(tuple); @@ -4003,7 +4003,7 @@ pg_attribute_aclcheck_all_ext(Oid table_oid, Oid roleid, attmask = aclmask(acl, roleid, ownerId, mode, ACLMASK_ANY); /* if we have a detoasted copy, free it */ - if ((Pointer) acl != DatumGetPointer(aclDatum)) + if (acl != DatumGetPointer(aclDatum)) pfree(acl); } diff --git a/src/backend/catalog/pg_constraint.c b/src/backend/catalog/pg_constraint.c index 9944e4bd2d1..5b2a8132306 100644 --- a/src/backend/catalog/pg_constraint.c +++ b/src/backend/catalog/pg_constraint.c @@ -1544,7 +1544,7 @@ DeconstructFkConstraintRow(HeapTuple tuple, int *numfks, if (numkeys <= 0 || numkeys > INDEX_MAX_KEYS) elog(ERROR, "foreign key constraint cannot have %d columns", numkeys); memcpy(conkey, ARR_DATA_PTR(arr), numkeys * sizeof(int16)); - if ((Pointer) arr != DatumGetPointer(adatum)) + if (arr != DatumGetPointer(adatum)) pfree(arr); /* free de-toasted copy, if any */ adatum = SysCacheGetAttrNotNull(CONSTROID, tuple, @@ -1556,7 +1556,7 @@ DeconstructFkConstraintRow(HeapTuple tuple, int *numfks, ARR_ELEMTYPE(arr) != INT2OID) elog(ERROR, "confkey is not a 1-D smallint array"); memcpy(confkey, ARR_DATA_PTR(arr), numkeys * sizeof(int16)); - if ((Pointer) arr != DatumGetPointer(adatum)) + if (arr != DatumGetPointer(adatum)) pfree(arr); /* free de-toasted copy, if any */ if (pf_eq_oprs) @@ -1571,7 +1571,7 @@ DeconstructFkConstraintRow(HeapTuple tuple, int *numfks, ARR_ELEMTYPE(arr) != OIDOID) elog(ERROR, "conpfeqop is not a 1-D Oid array"); memcpy(pf_eq_oprs, ARR_DATA_PTR(arr), numkeys * sizeof(Oid)); - if ((Pointer) arr != DatumGetPointer(adatum)) + if (arr != DatumGetPointer(adatum)) pfree(arr); /* free de-toasted copy, if any */ } @@ -1586,7 +1586,7 @@ DeconstructFkConstraintRow(HeapTuple tuple, int *numfks, ARR_ELEMTYPE(arr) != OIDOID) elog(ERROR, "conppeqop is not a 1-D Oid array"); memcpy(pp_eq_oprs, ARR_DATA_PTR(arr), numkeys * sizeof(Oid)); - if ((Pointer) arr != DatumGetPointer(adatum)) + if (arr != DatumGetPointer(adatum)) pfree(arr); /* free de-toasted copy, if any */ } @@ -1601,7 +1601,7 @@ DeconstructFkConstraintRow(HeapTuple tuple, int *numfks, ARR_ELEMTYPE(arr) != OIDOID) elog(ERROR, "conffeqop is not a 1-D Oid array"); memcpy(ff_eq_oprs, ARR_DATA_PTR(arr), numkeys * sizeof(Oid)); - if ((Pointer) arr != DatumGetPointer(adatum)) + if (arr != DatumGetPointer(adatum)) pfree(arr); /* free de-toasted copy, if any */ } @@ -1624,7 +1624,7 @@ DeconstructFkConstraintRow(HeapTuple tuple, int *numfks, elog(ERROR, "confdelsetcols is not a 1-D smallint array"); num_delete_cols = ARR_DIMS(arr)[0]; memcpy(fk_del_set_cols, ARR_DATA_PTR(arr), num_delete_cols * sizeof(int16)); - if ((Pointer) arr != DatumGetPointer(adatum)) + if (arr != DatumGetPointer(adatum)) pfree(arr); /* free de-toasted copy, if any */ *num_fk_del_set_cols = num_delete_cols; diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c index 257c7da8568..4a69a81b9fb 100644 --- a/src/backend/catalog/pg_type.c +++ b/src/backend/catalog/pg_type.c @@ -948,7 +948,7 @@ char * makeMultirangeTypeName(const char *rangeTypeName, Oid typeNamespace) { char *buf; - char *rangestr; + const char *rangestr; /* * If the range type name contains "range" then change that to diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index 086c4c8fb6f..48af8ee90a6 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -1078,7 +1078,7 @@ CREATE VIEW pg_stat_replication_slots AS s.total_txns, s.total_bytes, s.slotsync_skip_count, - s.slotsync_skip_at, + s.slotsync_last_skip, s.stats_reset FROM pg_replication_slots as r, LATERAL pg_stat_get_replication_slot(slot_name) as s diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 0e78628bf01..fd77334e5fd 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -7906,17 +7906,23 @@ apply_scanjoin_target_to_paths(PlannerInfo *root, check_stack_depth(); /* - * If the rel is partitioned, we want to drop its existing paths and - * generate new ones. This function would still be correct if we kept the - * existing paths: we'd modify them to generate the correct target above - * the partitioning Append, and then they'd compete on cost with paths - * generating the target below the Append. However, in our current cost - * model the latter way is always the same or cheaper cost, so modifying - * the existing paths would just be useless work. Moreover, when the cost - * is the same, varying roundoff errors might sometimes allow an existing - * path to be picked, resulting in undesirable cross-platform plan - * variations. So we drop old paths and thereby force the work to be done - * below the Append, except in the case of a non-parallel-safe target. + * If the rel only has Append and MergeAppend paths, we want to drop its + * existing paths and generate new ones. This function would still be + * correct if we kept the existing paths: we'd modify them to generate the + * correct target above the partitioning Append, and then they'd compete + * on cost with paths generating the target below the Append. However, in + * our current cost model the latter way is always the same or cheaper + * cost, so modifying the existing paths would just be useless work. + * Moreover, when the cost is the same, varying roundoff errors might + * sometimes allow an existing path to be picked, resulting in undesirable + * cross-platform plan variations. So we drop old paths and thereby force + * the work to be done below the Append. + * + * However, there are several cases when this optimization is not safe. If + * the rel isn't partitioned, then none of the paths will be Append or + * MergeAppend paths, so we should definitely not do this. If it is + * parititoned but is a joinrel, it may have Append and MergeAppend paths, + * but it can also have join paths that we can't afford to discard. * * Some care is needed, because we have to allow * generate_useful_gather_paths to see the old partial paths in the next @@ -7924,7 +7930,7 @@ apply_scanjoin_target_to_paths(PlannerInfo *root, * generate_useful_gather_paths to add path(s) to the main list, and * finally zap the partial pathlist. */ - if (rel_is_partitioned) + if (rel_is_partitioned && IS_SIMPLE_REL(rel)) rel->pathlist = NIL; /* @@ -7950,7 +7956,7 @@ apply_scanjoin_target_to_paths(PlannerInfo *root, } /* Finish dropping old paths for a partitioned rel, per comment above */ - if (rel_is_partitioned) + if (rel_is_partitioned && IS_SIMPLE_REL(rel)) rel->partial_pathlist = NIL; /* Extract SRF-free scan/join target. */ diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index 00d9a23b675..ce52d6ca81f 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -4019,7 +4019,7 @@ InitBufferManagerAccess(void) memset(&PrivateRefCountArray, 0, sizeof(PrivateRefCountArray)); - hash_ctl.keysize = sizeof(int32); + hash_ctl.keysize = sizeof(Buffer); hash_ctl.entrysize = sizeof(PrivateRefCountEntry); PrivateRefCountHash = hash_create("PrivateRefCount", 100, &hash_ctl, @@ -5799,7 +5799,7 @@ LockBufferForCleanup(Buffer buffer) SetStartupBufferPinWaitBufId(-1); } else - ProcWaitForSignal(WAIT_EVENT_BUFFER_PIN); + ProcWaitForSignal(WAIT_EVENT_BUFFER_CLEANUP); /* * Remove flag marking us as waiter. Normally this will not be set diff --git a/src/backend/storage/ipc/standby.c b/src/backend/storage/ipc/standby.c index 4222bdab078..fc45d72c79b 100644 --- a/src/backend/storage/ipc/standby.c +++ b/src/backend/storage/ipc/standby.c @@ -840,7 +840,7 @@ ResolveRecoveryConflictWithBufferPin(void) * SIGHUP signal handler, etc cannot do that because it uses the different * latch from that ProcWaitForSignal() waits on. */ - ProcWaitForSignal(WAIT_EVENT_BUFFER_PIN); + ProcWaitForSignal(WAIT_EVENT_BUFFER_CLEANUP); if (got_standby_delay_timeout) SendRecoveryConflictWithBufferPin(PROCSIG_RECOVERY_CONFLICT_BUFFERPIN); diff --git a/src/backend/tsearch/spell.c b/src/backend/tsearch/spell.c index 146801885d7..0dab31f0ddb 100644 --- a/src/backend/tsearch/spell.c +++ b/src/backend/tsearch/spell.c @@ -2320,7 +2320,7 @@ CheckCompoundAffixes(CMPDAffix **ptr, const char *word, int len, bool CheckInPla } else { - char *affbegin; + const char *affbegin; while ((*ptr)->affix) { diff --git a/src/backend/utils/activity/pgstat_replslot.c b/src/backend/utils/activity/pgstat_replslot.c index e08d33e8b4c..d757e00eb54 100644 --- a/src/backend/utils/activity/pgstat_replslot.c +++ b/src/backend/utils/activity/pgstat_replslot.c @@ -127,7 +127,7 @@ pgstat_report_replslotsync(ReplicationSlot *slot) statent = &shstatent->stats; statent->slotsync_skip_count += 1; - statent->slotsync_skip_at = GetCurrentTimestamp(); + statent->slotsync_last_skip = GetCurrentTimestamp(); pgstat_unlock_entry(entry_ref); } diff --git a/src/backend/utils/activity/wait_event.c b/src/backend/utils/activity/wait_event.c index d9b8f34a355..96d61f77f6e 100644 --- a/src/backend/utils/activity/wait_event.c +++ b/src/backend/utils/activity/wait_event.c @@ -29,7 +29,7 @@ static const char *pgstat_get_wait_activity(WaitEventActivity w); -static const char *pgstat_get_wait_bufferpin(WaitEventBufferPin w); +static const char *pgstat_get_wait_buffer(WaitEventBuffer w); static const char *pgstat_get_wait_client(WaitEventClient w); static const char *pgstat_get_wait_ipc(WaitEventIPC w); static const char *pgstat_get_wait_timeout(WaitEventTimeout w); @@ -389,8 +389,8 @@ pgstat_get_wait_event_type(uint32 wait_event_info) case PG_WAIT_LOCK: event_type = "Lock"; break; - case PG_WAIT_BUFFERPIN: - event_type = "BufferPin"; + case PG_WAIT_BUFFER: + event_type = "Buffer"; break; case PG_WAIT_ACTIVITY: event_type = "Activity"; @@ -453,11 +453,11 @@ pgstat_get_wait_event(uint32 wait_event_info) case PG_WAIT_INJECTIONPOINT: event_name = GetWaitEventCustomIdentifier(wait_event_info); break; - case PG_WAIT_BUFFERPIN: + case PG_WAIT_BUFFER: { - WaitEventBufferPin w = (WaitEventBufferPin) wait_event_info; + WaitEventBuffer w = (WaitEventBuffer) wait_event_info; - event_name = pgstat_get_wait_bufferpin(w); + event_name = pgstat_get_wait_buffer(w); break; } case PG_WAIT_ACTIVITY: diff --git a/src/backend/utils/activity/wait_event_names.txt b/src/backend/utils/activity/wait_event_names.txt index c1ac71ff7f2..1e5e368a5dc 100644 --- a/src/backend/utils/activity/wait_event_names.txt +++ b/src/backend/utils/activity/wait_event_names.txt @@ -279,12 +279,12 @@ WAL_WRITE "Waiting for a write to a WAL file." ABI_compatibility: # -# Wait Events - Buffer Pin +# Wait Events - Buffer # -Section: ClassName - WaitEventBufferPin +Section: ClassName - WaitEventBuffer -BUFFER_PIN "Waiting to acquire an exclusive pin on a buffer." +BUFFER_CLEANUP "Waiting to acquire an exclusive pin on a buffer. Buffer pin waits can be protracted if another process holds an open cursor that last read data from the buffer in question." ABI_compatibility: diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c index 5a1b8483bea..cc76bdde723 100644 --- a/src/backend/utils/adt/arrayfuncs.c +++ b/src/backend/utils/adt/arrayfuncs.c @@ -5687,7 +5687,7 @@ accumArrayResultArr(ArrayBuildStateArr *astate, MemoryContextSwitchTo(oldcontext); /* Release detoasted copy if any */ - if ((Pointer) arg != DatumGetPointer(dvalue)) + if (arg != DatumGetPointer(dvalue)) pfree(arg); return astate; diff --git a/src/backend/utils/adt/datum.c b/src/backend/utils/adt/datum.c index c2b111b829e..dabcca6f4c5 100644 --- a/src/backend/utils/adt/datum.c +++ b/src/backend/utils/adt/datum.c @@ -299,9 +299,9 @@ datum_image_eq(Datum value1, Datum value2, bool typByVal, int typLen) len1 - VARHDRSZ) == 0); /* Only free memory if it's a copy made here. */ - if ((Pointer) arg1val != DatumGetPointer(value1)) + if (arg1val != DatumGetPointer(value1)) pfree(arg1val); - if ((Pointer) arg2val != DatumGetPointer(value2)) + if (arg2val != DatumGetPointer(value2)) pfree(arg2val); } } @@ -355,7 +355,7 @@ datum_image_hash(Datum value, bool typByVal, int typLen) result = hash_bytes((unsigned char *) VARDATA_ANY(val), len - VARHDRSZ); /* Only free memory if it's a copy made here. */ - if ((Pointer) val != DatumGetPointer(value)) + if (val != DatumGetPointer(value)) pfree(val); } else if (typLen == -2) diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c index 5bfeda2ffde..c3cb022a400 100644 --- a/src/backend/utils/adt/formatting.c +++ b/src/backend/utils/adt/formatting.c @@ -1046,8 +1046,9 @@ typedef struct NUMProc char *number, /* string with number */ *number_p, /* pointer to current number position */ *inout, /* in / out buffer */ - *inout_p, /* pointer to current inout position */ - *last_relevant, /* last relevant number after decimal point */ + *inout_p; /* pointer to current inout position */ + + const char *last_relevant, /* last relevant number after decimal point */ *L_negative_sign, /* Locale */ *L_positive_sign, @@ -1118,7 +1119,7 @@ static FormatNode *NUM_cache(int len, NUMDesc *Num, const text *pars_str, bool * static char *int_to_roman(int number); static int roman_to_int(NUMProc *Np, size_t input_len); static void NUM_prepare_locale(NUMProc *Np); -static char *get_last_relevant_decnum(const char *num); +static const char *get_last_relevant_decnum(const char *num); static void NUM_numpart_from_char(NUMProc *Np, int id, size_t input_len); static void NUM_numpart_to_char(NUMProc *Np, int id); static char *NUM_processor(FormatNode *node, NUMDesc *Num, char *inout, @@ -5297,10 +5298,10 @@ NUM_prepare_locale(NUMProc *Np) * If there is no decimal point, return NULL (which will result in same * behavior as if FM hadn't been specified). */ -static char * +static const char * get_last_relevant_decnum(const char *num) { - char *result, + const char *result, *p = strchr(num, '.'); #ifdef DEBUG_TO_FROM_CHAR diff --git a/src/backend/utils/adt/jsonb_gin.c b/src/backend/utils/adt/jsonb_gin.c index 9b56248cf0b..a6d3332bb42 100644 --- a/src/backend/utils/adt/jsonb_gin.c +++ b/src/backend/utils/adt/jsonb_gin.c @@ -999,8 +999,7 @@ gin_consistent_jsonb(PG_FUNCTION_ARGS) if (nkeys > 0) { Assert(extra_data && extra_data[0]); - res = execute_jsp_gin_node((JsonPathGinNode *) extra_data[0], check, - false) != GIN_FALSE; + res = execute_jsp_gin_node(extra_data[0], check, false) != GIN_FALSE; } } else @@ -1060,8 +1059,7 @@ gin_triconsistent_jsonb(PG_FUNCTION_ARGS) if (nkeys > 0) { Assert(extra_data && extra_data[0]); - res = execute_jsp_gin_node((JsonPathGinNode *) extra_data[0], check, - true); + res = execute_jsp_gin_node(extra_data[0], check, true); /* Should always recheck the result */ if (res == GIN_TRUE) @@ -1258,8 +1256,7 @@ gin_consistent_jsonb_path(PG_FUNCTION_ARGS) if (nkeys > 0) { Assert(extra_data && extra_data[0]); - res = execute_jsp_gin_node((JsonPathGinNode *) extra_data[0], check, - false) != GIN_FALSE; + res = execute_jsp_gin_node(extra_data[0], check, false) != GIN_FALSE; } } else @@ -1302,8 +1299,7 @@ gin_triconsistent_jsonb_path(PG_FUNCTION_ARGS) if (nkeys > 0) { Assert(extra_data && extra_data[0]); - res = execute_jsp_gin_node((JsonPathGinNode *) extra_data[0], check, - true); + res = execute_jsp_gin_node(extra_data[0], check, true); /* Should always recheck the result */ if (res == GIN_TRUE) diff --git a/src/backend/utils/adt/like_support.c b/src/backend/utils/adt/like_support.c index 999f23f86d5..dca1d9be035 100644 --- a/src/backend/utils/adt/like_support.c +++ b/src/backend/utils/adt/like_support.c @@ -1035,7 +1035,7 @@ like_fixed_prefix(Const *patt_const, bool case_insensitive, Oid collation, pattlen = VARSIZE_ANY_EXHDR(bstr); patt = (char *) palloc(pattlen); memcpy(patt, VARDATA_ANY(bstr), pattlen); - Assert((Pointer) bstr == DatumGetPointer(patt_const->constvalue)); + Assert(bstr == DatumGetPointer(patt_const->constvalue)); } match = palloc(pattlen + 1); @@ -1577,7 +1577,7 @@ make_greater_string(const Const *str_const, FmgrInfo *ltproc, Oid collation) len = VARSIZE_ANY_EXHDR(bstr); workstr = (char *) palloc(len); memcpy(workstr, VARDATA_ANY(bstr), len); - Assert((Pointer) bstr == DatumGetPointer(str_const->constvalue)); + Assert(bstr == DatumGetPointer(str_const->constvalue)); cmpstr = str_const->constvalue; } else diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c index 2501007d981..1d626aecbe7 100644 --- a/src/backend/utils/adt/numeric.c +++ b/src/backend/utils/adt/numeric.c @@ -2194,7 +2194,7 @@ numeric_abbrev_convert(Datum original_datum, SortSupport ssup) } /* should happen only for external/compressed toasts */ - if ((Pointer) original_varatt != DatumGetPointer(original_datum)) + if (original_varatt != DatumGetPointer(original_datum)) pfree(original_varatt); return result; @@ -2284,9 +2284,9 @@ numeric_fast_cmp(Datum x, Datum y, SortSupport ssup) result = cmp_numerics(nx, ny); - if ((Pointer) nx != DatumGetPointer(x)) + if (nx != DatumGetPointer(x)) pfree(nx); - if ((Pointer) ny != DatumGetPointer(y)) + if (ny != DatumGetPointer(y)) pfree(ny); return result; diff --git a/src/backend/utils/adt/pg_dependencies.c b/src/backend/utils/adt/pg_dependencies.c index 56abb744177..236790b1439 100644 --- a/src/backend/utils/adt/pg_dependencies.c +++ b/src/backend/utils/adt/pg_dependencies.c @@ -494,7 +494,7 @@ dependencies_scalar(void *state, char *token, JsonTokenType tokentype) case DEPS_EXPECT_ATTNUM: attnum = pg_strtoint16_safe(token, (Node *) &escontext); - if (SOFT_ERROR_OCCURRED(&escontext)) + if (escontext.error_occurred) { errsave(parse->escontext, errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), @@ -539,7 +539,7 @@ dependencies_scalar(void *state, char *token, JsonTokenType tokentype) parse->dependency = (AttrNumber) pg_strtoint16_safe(token, (Node *) &escontext); - if (SOFT_ERROR_OCCURRED(&escontext)) + if (escontext.error_occurred) { errsave(parse->escontext, errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), @@ -569,7 +569,7 @@ dependencies_scalar(void *state, char *token, JsonTokenType tokentype) parse->degree = float8in_internal(token, NULL, "double", token, (Node *) &escontext); - if (SOFT_ERROR_OCCURRED(&escontext)) + if (escontext.error_occurred) { errsave(parse->escontext, errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c index b26257c0a8d..d73bab97c15 100644 --- a/src/backend/utils/adt/pg_locale.c +++ b/src/backend/utils/adt/pg_locale.c @@ -953,7 +953,7 @@ get_iso_localename(const char *winlocname) wchar_t wc_locale_name[LOCALE_NAME_MAX_LENGTH]; wchar_t buffer[LOCALE_NAME_MAX_LENGTH]; static char iso_lc_messages[LOCALE_NAME_MAX_LENGTH]; - char *period; + const char *period; int len; int ret_val; diff --git a/src/backend/utils/adt/pg_ndistinct.c b/src/backend/utils/adt/pg_ndistinct.c index 5292521b169..a2bce48fda0 100644 --- a/src/backend/utils/adt/pg_ndistinct.c +++ b/src/backend/utils/adt/pg_ndistinct.c @@ -435,7 +435,7 @@ ndistinct_scalar(void *state, char *token, JsonTokenType tokentype) case NDIST_EXPECT_ATTNUM: attnum = pg_strtoint16_safe(token, (Node *) &escontext); - if (SOFT_ERROR_OCCURRED(&escontext)) + if (escontext.error_occurred) { errsave(parse->escontext, errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), @@ -485,7 +485,7 @@ ndistinct_scalar(void *state, char *token, JsonTokenType tokentype) */ parse->ndistinct = pg_strtoint32_safe(token, (Node *) &escontext); - if (!SOFT_ERROR_OCCURRED(&escontext)) + if (!escontext.error_occurred) { parse->state = NDIST_EXPECT_KEY; return JSON_SUCCESS; diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c index 7e2ed69138a..ef6fffe60b9 100644 --- a/src/backend/utils/adt/pgstatfuncs.c +++ b/src/backend/utils/adt/pgstatfuncs.c @@ -2162,7 +2162,7 @@ pg_stat_get_replication_slot(PG_FUNCTION_ARGS) INT8OID, -1, 0); TupleDescInitEntry(tupdesc, (AttrNumber) 11, "slotsync_skip_count", INT8OID, -1, 0); - TupleDescInitEntry(tupdesc, (AttrNumber) 12, "slotsync_skip_at", + TupleDescInitEntry(tupdesc, (AttrNumber) 12, "slotsync_last_skip", TIMESTAMPTZOID, -1, 0); TupleDescInitEntry(tupdesc, (AttrNumber) 13, "stats_reset", TIMESTAMPTZOID, -1, 0); @@ -2192,10 +2192,10 @@ pg_stat_get_replication_slot(PG_FUNCTION_ARGS) values[9] = Int64GetDatum(slotent->total_bytes); values[10] = Int64GetDatum(slotent->slotsync_skip_count); - if (slotent->slotsync_skip_at == 0) + if (slotent->slotsync_last_skip == 0) nulls[11] = true; else - values[11] = TimestampTzGetDatum(slotent->slotsync_skip_at); + values[11] = TimestampTzGetDatum(slotent->slotsync_last_skip); if (slotent->stat_reset_timestamp == 0) nulls[12] = true; diff --git a/src/backend/utils/adt/rangetypes.c b/src/backend/utils/adt/rangetypes.c index b7e9f6dc0a8..d8e5130d642 100644 --- a/src/backend/utils/adt/rangetypes.c +++ b/src/backend/utils/adt/rangetypes.c @@ -1513,9 +1513,9 @@ range_fast_cmp(Datum a, Datum b, SortSupport ssup) cmp = range_cmp_bounds(typcache, &upper1, &upper2); } - if ((Pointer) range_a != DatumGetPointer(a)) + if (range_a != DatumGetPointer(a)) pfree(range_a); - if ((Pointer) range_b != DatumGetPointer(b)) + if (range_b != DatumGetPointer(b)) pfree(range_b); return cmp; diff --git a/src/backend/utils/adt/rowtypes.c b/src/backend/utils/adt/rowtypes.c index 9e5449f17d7..38e6fe1c43a 100644 --- a/src/backend/utils/adt/rowtypes.c +++ b/src/backend/utils/adt/rowtypes.c @@ -1529,9 +1529,9 @@ record_image_cmp(FunctionCallInfo fcinfo) if ((cmpresult == 0) && (len1 != len2)) cmpresult = (len1 < len2) ? -1 : 1; - if ((Pointer) arg1val != DatumGetPointer(values1[i1])) + if (arg1val != DatumGetPointer(values1[i1])) pfree(arg1val); - if ((Pointer) arg2val != DatumGetPointer(values2[i2])) + if (arg2val != DatumGetPointer(values2[i2])) pfree(arg2val); } else diff --git a/src/backend/utils/adt/xid8funcs.c b/src/backend/utils/adt/xid8funcs.c index a211a107767..4b3f7a69b3b 100644 --- a/src/backend/utils/adt/xid8funcs.c +++ b/src/backend/utils/adt/xid8funcs.c @@ -194,7 +194,7 @@ is_visible_fxid(FullTransactionId value, const pg_snapshot *snap) #ifdef USE_BSEARCH_IF_NXIP_GREATER else if (snap->nxip > USE_BSEARCH_IF_NXIP_GREATER) { - void *res; + const void *res; res = bsearch(&value, snap->xip, snap->nxip, sizeof(FullTransactionId), cmp_fxid); diff --git a/src/backend/utils/cache/evtcache.c b/src/backend/utils/cache/evtcache.c index b9d5a5998be..76ba2db5390 100644 --- a/src/backend/utils/cache/evtcache.c +++ b/src/backend/utils/cache/evtcache.c @@ -240,7 +240,7 @@ DecodeTextArrayToBitmapset(Datum array) } pfree(elems); - if ((Pointer) arr != DatumGetPointer(array)) + if (arr != DatumGetPointer(array)) pfree(arr); return bms; |
