]> granicus.if.org Git - postgresql/blob - src/include/catalog/pg_type.h
a062d1e24807913f84b8dfb1fa1551622649c5ce
[postgresql] / src / include / catalog / pg_type.h
1 /*-------------------------------------------------------------------------
2  *
3  * pg_type.h
4  *        definition of the system "type" relation (pg_type)
5  *        along with the relation's initial contents.
6  *
7  *
8  * Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
9  * Portions Copyright (c) 1994, Regents of the University of California
10  *
11  * src/include/catalog/pg_type.h
12  *
13  * NOTES
14  *        the genbki.pl script reads this file and generates .bki
15  *        information from the DATA() statements.
16  *
17  *-------------------------------------------------------------------------
18  */
19 #ifndef PG_TYPE_H
20 #define PG_TYPE_H
21
22 #include "catalog/genbki.h"
23
24 /* ----------------
25  *              pg_type definition.  cpp turns this into
26  *              typedef struct FormData_pg_type
27  *
28  *              Some of the values in a pg_type instance are copied into
29  *              pg_attribute instances.  Some parts of Postgres use the pg_type copy,
30  *              while others use the pg_attribute copy, so they must match.
31  *              See struct FormData_pg_attribute for details.
32  * ----------------
33  */
34 #define TypeRelationId  1247
35 #define TypeRelation_Rowtype_Id  71
36
37 CATALOG(pg_type,1247) BKI_BOOTSTRAP BKI_ROWTYPE_OID(71) BKI_SCHEMA_MACRO
38 {
39         NameData        typname;                /* type name */
40         Oid                     typnamespace;   /* OID of namespace containing this type */
41         Oid                     typowner;               /* type owner */
42
43         /*
44          * For a fixed-size type, typlen is the number of bytes we use to
45          * represent a value of this type, e.g. 4 for an int4.  But for a
46          * variable-length type, typlen is negative.  We use -1 to indicate a
47          * "varlena" type (one that has a length word), -2 to indicate a
48          * null-terminated C string.
49          */
50         int2            typlen;
51
52         /*
53          * typbyval determines whether internal Postgres routines pass a value of
54          * this type by value or by reference.  typbyval had better be FALSE if
55          * the length is not 1, 2, or 4 (or 8 on 8-byte-Datum machines).
56          * Variable-length types are always passed by reference. Note that
57          * typbyval can be false even if the length would allow pass-by-value;
58          * this is currently true for type float4, for example.
59          */
60         bool            typbyval;
61
62         /*
63          * typtype is 'b' for a base type, 'c' for a composite type (e.g., a
64          * table's rowtype), 'd' for a domain type, 'e' for an enum type, or 'p'
65          * for a pseudo-type.  (Use the TYPTYPE macros below.)
66          *
67          * If typtype is 'c', typrelid is the OID of the class' entry in pg_class.
68          */
69         char            typtype;
70
71         /*
72          * typcategory and typispreferred help the parser distinguish preferred
73          * and non-preferred coercions.  The category can be any single ASCII
74          * character (but not \0).      The categories used for built-in types are
75          * identified by the TYPCATEGORY macros below.
76          */
77         char            typcategory;    /* arbitrary type classification */
78
79         bool            typispreferred; /* is type "preferred" within its category? */
80
81         /*
82          * If typisdefined is false, the entry is only a placeholder (forward
83          * reference).  We know the type name, but not yet anything else about it.
84          */
85         bool            typisdefined;
86
87         char            typdelim;               /* delimiter for arrays of this type */
88
89         Oid                     typrelid;               /* 0 if not a composite type */
90
91         /*
92          * If typelem is not 0 then it identifies another row in pg_type. The
93          * current type can then be subscripted like an array yielding values of
94          * type typelem. A non-zero typelem does not guarantee this type to be a
95          * "real" array type; some ordinary fixed-length types can also be
96          * subscripted (e.g., name, point). Variable-length types can *not* be
97          * turned into pseudo-arrays like that. Hence, the way to determine
98          * whether a type is a "true" array type is if:
99          *
100          * typelem != 0 and typlen == -1.
101          */
102         Oid                     typelem;
103
104         /*
105          * If there is a "true" array type having this type as element type,
106          * typarray links to it.  Zero if no associated "true" array type.
107          */
108         Oid                     typarray;
109
110         /*
111          * I/O conversion procedures for the datatype.
112          */
113         regproc         typinput;               /* text format (required) */
114         regproc         typoutput;
115         regproc         typreceive;             /* binary format (optional) */
116         regproc         typsend;
117
118         /*
119          * I/O functions for optional type modifiers.
120          */
121         regproc         typmodin;
122         regproc         typmodout;
123
124         /*
125          * Custom ANALYZE procedure for the datatype (0 selects the default).
126          */
127         regproc         typanalyze;
128
129         /* ----------------
130          * typalign is the alignment required when storing a value of this
131          * type.  It applies to storage on disk as well as most
132          * representations of the value inside Postgres.  When multiple values
133          * are stored consecutively, such as in the representation of a
134          * complete row on disk, padding is inserted before a datum of this
135          * type so that it begins on the specified boundary.  The alignment
136          * reference is the beginning of the first datum in the sequence.
137          *
138          * 'c' = CHAR alignment, ie no alignment needed.
139          * 's' = SHORT alignment (2 bytes on most machines).
140          * 'i' = INT alignment (4 bytes on most machines).
141          * 'd' = DOUBLE alignment (8 bytes on many machines, but by no means all).
142          *
143          * See include/access/tupmacs.h for the macros that compute these
144          * alignment requirements.      Note also that we allow the nominal alignment
145          * to be violated when storing "packed" varlenas; the TOAST mechanism
146          * takes care of hiding that from most code.
147          *
148          * NOTE: for types used in system tables, it is critical that the
149          * size and alignment defined in pg_type agree with the way that the
150          * compiler will lay out the field in a struct representing a table row.
151          * ----------------
152          */
153         char            typalign;
154
155         /* ----------------
156          * typstorage tells if the type is prepared for toasting and what
157          * the default strategy for attributes of this type should be.
158          *
159          * 'p' PLAIN      type not prepared for toasting
160          * 'e' EXTERNAL   external storage possible, don't try to compress
161          * 'x' EXTENDED   try to compress and store external if required
162          * 'm' MAIN               like 'x' but try to keep in main tuple
163          * ----------------
164          */
165         char            typstorage;
166
167         /*
168          * This flag represents a "NOT NULL" constraint against this datatype.
169          *
170          * If true, the attnotnull column for a corresponding table column using
171          * this datatype will always enforce the NOT NULL constraint.
172          *
173          * Used primarily for domain types.
174          */
175         bool            typnotnull;
176
177         /*
178          * Domains use typbasetype to show the base (or domain) type that the
179          * domain is based on.  Zero if the type is not a domain.
180          */
181         Oid                     typbasetype;
182
183         /*
184          * Domains use typtypmod to record the typmod to be applied to their base
185          * type (-1 if base type does not use a typmod).  -1 if this type is not a
186          * domain.
187          */
188         int4            typtypmod;
189
190         /*
191          * typndims is the declared number of dimensions for an array domain type
192          * (i.e., typbasetype is an array type).  Otherwise zero.
193          */
194         int4            typndims;
195
196         /*
197          * Collation: 0 if type cannot use collations, DEFAULT_COLLATION_OID for
198          * collatable base types, possibly other OID for domains
199          */
200         Oid                     typcollation;
201
202         /*
203          * If typdefaultbin is not NULL, it is the nodeToString representation of
204          * a default expression for the type.  Currently this is only used for
205          * domains.
206          */
207         pg_node_tree typdefaultbin; /* VARIABLE LENGTH FIELD */
208
209         /*
210          * typdefault is NULL if the type has no associated default value. If
211          * typdefaultbin is not NULL, typdefault must contain a human-readable
212          * version of the default expression represented by typdefaultbin. If
213          * typdefaultbin is NULL and typdefault is not, then typdefault is the
214          * external representation of the type's default value, which may be fed
215          * to the type's input converter to produce a constant.
216          */
217         text            typdefault;             /* VARIABLE LENGTH FIELD */
218
219 } FormData_pg_type;
220
221 /* ----------------
222  *              Form_pg_type corresponds to a pointer to a row with
223  *              the format of pg_type relation.
224  * ----------------
225  */
226 typedef FormData_pg_type *Form_pg_type;
227
228 /* ----------------
229  *              compiler constants for pg_type
230  * ----------------
231  */
232 #define Natts_pg_type                                   29
233 #define Anum_pg_type_typname                    1
234 #define Anum_pg_type_typnamespace               2
235 #define Anum_pg_type_typowner                   3
236 #define Anum_pg_type_typlen                             4
237 #define Anum_pg_type_typbyval                   5
238 #define Anum_pg_type_typtype                    6
239 #define Anum_pg_type_typcategory                7
240 #define Anum_pg_type_typispreferred             8
241 #define Anum_pg_type_typisdefined               9
242 #define Anum_pg_type_typdelim                   10
243 #define Anum_pg_type_typrelid                   11
244 #define Anum_pg_type_typelem                    12
245 #define Anum_pg_type_typarray                   13
246 #define Anum_pg_type_typinput                   14
247 #define Anum_pg_type_typoutput                  15
248 #define Anum_pg_type_typreceive                 16
249 #define Anum_pg_type_typsend                    17
250 #define Anum_pg_type_typmodin                   18
251 #define Anum_pg_type_typmodout                  19
252 #define Anum_pg_type_typanalyze                 20
253 #define Anum_pg_type_typalign                   21
254 #define Anum_pg_type_typstorage                 22
255 #define Anum_pg_type_typnotnull                 23
256 #define Anum_pg_type_typbasetype                24
257 #define Anum_pg_type_typtypmod                  25
258 #define Anum_pg_type_typndims                   26
259 #define Anum_pg_type_typcollation               27
260 #define Anum_pg_type_typdefaultbin              28
261 #define Anum_pg_type_typdefault                 29
262
263
264 /* ----------------
265  *              initial contents of pg_type
266  * ----------------
267  */
268
269 /*
270  * Keep the following ordered by OID so that later changes can be made more
271  * easily.
272  *
273  * For types used in the system catalogs, make sure the values here match
274  * TypInfo[] in bootstrap.c.
275  */
276
277 /* OIDS 1 - 99 */
278 DATA(insert OID = 16 (  bool       PGNSP PGUID  1 t b B t t \054 0       0 1000 boolin boolout boolrecv boolsend - - - c p f 0 -1 0 0 _null_ _null_ ));
279 DESCR("boolean, 'true'/'false'");
280 #define BOOLOID                 16
281
282 DATA(insert OID = 17 (  bytea      PGNSP PGUID -1 f b U f t \054 0      0 1001 byteain byteaout bytearecv byteasend - - - i x f 0 -1 0 0 _null_ _null_ ));
283 DESCR("variable-length string, binary values escaped");
284 #define BYTEAOID                17
285
286 DATA(insert OID = 18 (  char       PGNSP PGUID  1 t b S f t \054 0       0 1002 charin charout charrecv charsend - - - c p f 0 -1 0 0 _null_ _null_ ));
287 DESCR("single character");
288 #define CHAROID                 18
289
290 DATA(insert OID = 19 (  name       PGNSP PGUID NAMEDATALEN f b S f t \054 0 18 1003 namein nameout namerecv namesend - - - c p f 0 -1 0 0 _null_ _null_ ));
291 DESCR("63-character type for storing system identifiers");
292 #define NAMEOID                 19
293
294 DATA(insert OID = 20 (  int8       PGNSP PGUID  8 FLOAT8PASSBYVAL b N f t \054 0         0 1016 int8in int8out int8recv int8send - - - d p f 0 -1 0 0 _null_ _null_ ));
295 DESCR("~18 digit integer, 8-byte storage");
296 #define INT8OID                 20
297
298 DATA(insert OID = 21 (  int2       PGNSP PGUID  2 t b N f t \054 0       0 1005 int2in int2out int2recv int2send - - - s p f 0 -1 0 0 _null_ _null_ ));
299 DESCR("-32 thousand to 32 thousand, 2-byte storage");
300 #define INT2OID                 21
301
302 DATA(insert OID = 22 (  int2vector PGNSP PGUID -1 f b A f t \054 0      21 1006 int2vectorin int2vectorout int2vectorrecv int2vectorsend - - - i p f 0 -1 0 0 _null_ _null_ ));
303 DESCR("array of int2, used in system tables");
304 #define INT2VECTOROID   22
305
306 DATA(insert OID = 23 (  int4       PGNSP PGUID  4 t b N f t \054 0       0 1007 int4in int4out int4recv int4send - - - i p f 0 -1 0 0 _null_ _null_ ));
307 DESCR("-2 billion to 2 billion integer, 4-byte storage");
308 #define INT4OID                 23
309
310 DATA(insert OID = 24 (  regproc    PGNSP PGUID  4 t b N f t \054 0       0 1008 regprocin regprocout regprocrecv regprocsend - - - i p f 0 -1 0 0 _null_ _null_ ));
311 DESCR("registered procedure");
312 #define REGPROCOID              24
313
314 DATA(insert OID = 25 (  text       PGNSP PGUID -1 f b S t t \054 0      0 1009 textin textout textrecv textsend - - - i x f 0 -1 0 100 _null_ _null_ ));
315 DESCR("variable-length string, no limit specified");
316 #define TEXTOID                 25
317
318 DATA(insert OID = 26 (  oid                PGNSP PGUID  4 t b N t t \054 0       0 1028 oidin oidout oidrecv oidsend - - - i p f 0 -1 0 0 _null_ _null_ ));
319 DESCR("object identifier(oid), maximum 4 billion");
320 #define OIDOID                  26
321
322 DATA(insert OID = 27 (  tid                PGNSP PGUID  6 f b U f t \054 0       0 1010 tidin tidout tidrecv tidsend - - - s p f 0 -1 0 0 _null_ _null_ ));
323 DESCR("(block, offset), physical location of tuple");
324 #define TIDOID          27
325
326 DATA(insert OID = 28 (  xid                PGNSP PGUID  4 t b U f t \054 0       0 1011 xidin xidout xidrecv xidsend - - - i p f 0 -1 0 0 _null_ _null_ ));
327 DESCR("transaction id");
328 #define XIDOID 28
329
330 DATA(insert OID = 29 (  cid                PGNSP PGUID  4 t b U f t \054 0       0 1012 cidin cidout cidrecv cidsend - - - i p f 0 -1 0 0 _null_ _null_ ));
331 DESCR("command identifier type, sequence in transaction id");
332 #define CIDOID 29
333
334 DATA(insert OID = 30 (  oidvector  PGNSP PGUID -1 f b A f t \054 0      26 1013 oidvectorin oidvectorout oidvectorrecv oidvectorsend - - - i p f 0 -1 0 0 _null_ _null_ ));
335 DESCR("array of oids, used in system tables");
336 #define OIDVECTOROID    30
337
338 /* hand-built rowtype entries for bootstrapped catalogs */
339 /* NB: OIDs assigned here must match the BKI_ROWTYPE_OID declarations */
340
341 DATA(insert OID = 71 (  pg_type                 PGNSP PGUID -1 f c C f t \054 1247 0 0 record_in record_out record_recv record_send - - - d x f 0 -1 0 0 _null_ _null_ ));
342 DATA(insert OID = 75 (  pg_attribute    PGNSP PGUID -1 f c C f t \054 1249 0 0 record_in record_out record_recv record_send - - - d x f 0 -1 0 0 _null_ _null_ ));
343 DATA(insert OID = 81 (  pg_proc                 PGNSP PGUID -1 f c C f t \054 1255 0 0 record_in record_out record_recv record_send - - - d x f 0 -1 0 0 _null_ _null_ ));
344 DATA(insert OID = 83 (  pg_class                PGNSP PGUID -1 f c C f t \054 1259 0 0 record_in record_out record_recv record_send - - - d x f 0 -1 0 0 _null_ _null_ ));
345
346 /* OIDS 100 - 199 */
347 DATA(insert OID = 142 ( xml                PGNSP PGUID -1 f b U f t \054 0 0 143 xml_in xml_out xml_recv xml_send - - - i x f 0 -1 0 0 _null_ _null_ ));
348 DESCR("XML content");
349 #define XMLOID 142
350 DATA(insert OID = 143 ( _xml       PGNSP PGUID -1 f b A f t \054 0 142 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
351
352 DATA(insert OID = 194 ( pg_node_tree    PGNSP PGUID -1 f b S f t \054 0 0 0 pg_node_tree_in pg_node_tree_out pg_node_tree_recv pg_node_tree_send - - - i x f 0 -1 0 100 _null_ _null_ ));
353 DESCR("string representing an internal node tree");
354 #define PGNODETREEOID   194
355
356 /* OIDS 200 - 299 */
357
358 DATA(insert OID = 210 (  smgr      PGNSP PGUID 2 t b U f t \054 0 0 0 smgrin smgrout - - - - - s p f 0 -1 0 0 _null_ _null_ ));
359 DESCR("storage manager");
360
361 /* OIDS 300 - 399 */
362
363 /* OIDS 400 - 499 */
364
365 /* OIDS 500 - 599 */
366
367 /* OIDS 600 - 699 */
368 DATA(insert OID = 600 (  point     PGNSP PGUID 16 f b G f t \054 0 701 1017 point_in point_out point_recv point_send - - - d p f 0 -1 0 0 _null_ _null_ ));
369 DESCR("geometric point '(x, y)'");
370 #define POINTOID                600
371 DATA(insert OID = 601 (  lseg      PGNSP PGUID 32 f b G f t \054 0 600 1018 lseg_in lseg_out lseg_recv lseg_send - - - d p f 0 -1 0 0 _null_ _null_ ));
372 DESCR("geometric line segment '(pt1,pt2)'");
373 #define LSEGOID                 601
374 DATA(insert OID = 602 (  path      PGNSP PGUID -1 f b G f t \054 0 0 1019 path_in path_out path_recv path_send - - - d x f 0 -1 0 0 _null_ _null_ ));
375 DESCR("geometric path '(pt1,...)'");
376 #define PATHOID                 602
377 DATA(insert OID = 603 (  box       PGNSP PGUID 32 f b G f t \073 0 600 1020 box_in box_out box_recv box_send - - - d p f 0 -1 0 0 _null_ _null_ ));
378 DESCR("geometric box '(lower left,upper right)'");
379 #define BOXOID                  603
380 DATA(insert OID = 604 (  polygon   PGNSP PGUID -1 f b G f t \054 0       0 1027 poly_in poly_out poly_recv poly_send - - - d x f 0 -1 0 0 _null_ _null_ ));
381 DESCR("geometric polygon '(pt1,...)'");
382 #define POLYGONOID              604
383
384 DATA(insert OID = 628 (  line      PGNSP PGUID 32 f b G f t \054 0 701 629 line_in line_out line_recv line_send - - - d p f 0 -1 0 0 _null_ _null_ ));
385 DESCR("geometric line (not implemented)");
386 #define LINEOID                 628
387 DATA(insert OID = 629 (  _line     PGNSP PGUID  -1 f b A f t \054 0 628 0 array_in array_out array_recv array_send - - - d x f 0 -1 0 0 _null_ _null_ ));
388 DESCR("");
389
390 /* OIDS 700 - 799 */
391
392 DATA(insert OID = 700 (  float4    PGNSP PGUID  4 FLOAT4PASSBYVAL b N f t \054 0         0 1021 float4in float4out float4recv float4send - - - i p f 0 -1 0 0 _null_ _null_ ));
393 DESCR("single-precision floating point number, 4-byte storage");
394 #define FLOAT4OID 700
395 DATA(insert OID = 701 (  float8    PGNSP PGUID  8 FLOAT8PASSBYVAL b N t t \054 0         0 1022 float8in float8out float8recv float8send - - - d p f 0 -1 0 0 _null_ _null_ ));
396 DESCR("double-precision floating point number, 8-byte storage");
397 #define FLOAT8OID 701
398 DATA(insert OID = 702 (  abstime   PGNSP PGUID  4 t b D f t \054 0       0 1023 abstimein abstimeout abstimerecv abstimesend - - - i p f 0 -1 0 0 _null_ _null_ ));
399 DESCR("absolute, limited-range date and time (Unix system time)");
400 #define ABSTIMEOID              702
401 DATA(insert OID = 703 (  reltime   PGNSP PGUID  4 t b T f t \054 0       0 1024 reltimein reltimeout reltimerecv reltimesend - - - i p f 0 -1 0 0 _null_ _null_ ));
402 DESCR("relative, limited-range time interval (Unix delta time)");
403 #define RELTIMEOID              703
404 DATA(insert OID = 704 (  tinterval PGNSP PGUID 12 f b T f t \054 0       0 1025 tintervalin tintervalout tintervalrecv tintervalsend - - - i p f 0 -1 0 0 _null_ _null_ ));
405 DESCR("(abstime,abstime), time interval");
406 #define TINTERVALOID    704
407 DATA(insert OID = 705 (  unknown   PGNSP PGUID -2 f b X f t \054 0       0 0 unknownin unknownout unknownrecv unknownsend - - - c p f 0 -1 0 0 _null_ _null_ ));
408 DESCR("");
409 #define UNKNOWNOID              705
410
411 DATA(insert OID = 718 (  circle    PGNSP PGUID  24 f b G f t \054 0 0 719 circle_in circle_out circle_recv circle_send - - - d p f 0 -1 0 0 _null_ _null_ ));
412 DESCR("geometric circle '(center,radius)'");
413 #define CIRCLEOID               718
414 DATA(insert OID = 719 (  _circle   PGNSP PGUID  -1 f b A f t \054 0  718 0 array_in array_out array_recv array_send - - - d x f 0 -1 0 0 _null_ _null_ ));
415 DATA(insert OID = 790 (  money     PGNSP PGUID   8 FLOAT8PASSBYVAL b N f t \054 0 0 791 cash_in cash_out cash_recv cash_send - - - d p f 0 -1 0 0 _null_ _null_ ));
416 DESCR("monetary amounts, $d,ddd.cc");
417 #define CASHOID 790
418 DATA(insert OID = 791 (  _money    PGNSP PGUID  -1 f b A f t \054 0  790 0 array_in array_out array_recv array_send - - - d x f 0 -1 0 0 _null_ _null_ ));
419
420 /* OIDS 800 - 899 */
421 DATA(insert OID = 829 ( macaddr    PGNSP PGUID  6 f b U f t \054 0 0 1040 macaddr_in macaddr_out macaddr_recv macaddr_send - - - i p f 0 -1 0 0 _null_ _null_ ));
422 DESCR("XX:XX:XX:XX:XX:XX, MAC address");
423 #define MACADDROID 829
424 DATA(insert OID = 869 ( inet       PGNSP PGUID  -1 f b I t t \054 0 0 1041 inet_in inet_out inet_recv inet_send - - - i m f 0 -1 0 0 _null_ _null_ ));
425 DESCR("IP address/netmask, host address, netmask optional");
426 #define INETOID 869
427 DATA(insert OID = 650 ( cidr       PGNSP PGUID  -1 f b I f t \054 0 0 651 cidr_in cidr_out cidr_recv cidr_send - - - i m f 0 -1 0 0 _null_ _null_ ));
428 DESCR("network IP address/netmask, network address");
429 #define CIDROID 650
430
431 /* OIDS 900 - 999 */
432
433 /* OIDS 1000 - 1099 */
434 DATA(insert OID = 1000 (  _bool          PGNSP PGUID -1 f b A f t \054 0        16 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
435 DATA(insert OID = 1001 (  _bytea         PGNSP PGUID -1 f b A f t \054 0        17 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
436 DATA(insert OID = 1002 (  _char          PGNSP PGUID -1 f b A f t \054 0        18 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
437 DATA(insert OID = 1003 (  _name          PGNSP PGUID -1 f b A f t \054 0        19 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
438 DATA(insert OID = 1005 (  _int2          PGNSP PGUID -1 f b A f t \054 0        21 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
439 DATA(insert OID = 1006 (  _int2vector PGNSP PGUID -1 f b A f t \054 0   22 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
440 DATA(insert OID = 1007 (  _int4          PGNSP PGUID -1 f b A f t \054 0        23 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
441 #define INT4ARRAYOID            1007
442 DATA(insert OID = 1008 (  _regproc       PGNSP PGUID -1 f b A f t \054 0        24 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
443 DATA(insert OID = 1009 (  _text          PGNSP PGUID -1 f b A f t \054 0        25 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 100 _null_ _null_ ));
444 #define TEXTARRAYOID            1009
445 DATA(insert OID = 1028 (  _oid           PGNSP PGUID -1 f b A f t \054 0        26 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
446 DATA(insert OID = 1010 (  _tid           PGNSP PGUID -1 f b A f t \054 0        27 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
447 DATA(insert OID = 1011 (  _xid           PGNSP PGUID -1 f b A f t \054 0        28 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
448 DATA(insert OID = 1012 (  _cid           PGNSP PGUID -1 f b A f t \054 0        29 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
449 DATA(insert OID = 1013 (  _oidvector PGNSP PGUID -1 f b A f t \054 0    30 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
450 DATA(insert OID = 1014 (  _bpchar        PGNSP PGUID -1 f b A f t \054 0 1042 0 array_in array_out array_recv array_send bpchartypmodin bpchartypmodout - i x f 0 -1 0 100 _null_ _null_ ));
451 DATA(insert OID = 1015 (  _varchar       PGNSP PGUID -1 f b A f t \054 0 1043 0 array_in array_out array_recv array_send varchartypmodin varchartypmodout - i x f 0 -1 0 100 _null_ _null_ ));
452 DATA(insert OID = 1016 (  _int8          PGNSP PGUID -1 f b A f t \054 0        20 0 array_in array_out array_recv array_send - - - d x f 0 -1 0 0 _null_ _null_ ));
453 DATA(insert OID = 1017 (  _point         PGNSP PGUID -1 f b A f t \054 0 600 0 array_in array_out array_recv array_send - - - d x f 0 -1 0 0 _null_ _null_ ));
454 DATA(insert OID = 1018 (  _lseg          PGNSP PGUID -1 f b A f t \054 0 601 0 array_in array_out array_recv array_send - - - d x f 0 -1 0 0 _null_ _null_ ));
455 DATA(insert OID = 1019 (  _path          PGNSP PGUID -1 f b A f t \054 0 602 0 array_in array_out array_recv array_send - - - d x f 0 -1 0 0 _null_ _null_ ));
456 DATA(insert OID = 1020 (  _box           PGNSP PGUID -1 f b A f t \073 0 603 0 array_in array_out array_recv array_send - - - d x f 0 -1 0 0 _null_ _null_ ));
457 DATA(insert OID = 1021 (  _float4        PGNSP PGUID -1 f b A f t \054 0 700 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
458 #define FLOAT4ARRAYOID 1021
459 DATA(insert OID = 1022 (  _float8        PGNSP PGUID -1 f b A f t \054 0 701 0 array_in array_out array_recv array_send - - - d x f 0 -1 0 0 _null_ _null_ ));
460 DATA(insert OID = 1023 (  _abstime       PGNSP PGUID -1 f b A f t \054 0 702 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
461 DATA(insert OID = 1024 (  _reltime       PGNSP PGUID -1 f b A f t \054 0 703 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
462 DATA(insert OID = 1025 (  _tinterval PGNSP PGUID -1 f b A f t \054 0 704 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
463 DATA(insert OID = 1027 (  _polygon       PGNSP PGUID -1 f b A f t \054 0 604 0 array_in array_out array_recv array_send - - - d x f 0 -1 0 0 _null_ _null_ ));
464 DATA(insert OID = 1033 (  aclitem        PGNSP PGUID 12 f b U f t \054 0 0 1034 aclitemin aclitemout - - - - - i p f 0 -1 0 0 _null_ _null_ ));
465 DESCR("access control list");
466 #define ACLITEMOID              1033
467 DATA(insert OID = 1034 (  _aclitem       PGNSP PGUID -1 f b A f t \054 0 1033 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
468 DATA(insert OID = 1040 (  _macaddr       PGNSP PGUID -1 f b A f t \054 0  829 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
469 DATA(insert OID = 1041 (  _inet          PGNSP PGUID -1 f b A f t \054 0  869 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
470 DATA(insert OID = 651  (  _cidr          PGNSP PGUID -1 f b A f t \054 0  650 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
471 DATA(insert OID = 1263 (  _cstring       PGNSP PGUID -1 f b A f t \054 0 2275 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
472 #define CSTRINGARRAYOID         1263
473
474 DATA(insert OID = 1042 ( bpchar          PGNSP PGUID -1 f b S f t \054 0        0 1014 bpcharin bpcharout bpcharrecv bpcharsend bpchartypmodin bpchartypmodout - i x f 0 -1 0 100 _null_ _null_ ));
475 DESCR("char(length), blank-padded string, fixed storage length");
476 #define BPCHAROID               1042
477 DATA(insert OID = 1043 ( varchar         PGNSP PGUID -1 f b S f t \054 0        0 1015 varcharin varcharout varcharrecv varcharsend varchartypmodin varchartypmodout - i x f 0 -1 0 100 _null_ _null_ ));
478 DESCR("varchar(length), non-blank-padded string, variable storage length");
479 #define VARCHAROID              1043
480
481 DATA(insert OID = 1082 ( date            PGNSP PGUID    4 t b D f t \054 0      0 1182 date_in date_out date_recv date_send - - - i p f 0 -1 0 0 _null_ _null_ ));
482 DESCR("date");
483 #define DATEOID                 1082
484 DATA(insert OID = 1083 ( time            PGNSP PGUID    8 FLOAT8PASSBYVAL b D f t \054 0        0 1183 time_in time_out time_recv time_send timetypmodin timetypmodout - d p f 0 -1 0 0 _null_ _null_ ));
485 DESCR("time of day");
486 #define TIMEOID                 1083
487
488 /* OIDS 1100 - 1199 */
489 DATA(insert OID = 1114 ( timestamp       PGNSP PGUID    8 FLOAT8PASSBYVAL b D f t \054 0        0 1115 timestamp_in timestamp_out timestamp_recv timestamp_send timestamptypmodin timestamptypmodout - d p f 0 -1 0 0 _null_ _null_ ));
490 DESCR("date and time");
491 #define TIMESTAMPOID    1114
492 DATA(insert OID = 1115 ( _timestamp  PGNSP PGUID        -1 f b A f t \054 0 1114 0 array_in array_out array_recv array_send timestamptypmodin timestamptypmodout - d x f 0 -1 0 0 _null_ _null_ ));
493 DATA(insert OID = 1182 ( _date           PGNSP PGUID    -1 f b A f t \054 0 1082 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
494 DATA(insert OID = 1183 ( _time           PGNSP PGUID    -1 f b A f t \054 0 1083 0 array_in array_out array_recv array_send timetypmodin timetypmodout - d x f 0 -1 0 0 _null_ _null_ ));
495 DATA(insert OID = 1184 ( timestamptz PGNSP PGUID        8 FLOAT8PASSBYVAL b D t t \054 0        0 1185 timestamptz_in timestamptz_out timestamptz_recv timestamptz_send timestamptztypmodin timestamptztypmodout - d p f 0 -1 0 0 _null_ _null_ ));
496 DESCR("date and time with time zone");
497 #define TIMESTAMPTZOID  1184
498 DATA(insert OID = 1185 ( _timestamptz PGNSP PGUID -1 f b A f t \054 0   1184 0 array_in array_out array_recv array_send timestamptztypmodin timestamptztypmodout - d x f 0 -1 0 0 _null_ _null_ ));
499 DATA(insert OID = 1186 ( interval        PGNSP PGUID 16 f b T t t \054 0        0 1187 interval_in interval_out interval_recv interval_send intervaltypmodin intervaltypmodout - d p f 0 -1 0 0 _null_ _null_ ));
500 DESCR("@ <number> <units>, time interval");
501 #define INTERVALOID             1186
502 DATA(insert OID = 1187 ( _interval       PGNSP PGUID    -1 f b A f t \054 0 1186 0 array_in array_out array_recv array_send intervaltypmodin intervaltypmodout - d x f 0 -1 0 0 _null_ _null_ ));
503
504 /* OIDS 1200 - 1299 */
505 DATA(insert OID = 1231 (  _numeric       PGNSP PGUID -1 f b A f t \054 0        1700 0 array_in array_out array_recv array_send numerictypmodin numerictypmodout - i x f 0 -1 0 0 _null_ _null_ ));
506 DATA(insert OID = 1266 ( timetz          PGNSP PGUID 12 f b D f t \054 0        0 1270 timetz_in timetz_out timetz_recv timetz_send timetztypmodin timetztypmodout - d p f 0 -1 0 0 _null_ _null_ ));
507 DESCR("time of day with time zone");
508 #define TIMETZOID               1266
509 DATA(insert OID = 1270 ( _timetz         PGNSP PGUID -1 f b A f t \054 0        1266 0 array_in array_out array_recv array_send timetztypmodin timetztypmodout - d x f 0 -1 0 0 _null_ _null_ ));
510
511 /* OIDS 1500 - 1599 */
512 DATA(insert OID = 1560 ( bit             PGNSP PGUID -1 f b V f t \054 0        0 1561 bit_in bit_out bit_recv bit_send bittypmodin bittypmodout - i x f 0 -1 0 0 _null_ _null_ ));
513 DESCR("fixed-length bit string");
514 #define BITOID   1560
515 DATA(insert OID = 1561 ( _bit            PGNSP PGUID -1 f b A f t \054 0        1560 0 array_in array_out array_recv array_send bittypmodin bittypmodout - i x f 0 -1 0 0 _null_ _null_ ));
516 DATA(insert OID = 1562 ( varbit          PGNSP PGUID -1 f b V t t \054 0        0 1563 varbit_in varbit_out varbit_recv varbit_send varbittypmodin varbittypmodout - i x f 0 -1 0 0 _null_ _null_ ));
517 DESCR("variable-length bit string");
518 #define VARBITOID         1562
519 DATA(insert OID = 1563 ( _varbit         PGNSP PGUID -1 f b A f t \054 0        1562 0 array_in array_out array_recv array_send varbittypmodin varbittypmodout - i x f 0 -1 0 0 _null_ _null_ ));
520
521 /* OIDS 1600 - 1699 */
522
523 /* OIDS 1700 - 1799 */
524 DATA(insert OID = 1700 ( numeric           PGNSP PGUID -1 f b N f t \054 0      0 1231 numeric_in numeric_out numeric_recv numeric_send numerictypmodin numerictypmodout - i m f 0 -1 0 0 _null_ _null_ ));
525 DESCR("numeric(precision, decimal), arbitrary precision number");
526 #define NUMERICOID              1700
527
528 DATA(insert OID = 1790 ( refcursor         PGNSP PGUID -1 f b U f t \054 0      0 2201 textin textout textrecv textsend - - - i x f 0 -1 0 0 _null_ _null_ ));
529 DESCR("reference to cursor (portal name)");
530 #define REFCURSOROID    1790
531
532 /* OIDS 2200 - 2299 */
533 DATA(insert OID = 2201 ( _refcursor    PGNSP PGUID -1 f b A f t \054 0 1790 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
534
535 DATA(insert OID = 2202 ( regprocedure  PGNSP PGUID      4 t b N f t \054 0       0 2207 regprocedurein regprocedureout regprocedurerecv regproceduresend - - - i p f 0 -1 0 0 _null_ _null_ ));
536 DESCR("registered procedure (with args)");
537 #define REGPROCEDUREOID 2202
538
539 DATA(insert OID = 2203 ( regoper           PGNSP PGUID  4 t b N f t \054 0       0 2208 regoperin regoperout regoperrecv regopersend - - - i p f 0 -1 0 0 _null_ _null_ ));
540 DESCR("registered operator");
541 #define REGOPEROID              2203
542
543 DATA(insert OID = 2204 ( regoperator   PGNSP PGUID      4 t b N f t \054 0       0 2209 regoperatorin regoperatorout regoperatorrecv regoperatorsend - - - i p f 0 -1 0 0 _null_ _null_ ));
544 DESCR("registered operator (with args)");
545 #define REGOPERATOROID  2204
546
547 DATA(insert OID = 2205 ( regclass          PGNSP PGUID  4 t b N f t \054 0       0 2210 regclassin regclassout regclassrecv regclasssend - - - i p f 0 -1 0 0 _null_ _null_ ));
548 DESCR("registered class");
549 #define REGCLASSOID             2205
550
551 DATA(insert OID = 2206 ( regtype           PGNSP PGUID  4 t b N f t \054 0       0 2211 regtypein regtypeout regtyperecv regtypesend - - - i p f 0 -1 0 0 _null_ _null_ ));
552 DESCR("registered type");
553 #define REGTYPEOID              2206
554
555 DATA(insert OID = 2207 ( _regprocedure PGNSP PGUID -1 f b A f t \054 0 2202 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
556 DATA(insert OID = 2208 ( _regoper          PGNSP PGUID -1 f b A f t \054 0 2203 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
557 DATA(insert OID = 2209 ( _regoperator  PGNSP PGUID -1 f b A f t \054 0 2204 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
558 DATA(insert OID = 2210 ( _regclass         PGNSP PGUID -1 f b A f t \054 0 2205 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
559 DATA(insert OID = 2211 ( _regtype          PGNSP PGUID -1 f b A f t \054 0 2206 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
560 #define REGTYPEARRAYOID 2211
561
562 /* uuid */
563 DATA(insert OID = 2950 ( uuid                   PGNSP PGUID 16 f b U f t \054 0 0 2951 uuid_in uuid_out uuid_recv uuid_send - - - c p f 0 -1 0 0 _null_ _null_ ));
564 DESCR("UUID datatype");
565 DATA(insert OID = 2951 ( _uuid                  PGNSP PGUID -1 f b A f t \054 0 2950 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
566
567 /* text search */
568 DATA(insert OID = 3614 ( tsvector               PGNSP PGUID -1 f b U f t \054 0 0 3643 tsvectorin tsvectorout tsvectorrecv tsvectorsend - - ts_typanalyze i x f 0 -1 0 0 _null_ _null_ ));
569 DESCR("text representation for text search");
570 #define TSVECTOROID             3614
571 DATA(insert OID = 3642 ( gtsvector              PGNSP PGUID -1 f b U f t \054 0 0 3644 gtsvectorin gtsvectorout - - - - - i p f 0 -1 0 0 _null_ _null_ ));
572 DESCR("GiST index internal text representation for text search");
573 #define GTSVECTOROID    3642
574 DATA(insert OID = 3615 ( tsquery                PGNSP PGUID -1 f b U f t \054 0 0 3645 tsqueryin tsqueryout tsqueryrecv tsquerysend - - - i p f 0 -1 0 0 _null_ _null_ ));
575 DESCR("query representation for text search");
576 #define TSQUERYOID              3615
577 DATA(insert OID = 3734 ( regconfig              PGNSP PGUID 4 t b N f t \054 0 0 3735 regconfigin regconfigout regconfigrecv regconfigsend - - - i p f 0 -1 0 0 _null_ _null_ ));
578 DESCR("registered text search configuration");
579 #define REGCONFIGOID    3734
580 DATA(insert OID = 3769 ( regdictionary  PGNSP PGUID 4 t b N f t \054 0 0 3770 regdictionaryin regdictionaryout regdictionaryrecv regdictionarysend - - - i p f 0 -1 0 0 _null_ _null_ ));
581 DESCR("registered text search dictionary");
582 #define REGDICTIONARYOID        3769
583
584 DATA(insert OID = 3643 ( _tsvector              PGNSP PGUID -1 f b A f t \054 0 3614 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
585 DATA(insert OID = 3644 ( _gtsvector             PGNSP PGUID -1 f b A f t \054 0 3642 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
586 DATA(insert OID = 3645 ( _tsquery               PGNSP PGUID -1 f b A f t \054 0 3615 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
587 DATA(insert OID = 3735 ( _regconfig             PGNSP PGUID -1 f b A f t \054 0 3734 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
588 DATA(insert OID = 3770 ( _regdictionary PGNSP PGUID -1 f b A f t \054 0 3769 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
589
590 DATA(insert OID = 2970 ( txid_snapshot  PGNSP PGUID -1 f b U f t \054 0 0 2949 txid_snapshot_in txid_snapshot_out txid_snapshot_recv txid_snapshot_send - - - d x f 0 -1 0 0 _null_ _null_ ));
591 DESCR("txid snapshot");
592 DATA(insert OID = 2949 ( _txid_snapshot PGNSP PGUID -1 f b A f t \054 0 2970 0 array_in array_out array_recv array_send - - - d x f 0 -1 0 0 _null_ _null_ ));
593
594 /* range types */
595
596 DATA(insert OID = 3904 ( int4range              PGNSP PGUID  -1 f r R f t \054 0 0 3905 range_in range_out range_recv range_send - - - i x f 0 -1 0 0 _null_ _null_ ));
597 DESCR("range of integers");
598 #define INT4RANGEOID            3904
599 DATA(insert OID = 3905 ( _int4range             PGNSP PGUID  -1 f b A f t \054 0 3904 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
600 DATA(insert OID = 3906 ( numrange               PGNSP PGUID  -1 f r R f t \054 0 0 3907 range_in range_out range_recv range_send - - - i x f 0 -1 0 0 _null_ _null_ ));
601 DESCR("range of numerics");
602 DATA(insert OID = 3907 ( _numrange              PGNSP PGUID  -1 f b A f t \054 0 3906 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
603 DATA(insert OID = 3908 ( tsrange                PGNSP PGUID  -1 f r R f t \054 0 0 3909 range_in range_out range_recv range_send - - - d x f 0 -1 0 0 _null_ _null_ ));
604 DESCR("range of timestamps without time zone");
605 DATA(insert OID = 3909 ( _tsrange               PGNSP PGUID  -1 f b A f t \054 0 3908 0 array_in array_out array_recv array_send - - - d x f 0 -1 0 0 _null_ _null_ ));
606 DATA(insert OID = 3910 ( tstzrange              PGNSP PGUID  -1 f r R f t \054 0 0 3911 range_in range_out range_recv range_send - - - d x f 0 -1 0 0 _null_ _null_ ));
607 DESCR("range of timestamps with time zone");
608 DATA(insert OID = 3911 ( _tstzrange             PGNSP PGUID  -1 f b A f t \054 0 3910 0 array_in array_out array_recv array_send - - - d x f 0 -1 0 0 _null_ _null_ ));
609 DATA(insert OID = 3912 ( daterange              PGNSP PGUID  -1 f r R f t \054 0 0 3913 range_in range_out range_recv range_send - - - i x f 0 -1 0 0 _null_ _null_ ));
610 DESCR("range of dates");
611 DATA(insert OID = 3913 ( _daterange             PGNSP PGUID  -1 f b A f t \054 0 3912 0 array_in array_out array_recv array_send - - - i x f 0 -1 0 0 _null_ _null_ ));
612 DATA(insert OID = 3926 ( int8range              PGNSP PGUID  -1 f r R f t \054 0 0 3927 range_in range_out range_recv range_send - - - d x f 0 -1 0 0 _null_ _null_ ));
613 DESCR("range of bigints");
614 DATA(insert OID = 3927 ( _int8range             PGNSP PGUID  -1 f b A f t \054 0 3926 0 array_in array_out array_recv array_send - - - d x f 0 -1 0 0 _null_ _null_ ));
615
616 /*
617  * pseudo-types
618  *
619  * types with typtype='p' represent various special cases in the type system.
620  *
621  * These cannot be used to define table columns, but are valid as function
622  * argument and result types (if supported by the function's implementation
623  * language).
624  *
625  * Note: cstring is a borderline case; it is still considered a pseudo-type,
626  * but there is now support for it in records and arrays.  Perhaps we should
627  * just treat it as a regular base type?
628  */
629 DATA(insert OID = 2249 ( record                 PGNSP PGUID -1 f p P f t \054 0 0 2287 record_in record_out record_recv record_send - - - d x f 0 -1 0 0 _null_ _null_ ));
630 #define RECORDOID               2249
631 DATA(insert OID = 2287 ( _record                PGNSP PGUID -1 f p P f t \054 0 2249 0 array_in array_out array_recv array_send - - - d x f 0 -1 0 0 _null_ _null_ ));
632 #define RECORDARRAYOID  2287
633 DATA(insert OID = 2275 ( cstring                PGNSP PGUID -2 f p P f t \054 0 0 1263 cstring_in cstring_out cstring_recv cstring_send - - - c p f 0 -1 0 0 _null_ _null_ ));
634 #define CSTRINGOID              2275
635 DATA(insert OID = 2276 ( any                    PGNSP PGUID  4 t p P f t \054 0 0 0 any_in any_out - - - - - i p f 0 -1 0 0 _null_ _null_ ));
636 #define ANYOID                  2276
637 DATA(insert OID = 2277 ( anyarray               PGNSP PGUID -1 f p P f t \054 0 0 0 anyarray_in anyarray_out anyarray_recv anyarray_send - - - d x f 0 -1 0 0 _null_ _null_ ));
638 #define ANYARRAYOID             2277
639 DATA(insert OID = 2278 ( void                   PGNSP PGUID  4 t p P f t \054 0 0 0 void_in void_out void_recv void_send - - - i p f 0 -1 0 0 _null_ _null_ ));
640 #define VOIDOID                 2278
641 DATA(insert OID = 2279 ( trigger                PGNSP PGUID  4 t p P f t \054 0 0 0 trigger_in trigger_out - - - - - i p f 0 -1 0 0 _null_ _null_ ));
642 #define TRIGGEROID              2279
643 DATA(insert OID = 2280 ( language_handler       PGNSP PGUID  4 t p P f t \054 0 0 0 language_handler_in language_handler_out - - - - - i p f 0 -1 0 0 _null_ _null_ ));
644 #define LANGUAGE_HANDLEROID             2280
645 DATA(insert OID = 2281 ( internal               PGNSP PGUID  SIZEOF_POINTER t p P f t \054 0 0 0 internal_in internal_out - - - - - ALIGNOF_POINTER p f 0 -1 0 0 _null_ _null_ ));
646 #define INTERNALOID             2281
647 DATA(insert OID = 2282 ( opaque                 PGNSP PGUID  4 t p P f t \054 0 0 0 opaque_in opaque_out - - - - - i p f 0 -1 0 0 _null_ _null_ ));
648 #define OPAQUEOID               2282
649 DATA(insert OID = 2283 ( anyelement             PGNSP PGUID  4 t p P f t \054 0 0 0 anyelement_in anyelement_out - - - - - i p f 0 -1 0 0 _null_ _null_ ));
650 #define ANYELEMENTOID   2283
651 DATA(insert OID = 2776 ( anynonarray    PGNSP PGUID  4 t p P f t \054 0 0 0 anynonarray_in anynonarray_out - - - - - i p f 0 -1 0 0 _null_ _null_ ));
652 #define ANYNONARRAYOID  2776
653 DATA(insert OID = 3500 ( anyenum                PGNSP PGUID  4 t p P f t \054 0 0 0 anyenum_in anyenum_out - - - - - i p f 0 -1 0 0 _null_ _null_ ));
654 #define ANYENUMOID              3500
655 DATA(insert OID = 3115 ( fdw_handler    PGNSP PGUID  4 t p P f t \054 0 0 0 fdw_handler_in fdw_handler_out - - - - - i p f 0 -1 0 0 _null_ _null_ ));
656 #define FDW_HANDLEROID          3115
657 DATA(insert OID = 3831 ( anyrange               PGNSP PGUID  4 t p P f t \054 0 0 0 anyrange_in anyrange_out - - - - - i p f 0 -1 0 0 _null_ _null_ ));
658 #define ANYRANGEOID             3831
659
660
661 /*
662  * macros
663  */
664 #define  TYPTYPE_BASE           'b' /* base type (ordinary scalar type) */
665 #define  TYPTYPE_COMPOSITE      'c' /* composite (e.g., table's rowtype) */
666 #define  TYPTYPE_DOMAIN         'd' /* domain over another type */
667 #define  TYPTYPE_ENUM           'e' /* enumerated type */
668 #define  TYPTYPE_PSEUDO         'p' /* pseudo-type */
669 #define  TYPTYPE_RANGE          'r' /* range type */
670
671 #define  TYPCATEGORY_INVALID    '\0'    /* not an allowed category */
672 #define  TYPCATEGORY_ARRAY              'A'
673 #define  TYPCATEGORY_BOOLEAN    'B'
674 #define  TYPCATEGORY_COMPOSITE  'C'
675 #define  TYPCATEGORY_DATETIME   'D'
676 #define  TYPCATEGORY_ENUM               'E'
677 #define  TYPCATEGORY_GEOMETRIC  'G'
678 #define  TYPCATEGORY_NETWORK    'I'             /* think INET */
679 #define  TYPCATEGORY_NUMERIC    'N'
680 #define  TYPCATEGORY_PSEUDOTYPE 'P'
681 #define  TYPCATEGORY_RANGE              'R'
682 #define  TYPCATEGORY_STRING             'S'
683 #define  TYPCATEGORY_TIMESPAN   'T'
684 #define  TYPCATEGORY_USER               'U'
685 #define  TYPCATEGORY_BITSTRING  'V'             /* er ... "varbit"? */
686 #define  TYPCATEGORY_UNKNOWN    'X'
687
688 /* Is a type OID a polymorphic pseudotype?      (Beware of multiple evaluation) */
689 #define IsPolymorphicType(typid)  \
690         ((typid) == ANYELEMENTOID || \
691          (typid) == ANYARRAYOID || \
692          (typid) == ANYNONARRAYOID || \
693          (typid) == ANYENUMOID || \
694          (typid) == ANYRANGEOID)
695
696 #endif   /* PG_TYPE_H */