123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- /*-------------------------------------------------------------------------
- *
- * pg_amop.h
- * definition of the "access method operator" system catalog (pg_amop)
- *
- * The amop table identifies the operators associated with each index operator
- * family and operator class (classes are subsets of families). An associated
- * operator can be either a search operator or an ordering operator, as
- * identified by amoppurpose.
- *
- * The primary key for this table is <amopfamily, amoplefttype, amoprighttype,
- * amopstrategy>. amoplefttype and amoprighttype are just copies of the
- * operator's oprleft/oprright, ie its declared input data types. The
- * "default" operators for a particular opclass within the family are those
- * with amoplefttype = amoprighttype = opclass's opcintype. An opfamily may
- * also contain other operators, typically cross-data-type operators. All the
- * operators within a family are supposed to be compatible, in a way that is
- * defined by each individual index AM.
- *
- * We also keep a unique index on <amopopr, amoppurpose, amopfamily>, so that
- * we can use a syscache to quickly answer questions of the form "is this
- * operator in this opfamily, and if so what are its semantics with respect to
- * the family?" This implies that the same operator cannot be listed for
- * multiple strategy numbers within a single opfamily, with the exception that
- * it's possible to list it for both search and ordering purposes (with
- * different strategy numbers for the two purposes).
- *
- * amopmethod is a copy of the owning opfamily's opfmethod field. This is an
- * intentional denormalization of the catalogs to buy lookup speed.
- *
- *
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * src/include/catalog/pg_amop.h
- *
- * NOTES
- * The Catalog.pm module reads this file and derives schema
- * information.
- *
- *-------------------------------------------------------------------------
- */
- #ifndef PG_AMOP_H
- #define PG_AMOP_H
- #include "catalog/genbki.h"
- #include "catalog/pg_amop_d.h"
- /* ----------------
- * pg_amop definition. cpp turns this into
- * typedef struct FormData_pg_amop
- * ----------------
- */
- CATALOG(pg_amop,2602,AccessMethodOperatorRelationId)
- {
- Oid oid; /* oid */
- /* the index opfamily this entry is for */
- Oid amopfamily BKI_LOOKUP(pg_opfamily);
- /* operator's left input data type */
- Oid amoplefttype BKI_LOOKUP(pg_type);
- /* operator's right input data type */
- Oid amoprighttype BKI_LOOKUP(pg_type);
- /* operator strategy number */
- int16 amopstrategy;
- /* is operator for 's'earch or 'o'rdering? */
- char amoppurpose BKI_DEFAULT(s);
- /* the operator's pg_operator OID */
- Oid amopopr BKI_LOOKUP(pg_operator);
- /* the index access method this entry is for */
- Oid amopmethod BKI_LOOKUP(pg_am);
- /* ordering opfamily OID, or 0 if search op */
- Oid amopsortfamily BKI_DEFAULT(0) BKI_LOOKUP_OPT(pg_opfamily);
- } FormData_pg_amop;
- /* ----------------
- * Form_pg_amop corresponds to a pointer to a tuple with
- * the format of pg_amop relation.
- * ----------------
- */
- typedef FormData_pg_amop *Form_pg_amop;
- DECLARE_UNIQUE_INDEX(pg_amop_fam_strat_index, 2653, AccessMethodStrategyIndexId, on pg_amop using btree(amopfamily oid_ops, amoplefttype oid_ops, amoprighttype oid_ops, amopstrategy int2_ops));
- DECLARE_UNIQUE_INDEX(pg_amop_opr_fam_index, 2654, AccessMethodOperatorIndexId, on pg_amop using btree(amopopr oid_ops, amoppurpose char_ops, amopfamily oid_ops));
- DECLARE_UNIQUE_INDEX_PKEY(pg_amop_oid_index, 2756, AccessMethodOperatorOidIndexId, on pg_amop using btree(oid oid_ops));
- #ifdef EXPOSE_TO_CLIENT_CODE
- /* allowed values of amoppurpose: */
- #define AMOP_SEARCH 's' /* operator is for search */
- #define AMOP_ORDER 'o' /* operator is for ordering */
- #endif /* EXPOSE_TO_CLIENT_CODE */
- #endif /* PG_AMOP_H */
|