]> granicus.if.org Git - postgresql/commit
Improve BRIN infra, minmax opclass and regression test
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Thu, 7 May 2015 16:02:22 +0000 (13:02 -0300)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Thu, 7 May 2015 16:02:22 +0000 (13:02 -0300)
commitdb5f98ab4fa44bc563ec62d7b1aada4fc276d9b2
tree0b05cf901eed7ffab21935a5f6491e8215bbe670
parent7be47c56af3d3013955c91c2877c08f2a0e3e6a2
Improve BRIN infra, minmax opclass and regression test

The minmax opclass was using the wrong support functions when
cross-datatypes queries were run.  Instead of trying to fix the
pg_amproc definitions (which apparently is not possible), use the
already correct pg_amop entries instead.  This requires jumping through
more hoops (read: extra syscache lookups) to obtain the underlying
functions to execute, but it is necessary for correctness.

Author: Emre Hasegeli, tweaked by Álvaro
Review: Andreas Karlsson

Also change BrinOpcInfo to record each stored type's typecache entry
instead of just the OID.  Turns out that the full type cache is
necessary in brin_deform_tuple: the original code used the indexed
type's byval and typlen properties to extract the stored tuple, which is
correct in Minmax; but in other implementations that want to store
something different, that's wrong.  The realization that this is a bug
comes from Emre also, but I did not use his patch.

I also adopted Emre's regression test code (with smallish changes),
which is more complete.
contrib/pageinspect/brinfuncs.c
doc/src/sgml/brin.sgml
src/backend/access/brin/brin_minmax.c
src/backend/access/brin/brin_tuple.c
src/include/access/brin_internal.h
src/include/catalog/catversion.h
src/include/catalog/pg_amproc.h
src/include/catalog/pg_opclass.h
src/test/regress/expected/brin.out
src/test/regress/sql/brin.sql