pgsql: Fix alignment and toasting bugs in range types.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Fix alignment and toasting bugs in range types.
Date: 2011-11-15 02:42:18
Message-ID: E1RQ8yY-0004sE-By@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2011-11-15 18:06:24 pgsql: Restructure function-internal caching in the range type code.
Previous Message Tom Lane 2011-11-15 01:28:54 pgsql: Update oidjoins regression test to match git HEAD.