pgsql: Fix alignment and toasting bugs in range types. - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Fix alignment and toasting bugs in range types.
Date
Msg-id E1RQ8yY-0004sE-By@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Fix alignment and toasting bugs in range types.

A range type whose element type has 'd' alignment must have 'd' alignment
itself, else there is no guarantee that the element value can be used
in-place.  (Because range_deserialize uses att_align_pointer which forcibly
aligns the given pointer, violations of this rule did not lead to SIGBUS
but rather to garbage data being extracted, as in one of the added
regression test cases.)

Also, you can't put a toast pointer inside a range datum, since the
referenced value could disappear with the range datum still present.
For consistency with the handling of arrays and records, I also forced
decompression of in-line-compressed bound values.  It would work to store
them as-is, but our policy is to avoid situations that might result in
double compression.

Add assorted regression tests for this, and bump catversion because of
fixes to built-in pg_type entries.

Also some marginal cleanup of inconsistent/unnecessary error checks.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/ad50934eaadb626de682defe0ad270bbf31e92a2

Modified Files
--------------
src/backend/commands/typecmds.c           |   34 +++--
src/backend/utils/adt/rangetypes.c        |  219 +++++++++++++++--------------
src/include/catalog/catversion.h          |    2 +-
src/include/catalog/pg_type.h             |   18 ++--
src/test/regress/expected/rangetypes.out  |   10 ++-
src/test/regress/expected/type_sanity.out |   32 ++++
src/test/regress/sql/rangetypes.sql       |    6 +-
src/test/regress/sql/type_sanity.sql      |   24 +++
8 files changed, 215 insertions(+), 130 deletions(-)


pgsql-committers by date:

Previous
From: Tom Lane
Date:
Subject: pgsql: Update oidjoins regression test to match git HEAD.
Next
From: Tom Lane
Date:
Subject: pgsql: Restructure function-internal caching in the range type code.