mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
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.
This commit is contained in:
@ -428,8 +428,8 @@ typedef struct BrinOpcInfo
|
||||
/* Opaque pointer for the opclass' private use */
|
||||
void *oi_opaque;
|
||||
|
||||
/* Type IDs of the stored columns */
|
||||
Oid oi_typids[FLEXIBLE_ARRAY_MEMBER];
|
||||
/* Type cache entries of the stored columns */
|
||||
TypeCacheEntry *oi_typcache[FLEXIBLE_ARRAY_MEMBER];
|
||||
} BrinOpcInfo;
|
||||
</programlisting>
|
||||
<structname>BrinOpcInfo</>.<structfield>oi_opaque</> can be used by the
|
||||
|
Reference in New Issue
Block a user