postgresql/contrib/dblink
Tom Lane da7a1dc0d6 Refactor att_align_nominal() to improve performance.
Separate att_align_nominal() into two macros, similarly to what
was already done with att_align_datum() and att_align_pointer().
The inner macro att_nominal_alignby() is really just TYPEALIGN(),
while att_align_nominal() retains its previous API by mapping
TYPALIGN_xxx values to numbers of bytes to align to and then
calling att_nominal_alignby().  In support of this, split out
tupdesc.c's logic to do that mapping into a publicly visible
function typalign_to_alignby().

Having done that, we can replace performance-critical uses of
att_align_nominal() with att_nominal_alignby(), where the
typalign_to_alignby() mapping is done just once outside the loop.

In most places I settled for doing typalign_to_alignby() once
per function.  We could in many places pass the alignby value
in from the caller if we wanted to change function APIs for this
purpose; but I'm a bit loath to do that, especially for exported
APIs that extensions might call.  Replacing a char typalign
argument by a uint8 typalignby argument would be an API change
that compilers would fail to warn about, thus silently breaking
code in hard-to-debug ways.  I did revise the APIs of array_iter_setup
and array_iter_next, moving the element type attribute arguments to
the former; if any external code uses those, the argument-count
change will cause visible compile failures.

Performance testing shows that ExecEvalScalarArrayOp is sped up by
about 10% by this change, when using a simple per-element function
such as int8eq.  I did not check any of the other loops optimized
here, but it's reasonable to expect similar gains.

Although the motivation for creating this patch was to avoid a
performance loss if we add some more typalign values, it evidently
is worth doing whether that patch lands or not.

Discussion: https://postgr.es/m/1127261.1769649624@sss.pgh.pa.us
2026-02-02 14:39:50 -05:00
..
expected oauth: Disallow OAuth connections via postgres_fdw/dblink 2025-04-29 13:08:24 -07:00
sql oauth: Disallow OAuth connections via postgres_fdw/dblink 2025-04-29 13:08:24 -07:00
t Update copyright for 2026 2026-01-01 13:24:10 -05:00
.gitignore Support "make check" in contrib 2011-04-25 22:27:11 +03:00
dblink--1.0--1.1.sql Fix typo in update scripts for some contrib modules. 2013-07-19 04:13:01 +09:00
dblink--1.1--1.2.sql Fix parallel-safety markings for contrib/dblink. 2016-06-17 23:08:21 -04:00
dblink--1.2.sql Fix parallel-safety markings for contrib/dblink. 2016-06-17 23:08:21 -04:00
dblink.c Refactor att_align_nominal() to improve performance. 2026-02-02 14:39:50 -05:00
dblink.control Update dblink extension for parallel query. 2016-06-17 15:18:44 -04:00
Makefile dblink: SCRAM authentication pass-through 2025-03-26 10:49:23 +01:00
meson.build Update copyright for 2026 2026-01-01 13:24:10 -05:00
pg_service.conf Diagnose incompatible OpenLDAP versions during build and test. 2014-07-22 11:01:03 -04:00