1
/*-------------------------------------------------------------------------
4
* definition of the system "type" relation (pg_type)
5
* along with the relation's initial contents.
8
* Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
9
* Portions Copyright (c) 1994, Regents of the University of California
14
* the genbki.sh script reads this file and generates .bki
15
* information from the DATA() statements.
17
*-------------------------------------------------------------------------
22
#include "catalog/genbki.h"
25
* pg_type definition. cpp turns this into
26
* typedef struct FormData_pg_type
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.
34
#define TypeRelationId 1247
36
CATALOG(pg_type,1247) BKI_BOOTSTRAP
38
NameData typname; /* type name */
39
Oid typnamespace; /* OID of namespace containing this type */
40
Oid typowner; /* type owner */
43
* For a fixed-size type, typlen is the number of bytes we use to
44
* represent a value of this type, e.g. 4 for an int4. But for a
45
* variable-length type, typlen is negative. We use -1 to indicate a
46
* "varlena" type (one that has a length word), -2 to indicate a
47
* null-terminated C string.
52
* typbyval determines whether internal Postgres routines pass a value of
53
* this type by value or by reference. typbyval had better be FALSE if
54
* the length is not 1, 2, or 4 (or 8 on 8-byte-Datum machines).
55
* Variable-length types are always passed by reference. Note that
56
* typbyval can be false even if the length would allow pass-by-value;
57
* this is currently true for type float4, for example.
62
* typtype is 'b' for a base type, 'c' for a composite type (e.g., a
63
* table's rowtype), 'd' for a domain type, 'e' for an enum type, or 'p'
64
* for a pseudo-type. (Use the TYPTYPE macros below.)
66
* If typtype is 'c', typrelid is the OID of the class' entry in pg_class.
71
* typcategory and typispreferred help the parser distinguish preferred
72
* and non-preferred coercions. The category can be any single ASCII
73
* character (but not \0). The categories used for built-in types are
74
* identified by the TYPCATEGORY macros below.
76
char typcategory; /* arbitrary type classification */
78
bool typispreferred; /* is type "preferred" within its category? */
81
* If typisdefined is false, the entry is only a placeholder (forward
82
* reference). We know the type name, but not yet anything else about it.
86
char typdelim; /* delimiter for arrays of this type */
88
Oid typrelid; /* 0 if not a composite type */
91
* If typelem is not 0 then it identifies another row in pg_type. The
92
* current type can then be subscripted like an array yielding values of
93
* type typelem. A non-zero typelem does not guarantee this type to be a
94
* "real" array type; some ordinary fixed-length types can also be
95
* subscripted (e.g., name, point). Variable-length types can *not* be
96
* turned into pseudo-arrays like that. Hence, the way to determine
97
* whether a type is a "true" array type is if:
99
* typelem != 0 and typlen == -1.
104
* If there is a "true" array type having this type as element type,
105
* typarray links to it. Zero if no associated "true" array type.
110
* I/O conversion procedures for the datatype.
112
regproc typinput; /* text format (required) */
114
regproc typreceive; /* binary format (optional) */
118
* I/O functions for optional type modifiers.
124
* Custom ANALYZE procedure for the datatype (0 selects the default).
129
* typalign is the alignment required when storing a value of this
130
* type. It applies to storage on disk as well as most
131
* representations of the value inside Postgres. When multiple values
132
* are stored consecutively, such as in the representation of a
133
* complete row on disk, padding is inserted before a datum of this
134
* type so that it begins on the specified boundary. The alignment
135
* reference is the beginning of the first datum in the sequence.
137
* 'c' = CHAR alignment, ie no alignment needed.
138
* 's' = SHORT alignment (2 bytes on most machines).
139
* 'i' = INT alignment (4 bytes on most machines).
140
* 'd' = DOUBLE alignment (8 bytes on many machines, but by no means all).
142
* See include/access/tupmacs.h for the macros that compute these
143
* alignment requirements. Note also that we allow the nominal alignment
144
* to be violated when storing "packed" varlenas; the TOAST mechanism
145
* takes care of hiding that from most code.
147
* NOTE: for types used in system tables, it is critical that the
148
* size and alignment defined in pg_type agree with the way that the
149
* compiler will lay out the field in a struct representing a table row.
155
* typstorage tells if the type is prepared for toasting and what
156
* the default strategy for attributes of this type should be.
158
* 'p' PLAIN type not prepared for toasting
159
* 'e' EXTERNAL external storage possible, don't try to compress
160
* 'x' EXTENDED try to compress and store external if required
161
* 'm' MAIN like 'x' but try to keep in main tuple
167
* This flag represents a "NOT NULL" constraint against this datatype.
169
* If true, the attnotnull column for a corresponding table column using
170
* this datatype will always enforce the NOT NULL constraint.
172
* Used primarily for domain types.
177
* Domains use typbasetype to show the base (or domain) type that the
178
* domain is based on. Zero if the type is not a domain.
183
* Domains use typtypmod to record the typmod to be applied to their base
184
* type (-1 if base type does not use a typmod). -1 if this type is not a
190
* typndims is the declared number of dimensions for an array domain type
191
* (i.e., typbasetype is an array type; the domain's typelem will match
192
* the base type's typelem). Otherwise zero.
197
* If typdefaultbin is not NULL, it is the nodeToString representation of
198
* a default expression for the type. Currently this is only used for
201
text typdefaultbin; /* VARIABLE LENGTH FIELD */
204
* typdefault is NULL if the type has no associated default value. If
205
* typdefaultbin is not NULL, typdefault must contain a human-readable
206
* version of the default expression represented by typdefaultbin. If
207
* typdefaultbin is NULL and typdefault is not, then typdefault is the
208
* external representation of the type's default value, which may be fed
209
* to the type's input converter to produce a constant.
211
text typdefault; /* VARIABLE LENGTH FIELD */
216
* Form_pg_type corresponds to a pointer to a row with
217
* the format of pg_type relation.
220
typedef FormData_pg_type *Form_pg_type;
223
* compiler constants for pg_type
226
#define Natts_pg_type 28
227
#define Anum_pg_type_typname 1
228
#define Anum_pg_type_typnamespace 2
229
#define Anum_pg_type_typowner 3
230
#define Anum_pg_type_typlen 4
231
#define Anum_pg_type_typbyval 5
232
#define Anum_pg_type_typtype 6
233
#define Anum_pg_type_typcategory 7
234
#define Anum_pg_type_typispreferred 8
235
#define Anum_pg_type_typisdefined 9
236
#define Anum_pg_type_typdelim 10
237
#define Anum_pg_type_typrelid 11
238
#define Anum_pg_type_typelem 12
239
#define Anum_pg_type_typarray 13
240
#define Anum_pg_type_typinput 14
241
#define Anum_pg_type_typoutput 15
242
#define Anum_pg_type_typreceive 16
243
#define Anum_pg_type_typsend 17
244
#define Anum_pg_type_typmodin 18
245
#define Anum_pg_type_typmodout 19
246
#define Anum_pg_type_typanalyze 20
247
#define Anum_pg_type_typalign 21
248
#define Anum_pg_type_typstorage 22
249
#define Anum_pg_type_typnotnull 23
250
#define Anum_pg_type_typbasetype 24
251
#define Anum_pg_type_typtypmod 25
252
#define Anum_pg_type_typndims 26
253
#define Anum_pg_type_typdefaultbin 27
254
#define Anum_pg_type_typdefault 28
258
* initial contents of pg_type
263
* Keep the following ordered by OID so that later changes can be made more
266
* For types used in the system catalogs, make sure the typlen, typbyval, and
267
* typalign values here match the initial values for attlen, attbyval, and
268
* attalign in both places in pg_attribute.h for every instance. Also see
269
* TypInfo[] in bootstrap.c.
273
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 _null_ _null_ ));
274
DESCR("boolean, 'true'/'false'");
277
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 _null_ _null_ ));
278
DESCR("variable-length string, binary values escaped");
281
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 _null_ _null_ ));
282
DESCR("single character");
285
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 _null_ _null_ ));
286
DESCR("63-character type for storing system identifiers");
289
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 _null_ _null_ ));
290
DESCR("~18 digit integer, 8-byte storage");
293
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 _null_ _null_ ));
294
DESCR("-32 thousand to 32 thousand, 2-byte storage");
297
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 _null_ _null_ ));
298
DESCR("array of int2, used in system tables");
299
#define INT2VECTOROID 22
301
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 _null_ _null_ ));
302
DESCR("-2 billion to 2 billion integer, 4-byte storage");
305
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 _null_ _null_ ));
306
DESCR("registered procedure");
307
#define REGPROCOID 24
309
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 _null_ _null_ ));
310
DESCR("variable-length string, no limit specified");
313
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 _null_ _null_ ));
314
DESCR("object identifier(oid), maximum 4 billion");
317
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 _null_ _null_ ));
318
DESCR("(block, offset), physical location of tuple");
321
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 _null_ _null_ ));
322
DESCR("transaction id");
325
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 _null_ _null_ ));
326
DESCR("command identifier type, sequence in transaction id");
329
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 _null_ _null_ ));
330
DESCR("array of oids, used in system tables");
331
#define OIDVECTOROID 30
333
/* hand-built rowtype entries for bootstrapped catalogs: */
335
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 _null_ _null_ ));
336
#define PG_TYPE_RELTYPE_OID 71
337
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 _null_ _null_ ));
338
#define PG_ATTRIBUTE_RELTYPE_OID 75
339
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 _null_ _null_ ));
340
#define PG_PROC_RELTYPE_OID 81
341
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 _null_ _null_ ));
342
#define PG_CLASS_RELTYPE_OID 83
345
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 _null_ _null_ ));
346
DESCR("XML content");
348
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 _null_ _null_ ));
352
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 _null_ _null_ ));
353
DESCR("storage manager");
362
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 _null_ _null_ ));
363
DESCR("geometric point '(x, y)'");
365
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 _null_ _null_ ));
366
DESCR("geometric line segment '(pt1,pt2)'");
368
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 _null_ _null_ ));
369
DESCR("geometric path '(pt1,...)'");
371
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 _null_ _null_ ));
372
DESCR("geometric box '(lower left,upper right)'");
374
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 _null_ _null_ ));
375
DESCR("geometric polygon '(pt1,...)'");
376
#define POLYGONOID 604
378
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 _null_ _null_ ));
379
DESCR("geometric line (not implemented)'");
381
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 _null_ _null_ ));
386
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 _null_ _null_ ));
387
DESCR("single-precision floating point number, 4-byte storage");
388
#define FLOAT4OID 700
389
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 _null_ _null_ ));
390
DESCR("double-precision floating point number, 8-byte storage");
391
#define FLOAT8OID 701
392
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 _null_ _null_ ));
393
DESCR("absolute, limited-range date and time (Unix system time)");
394
#define ABSTIMEOID 702
395
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 _null_ _null_ ));
396
DESCR("relative, limited-range time interval (Unix delta time)");
397
#define RELTIMEOID 703
398
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 _null_ _null_ ));
399
DESCR("(abstime,abstime), time interval");
400
#define TINTERVALOID 704
401
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 _null_ _null_ ));
403
#define UNKNOWNOID 705
405
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 _null_ _null_ ));
406
DESCR("geometric circle '(center,radius)'");
407
#define CIRCLEOID 718
408
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 _null_ _null_ ));
409
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 _null_ _null_ ));
410
DESCR("monetary amounts, $d,ddd.cc");
412
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 _null_ _null_ ));
415
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 _null_ _null_ ));
416
DESCR("XX:XX:XX:XX:XX:XX, MAC address");
417
#define MACADDROID 829
418
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 _null_ _null_ ));
419
DESCR("IP address/netmask, host address, netmask optional");
421
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 _null_ _null_ ));
422
DESCR("network IP address/netmask, network address");
427
/* OIDS 1000 - 1099 */
428
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 _null_ _null_ ));
429
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 _null_ _null_ ));
430
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 _null_ _null_ ));
431
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 _null_ _null_ ));
432
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 _null_ _null_ ));
433
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 _null_ _null_ ));
434
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 _null_ _null_ ));
435
#define INT4ARRAYOID 1007
436
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 _null_ _null_ ));
437
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 _null_ _null_ ));
438
#define TEXTARRAYOID 1009
439
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 _null_ _null_ ));
440
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 _null_ _null_ ));
441
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 _null_ _null_ ));
442
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 _null_ _null_ ));
443
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 _null_ _null_ ));
444
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 _null_ _null_ ));
445
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 _null_ _null_ ));
446
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 _null_ _null_ ));
447
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 _null_ _null_ ));
448
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 _null_ _null_ ));
449
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 _null_ _null_ ));
450
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 _null_ _null_ ));
451
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 _null_ _null_ ));
452
#define FLOAT4ARRAYOID 1021
453
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 _null_ _null_ ));
454
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 _null_ _null_ ));
455
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 _null_ _null_ ));
456
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 _null_ _null_ ));
457
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 _null_ _null_ ));
458
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 _null_ _null_ ));
459
DESCR("access control list");
460
#define ACLITEMOID 1033
461
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 _null_ _null_ ));
462
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 _null_ _null_ ));
463
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 _null_ _null_ ));
464
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 _null_ _null_ ));
465
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 _null_ _null_ ));
466
#define CSTRINGARRAYOID 1263
468
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 _null_ _null_ ));
469
DESCR("char(length), blank-padded string, fixed storage length");
470
#define BPCHAROID 1042
471
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 _null_ _null_ ));
472
DESCR("varchar(length), non-blank-padded string, variable storage length");
473
#define VARCHAROID 1043
475
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 _null_ _null_ ));
476
DESCR("ANSI SQL date");
478
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 _null_ _null_ ));
479
DESCR("hh:mm:ss, ANSI SQL time");
482
/* OIDS 1100 - 1199 */
483
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 _null_ _null_ ));
484
DESCR("date and time");
485
#define TIMESTAMPOID 1114
486
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 _null_ _null_ ));
487
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 _null_ _null_ ));
488
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 _null_ _null_ ));
489
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 _null_ _null_ ));
490
DESCR("date and time with time zone");
491
#define TIMESTAMPTZOID 1184
492
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 _null_ _null_ ));
493
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 _null_ _null_ ));
494
DESCR("@ <number> <units>, time interval");
495
#define INTERVALOID 1186
496
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 _null_ _null_ ));
498
/* OIDS 1200 - 1299 */
499
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 _null_ _null_ ));
500
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 _null_ _null_ ));
501
DESCR("hh:mm:ss, ANSI SQL time");
502
#define TIMETZOID 1266
503
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 _null_ _null_ ));
505
/* OIDS 1500 - 1599 */
506
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 _null_ _null_ ));
507
DESCR("fixed-length bit string");
509
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 _null_ _null_ ));
510
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 _null_ _null_ ));
511
DESCR("variable-length bit string");
512
#define VARBITOID 1562
513
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 _null_ _null_ ));
515
/* OIDS 1600 - 1699 */
517
/* OIDS 1700 - 1799 */
518
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 _null_ _null_ ));
519
DESCR("numeric(precision, decimal), arbitrary precision number");
520
#define NUMERICOID 1700
522
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 _null_ _null_ ));
523
DESCR("reference cursor (portal name)");
524
#define REFCURSOROID 1790
526
/* OIDS 2200 - 2299 */
527
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 _null_ _null_ ));
529
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 _null_ _null_ ));
530
DESCR("registered procedure (with args)");
531
#define REGPROCEDUREOID 2202
533
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 _null_ _null_ ));
534
DESCR("registered operator");
535
#define REGOPEROID 2203
537
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 _null_ _null_ ));
538
DESCR("registered operator (with args)");
539
#define REGOPERATOROID 2204
541
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 _null_ _null_ ));
542
DESCR("registered class");
543
#define REGCLASSOID 2205
545
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 _null_ _null_ ));
546
DESCR("registered type");
547
#define REGTYPEOID 2206
549
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 _null_ _null_ ));
550
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 _null_ _null_ ));
551
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 _null_ _null_ ));
552
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 _null_ _null_ ));
553
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 _null_ _null_ ));
554
#define REGTYPEARRAYOID 2211
557
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 _null_ _null_ ));
558
DESCR("UUID datatype");
559
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 _null_ _null_ ));
562
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 _null_ _null_ ));
563
DESCR("text representation for text search");
564
#define TSVECTOROID 3614
565
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 _null_ _null_ ));
566
DESCR("GiST index internal text representation for text search");
567
#define GTSVECTOROID 3642
568
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 _null_ _null_ ));
569
DESCR("query representation for text search");
570
#define TSQUERYOID 3615
571
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 _null_ _null_ ));
572
DESCR("registered text search configuration");
573
#define REGCONFIGOID 3734
574
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 _null_ _null_ ));
575
DESCR("registered text search dictionary");
576
#define REGDICTIONARYOID 3769
578
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 _null_ _null_ ));
579
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 _null_ _null_ ));
580
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 _null_ _null_ ));
581
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 _null_ _null_ ));
582
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 _null_ _null_ ));
584
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 _null_ _null_ ));
585
DESCR("txid snapshot");
586
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 _null_ _null_ ));
591
* types with typtype='p' represent various special cases in the type system.
593
* These cannot be used to define table columns, but are valid as function
594
* argument and result types (if supported by the function's implementation
597
* Note: cstring is a borderline case; it is still considered a pseudo-type,
598
* but there is now support for it in records and arrays. Perhaps we should
599
* just treat it as a regular base type?
601
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 _null_ _null_ ));
602
#define RECORDOID 2249
603
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 _null_ _null_ ));
604
#define RECORDARRAYOID 2287
605
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 _null_ _null_ ));
606
#define CSTRINGOID 2275
607
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 _null_ _null_ ));
609
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 _null_ _null_ ));
610
#define ANYARRAYOID 2277
611
DATA(insert OID = 2278 ( void PGNSP PGUID 4 t p P f t \054 0 0 0 void_in void_out - - - - - i p f 0 -1 0 _null_ _null_ ));
613
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 _null_ _null_ ));
614
#define TRIGGEROID 2279
615
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 _null_ _null_ ));
616
#define LANGUAGE_HANDLEROID 2280
617
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 _null_ _null_ ));
618
#define INTERNALOID 2281
619
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 _null_ _null_ ));
620
#define OPAQUEOID 2282
621
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 _null_ _null_ ));
622
#define ANYELEMENTOID 2283
623
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 _null_ _null_ ));
624
#define ANYNONARRAYOID 2776
625
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 _null_ _null_ ));
626
#define ANYENUMOID 3500
632
#define TYPTYPE_BASE 'b' /* base type (ordinary scalar type) */
633
#define TYPTYPE_COMPOSITE 'c' /* composite (e.g., table's rowtype) */
634
#define TYPTYPE_DOMAIN 'd' /* domain over another type */
635
#define TYPTYPE_ENUM 'e' /* enumerated type */
636
#define TYPTYPE_PSEUDO 'p' /* pseudo-type */
638
#define TYPCATEGORY_INVALID '\0' /* not an allowed category */
639
#define TYPCATEGORY_ARRAY 'A'
640
#define TYPCATEGORY_BOOLEAN 'B'
641
#define TYPCATEGORY_COMPOSITE 'C'
642
#define TYPCATEGORY_DATETIME 'D'
643
#define TYPCATEGORY_ENUM 'E'
644
#define TYPCATEGORY_GEOMETRIC 'G'
645
#define TYPCATEGORY_NETWORK 'I' /* think INET */
646
#define TYPCATEGORY_NUMERIC 'N'
647
#define TYPCATEGORY_PSEUDOTYPE 'P'
648
#define TYPCATEGORY_STRING 'S'
649
#define TYPCATEGORY_TIMESPAN 'T'
650
#define TYPCATEGORY_USER 'U'
651
#define TYPCATEGORY_BITSTRING 'V' /* er ... "varbit"? */
652
#define TYPCATEGORY_UNKNOWN 'X'
654
/* Is a type OID a polymorphic pseudotype? (Beware of multiple evaluation) */
655
#define IsPolymorphicType(typid) \
656
((typid) == ANYELEMENTOID || \
657
(typid) == ANYARRAYOID || \
658
(typid) == ANYNONARRAYOID || \
659
(typid) == ANYENUMOID)
661
#endif /* PG_TYPE_H */