aboutsummaryrefslogtreecommitdiff
path: root/src/include/utils/typcache.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/utils/typcache.h')
-rw-r--r--src/include/utils/typcache.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/include/utils/typcache.h b/src/include/utils/typcache.h
new file mode 100644
index 00000000000..ae080d3feed
--- /dev/null
+++ b/src/include/utils/typcache.h
@@ -0,0 +1,66 @@
+/*-------------------------------------------------------------------------
+ *
+ * typcache.h
+ * Type cache definitions.
+ *
+ * The type cache exists to speed lookup of certain information about data
+ * types that is not directly available from a type's pg_type row.
+ *
+ * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * $Id: typcache.h,v 1.1 2003/08/17 19:58:06 tgl Exp $
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef TYPCACHE_H
+#define TYPCACHE_H
+
+#include "fmgr.h"
+
+
+typedef struct TypeCacheEntry
+{
+ /* typeId is the hash lookup key and MUST BE FIRST */
+ Oid type_id; /* OID of the data type */
+
+ /* some subsidiary information copied from the pg_type row */
+ int16 typlen;
+ bool typbyval;
+ char typalign;
+
+ /*
+ * Information obtained from opclass 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 */
+
+ /*
+ * Pre-set-up fmgr call info for the equality operator and the btree
+ * comparison function. These are kept in the type cache to avoid
+ * problems with memory leaks in repeated calls to array_eq and array_cmp.
+ * There is not currently a need to maintain call info for the lt_opr
+ * or gt_opr.
+ */
+ FmgrInfo eq_opr_finfo;
+ FmgrInfo cmp_proc_finfo;
+} TypeCacheEntry;
+
+/* Bit flags to indicate which fields a given caller needs to have set */
+#define TYPECACHE_EQ_OPR 0x0001
+#define TYPECACHE_LT_OPR 0x0002
+#define TYPECACHE_GT_OPR 0x0004
+#define TYPECACHE_CMP_PROC 0x0008
+#define TYPECACHE_EQ_OPR_FINFO 0x0010
+#define TYPECACHE_CMP_PROC_FINFO 0x0020
+
+extern TypeCacheEntry *lookup_type_cache(Oid type_id, int flags);
+
+#endif /* TYPCACHE_H */