mirror of
https://github.com/postgres/postgres.git
synced 2025-10-15 05:46:52 +03:00
Generalize hash and ordering support in amapi
Stop comparing access method OID values against HASH_AM_OID and BTREE_AM_OID, and instead check the IndexAmRoutine for an index to see if it advertises its ability to perform the necessary ordering, hashing, or cross-type comparing functionality. A field amcanorder already existed, this uses it more widely. Fields amcanhash and amcancrosscompare are added for the other purposes. Author: Mark Dilger <mark.dilger@enterprisedb.com> Discussion: https://www.postgresql.org/message-id/flat/E72EAA49-354D-4C2E-8EB9-255197F55330@enterprisedb.com
This commit is contained in:
8
src/backend/utils/cache/lsyscache.c
vendored
8
src/backend/utils/cache/lsyscache.c
vendored
@@ -716,10 +716,9 @@ equality_ops_are_compatible(Oid opno1, Oid opno2)
|
||||
{
|
||||
HeapTuple op_tuple = &catlist->members[i]->tuple;
|
||||
Form_pg_amop op_form = (Form_pg_amop) GETSTRUCT(op_tuple);
|
||||
IndexAmRoutine *amroutine = GetIndexAmRoutineByAmId(op_form->amopmethod, false);
|
||||
|
||||
/* must be btree or hash */
|
||||
if (op_form->amopmethod == BTREE_AM_OID ||
|
||||
op_form->amopmethod == HASH_AM_OID)
|
||||
if (amroutine->amcancrosscompare)
|
||||
{
|
||||
if (op_in_opfamily(opno2, op_form->amopfamily))
|
||||
{
|
||||
@@ -767,8 +766,9 @@ comparison_ops_are_compatible(Oid opno1, Oid opno2)
|
||||
{
|
||||
HeapTuple op_tuple = &catlist->members[i]->tuple;
|
||||
Form_pg_amop op_form = (Form_pg_amop) GETSTRUCT(op_tuple);
|
||||
IndexAmRoutine *amroutine = GetIndexAmRoutineByAmId(op_form->amopmethod, false);
|
||||
|
||||
if (op_form->amopmethod == BTREE_AM_OID)
|
||||
if (amroutine->amcanorder && amroutine->amcancrosscompare)
|
||||
{
|
||||
if (op_in_opfamily(opno2, op_form->amopfamily))
|
||||
{
|
||||
|
Reference in New Issue
Block a user