summaryrefslogtreecommitdiff
path: root/contrib/pageinspect
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2015-05-07 13:02:22 -0300
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2015-05-07 13:02:22 -0300
commitdb5f98ab4fa44bc563ec62d7b1aada4fc276d9b2 (patch)
tree0b05cf901eed7ffab21935a5f6491e8215bbe670 /contrib/pageinspect
parent7be47c56af3d3013955c91c2877c08f2a0e3e6a2 (diff)
downloadpostgresql-db5f98ab4fa44bc563ec62d7b1aada4fc276d9b2.tar.gz
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.
Diffstat (limited to 'contrib/pageinspect')
-rw-r--r--contrib/pageinspect/brinfuncs.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/contrib/pageinspect/brinfuncs.c b/contrib/pageinspect/brinfuncs.c
index 1b15a7bdfe..bd3191d5d2 100644
--- a/contrib/pageinspect/brinfuncs.c
+++ b/contrib/pageinspect/brinfuncs.c
@@ -181,7 +181,7 @@ brin_page_items(PG_FUNCTION_ARGS)
column->nstored = opcinfo->oi_nstored;
for (i = 0; i < opcinfo->oi_nstored; i++)
{
- getTypeOutputInfo(opcinfo->oi_typids[i], &output, &isVarlena);
+ getTypeOutputInfo(opcinfo->oi_typcache[i]->type_id, &output, &isVarlena);
fmgr_info(output, &column->outputFn[i]);
}