1 /*-------------------------------------------------------------------------
4 * definition of the system "opclass" relation (pg_opclass)
5 * along with the relation's initial contents.
7 * The primary key for this table is <opcmethod, opcname, opcnamespace> ---
8 * that is, there is a row for each valid combination of opclass name and
9 * index access method type. This row specifies the expected input data type
10 * for the opclass (the type of the heap column, or the expression output type
11 * in the case of an index expression). Note that types binary-coercible to
12 * the specified type will be accepted too.
14 * For a given <opcmethod, opcintype> pair, there can be at most one row that
15 * has opcdefault = true; this row is the default opclass for such data in
16 * such an index. (This is not currently enforced by an index, because we
17 * don't support partial indexes on system catalogs.)
19 * Normally opckeytype = InvalidOid (zero), indicating that the data stored
20 * in the index is the same as the data in the indexed column. If opckeytype
21 * is nonzero then it indicates that a conversion step is needed to produce
22 * the stored index data, which will be of type opckeytype (which might be
23 * the same or different from the input datatype). Performing such a
24 * conversion is the responsibility of the index access method --- not all
28 * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
29 * Portions Copyright (c) 1994, Regents of the University of California
34 * the genbki.sh script reads this file and generates .bki
35 * information from the DATA() statements.
37 *-------------------------------------------------------------------------
42 #include "catalog/genbki.h"
45 * pg_opclass definition. cpp turns this into
46 * typedef struct FormData_pg_opclass
49 #define OperatorClassRelationId 2616
51 CATALOG(pg_opclass
,2616)
53 Oid opcmethod
; /* index access method opclass is for */
54 NameData opcname
; /* name of this opclass */
55 Oid opcnamespace
; /* namespace of this opclass */
56 Oid opcowner
; /* opclass owner */
57 Oid opcfamily
; /* containing operator family */
58 Oid opcintype
; /* type of data indexed by opclass */
59 bool opcdefault
; /* T if opclass is default for opcintype */
60 Oid opckeytype
; /* type of data in index, or InvalidOid */
61 } FormData_pg_opclass
;
64 * Form_pg_opclass corresponds to a pointer to a tuple with
65 * the format of pg_opclass relation.
68 typedef FormData_pg_opclass
*Form_pg_opclass
;
71 * compiler constants for pg_opclass
74 #define Natts_pg_opclass 8
75 #define Anum_pg_opclass_opcmethod 1
76 #define Anum_pg_opclass_opcname 2
77 #define Anum_pg_opclass_opcnamespace 3
78 #define Anum_pg_opclass_opcowner 4
79 #define Anum_pg_opclass_opcfamily 5
80 #define Anum_pg_opclass_opcintype 6
81 #define Anum_pg_opclass_opcdefault 7
82 #define Anum_pg_opclass_opckeytype 8
85 * initial contents of pg_opclass
87 * Note: we hard-wire an OID only for a few entries that have to be explicitly
88 * referenced in the C code for bootstrapping purposes. The rest get OIDs
89 * assigned on-the-fly during initdb.
93 DATA(insert ( 403 abstime_ops PGNSP PGUID
421 702 t
0 ));
94 DATA(insert ( 403 array_ops PGNSP PGUID
397 2277 t
0 ));
95 DATA(insert ( 403 bit_ops PGNSP PGUID
423 1560 t
0 ));
96 DATA(insert ( 403 bool_ops PGNSP PGUID
424 16 t
0 ));
97 DATA(insert ( 403 bpchar_ops PGNSP PGUID
426 1042 t
0 ));
98 DATA(insert ( 405 bpchar_ops PGNSP PGUID
427 1042 t
0 ));
99 DATA(insert ( 403 bytea_ops PGNSP PGUID
428 17 t
0 ));
100 DATA(insert ( 403 char_ops PGNSP PGUID
429 18 t
0 ));
101 DATA(insert ( 405 char_ops PGNSP PGUID
431 18 t
0 ));
102 DATA(insert ( 403 cidr_ops PGNSP PGUID
1974 869 f
0 ));
103 DATA(insert ( 405 cidr_ops PGNSP PGUID
1975 869 f
0 ));
104 DATA(insert ( 403 date_ops PGNSP PGUID
434 1082 t
0 ));
105 DATA(insert ( 405 date_ops PGNSP PGUID
435 1082 t
0 ));
106 DATA(insert ( 403 float4_ops PGNSP PGUID
1970 700 t
0 ));
107 DATA(insert ( 405 float4_ops PGNSP PGUID
1971 700 t
0 ));
108 DATA(insert ( 403 float8_ops PGNSP PGUID
1970 701 t
0 ));
109 DATA(insert ( 405 float8_ops PGNSP PGUID
1971 701 t
0 ));
110 DATA(insert ( 403 inet_ops PGNSP PGUID
1974 869 t
0 ));
111 DATA(insert ( 405 inet_ops PGNSP PGUID
1975 869 t
0 ));
112 DATA(insert OID
= 1979 ( 403 int2_ops PGNSP PGUID
1976 21 t
0 ));
113 #define INT2_BTREE_OPS_OID 1979
114 DATA(insert ( 405 int2_ops PGNSP PGUID
1977 21 t
0 ));
115 DATA(insert OID
= 1978 ( 403 int4_ops PGNSP PGUID
1976 23 t
0 ));
116 #define INT4_BTREE_OPS_OID 1978
117 DATA(insert ( 405 int4_ops PGNSP PGUID
1977 23 t
0 ));
118 DATA(insert ( 403 int8_ops PGNSP PGUID
1976 20 t
0 ));
119 DATA(insert ( 405 int8_ops PGNSP PGUID
1977 20 t
0 ));
120 DATA(insert ( 403 interval_ops PGNSP PGUID
1982 1186 t
0 ));
121 DATA(insert ( 405 interval_ops PGNSP PGUID
1983 1186 t
0 ));
122 DATA(insert ( 403 macaddr_ops PGNSP PGUID
1984 829 t
0 ));
123 DATA(insert ( 405 macaddr_ops PGNSP PGUID
1985 829 t
0 ));
125 * Here's an ugly little hack to save space in the system catalog indexes.
126 * btree doesn't ordinarily allow a storage type different from input type;
127 * but cstring and name are the same thing except for trailing padding,
128 * and we can safely omit that within an index entry. So we declare the
129 * btree opclass for name as using cstring storage type.
131 DATA(insert ( 403 name_ops PGNSP PGUID
1986 19 t
2275 ));
132 DATA(insert ( 405 name_ops PGNSP PGUID
1987 19 t
0 ));
133 DATA(insert ( 403 numeric_ops PGNSP PGUID
1988 1700 t
0 ));
134 DATA(insert ( 405 numeric_ops PGNSP PGUID
1998 1700 t
0 ));
135 DATA(insert OID
= 1981 ( 403 oid_ops PGNSP PGUID
1989 26 t
0 ));
136 #define OID_BTREE_OPS_OID 1981
137 DATA(insert ( 405 oid_ops PGNSP PGUID
1990 26 t
0 ));
138 DATA(insert ( 403 oidvector_ops PGNSP PGUID
1991 30 t
0 ));
139 DATA(insert ( 405 oidvector_ops PGNSP PGUID
1992 30 t
0 ));
140 DATA(insert ( 403 record_ops PGNSP PGUID
2994 2249 t
0 ));
141 DATA(insert ( 403 text_ops PGNSP PGUID
1994 25 t
0 ));
142 DATA(insert ( 405 text_ops PGNSP PGUID
1995 25 t
0 ));
143 DATA(insert ( 403 time_ops PGNSP PGUID
1996 1083 t
0 ));
144 DATA(insert ( 405 time_ops PGNSP PGUID
1997 1083 t
0 ));
145 DATA(insert ( 403 timestamptz_ops PGNSP PGUID
434 1184 t
0 ));
146 DATA(insert ( 405 timestamptz_ops PGNSP PGUID
1999 1184 t
0 ));
147 DATA(insert ( 403 timetz_ops PGNSP PGUID
2000 1266 t
0 ));
148 DATA(insert ( 405 timetz_ops PGNSP PGUID
2001 1266 t
0 ));
149 DATA(insert ( 403 varbit_ops PGNSP PGUID
2002 1562 t
0 ));
150 DATA(insert ( 403 varchar_ops PGNSP PGUID
1994 25 f
0 ));
151 DATA(insert ( 405 varchar_ops PGNSP PGUID
1995 25 f
0 ));
152 DATA(insert ( 403 timestamp_ops PGNSP PGUID
434 1114 t
0 ));
153 DATA(insert ( 405 timestamp_ops PGNSP PGUID
2040 1114 t
0 ));
154 DATA(insert ( 403 text_pattern_ops PGNSP PGUID
2095 25 f
0 ));
155 DATA(insert ( 403 varchar_pattern_ops PGNSP PGUID
2095 25 f
0 ));
156 DATA(insert ( 403 bpchar_pattern_ops PGNSP PGUID
2097 1042 f
0 ));
157 DATA(insert ( 403 money_ops PGNSP PGUID
2099 790 t
0 ));
158 DATA(insert ( 405 bool_ops PGNSP PGUID
2222 16 t
0 ));
159 DATA(insert ( 405 bytea_ops PGNSP PGUID
2223 17 t
0 ));
160 DATA(insert ( 405 int2vector_ops PGNSP PGUID
2224 22 t
0 ));
161 DATA(insert ( 403 tid_ops PGNSP PGUID
2789 27 t
0 ));
162 DATA(insert ( 405 xid_ops PGNSP PGUID
2225 28 t
0 ));
163 DATA(insert ( 405 cid_ops PGNSP PGUID
2226 29 t
0 ));
164 DATA(insert ( 405 abstime_ops PGNSP PGUID
2227 702 t
0 ));
165 DATA(insert ( 405 reltime_ops PGNSP PGUID
2228 703 t
0 ));
166 DATA(insert ( 405 text_pattern_ops PGNSP PGUID
2229 25 f
0 ));
167 DATA(insert ( 405 varchar_pattern_ops PGNSP PGUID
2229 25 f
0 ));
168 DATA(insert ( 405 bpchar_pattern_ops PGNSP PGUID
2231 1042 f
0 ));
169 DATA(insert ( 403 reltime_ops PGNSP PGUID
2233 703 t
0 ));
170 DATA(insert ( 403 tinterval_ops PGNSP PGUID
2234 704 t
0 ));
171 DATA(insert ( 405 aclitem_ops PGNSP PGUID
2235 1033 t
0 ));
172 DATA(insert ( 783 box_ops PGNSP PGUID
2593 603 t
0 ));
173 DATA(insert ( 783 poly_ops PGNSP PGUID
2594 604 t
603 ));
174 DATA(insert ( 783 circle_ops PGNSP PGUID
2595 718 t
603 ));
175 DATA(insert ( 2742 _int4_ops PGNSP PGUID
2745 1007 t
23 ));
176 DATA(insert ( 2742 _text_ops PGNSP PGUID
2745 1009 t
25 ));
177 DATA(insert ( 2742 _abstime_ops PGNSP PGUID
2745 1023 t
702 ));
178 DATA(insert ( 2742 _bit_ops PGNSP PGUID
2745 1561 t
1560 ));
179 DATA(insert ( 2742 _bool_ops PGNSP PGUID
2745 1000 t
16 ));
180 DATA(insert ( 2742 _bpchar_ops PGNSP PGUID
2745 1014 t
1042 ));
181 DATA(insert ( 2742 _bytea_ops PGNSP PGUID
2745 1001 t
17 ));
182 DATA(insert ( 2742 _char_ops PGNSP PGUID
2745 1002 t
18 ));
183 DATA(insert ( 2742 _cidr_ops PGNSP PGUID
2745 651 t
650 ));
184 DATA(insert ( 2742 _date_ops PGNSP PGUID
2745 1182 t
1082 ));
185 DATA(insert ( 2742 _float4_ops PGNSP PGUID
2745 1021 t
700 ));
186 DATA(insert ( 2742 _float8_ops PGNSP PGUID
2745 1022 t
701 ));
187 DATA(insert ( 2742 _inet_ops PGNSP PGUID
2745 1041 t
869 ));
188 DATA(insert ( 2742 _int2_ops PGNSP PGUID
2745 1005 t
21 ));
189 DATA(insert ( 2742 _int8_ops PGNSP PGUID
2745 1016 t
20 ));
190 DATA(insert ( 2742 _interval_ops PGNSP PGUID
2745 1187 t
1186 ));
191 DATA(insert ( 2742 _macaddr_ops PGNSP PGUID
2745 1040 t
829 ));
192 DATA(insert ( 2742 _name_ops PGNSP PGUID
2745 1003 t
19 ));
193 DATA(insert ( 2742 _numeric_ops PGNSP PGUID
2745 1231 t
1700 ));
194 DATA(insert ( 2742 _oid_ops PGNSP PGUID
2745 1028 t
26 ));
195 DATA(insert ( 2742 _oidvector_ops PGNSP PGUID
2745 1013 t
30 ));
196 DATA(insert ( 2742 _time_ops PGNSP PGUID
2745 1183 t
1083 ));
197 DATA(insert ( 2742 _timestamptz_ops PGNSP PGUID
2745 1185 t
1184 ));
198 DATA(insert ( 2742 _timetz_ops PGNSP PGUID
2745 1270 t
1266 ));
199 DATA(insert ( 2742 _varbit_ops PGNSP PGUID
2745 1563 t
1562 ));
200 DATA(insert ( 2742 _varchar_ops PGNSP PGUID
2745 1015 t
1043 ));
201 DATA(insert ( 2742 _timestamp_ops PGNSP PGUID
2745 1115 t
1114 ));
202 DATA(insert ( 2742 _money_ops PGNSP PGUID
2745 791 t
790 ));
203 DATA(insert ( 2742 _reltime_ops PGNSP PGUID
2745 1024 t
703 ));
204 DATA(insert ( 2742 _tinterval_ops PGNSP PGUID
2745 1025 t
704 ));
205 DATA(insert ( 403 uuid_ops PGNSP PGUID
2968 2950 t
0 ));
206 DATA(insert ( 405 uuid_ops PGNSP PGUID
2969 2950 t
0 ));
207 DATA(insert ( 403 enum_ops PGNSP PGUID
3522 3500 t
0 ));
208 DATA(insert ( 405 enum_ops PGNSP PGUID
3523 3500 t
0 ));
209 DATA(insert ( 403 tsvector_ops PGNSP PGUID
3626 3614 t
0 ));
210 DATA(insert ( 783 tsvector_ops PGNSP PGUID
3655 3614 t
3642 ));
211 DATA(insert ( 2742 tsvector_ops PGNSP PGUID
3659 3614 t
25 ));
212 DATA(insert ( 403 tsquery_ops PGNSP PGUID
3683 3615 t
0 ));
213 DATA(insert ( 783 tsquery_ops PGNSP PGUID
3702 3615 t
20 ));
215 #endif /* PG_OPCLASS_H */