diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2006-12-23 00:43:13 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2006-12-23 00:43:13 +0000 |
commit | a78fcfb5124379532ce35f3076679f04bd987d60 (patch) | |
tree | 345204410d4f015a9d20ff55ecc38de3d371c459 /src/include/utils/typcache.h | |
parent | d31ccb6c3e73901c44865bfce3f5dd20774f7a89 (diff) | |
download | postgresql-a78fcfb5124379532ce35f3076679f04bd987d60.tar.gz |
Restructure operator classes to allow improved handling of cross-data-type
cases. Operator classes now exist within "operator families". While most
families are equivalent to a single class, related classes can be grouped
into one family to represent the fact that they are semantically compatible.
Cross-type operators are now naturally adjunct parts of a family, without
having to wedge them into a particular opclass as we had done originally.
This commit restructures the catalogs and cleans up enough of the fallout so
that everything still works at least as well as before, but most of the work
needed to actually improve the planner's behavior will come later. Also,
there are not yet CREATE/DROP/ALTER OPERATOR FAMILY commands; the only way
to create a new family right now is to allow CREATE OPERATOR CLASS to make
one by default. I owe some more documentation work, too. But that can all
be done in smaller pieces once this infrastructure is in place.
Diffstat (limited to 'src/include/utils/typcache.h')
-rw-r--r-- | src/include/utils/typcache.h | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/include/utils/typcache.h b/src/include/utils/typcache.h index 673bf176ad..5c8b0e850a 100644 --- a/src/include/utils/typcache.h +++ b/src/include/utils/typcache.h @@ -9,7 +9,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/utils/typcache.h,v 1.12 2006/10/04 00:30:11 momjian Exp $ + * $PostgreSQL: pgsql/src/include/utils/typcache.h,v 1.13 2006/12/23 00:43:13 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -33,17 +33,19 @@ typedef struct TypeCacheEntry Oid typrelid; /* - * Information obtained from opclass entries + * Information obtained from opfamily entries * * These will be InvalidOid if no match could be found, or if the * information hasn't yet been requested. */ - Oid btree_opc; /* OID of the default btree opclass */ - Oid hash_opc; /* OID of the default hash opclass */ - Oid eq_opr; /* OID of the equality operator */ - Oid lt_opr; /* OID of the less-than operator */ - Oid gt_opr; /* OID of the greater-than operator */ - Oid cmp_proc; /* OID of the btree comparison function */ + Oid btree_opf; /* the default btree opclass' family */ + Oid btree_opintype; /* the default btree opclass' opcintype */ + Oid hash_opf; /* the default hash opclass' family */ + Oid hash_opintype; /* the default hash opclass' opcintype */ + Oid eq_opr; /* the equality operator */ + Oid lt_opr; /* the less-than operator */ + Oid gt_opr; /* the greater-than operator */ + Oid cmp_proc; /* the btree comparison function */ /* * Pre-set-up fmgr call info for the equality operator and the btree @@ -71,6 +73,7 @@ typedef struct TypeCacheEntry #define TYPECACHE_EQ_OPR_FINFO 0x0010 #define TYPECACHE_CMP_PROC_FINFO 0x0020 #define TYPECACHE_TUPDESC 0x0040 +#define TYPECACHE_BTREE_OPFAMILY 0x0080 extern TypeCacheEntry *lookup_type_cache(Oid type_id, int flags); |