]> granicus.if.org Git - postgresql/blob - src/include/catalog/pg_type.h
Rearrange order of operations in heap_create_with_catalog so that if
[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-2001, PostgreSQL Global Development Group
9  * Portions Copyright (c) 1994, Regents of the University of California
10  *
11  * $Id: pg_type.h,v 1.101 2001/02/12 20:07:20 tgl 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 /* ----------------
23  *              postgres.h contains the system type definitions and the
24  *              CATALOG(), BOOTSTRAP and DATA() sugar words so this file
25  *              can be read by both genbki.sh and the C compiler.
26  * ----------------
27  */
28
29 /* ----------------
30  *              pg_type definition.  cpp turns this into
31  *              typedef struct FormData_pg_type
32  *
33  *              Some of the values in a pg_type instance are copied into
34  *              pg_attribute instances.  Some parts of Postgres use the pg_type copy,
35  *              while others use the pg_attribute copy, so they must match.
36  *              See struct FormData_pg_attribute for details.
37  * ----------------
38  */
39 CATALOG(pg_type) BOOTSTRAP
40 {
41         NameData        typname;
42         int4            typowner;
43
44         /*
45          * typlen is the number of bytes we use to represent a value of this
46          * type, e.g. 4 for an int4.  But for a variable length type, typlen
47          * is -1.
48          */
49         int2            typlen;
50         int2            typprtlen;
51
52         /*
53          * typbyval determines whether internal Postgres routines pass a value
54          * of this type by value or by reference.  typbyval had better be FALSE
55          * if 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 basic type and 'c' for a catalog type (ie a
64          * class). If typtype is 'c', typrelid is the OID of the class' entry
65          * in pg_class. (Why do we need an entry in pg_type for classes,
66          * anyway?)
67          */
68         char            typtype;
69         bool            typisdefined;
70         char            typdelim;
71         Oid                     typrelid;               /* 0 if not a class type */
72
73         /*
74          * If typelem is not 0 then it identifies another row in pg_type.
75          * The current type can then be subscripted like an array yielding
76          * values of type typelem. A non-zero typelem does not guarantee
77          * this type to be a "real" array type; some ordinary fixed-length
78          * types can also be subscripted (e.g., oidvector). Variable-length
79          * types can *not* be turned into pseudo-arrays like that. Hence,
80          * the way to determine whether a type is a "true" array type is
81          * typelem != 0 and typlen < 0.
82          */
83         Oid                     typelem;
84         regproc         typinput;
85         regproc         typoutput;
86         regproc         typreceive;
87         regproc         typsend;
88
89         /* ----------------
90          * typalign is the alignment required when storing a value of this
91          * type.  It applies to storage on disk as well as most
92          * representations of the value inside Postgres.  When multiple values
93          * are stored consecutively, such as in the representation of a
94          * complete row on disk, padding is inserted before a datum of this
95          * type so that it begins on the specified boundary.  The alignment
96          * reference is the beginning of the first datum in the sequence.
97          *
98          * 'c' = CHAR alignment, ie no alignment needed.
99          * 's' = SHORT alignment (2 bytes on most machines).
100          * 'i' = INT alignment (4 bytes on most machines).
101          * 'd' = DOUBLE alignment (8 bytes on many machines, but by no means all).
102          *
103          * See include/utils/memutils.h for the macros that compute these
104          * alignment requirements.
105          *
106          * NOTE: for types used in system tables, it is critical that the
107          * size and alignment defined in pg_type agree with the way that the
108          * compiler will lay out the field in a struct representing a table row.
109          * ----------------
110          */
111         char            typalign;
112
113         /* ----------------
114          * typstorage tells if the type is prepared for toasting and what
115          * the default strategy for attributes of this type should be.
116          *
117          * 'p' PLAIN      type not prepared for toasting
118          * 'e' EXTERNAL   external storage possible, don't try to compress
119          * 'x' EXTENDED   try to compress and store external if required
120          * 'm' MAIN       like 'x' but try to keep in main tuple
121          * ----------------
122          */
123         char            typstorage;
124
125         text            typdefault;             /* VARIABLE LENGTH FIELD */
126 } FormData_pg_type;
127
128 /* ----------------
129  *              Form_pg_type corresponds to a pointer to a row with
130  *              the format of pg_type relation.
131  * ----------------
132  */
133 typedef FormData_pg_type *Form_pg_type;
134
135 /* ----------------
136  *              compiler constants for pg_type
137  * ----------------
138  */
139 #define Natts_pg_type                                   17
140 #define Anum_pg_type_typname                    1
141 #define Anum_pg_type_typowner                   2
142 #define Anum_pg_type_typlen                             3
143 #define Anum_pg_type_typprtlen                  4
144 #define Anum_pg_type_typbyval                   5
145 #define Anum_pg_type_typtype                    6
146 #define Anum_pg_type_typisdefined               7
147 #define Anum_pg_type_typdelim                   8
148 #define Anum_pg_type_typrelid                   9
149 #define Anum_pg_type_typelem                    10
150 #define Anum_pg_type_typinput                   11
151 #define Anum_pg_type_typoutput                  12
152 #define Anum_pg_type_typreceive                 13
153 #define Anum_pg_type_typsend                    14
154 #define Anum_pg_type_typalign                   15
155 #define Anum_pg_type_typstorage                 16
156 #define Anum_pg_type_typdefault                 17
157
158 /* ----------------
159  *              initial contents of pg_type
160  * ----------------
161  */
162
163 /* keep the following ordered by OID so that later changes can be made easier*/
164
165 /* Make sure the typlen, typbyval, and typalign values here match the initial
166    values for attlen, attbyval, and attalign in both places in pg_attribute.h
167    for every instance.
168 */
169
170 /* OIDS 1 - 99 */
171 DATA(insert OID = 16 (  bool       PGUID  1   1 t b t \054 0   0 boolin boolout boolin boolout c p _null_ ));
172 DESCR("boolean, 'true'/'false'");
173 #define BOOLOID                 16
174
175 DATA(insert OID = 17 (  bytea      PGUID -1  -1 f b t \054 0  0 byteain byteaout byteain byteaout i x _null_ ));
176 DESCR("variable-length string, binary values escaped");
177 #define BYTEAOID                17
178
179 DATA(insert OID = 18 (  char       PGUID  1   1 t b t \054 0   0 charin charout charin charout c p _null_ ));
180 DESCR("single character");
181 #define CHAROID                 18
182
183 DATA(insert OID = 19 (  name       PGUID NAMEDATALEN NAMEDATALEN  f b t \054 0  18 namein nameout namein nameout i p _null_ ));
184 DESCR("31-character type for storing system identifiers");
185 #define NAMEOID                 19
186
187 DATA(insert OID = 20 (  int8       PGUID  8  20 f b t \054 0   0 int8in int8out int8in int8out d p _null_ ));
188 DESCR("~18 digit integer, 8-byte storage");
189 #define INT8OID                 20
190
191 DATA(insert OID = 21 (  int2       PGUID  2   5 t b t \054 0   0 int2in int2out int2in int2out s p _null_ ));
192 DESCR("-32 thousand to 32 thousand, 2-byte storage");
193 #define INT2OID                 21
194
195 DATA(insert OID = 22 (  int2vector PGUID INDEX_MAX_KEYS*2 -1 f b t \054 0  21 int2vectorin int2vectorout int2vectorin int2vectorout i p _null_ ));
196 DESCR("array of INDEX_MAX_KEYS int2 integers, used in system tables");
197 #define INT2VECTOROID   22
198
199 DATA(insert OID = 23 (  int4       PGUID  4  10 t b t \054 0   0 int4in int4out int4in int4out i p _null_ ));
200 DESCR("-2 billion to 2 billion integer, 4-byte storage");
201 #define INT4OID                 23
202
203 DATA(insert OID = 24 (  regproc    PGUID  4  16 t b t \054 0   0 regprocin regprocout regprocin regprocout i p _null_ ));
204 DESCR("registered procedure");
205 #define REGPROCOID              24
206
207 DATA(insert OID = 25 (  text       PGUID -1  -1 f b t \054 0  0 textin textout textin textout i x _null_ ));
208 DESCR("variable-length string, no limit specified");
209 #define TEXTOID                 25
210
211 DATA(insert OID = 26 (  oid                PGUID  4  10 t b t \054 0   0 oidin oidout oidin oidout i p _null_ ));
212 DESCR("object identifier(oid), maximum 4 billion");
213 #define OIDOID                  26
214
215 DATA(insert OID = 27 (  tid                PGUID  6  19 f b t \054 0   0 tidin tidout tidin tidout i p _null_ ));
216 DESCR("(Block, offset), physical location of tuple");
217 #define TIDOID          27
218
219 DATA(insert OID = 28 (  xid                PGUID  4  12 t b t \054 0   0 xidin xidout xidin xidout i p _null_ ));
220 DESCR("transaction id");
221 #define XIDOID 28
222
223 DATA(insert OID = 29 (  cid                PGUID  4  10 t b t \054 0   0 cidin cidout cidin cidout i p _null_ ));
224 DESCR("command identifier type, sequence in transaction id");
225 #define CIDOID 29
226
227 DATA(insert OID = 30 (  oidvector  PGUID INDEX_MAX_KEYS*4 -1 f b t \054 0  26 oidvectorin oidvectorout oidvectorin oidvectorout i p _null_ ));
228 DESCR("array of INDEX_MAX_KEYS oids, used in system tables");
229 #define OIDVECTOROID    30
230
231 DATA(insert OID = 32 (  SET                PGUID -1  -1 f b t \054 0   0 textin textout textin textout i p _null_ ));
232 DESCR("set of tuples");
233
234 DATA(insert OID = 71 (  pg_type          PGUID 4 4 t c t \054 1247 0 int4in int4out int4in int4out i p _null_));
235 DATA(insert OID = 75 (  pg_attribute PGUID 4 4 t c t \054 1249 0 int4in int4out int4in int4out i p _null_));
236 DATA(insert OID = 81 (  pg_proc          PGUID 4 4 t c t \054 1255 0 int4in int4out int4in int4out i p _null_));
237 DATA(insert OID = 83 (  pg_class         PGUID 4 4 t c t \054 1259 0 int4in int4out int4in int4out i p _null_));
238 DATA(insert OID = 86 (  pg_shadow        PGUID 4 4 t c t \054 1260 0 int4in int4out int4in int4out i p _null_));
239 DATA(insert OID = 87 (  pg_group         PGUID 4 4 t c t \054 1261 0 int4in int4out int4in int4out i p _null_));
240 DATA(insert OID = 88 (  pg_database  PGUID 4 4 t c t \054 1262 0 int4in int4out int4in int4out i p _null_));
241 DATA(insert OID = 90 (  pg_variable  PGUID 4 4 t c t \054 1264 0 int4in int4out int4in int4out i p _null_));
242 DATA(insert OID = 99 (  pg_log           PGUID 4 4 t c t \054 1269 0 int4in int4out int4in int4out i p _null_));
243
244 /* OIDS 100 - 199 */
245
246 DATA(insert OID = 109 (  pg_attrdef  PGUID 4 4 t c t \054 1215 0 int4in int4out int4in int4out i p _null_));
247 DATA(insert OID = 110 (  pg_relcheck PGUID 4 4 t c t \054 1216 0 int4in int4out int4in int4out i p _null_));
248 DATA(insert OID = 111 (  pg_trigger  PGUID 4 4 t c t \054 1219 0 int4in int4out int4in int4out i p _null_));
249
250 /* OIDS 200 - 299 */
251
252 DATA(insert OID = 210 (  smgr      PGUID 2      12 t b t \054 0 0 smgrin smgrout smgrin smgrout s p _null_ ));
253 DESCR("storage manager");
254
255 /* OIDS 300 - 399 */
256
257 /* OIDS 400 - 499 */
258
259 /* OIDS 500 - 599 */
260
261 /* OIDS 600 - 699 */
262 DATA(insert OID = 600 (  point     PGUID 16  24 f b t \054 0 701 point_in point_out point_in point_out d p _null_ ));
263 DESCR("geometric point '(x, y)'");
264 #define POINTOID                600
265 DATA(insert OID = 601 (  lseg      PGUID 32  48 f b t \054 0 600 lseg_in lseg_out lseg_in lseg_out d p _null_ ));
266 DESCR("geometric line segment '(pt1,pt2)'");
267 #define LSEGOID                 601
268 DATA(insert OID = 602 (  path      PGUID -1  -1 f b t \054 0 0 path_in path_out path_in path_out d x _null_ ));
269 DESCR("geometric path '(pt1,...)'");
270 #define PATHOID                 602
271 DATA(insert OID = 603 (  box       PGUID 32 100 f b t \073 0 600 box_in box_out box_in box_out d p _null_ ));
272 DESCR("geometric box '(lower left,upper right)'");
273 #define BOXOID                  603
274 DATA(insert OID = 604 (  polygon   PGUID -1  -1 f b t \054 0   0 poly_in poly_out poly_in poly_out d x _null_ ));
275 DESCR("geometric polygon '(pt1,...)'");
276 #define POLYGONOID              604
277
278 DATA(insert OID = 628 (  line      PGUID 32  48 f b t \054 0 701 line_in line_out line_in line_out d p _null_ ));
279 DESCR("geometric line '(pt1,pt2)'");
280 #define LINEOID                 628
281 DATA(insert OID = 629 (  _line     PGUID  -1 -1 f b t \054 0 628 array_in array_out array_in array_out d x _null_ ));
282 DESCR("");
283
284 /* OIDS 700 - 799 */
285
286 DATA(insert OID = 700 (  float4    PGUID  4  12 f b t \054 0   0 float4in float4out float4in float4out i p _null_ ));
287 DESCR("single-precision floating point number, 4-byte storage");
288 #define FLOAT4OID 700
289 DATA(insert OID = 701 (  float8    PGUID  8  24 f b t \054 0   0 float8in float8out float8in float8out d p _null_ ));
290 DESCR("double-precision floating point number, 8-byte storage");
291 #define FLOAT8OID 701
292 DATA(insert OID = 702 (  abstime   PGUID  4  20 t b t \054 0   0 nabstimein nabstimeout nabstimein nabstimeout i p _null_ ));
293 DESCR("absolute, limited-range date and time (Unix system time)");
294 #define ABSTIMEOID              702
295 DATA(insert OID = 703 (  reltime   PGUID  4  20 t b t \054 0   0 reltimein reltimeout reltimein reltimeout i p _null_ ));
296 DESCR("relative, limited-range time interval (Unix delta time)");
297 #define RELTIMEOID              703
298 DATA(insert OID = 704 (  tinterval PGUID 12  47 f b t \054 0   0 tintervalin tintervalout tintervalin tintervalout i p _null_ ));
299 DESCR("(abstime,abstime), time interval");
300 #define TINTERVALOID    704
301 DATA(insert OID = 705 (  unknown   PGUID -1  -1 f b t \054 0   0 textin textout textin textout i p _null_ ));
302 DESCR("");
303 #define UNKNOWNOID              705
304
305 DATA(insert OID = 718 (  circle    PGUID  24 47 f b t \054 0    0 circle_in circle_out circle_in circle_out d p _null_ ));
306 DESCR("geometric circle '(center,radius)'");
307 #define CIRCLEOID               718
308 DATA(insert OID = 719 (  _circle   PGUID  -1 -1 f b t \054 0  718 array_in array_out array_in array_out d x _null_ ));
309 DATA(insert OID = 790 (  money     PGUID   4 24 f b t \054 0    0 cash_in cash_out cash_in cash_out i p _null_ ));
310 DESCR("$d,ddd.cc, money");
311 #define CASHOID 790
312 DATA(insert OID = 791 (  _money    PGUID  -1 -1 f b t \054 0  790 array_in array_out array_in array_out i x _null_ ));
313
314 /* OIDS 800 - 899 */
315 DATA(insert OID = 829 ( macaddr    PGUID  6 -1 f b t \054 0 0 macaddr_in macaddr_out macaddr_in macaddr_out i p _null_ ));
316 DESCR("XX:XX:XX:XX:XX, MAC address");
317 DATA(insert OID = 869 ( inet       PGUID  -1 -1 f b t \054 0 0 inet_in inet_out inet_in inet_out i p _null_ ));
318 DESCR("IP address/netmask, host address, netmask optional");
319 #define INETOID 869
320 DATA(insert OID = 650 ( cidr       PGUID  -1 -1 f b t \054 0 0 cidr_in cidr_out cidr_in cidr_out i p _null_ ));
321 DESCR("network IP address/netmask, network address");
322 #define CIDROID 650
323
324 /* OIDS 900 - 999 */
325
326 /* OIDS 1000 - 1099 */
327 DATA(insert OID = 1000 (  _bool          PGUID -1  -1 f b t \054 0      16 array_in array_out array_in array_out i x _null_ ));
328 DATA(insert OID = 1001 (  _bytea         PGUID -1  -1 f b t \054 0      17 array_in array_out array_in array_out i x _null_ ));
329 DATA(insert OID = 1002 (  _char          PGUID -1  -1 f b t \054 0      18 array_in array_out array_in array_out i x _null_ ));
330 DATA(insert OID = 1003 (  _name          PGUID -1  -1 f b t \054 0      19 array_in array_out array_in array_out i x _null_ ));
331 DATA(insert OID = 1005 (  _int2          PGUID -1  -1 f b t \054 0      21 array_in array_out array_in array_out i x _null_ ));
332 DATA(insert OID = 1006 (  _int2vector PGUID -1 -1 f b t \054 0  22 array_in array_out array_in array_out i x _null_ ));
333 DATA(insert OID = 1007 (  _int4          PGUID -1  -1 f b t \054 0      23 array_in array_out array_in array_out i x _null_ ));
334 DATA(insert OID = 1008 (  _regproc       PGUID -1  -1 f b t \054 0      24 array_in array_out array_in array_out i x _null_ ));
335 DATA(insert OID = 1009 (  _text          PGUID -1  -1 f b t \054 0      25 array_in array_out array_in array_out i x _null_ ));
336 DATA(insert OID = 1028 (  _oid           PGUID -1  -1 f b t \054 0      26 array_in array_out array_in array_out i x _null_ ));
337 DATA(insert OID = 1010 (  _tid           PGUID -1  -1 f b t \054 0      27 array_in array_out array_in array_out i x _null_ ));
338 DATA(insert OID = 1011 (  _xid           PGUID -1  -1 f b t \054 0      28 array_in array_out array_in array_out i x _null_ ));
339 DATA(insert OID = 1012 (  _cid           PGUID -1  -1 f b t \054 0      29 array_in array_out array_in array_out i x _null_ ));
340 DATA(insert OID = 1013 (  _oidvector PGUID -1  -1 f b t \054 0  30 array_in array_out array_in array_out i x _null_ ));
341 DATA(insert OID = 1014 (  _bpchar        PGUID -1  -1 f b t \054 0 1042 array_in array_out array_in array_out i x _null_ ));
342 DATA(insert OID = 1015 (  _varchar       PGUID -1  -1 f b t \054 0 1043 array_in array_out array_in array_out i x _null_ ));
343 DATA(insert OID = 1016 (  _int8          PGUID -1  -1 f b t \054 0      20 array_in array_out array_in array_out d x _null_ ));
344 DATA(insert OID = 1017 (  _point         PGUID -1  -1 f b t \054 0 600 array_in array_out array_in array_out d x _null_ ));
345 DATA(insert OID = 1018 (  _lseg          PGUID -1  -1 f b t \054 0 601 array_in array_out array_in array_out d x _null_ ));
346 DATA(insert OID = 1019 (  _path          PGUID -1  -1 f b t \054 0 602 array_in array_out array_in array_out d x _null_ ));
347 DATA(insert OID = 1020 (  _box           PGUID -1  -1 f b t \073 0 603 array_in array_out array_in array_out d x _null_ ));
348 DATA(insert OID = 1021 (  _float4        PGUID -1  -1 f b t \054 0 700 array_in array_out array_in array_out i x _null_ ));
349 DATA(insert OID = 1022 (  _float8        PGUID -1  -1 f b t \054 0 701 array_in array_out array_in array_out d x _null_ ));
350 DATA(insert OID = 1023 (  _abstime       PGUID -1  -1 f b t \054 0 702 array_in array_out array_in array_out i x _null_ ));
351 DATA(insert OID = 1024 (  _reltime       PGUID -1  -1 f b t \054 0 703 array_in array_out array_in array_out i x _null_ ));
352 DATA(insert OID = 1025 (  _tinterval PGUID -1  -1 f b t \054 0 704 array_in array_out array_in array_out i x _null_ ));
353 DATA(insert OID = 1027 (  _polygon       PGUID -1  -1 f b t \054 0 604 array_in array_out array_in array_out d x _null_ ));
354 /*
355  *      Note: the size of aclitem needs to match sizeof(AclItem) in acl.h.
356  *      Thanks to some padding, this will be 8 on all platforms.
357  *      We also have an Assert to make sure.
358  */
359 #define ACLITEMSIZE 8
360 DATA(insert OID = 1033 (  aclitem        PGUID 8   -1 f b t \054 0 0 aclitemin aclitemout aclitemin aclitemout i p _null_ ));
361 DESCR("access control list");
362 DATA(insert OID = 1034 (  _aclitem       PGUID -1 -1 f b t \054 0 1033 array_in array_out array_in array_out i x _null_ ));
363 DATA(insert OID = 1040 (  _macaddr       PGUID -1 -1 f b t \054 0  829 array_in array_out array_in array_out i x _null_ ));
364 DATA(insert OID = 1041 (  _inet    PGUID -1 -1 f b t \054 0  869 array_in array_out array_in array_out i x _null_ ));
365 DATA(insert OID = 651  (  _cidr    PGUID -1 -1 f b t \054 0  650 array_in array_out array_in array_out i x _null_ ));
366 DATA(insert OID = 1042 ( bpchar          PGUID -1  -1 f b t \054 0      0 bpcharin bpcharout bpcharin bpcharout i x _null_ ));
367 DESCR("char(length), blank-padded string, fixed storage length");
368 #define BPCHAROID               1042
369 DATA(insert OID = 1043 ( varchar         PGUID -1  -1 f b t \054 0      0 varcharin varcharout varcharin varcharout i x _null_ ));
370 DESCR("varchar(length), non-blank-padded string, variable storage length");
371 #define VARCHAROID              1043
372
373 DATA(insert OID = 1082 ( date            PGUID  4  10 t b t \054 0      0 date_in date_out date_in date_out i p _null_ ));
374 DESCR("ANSI SQL date");
375 #define DATEOID                 1082
376 DATA(insert OID = 1083 ( time            PGUID  8  16 f b t \054 0      0 time_in time_out time_in time_out d p _null_ ));
377 DESCR("hh:mm:ss, ANSI SQL time");
378 #define TIMEOID                 1083
379
380 /* OIDS 1100 - 1199 */
381 DATA(insert OID = 1182 ( _date           PGUID  -1 -1 f b t \054 0      1082 array_in array_out array_in array_out i x _null_ ));
382 DATA(insert OID = 1183 ( _time           PGUID  -1 -1 f b t \054 0      1083 array_in array_out array_in array_out d x _null_ ));
383 DATA(insert OID = 1184 ( timestamp       PGUID  8  47 f b t \054 0      0 timestamp_in timestamp_out timestamp_in timestamp_out d p _null_ ));
384 DESCR("date and time");
385 #define TIMESTAMPOID    1184
386 DATA(insert OID = 1185 ( _timestamp  PGUID      -1 -1 f b t \054 0      1184 array_in array_out array_in array_out d x _null_ ));
387 DATA(insert OID = 1186 ( interval        PGUID 12  47 f b t \054 0      0 interval_in interval_out interval_in interval_out d p _null_ ));
388 DESCR("@ <number> <units>, time interval");
389 #define INTERVALOID             1186
390 DATA(insert OID = 1187 ( _interval       PGUID  -1 -1 f b t \054 0      1186 array_in array_out array_in array_out d x _null_ ));
391
392 /* OIDS 1200 - 1299 */
393 DATA(insert OID = 1231 (  _numeric       PGUID -1  -1 f b t \054 0      1700 array_in array_out array_in array_out i x _null_ ));
394 DATA(insert OID = 1266 ( timetz          PGUID 12  22 f b t \054 0      0 timetz_in timetz_out timetz_in timetz_out d p _null_ ));
395 DESCR("hh:mm:ss, ANSI SQL time");
396 #define TIMETZOID               1266
397 DATA(insert OID = 1270 ( _timetz         PGUID  -1 -1 f b t \054 0      1266 array_in array_out array_in array_out d x _null_ ));
398
399 /* OIDS 1500 - 1599 */
400 DATA(insert OID = 1560 ( bit             PGUID -1  -1 f b t \054 0      0 zpbit_in zpbit_out zpbit_in zpbit_out i x _null_ ));
401 DESCR("fixed-length bit string");
402 #define ZPBITOID         1560
403 DATA(insert OID = 1561 ( _bit            PGUID  -1 -1 f b t \054 0      1560 array_in array_out array_in array_out i x _null_ ));
404 DATA(insert OID = 1562 ( varbit          PGUID -1  -1 f b t \054 0      0 varbit_in varbit_out varbit_in varbit_out i x _null_ ));
405 DESCR("variable-length bit string");
406 #define VARBITOID         1562
407 DATA(insert OID = 1563 ( _varbit         PGUID  -1 -1 f b t \054 0      1562 array_in array_out array_in array_out i x _null_ ));
408
409 /* OIDS 1600 - 1699 */
410
411 /* OIDS 1700 - 1799 */
412 DATA(insert OID = 1700 ( numeric           PGUID -1  -1 f b t \054 0  0 numeric_in numeric_out numeric_in numeric_out i m _null_ ));
413 DESCR("numeric(precision, decimal), arbitrary precision number");
414 #define NUMERICOID              1700
415
416
417 /*
418  * prototypes for functions in pg_type.c
419  */
420 extern Oid      TypeGet(char *typeName, bool *defined);
421 extern Oid      TypeShellMake(char *typeName);
422 extern Oid TypeCreate(char *typeName,
423                    Oid assignedTypeOid,
424                    Oid relationOid,
425                    int16 internalSize,
426                    int16 externalSize,
427                    char typeType,
428                    char typDelim,
429                    char *inputProcedure,
430                    char *outputProcedure,
431                    char *receiveProcedure,
432                    char *sendProcedure,
433                    char *elementTypeName,
434                    char *defaultTypeValue,
435                    bool passedByValue,
436                    char alignment,
437                    char storage);
438 extern void TypeRename(const char *oldTypeName, const char *newTypeName);
439 extern char *makeArrayTypeName(char *typeName);
440
441
442 #endif   /* PG_TYPE_H */