OSDN Git Service

pgindent run for 8.2.
[pg-rex/syncrep.git] / 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-2006, PostgreSQL Global Development Group
9  * Portions Copyright (c) 1994, Regents of the University of California
10  *
11  * $PostgreSQL: pgsql/src/include/catalog/pg_type.h,v 1.172 2006/10/04 00:30:08 momjian Exp $
12  *
13  * NOTES
14  *        the genbki.sh 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 "nodes/nodes.h"
23
24 /* ----------------
25  *              postgres.h contains the system type definitions and the
26  *              CATALOG(), BKI_BOOTSTRAP and DATA() sugar words so this file
27  *              can be read by both genbki.sh and the C compiler.
28  * ----------------
29  */
30
31 /* ----------------
32  *              pg_type definition.  cpp turns this into
33  *              typedef struct FormData_pg_type
34  *
35  *              Some of the values in a pg_type instance are copied into
36  *              pg_attribute instances.  Some parts of Postgres use the pg_type copy,
37  *              while others use the pg_attribute copy, so they must match.
38  *              See struct FormData_pg_attribute for details.
39  * ----------------
40  */
41 #define TypeRelationId  1247
42
43 CATALOG(pg_type,1247) BKI_BOOTSTRAP
44 {
45         NameData        typname;                /* type name */
46         Oid                     typnamespace;   /* OID of namespace containing this type */
47         Oid                     typowner;               /* type owner */
48
49         /*
50          * For a fixed-size type, typlen is the number of bytes we use to
51          * represent a value of this type, e.g. 4 for an int4.  But for a
52          * variable-length type, typlen is negative.  We use -1 to indicate a
53          * "varlena" type (one that has a length word), -2 to indicate a
54          * null-terminated C string.
55          */
56         int2            typlen;
57
58         /*
59          * typbyval determines whether internal Postgres routines pass a value of
60          * this type by value or by reference.  typbyval had better be FALSE if
61          * the length is not 1, 2, or 4 (or 8 on 8-byte-Datum machines).
62          * Variable-length types are always passed by reference. Note that
63          * typbyval can be false even if the length would allow pass-by-value;
64          * this is currently true for type float4, for example.
65          */
66         bool            typbyval;
67
68         /*
69          * typtype is 'b' for a basic type, 'c' for a complex type (ie a table's
70          * rowtype), 'd' for a domain type, or 'p' for a pseudo type.
71          *
72          * If typtype is 'c', typrelid is the OID of the class' entry in pg_class.
73          */
74         char            typtype;
75
76         /*
77          * If typisdefined is false, the entry is only a placeholder (forward
78          * reference).  We know the type name, but not yet anything else about it.
79          */
80         bool            typisdefined;
81
82         char            typdelim;               /* delimiter for arrays of this type */
83
84         Oid                     typrelid;               /* 0 if not a complex type */
85
86         /*
87          * If typelem is not 0 then it identifies another row in pg_type. The
88          * current type can then be subscripted like an array yielding values of
89          * type typelem. A non-zero typelem does not guarantee this type to be a
90          * "real" array type; some ordinary fixed-length types can also be
91          * subscripted (e.g., name, point). Variable-length types can *not* be
92          * turned into pseudo-arrays like that. Hence, the way to determine
93          * whether a type is a "true" array type is if:
94          *
95          * typelem != 0 and typlen == -1.
96          */
97         Oid                     typelem;
98
99         /*
100          * I/O conversion procedures for the datatype.
101          */
102         regproc         typinput;               /* text format (required) */
103         regproc         typoutput;
104         regproc         typreceive;             /* binary format (optional) */
105         regproc         typsend;
106
107         /*
108          * Custom ANALYZE procedure for the datatype (0 selects the default).
109          */
110         regproc         typanalyze;
111
112         /* ----------------
113          * typalign is the alignment required when storing a value of this
114          * type.  It applies to storage on disk as well as most
115          * representations of the value inside Postgres.  When multiple values
116          * are stored consecutively, such as in the representation of a
117          * complete row on disk, padding is inserted before a datum of this
118          * type so that it begins on the specified boundary.  The alignment
119          * reference is the beginning of the first datum in the sequence.
120          *
121          * 'c' = CHAR alignment, ie no alignment needed.
122          * 's' = SHORT alignment (2 bytes on most machines).
123          * 'i' = INT alignment (4 bytes on most machines).
124          * 'd' = DOUBLE alignment (8 bytes on many machines, but by no means all).
125          *
126          * See include/utils/memutils.h for the macros that compute these
127          * alignment requirements.
128          *
129          * NOTE: for types used in system tables, it is critical that the
130          * size and alignment defined in pg_type agree with the way that the
131          * compiler will lay out the field in a struct representing a table row.
132          * ----------------
133          */
134         char            typalign;
135
136         /* ----------------
137          * typstorage tells if the type is prepared for toasting and what
138          * the default strategy for attributes of this type should be.
139          *
140          * 'p' PLAIN      type not prepared for toasting
141          * 'e' EXTERNAL   external storage possible, don't try to compress
142          * 'x' EXTENDED   try to compress and store external if required
143          * 'm' MAIN               like 'x' but try to keep in main tuple
144          * ----------------
145          */
146         char            typstorage;
147
148         /*
149          * This flag represents a "NOT NULL" constraint against this datatype.
150          *
151          * If true, the attnotnull column for a corresponding table column using
152          * this datatype will always enforce the NOT NULL constraint.
153          *
154          * Used primarily for domain types.
155          */
156         bool            typnotnull;
157
158         /*
159          * Domains use typbasetype to show the base (or domain) type that the
160          * domain is based on.  Zero if the type is not a domain.
161          */
162         Oid                     typbasetype;
163
164         /*
165          * Domains use typtypmod to record the typmod to be applied to their base
166          * type (-1 if base type does not use a typmod).  -1 if this type is not a
167          * domain.
168          */
169         int4            typtypmod;
170
171         /*
172          * typndims is the declared number of dimensions for an array domain type
173          * (i.e., typbasetype is an array type; the domain's typelem will match
174          * the base type's typelem).  Otherwise zero.
175          */
176         int4            typndims;
177
178         /*
179          * If typdefaultbin is not NULL, it is the nodeToString representation of
180          * a default expression for the type.  Currently this is only used for
181          * domains.
182          */
183         text            typdefaultbin;  /* VARIABLE LENGTH FIELD */
184
185         /*
186          * typdefault is NULL if the type has no associated default value. If
187          * typdefaultbin is not NULL, typdefault must contain a human-readable
188          * version of the default expression represented by typdefaultbin. If
189          * typdefaultbin is NULL and typdefault is not, then typdefault is the
190          * external representation of the type's default value, which may be fed
191          * to the type's input converter to produce a constant.
192          */
193         text            typdefault;             /* VARIABLE LENGTH FIELD */
194
195 } FormData_pg_type;
196
197 /* ----------------
198  *              Form_pg_type corresponds to a pointer to a row with
199  *              the format of pg_type relation.
200  * ----------------
201  */
202 typedef FormData_pg_type *Form_pg_type;
203
204 /* ----------------
205  *              compiler constants for pg_type
206  * ----------------
207  */
208 #define Natts_pg_type                                   23
209 #define Anum_pg_type_typname                    1
210 #define Anum_pg_type_typnamespace               2
211 #define Anum_pg_type_typowner                   3
212 #define Anum_pg_type_typlen                             4
213 #define Anum_pg_type_typbyval                   5
214 #define Anum_pg_type_typtype                    6
215 #define Anum_pg_type_typisdefined               7
216 #define Anum_pg_type_typdelim                   8
217 #define Anum_pg_type_typrelid                   9
218 #define Anum_pg_type_typelem                    10
219 #define Anum_pg_type_typinput                   11
220 #define Anum_pg_type_typoutput                  12
221 #define Anum_pg_type_typreceive                 13
222 #define Anum_pg_type_typsend                    14
223 #define Anum_pg_type_typanalyze                 15
224 #define Anum_pg_type_typalign                   16
225 #define Anum_pg_type_typstorage                 17
226 #define Anum_pg_type_typnotnull                 18
227 #define Anum_pg_type_typbasetype                19
228 #define Anum_pg_type_typtypmod                  20
229 #define Anum_pg_type_typndims                   21
230 #define Anum_pg_type_typdefaultbin              22
231 #define Anum_pg_type_typdefault                 23
232
233
234 /* ----------------
235  *              initial contents of pg_type
236  * ----------------
237  */
238
239 /* keep the following ordered by OID so that later changes can be made easier*/
240
241 /* Make sure the typlen, typbyval, and typalign values here match the initial
242    values for attlen, attbyval, and attalign in both places in pg_attribute.h
243    for every instance.
244 */
245
246 /* OIDS 1 - 99 */
247 DATA(insert OID = 16 (  bool       PGNSP PGUID  1 t b t \054 0   0 boolin boolout boolrecv boolsend - c p f 0 -1 0 _null_ _null_ ));
248 DESCR("boolean, 'true'/'false'");
249 #define BOOLOID                 16
250
251 DATA(insert OID = 17 (  bytea      PGNSP PGUID -1 f b t \054 0  0 byteain byteaout bytearecv byteasend - i x f 0 -1 0 _null_ _null_ ));
252 DESCR("variable-length string, binary values escaped");
253 #define BYTEAOID                17
254
255 DATA(insert OID = 18 (  char       PGNSP PGUID  1 t b t \054 0   0 charin charout charrecv charsend - c p f 0 -1 0 _null_ _null_ ));
256 DESCR("single character");
257 #define CHAROID                 18
258
259 DATA(insert OID = 19 (  name       PGNSP PGUID NAMEDATALEN f b t \054 0 18 namein nameout namerecv namesend - i p f 0 -1 0 _null_ _null_ ));
260 DESCR("63-character type for storing system identifiers");
261 #define NAMEOID                 19
262
263 DATA(insert OID = 20 (  int8       PGNSP PGUID  8 f b t \054 0   0 int8in int8out int8recv int8send - d p f 0 -1 0 _null_ _null_ ));
264 DESCR("~18 digit integer, 8-byte storage");
265 #define INT8OID                 20
266
267 DATA(insert OID = 21 (  int2       PGNSP PGUID  2 t b t \054 0   0 int2in int2out int2recv int2send - s p f 0 -1 0 _null_ _null_ ));
268 DESCR("-32 thousand to 32 thousand, 2-byte storage");
269 #define INT2OID                 21
270
271 DATA(insert OID = 22 (  int2vector PGNSP PGUID -1 f b t \054 0  21 int2vectorin int2vectorout int2vectorrecv int2vectorsend - i p f 0 -1 0 _null_ _null_ ));
272 DESCR("array of int2, used in system tables");
273 #define INT2VECTOROID   22
274
275 DATA(insert OID = 23 (  int4       PGNSP PGUID  4 t b t \054 0   0 int4in int4out int4recv int4send - i p f 0 -1 0 _null_ _null_ ));
276 DESCR("-2 billion to 2 billion integer, 4-byte storage");
277 #define INT4OID                 23
278
279 DATA(insert OID = 24 (  regproc    PGNSP PGUID  4 t b t \054 0   0 regprocin regprocout regprocrecv regprocsend - i p f 0 -1 0 _null_ _null_ ));
280 DESCR("registered procedure");
281 #define REGPROCOID              24
282
283 DATA(insert OID = 25 (  text       PGNSP PGUID -1 f b t \054 0  0 textin textout textrecv textsend - i x f 0 -1 0 _null_ _null_ ));
284 DESCR("variable-length string, no limit specified");
285 #define TEXTOID                 25
286
287 DATA(insert OID = 26 (  oid                PGNSP PGUID  4 t b t \054 0   0 oidin oidout oidrecv oidsend - i p f 0 -1 0 _null_ _null_ ));
288 DESCR("object identifier(oid), maximum 4 billion");
289 #define OIDOID                  26
290
291 DATA(insert OID = 27 (  tid                PGNSP PGUID  6 f b t \054 0   0 tidin tidout tidrecv tidsend - s p f 0 -1 0 _null_ _null_ ));
292 DESCR("(Block, offset), physical location of tuple");
293 #define TIDOID          27
294
295 DATA(insert OID = 28 (  xid                PGNSP PGUID  4 t b t \054 0   0 xidin xidout xidrecv xidsend - i p f 0 -1 0 _null_ _null_ ));
296 DESCR("transaction id");
297 #define XIDOID 28
298
299 DATA(insert OID = 29 (  cid                PGNSP PGUID  4 t b t \054 0   0 cidin cidout cidrecv cidsend - i p f 0 -1 0 _null_ _null_ ));
300 DESCR("command identifier type, sequence in transaction id");
301 #define CIDOID 29
302
303 DATA(insert OID = 30 (  oidvector  PGNSP PGUID -1 f b t \054 0  26 oidvectorin oidvectorout oidvectorrecv oidvectorsend - i p f 0 -1 0 _null_ _null_ ));
304 DESCR("array of oids, used in system tables");
305 #define OIDVECTOROID    30
306
307 /* hand-built rowtype entries for bootstrapped catalogs: */
308
309 DATA(insert OID = 71 (  pg_type                 PGNSP PGUID -1 f c t \054 1247 0 record_in record_out record_recv record_send - d x f 0 -1 0 _null_ _null_ ));
310 #define PG_TYPE_RELTYPE_OID 71
311 DATA(insert OID = 75 (  pg_attribute    PGNSP PGUID -1 f c t \054 1249 0 record_in record_out record_recv record_send - d x f 0 -1 0 _null_ _null_ ));
312 #define PG_ATTRIBUTE_RELTYPE_OID 75
313 DATA(insert OID = 81 (  pg_proc                 PGNSP PGUID -1 f c t \054 1255 0 record_in record_out record_recv record_send - d x f 0 -1 0 _null_ _null_ ));
314 #define PG_PROC_RELTYPE_OID 81
315 DATA(insert OID = 83 (  pg_class                PGNSP PGUID -1 f c t \054 1259 0 record_in record_out record_recv record_send - d x f 0 -1 0 _null_ _null_ ));
316 #define PG_CLASS_RELTYPE_OID 83
317
318 /* OIDS 100 - 199 */
319
320 /* OIDS 200 - 299 */
321
322 DATA(insert OID = 210 (  smgr      PGNSP PGUID 2 t b t \054 0 0 smgrin smgrout - - - s p f 0 -1 0 _null_ _null_ ));
323 DESCR("storage manager");
324
325 /* OIDS 300 - 399 */
326
327 /* OIDS 400 - 499 */
328
329 /* OIDS 500 - 599 */
330
331 /* OIDS 600 - 699 */
332 DATA(insert OID = 600 (  point     PGNSP PGUID 16 f b t \054 0 701 point_in point_out point_recv point_send - d p f 0 -1 0 _null_ _null_ ));
333 DESCR("geometric point '(x, y)'");
334 #define POINTOID                600
335 DATA(insert OID = 601 (  lseg      PGNSP PGUID 32 f b t \054 0 600 lseg_in lseg_out lseg_recv lseg_send - d p f 0 -1 0 _null_ _null_ ));
336 DESCR("geometric line segment '(pt1,pt2)'");
337 #define LSEGOID                 601
338 DATA(insert OID = 602 (  path      PGNSP PGUID -1 f b t \054 0 0 path_in path_out path_recv path_send - d x f 0 -1 0 _null_ _null_ ));
339 DESCR("geometric path '(pt1,...)'");
340 #define PATHOID                 602
341 DATA(insert OID = 603 (  box       PGNSP PGUID 32 f b t \073 0 600 box_in box_out box_recv box_send - d p f 0 -1 0 _null_ _null_ ));
342 DESCR("geometric box '(lower left,upper right)'");
343 #define BOXOID                  603
344 DATA(insert OID = 604 (  polygon   PGNSP PGUID -1 f b t \054 0   0 poly_in poly_out poly_recv poly_send - d x f 0 -1 0 _null_ _null_ ));
345 DESCR("geometric polygon '(pt1,...)'");
346 #define POLYGONOID              604
347
348 DATA(insert OID = 628 (  line      PGNSP PGUID 32 f b t \054 0 701 line_in line_out line_recv line_send - d p f 0 -1 0 _null_ _null_ ));
349 DESCR("geometric line (not implemented)'");
350 #define LINEOID                 628
351 DATA(insert OID = 629 (  _line     PGNSP PGUID  -1 f b t \054 0 628 array_in array_out array_recv array_send - d x f 0 -1 0 _null_ _null_ ));
352 DESCR("");
353
354 /* OIDS 700 - 799 */
355
356 DATA(insert OID = 700 (  float4    PGNSP PGUID  4 f b t \054 0   0 float4in float4out float4recv float4send - i p f 0 -1 0 _null_ _null_ ));
357 DESCR("single-precision floating point number, 4-byte storage");
358 #define FLOAT4OID 700
359 DATA(insert OID = 701 (  float8    PGNSP PGUID  8 f b t \054 0   0 float8in float8out float8recv float8send - d p f 0 -1 0 _null_ _null_ ));
360 DESCR("double-precision floating point number, 8-byte storage");
361 #define FLOAT8OID 701
362 DATA(insert OID = 702 (  abstime   PGNSP PGUID  4 t b t \054 0   0 abstimein abstimeout abstimerecv abstimesend - i p f 0 -1 0 _null_ _null_ ));
363 DESCR("absolute, limited-range date and time (Unix system time)");
364 #define ABSTIMEOID              702
365 DATA(insert OID = 703 (  reltime   PGNSP PGUID  4 t b t \054 0   0 reltimein reltimeout reltimerecv reltimesend - i p f 0 -1 0 _null_ _null_ ));
366 DESCR("relative, limited-range time interval (Unix delta time)");
367 #define RELTIMEOID              703
368 DATA(insert OID = 704 (  tinterval PGNSP PGUID 12 f b t \054 0   0 tintervalin tintervalout tintervalrecv tintervalsend - i p f 0 -1 0 _null_ _null_ ));
369 DESCR("(abstime,abstime), time interval");
370 #define TINTERVALOID    704
371 DATA(insert OID = 705 (  unknown   PGNSP PGUID -2 f b t \054 0   0 unknownin unknownout unknownrecv unknownsend - c p f 0 -1 0 _null_ _null_ ));
372 DESCR("");
373 #define UNKNOWNOID              705
374
375 DATA(insert OID = 718 (  circle    PGNSP PGUID  24 f b t \054 0 0 circle_in circle_out circle_recv circle_send - d p f 0 -1 0 _null_ _null_ ));
376 DESCR("geometric circle '(center,radius)'");
377 #define CIRCLEOID               718
378 DATA(insert OID = 719 (  _circle   PGNSP PGUID  -1 f b t \054 0  718 array_in array_out array_recv array_send - d x f 0 -1 0 _null_ _null_ ));
379 DATA(insert OID = 790 (  money     PGNSP PGUID   4 f b t \054 0 0 cash_in cash_out cash_recv cash_send - i p f 0 -1 0 _null_ _null_ ));
380 DESCR("monetary amounts, $d,ddd.cc");
381 #define CASHOID 790
382 DATA(insert OID = 791 (  _money    PGNSP PGUID  -1 f b t \054 0  790 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
383
384 /* OIDS 800 - 899 */
385 DATA(insert OID = 829 ( macaddr    PGNSP PGUID  6 f b t \054 0 0 macaddr_in macaddr_out macaddr_recv macaddr_send - i p f 0 -1 0 _null_ _null_ ));
386 DESCR("XX:XX:XX:XX:XX:XX, MAC address");
387 #define MACADDROID 829
388 DATA(insert OID = 869 ( inet       PGNSP PGUID  -1 f b t \054 0 0 inet_in inet_out inet_recv inet_send - i p f 0 -1 0 _null_ _null_ ));
389 DESCR("IP address/netmask, host address, netmask optional");
390 #define INETOID 869
391 DATA(insert OID = 650 ( cidr       PGNSP PGUID  -1 f b t \054 0 0 cidr_in cidr_out cidr_recv cidr_send - i p f 0 -1 0 _null_ _null_ ));
392 DESCR("network IP address/netmask, network address");
393 #define CIDROID 650
394
395 /* OIDS 900 - 999 */
396
397 /* OIDS 1000 - 1099 */
398 DATA(insert OID = 1000 (  _bool          PGNSP PGUID -1 f b t \054 0    16 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
399 DATA(insert OID = 1001 (  _bytea         PGNSP PGUID -1 f b t \054 0    17 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
400 DATA(insert OID = 1002 (  _char          PGNSP PGUID -1 f b t \054 0    18 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
401 DATA(insert OID = 1003 (  _name          PGNSP PGUID -1 f b t \054 0    19 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
402 DATA(insert OID = 1005 (  _int2          PGNSP PGUID -1 f b t \054 0    21 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
403 DATA(insert OID = 1006 (  _int2vector PGNSP PGUID -1 f b t \054 0       22 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
404 DATA(insert OID = 1007 (  _int4          PGNSP PGUID -1 f b t \054 0    23 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
405 #define INT4ARRAYOID            1007
406 DATA(insert OID = 1008 (  _regproc       PGNSP PGUID -1 f b t \054 0    24 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
407 DATA(insert OID = 1009 (  _text          PGNSP PGUID -1 f b t \054 0    25 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
408 DATA(insert OID = 1028 (  _oid           PGNSP PGUID -1 f b t \054 0    26 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
409 DATA(insert OID = 1010 (  _tid           PGNSP PGUID -1 f b t \054 0    27 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
410 DATA(insert OID = 1011 (  _xid           PGNSP PGUID -1 f b t \054 0    28 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
411 DATA(insert OID = 1012 (  _cid           PGNSP PGUID -1 f b t \054 0    29 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
412 DATA(insert OID = 1013 (  _oidvector PGNSP PGUID -1 f b t \054 0        30 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
413 DATA(insert OID = 1014 (  _bpchar        PGNSP PGUID -1 f b t \054 0 1042 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
414 DATA(insert OID = 1015 (  _varchar       PGNSP PGUID -1 f b t \054 0 1043 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
415 DATA(insert OID = 1016 (  _int8          PGNSP PGUID -1 f b t \054 0    20 array_in array_out array_recv array_send - d x f 0 -1 0 _null_ _null_ ));
416 DATA(insert OID = 1017 (  _point         PGNSP PGUID -1 f b t \054 0 600 array_in array_out array_recv array_send - d x f 0 -1 0 _null_ _null_ ));
417 DATA(insert OID = 1018 (  _lseg          PGNSP PGUID -1 f b t \054 0 601 array_in array_out array_recv array_send - d x f 0 -1 0 _null_ _null_ ));
418 DATA(insert OID = 1019 (  _path          PGNSP PGUID -1 f b t \054 0 602 array_in array_out array_recv array_send - d x f 0 -1 0 _null_ _null_ ));
419 DATA(insert OID = 1020 (  _box           PGNSP PGUID -1 f b t \073 0 603 array_in array_out array_recv array_send - d x f 0 -1 0 _null_ _null_ ));
420 DATA(insert OID = 1021 (  _float4        PGNSP PGUID -1 f b t \054 0 700 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
421 DATA(insert OID = 1022 (  _float8        PGNSP PGUID -1 f b t \054 0 701 array_in array_out array_recv array_send - d x f 0 -1 0 _null_ _null_ ));
422 DATA(insert OID = 1023 (  _abstime       PGNSP PGUID -1 f b t \054 0 702 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
423 DATA(insert OID = 1024 (  _reltime       PGNSP PGUID -1 f b t \054 0 703 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
424 DATA(insert OID = 1025 (  _tinterval PGNSP PGUID -1 f b t \054 0 704 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
425 DATA(insert OID = 1027 (  _polygon       PGNSP PGUID -1 f b t \054 0 604 array_in array_out array_recv array_send - d x f 0 -1 0 _null_ _null_ ));
426 DATA(insert OID = 1033 (  aclitem        PGNSP PGUID 12 f b t \054 0 0 aclitemin aclitemout - - - i p f 0 -1 0 _null_ _null_ ));
427 DESCR("access control list");
428 #define ACLITEMOID              1033
429 DATA(insert OID = 1034 (  _aclitem       PGNSP PGUID -1 f b t \054 0 1033 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
430 DATA(insert OID = 1040 (  _macaddr       PGNSP PGUID -1 f b t \054 0  829 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
431 DATA(insert OID = 1041 (  _inet    PGNSP PGUID -1 f b t \054 0  869 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
432 DATA(insert OID = 651  (  _cidr    PGNSP PGUID -1 f b t \054 0  650 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
433 DATA(insert OID = 1042 ( bpchar          PGNSP PGUID -1 f b t \054 0    0 bpcharin bpcharout bpcharrecv bpcharsend - i x f 0 -1 0 _null_ _null_ ));
434 DESCR("char(length), blank-padded string, fixed storage length");
435 #define BPCHAROID               1042
436 DATA(insert OID = 1043 ( varchar         PGNSP PGUID -1 f b t \054 0    0 varcharin varcharout varcharrecv varcharsend - i x f 0 -1 0 _null_ _null_ ));
437 DESCR("varchar(length), non-blank-padded string, variable storage length");
438 #define VARCHAROID              1043
439
440 DATA(insert OID = 1082 ( date            PGNSP PGUID    4 t b t \054 0  0 date_in date_out date_recv date_send - i p f 0 -1 0 _null_ _null_ ));
441 DESCR("ANSI SQL date");
442 #define DATEOID                 1082
443 DATA(insert OID = 1083 ( time            PGNSP PGUID    8 f b t \054 0  0 time_in time_out time_recv time_send - d p f 0 -1 0 _null_ _null_ ));
444 DESCR("hh:mm:ss, ANSI SQL time");
445 #define TIMEOID                 1083
446
447 /* OIDS 1100 - 1199 */
448 DATA(insert OID = 1114 ( timestamp       PGNSP PGUID    8 f b t \054 0  0 timestamp_in timestamp_out timestamp_recv timestamp_send - d p f 0 -1 0 _null_ _null_ ));
449 DESCR("date and time");
450 #define TIMESTAMPOID    1114
451 DATA(insert OID = 1115 ( _timestamp  PGNSP PGUID        -1 f b t \054 0 1114 array_in array_out array_recv array_send - d x f 0 -1 0 _null_ _null_ ));
452 DATA(insert OID = 1182 ( _date           PGNSP PGUID    -1 f b t \054 0 1082 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
453 DATA(insert OID = 1183 ( _time           PGNSP PGUID    -1 f b t \054 0 1083 array_in array_out array_recv array_send - d x f 0 -1 0 _null_ _null_ ));
454 DATA(insert OID = 1184 ( timestamptz PGNSP PGUID        8 f b t \054 0  0 timestamptz_in timestamptz_out timestamptz_recv timestamptz_send - d p f 0 -1 0 _null_ _null_ ));
455 DESCR("date and time with time zone");
456 #define TIMESTAMPTZOID  1184
457 DATA(insert OID = 1185 ( _timestamptz PGNSP PGUID -1 f b t \054 0       1184 array_in array_out array_recv array_send - d x f 0 -1 0 _null_ _null_ ));
458 DATA(insert OID = 1186 ( interval        PGNSP PGUID 16 f b t \054 0    0 interval_in interval_out interval_recv interval_send - d p f 0 -1 0 _null_ _null_ ));
459 DESCR("@ <number> <units>, time interval");
460 #define INTERVALOID             1186
461 DATA(insert OID = 1187 ( _interval       PGNSP PGUID    -1 f b t \054 0 1186 array_in array_out array_recv array_send - d x f 0 -1 0 _null_ _null_ ));
462
463 /* OIDS 1200 - 1299 */
464 DATA(insert OID = 1231 (  _numeric       PGNSP PGUID -1 f b t \054 0    1700 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
465 DATA(insert OID = 1266 ( timetz          PGNSP PGUID 12 f b t \054 0    0 timetz_in timetz_out timetz_recv timetz_send - d p f 0 -1 0 _null_ _null_ ));
466 DESCR("hh:mm:ss, ANSI SQL time");
467 #define TIMETZOID               1266
468 DATA(insert OID = 1270 ( _timetz         PGNSP PGUID -1 f b t \054 0    1266 array_in array_out array_recv array_send - d x f 0 -1 0 _null_ _null_ ));
469
470 /* OIDS 1500 - 1599 */
471 DATA(insert OID = 1560 ( bit             PGNSP PGUID -1 f b t \054 0    0 bit_in bit_out bit_recv bit_send - i x f 0 -1 0 _null_ _null_ ));
472 DESCR("fixed-length bit string");
473 #define BITOID   1560
474 DATA(insert OID = 1561 ( _bit            PGNSP PGUID -1 f b t \054 0    1560 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
475 DATA(insert OID = 1562 ( varbit          PGNSP PGUID -1 f b t \054 0    0 varbit_in varbit_out varbit_recv varbit_send - i x f 0 -1 0 _null_ _null_ ));
476 DESCR("variable-length bit string");
477 #define VARBITOID         1562
478 DATA(insert OID = 1563 ( _varbit         PGNSP PGUID -1 f b t \054 0    1562 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
479
480 /* OIDS 1600 - 1699 */
481
482 /* OIDS 1700 - 1799 */
483 DATA(insert OID = 1700 ( numeric           PGNSP PGUID -1 f b t \054 0  0 numeric_in numeric_out numeric_recv numeric_send - i m f 0 -1 0 _null_ _null_ ));
484 DESCR("numeric(precision, decimal), arbitrary precision number");
485 #define NUMERICOID              1700
486
487 DATA(insert OID = 1790 ( refcursor         PGNSP PGUID -1 f b t \054 0  0 textin textout textrecv textsend - i x f 0 -1 0 _null_ _null_ ));
488 DESCR("reference cursor (portal name)");
489 #define REFCURSOROID    1790
490
491 /* OIDS 2200 - 2299 */
492 DATA(insert OID = 2201 ( _refcursor    PGNSP PGUID -1 f b t \054 0 1790 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
493
494 DATA(insert OID = 2202 ( regprocedure  PGNSP PGUID      4 t b t \054 0   0 regprocedurein regprocedureout regprocedurerecv regproceduresend - i p f 0 -1 0 _null_ _null_ ));
495 DESCR("registered procedure (with args)");
496 #define REGPROCEDUREOID 2202
497
498 DATA(insert OID = 2203 ( regoper           PGNSP PGUID  4 t b t \054 0   0 regoperin regoperout regoperrecv regopersend - i p f 0 -1 0 _null_ _null_ ));
499 DESCR("registered operator");
500 #define REGOPEROID              2203
501
502 DATA(insert OID = 2204 ( regoperator   PGNSP PGUID      4 t b t \054 0   0 regoperatorin regoperatorout regoperatorrecv regoperatorsend - i p f 0 -1 0 _null_ _null_ ));
503 DESCR("registered operator (with args)");
504 #define REGOPERATOROID  2204
505
506 DATA(insert OID = 2205 ( regclass          PGNSP PGUID  4 t b t \054 0   0 regclassin regclassout regclassrecv regclasssend - i p f 0 -1 0 _null_ _null_ ));
507 DESCR("registered class");
508 #define REGCLASSOID             2205
509
510 DATA(insert OID = 2206 ( regtype           PGNSP PGUID  4 t b t \054 0   0 regtypein regtypeout regtyperecv regtypesend - i p f 0 -1 0 _null_ _null_ ));
511 DESCR("registered type");
512 #define REGTYPEOID              2206
513
514 DATA(insert OID = 2207 ( _regprocedure PGNSP PGUID -1 f b t \054 0 2202 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
515 DATA(insert OID = 2208 ( _regoper          PGNSP PGUID -1 f b t \054 0 2203 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
516 DATA(insert OID = 2209 ( _regoperator  PGNSP PGUID -1 f b t \054 0 2204 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
517 DATA(insert OID = 2210 ( _regclass         PGNSP PGUID -1 f b t \054 0 2205 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
518 DATA(insert OID = 2211 ( _regtype          PGNSP PGUID -1 f b t \054 0 2206 array_in array_out array_recv array_send - i x f 0 -1 0 _null_ _null_ ));
519 #define REGTYPEARRAYOID 2211
520
521 /*
522  * pseudo-types
523  *
524  * types with typtype='p' represent various special cases in the type system.
525  *
526  * These cannot be used to define table columns, but are valid as function
527  * argument and result types (if supported by the function's implementation
528  * language).
529  */
530 DATA(insert OID = 2249 ( record                 PGNSP PGUID -1 f p t \054 0 0 record_in record_out record_recv record_send - d x f 0 -1 0 _null_ _null_ ));
531 #define RECORDOID               2249
532 DATA(insert OID = 2275 ( cstring                PGNSP PGUID -2 f p t \054 0 0 cstring_in cstring_out cstring_recv cstring_send - c p f 0 -1 0 _null_ _null_ ));
533 #define CSTRINGOID              2275
534 DATA(insert OID = 2276 ( any                    PGNSP PGUID  4 t p t \054 0 0 any_in any_out - - - i p f 0 -1 0 _null_ _null_ ));
535 #define ANYOID                  2276
536 DATA(insert OID = 2277 ( anyarray               PGNSP PGUID -1 f p t \054 0 0 anyarray_in anyarray_out anyarray_recv anyarray_send - d x f 0 -1 0 _null_ _null_ ));
537 #define ANYARRAYOID             2277
538 DATA(insert OID = 2278 ( void                   PGNSP PGUID  4 t p t \054 0 0 void_in void_out - - - i p f 0 -1 0 _null_ _null_ ));
539 #define VOIDOID                 2278
540 DATA(insert OID = 2279 ( trigger                PGNSP PGUID  4 t p t \054 0 0 trigger_in trigger_out - - - i p f 0 -1 0 _null_ _null_ ));
541 #define TRIGGEROID              2279
542 DATA(insert OID = 2280 ( language_handler       PGNSP PGUID  4 t p t \054 0 0 language_handler_in language_handler_out - - - i p f 0 -1 0 _null_ _null_ ));
543 #define LANGUAGE_HANDLEROID             2280
544 DATA(insert OID = 2281 ( internal               PGNSP PGUID  4 t p t \054 0 0 internal_in internal_out - - - i p f 0 -1 0 _null_ _null_ ));
545 #define INTERNALOID             2281
546 DATA(insert OID = 2282 ( opaque                 PGNSP PGUID  4 t p t \054 0 0 opaque_in opaque_out - - - i p f 0 -1 0 _null_ _null_ ));
547 #define OPAQUEOID               2282
548 DATA(insert OID = 2283 ( anyelement             PGNSP PGUID  4 t p t \054 0 0 anyelement_in anyelement_out - - - i p f 0 -1 0 _null_ _null_ ));
549 #define ANYELEMENTOID   2283
550
551 /*
552  * prototypes for functions in pg_type.c
553  */
554 extern Oid      TypeShellMake(const char *typeName, Oid typeNamespace);
555
556 extern Oid TypeCreate(const char *typeName,
557                    Oid typeNamespace,
558                    Oid relationOid,
559                    char relationKind,
560                    int16 internalSize,
561                    char typeType,
562                    char typDelim,
563                    Oid inputProcedure,
564                    Oid outputProcedure,
565                    Oid receiveProcedure,
566                    Oid sendProcedure,
567                    Oid analyzeProcedure,
568                    Oid elementType,
569                    Oid baseType,
570                    const char *defaultTypeValue,
571                    char *defaultTypeBin,
572                    bool passedByValue,
573                    char alignment,
574                    char storage,
575                    int32 typeMod,
576                    int32 typNDims,
577                    bool typeNotNull);
578
579 extern void GenerateTypeDependencies(Oid typeNamespace,
580                                                  Oid typeObjectId,
581                                                  Oid relationOid,
582                                                  char relationKind,
583                                                  Oid owner,
584                                                  Oid inputProcedure,
585                                                  Oid outputProcedure,
586                                                  Oid receiveProcedure,
587                                                  Oid sendProcedure,
588                                                  Oid analyzeProcedure,
589                                                  Oid elementType,
590                                                  Oid baseType,
591                                                  Node *defaultExpr,
592                                                  bool rebuild);
593
594 extern void TypeRename(const char *oldTypeName, Oid typeNamespace,
595                    const char *newTypeName);
596
597 extern char *makeArrayTypeName(const char *typeName);
598
599 #endif   /* PG_TYPE_H */