Fix xslt_process() to ensure that it inserts a NULL terminator after the
[PostgreSQL.git] / src / include / catalog / pg_cast.h
blobabf2e9301e1974755bea40ecbb2f97caa404ef70
1 /*-------------------------------------------------------------------------
3 * pg_cast.h
4 * definition of the system "type casts" relation (pg_cast)
5 * along with the relation's initial contents.
7 * As of Postgres 8.0, pg_cast describes not only type coercion functions
8 * but also length coercion functions.
11 * Copyright (c) 2002-2009, PostgreSQL Global Development Group
13 * $PostgreSQL$
15 * NOTES
16 * the genbki.sh script reads this file and generates .bki
17 * information from the DATA() statements.
19 *-------------------------------------------------------------------------
21 #ifndef PG_CAST_H
22 #define PG_CAST_H
24 #include "catalog/genbki.h"
26 /* ----------------
27 * pg_cast definition. cpp turns this into
28 * typedef struct FormData_pg_cast
29 * ----------------
31 #define CastRelationId 2605
33 CATALOG(pg_cast,2605)
35 Oid castsource; /* source datatype for cast */
36 Oid casttarget; /* destination datatype for cast */
37 Oid castfunc; /* cast function; 0 = binary coercible */
38 char castcontext; /* contexts in which cast can be used */
39 char castmethod; /* cast method */
40 } FormData_pg_cast;
42 typedef FormData_pg_cast *Form_pg_cast;
45 * The allowable values for pg_cast.castcontext are specified by this enum.
46 * Since castcontext is stored as a "char", we use ASCII codes for human
47 * convenience in reading the table. Note that internally to the backend,
48 * these values are converted to the CoercionContext enum (see primnodes.h),
49 * which is defined to sort in a convenient order; the ASCII codes don't
50 * have to sort in any special order.
53 typedef enum CoercionCodes
55 COERCION_CODE_IMPLICIT = 'i', /* coercion in context of expression */
56 COERCION_CODE_ASSIGNMENT = 'a', /* coercion in context of assignment */
57 COERCION_CODE_EXPLICIT = 'e' /* explicit cast operation */
58 } CoercionCodes;
61 * The allowable values for pg_cast.castmethod are specified by this enum.
62 * Since castcontext is stored as a "char", we use ASCII codes for human
63 * convenience in reading the table.
65 typedef enum CoercionMethod
67 COERCION_METHOD_FUNCTION = 'f', /* use a function */
68 COERCION_METHOD_BINARY = 'b', /* types are binary-compatible */
69 COERCION_METHOD_INOUT = 'i' /* use input/output functions */
70 } CoercionMethod;
73 /* ----------------
74 * compiler constants for pg_cast
75 * ----------------
77 #define Natts_pg_cast 5
78 #define Anum_pg_cast_castsource 1
79 #define Anum_pg_cast_casttarget 2
80 #define Anum_pg_cast_castfunc 3
81 #define Anum_pg_cast_castcontext 4
82 #define Anum_pg_cast_castmethod 5
84 /* ----------------
85 * initial contents of pg_cast
87 * Note: this table has OIDs, but we don't bother to assign them manually,
88 * since nothing needs to know the specific OID of any built-in cast.
89 * ----------------
93 * Numeric category: implicit casts are allowed in the direction
94 * int2->int4->int8->numeric->float4->float8, while casts in the
95 * reverse direction are assignment-only.
97 DATA(insert ( 20 21 714 a f ));
98 DATA(insert ( 20 23 480 a f ));
99 DATA(insert ( 20 700 652 i f ));
100 DATA(insert ( 20 701 482 i f ));
101 DATA(insert ( 20 1700 1781 i f ));
102 DATA(insert ( 21 20 754 i f ));
103 DATA(insert ( 21 23 313 i f ));
104 DATA(insert ( 21 700 236 i f ));
105 DATA(insert ( 21 701 235 i f ));
106 DATA(insert ( 21 1700 1782 i f ));
107 DATA(insert ( 23 20 481 i f ));
108 DATA(insert ( 23 21 314 a f ));
109 DATA(insert ( 23 700 318 i f ));
110 DATA(insert ( 23 701 316 i f ));
111 DATA(insert ( 23 1700 1740 i f ));
112 DATA(insert ( 700 20 653 a f ));
113 DATA(insert ( 700 21 238 a f ));
114 DATA(insert ( 700 23 319 a f ));
115 DATA(insert ( 700 701 311 i f ));
116 DATA(insert ( 700 1700 1742 a f ));
117 DATA(insert ( 701 20 483 a f ));
118 DATA(insert ( 701 21 237 a f ));
119 DATA(insert ( 701 23 317 a f ));
120 DATA(insert ( 701 700 312 a f ));
121 DATA(insert ( 701 1700 1743 a f ));
122 DATA(insert ( 1700 20 1779 a f ));
123 DATA(insert ( 1700 21 1783 a f ));
124 DATA(insert ( 1700 23 1744 a f ));
125 DATA(insert ( 1700 700 1745 i f ));
126 DATA(insert ( 1700 701 1746 i f ));
128 /* Allow explicit coercions between int4 and bool */
129 DATA(insert ( 23 16 2557 e f ));
130 DATA(insert ( 16 23 2558 e f ));
133 * OID category: allow implicit conversion from any integral type (including
134 * int8, to support OID literals > 2G) to OID, as well as assignment coercion
135 * from OID to int4 or int8. Similarly for each OID-alias type. Also allow
136 * implicit coercions between OID and each OID-alias type, as well as
137 * regproc<->regprocedure and regoper<->regoperator. (Other coercions
138 * between alias types must pass through OID.) Lastly, there are implicit
139 * casts from text and varchar to regclass, which exist mainly to support
140 * legacy forms of nextval() and related functions.
142 DATA(insert ( 20 26 1287 i f ));
143 DATA(insert ( 21 26 313 i f ));
144 DATA(insert ( 23 26 0 i b ));
145 DATA(insert ( 26 20 1288 a f ));
146 DATA(insert ( 26 23 0 a b ));
147 DATA(insert ( 26 24 0 i b ));
148 DATA(insert ( 24 26 0 i b ));
149 DATA(insert ( 20 24 1287 i f ));
150 DATA(insert ( 21 24 313 i f ));
151 DATA(insert ( 23 24 0 i b ));
152 DATA(insert ( 24 20 1288 a f ));
153 DATA(insert ( 24 23 0 a b ));
154 DATA(insert ( 24 2202 0 i b ));
155 DATA(insert ( 2202 24 0 i b ));
156 DATA(insert ( 26 2202 0 i b ));
157 DATA(insert ( 2202 26 0 i b ));
158 DATA(insert ( 20 2202 1287 i f ));
159 DATA(insert ( 21 2202 313 i f ));
160 DATA(insert ( 23 2202 0 i b ));
161 DATA(insert ( 2202 20 1288 a f ));
162 DATA(insert ( 2202 23 0 a b ));
163 DATA(insert ( 26 2203 0 i b ));
164 DATA(insert ( 2203 26 0 i b ));
165 DATA(insert ( 20 2203 1287 i f ));
166 DATA(insert ( 21 2203 313 i f ));
167 DATA(insert ( 23 2203 0 i b ));
168 DATA(insert ( 2203 20 1288 a f ));
169 DATA(insert ( 2203 23 0 a b ));
170 DATA(insert ( 2203 2204 0 i b ));
171 DATA(insert ( 2204 2203 0 i b ));
172 DATA(insert ( 26 2204 0 i b ));
173 DATA(insert ( 2204 26 0 i b ));
174 DATA(insert ( 20 2204 1287 i f ));
175 DATA(insert ( 21 2204 313 i f ));
176 DATA(insert ( 23 2204 0 i b ));
177 DATA(insert ( 2204 20 1288 a f ));
178 DATA(insert ( 2204 23 0 a b ));
179 DATA(insert ( 26 2205 0 i b ));
180 DATA(insert ( 2205 26 0 i b ));
181 DATA(insert ( 20 2205 1287 i f ));
182 DATA(insert ( 21 2205 313 i f ));
183 DATA(insert ( 23 2205 0 i b ));
184 DATA(insert ( 2205 20 1288 a f ));
185 DATA(insert ( 2205 23 0 a b ));
186 DATA(insert ( 26 2206 0 i b ));
187 DATA(insert ( 2206 26 0 i b ));
188 DATA(insert ( 20 2206 1287 i f ));
189 DATA(insert ( 21 2206 313 i f ));
190 DATA(insert ( 23 2206 0 i b ));
191 DATA(insert ( 2206 20 1288 a f ));
192 DATA(insert ( 2206 23 0 a b ));
193 DATA(insert ( 26 3734 0 i b ));
194 DATA(insert ( 3734 26 0 i b ));
195 DATA(insert ( 20 3734 1287 i f ));
196 DATA(insert ( 21 3734 313 i f ));
197 DATA(insert ( 23 3734 0 i b ));
198 DATA(insert ( 3734 20 1288 a f ));
199 DATA(insert ( 3734 23 0 a b ));
200 DATA(insert ( 26 3769 0 i b ));
201 DATA(insert ( 3769 26 0 i b ));
202 DATA(insert ( 20 3769 1287 i f ));
203 DATA(insert ( 21 3769 313 i f ));
204 DATA(insert ( 23 3769 0 i b ));
205 DATA(insert ( 3769 20 1288 a f ));
206 DATA(insert ( 3769 23 0 a b ));
207 DATA(insert ( 25 2205 1079 i f ));
208 DATA(insert ( 1043 2205 1079 i f ));
211 * String category
213 DATA(insert ( 25 1042 0 i b ));
214 DATA(insert ( 25 1043 0 i b ));
215 DATA(insert ( 1042 25 401 i f ));
216 DATA(insert ( 1042 1043 401 i f ));
217 DATA(insert ( 1043 25 0 i b ));
218 DATA(insert ( 1043 1042 0 i b ));
219 DATA(insert ( 18 25 946 i f ));
220 DATA(insert ( 18 1042 860 a f ));
221 DATA(insert ( 18 1043 946 a f ));
222 DATA(insert ( 19 25 406 i f ));
223 DATA(insert ( 19 1042 408 a f ));
224 DATA(insert ( 19 1043 1401 a f ));
225 DATA(insert ( 25 18 944 a f ));
226 DATA(insert ( 1042 18 944 a f ));
227 DATA(insert ( 1043 18 944 a f ));
228 DATA(insert ( 25 19 407 i f ));
229 DATA(insert ( 1042 19 409 i f ));
230 DATA(insert ( 1043 19 1400 i f ));
232 /* Allow explicit coercions between int4 and "char" */
233 DATA(insert ( 18 23 77 e f ));
234 DATA(insert ( 23 18 78 e f ));
237 * Datetime category
239 DATA(insert ( 702 1082 1179 a f ));
240 DATA(insert ( 702 1083 1364 a f ));
241 DATA(insert ( 702 1114 2023 i f ));
242 DATA(insert ( 702 1184 1173 i f ));
243 DATA(insert ( 703 1186 1177 i f ));
244 DATA(insert ( 1082 1114 2024 i f ));
245 DATA(insert ( 1082 1184 1174 i f ));
246 DATA(insert ( 1083 1186 1370 i f ));
247 DATA(insert ( 1083 1266 2047 i f ));
248 DATA(insert ( 1114 702 2030 a f ));
249 DATA(insert ( 1114 1082 2029 a f ));
250 DATA(insert ( 1114 1083 1316 a f ));
251 DATA(insert ( 1114 1184 2028 i f ));
252 DATA(insert ( 1184 702 1180 a f ));
253 DATA(insert ( 1184 1082 1178 a f ));
254 DATA(insert ( 1184 1083 2019 a f ));
255 DATA(insert ( 1184 1114 2027 a f ));
256 DATA(insert ( 1184 1266 1388 a f ));
257 DATA(insert ( 1186 703 1194 a f ));
258 DATA(insert ( 1186 1083 1419 a f ));
259 DATA(insert ( 1266 1083 2046 a f ));
260 /* Cross-category casts between int4 and abstime, reltime */
261 DATA(insert ( 23 702 0 e b ));
262 DATA(insert ( 702 23 0 e b ));
263 DATA(insert ( 23 703 0 e b ));
264 DATA(insert ( 703 23 0 e b ));
267 * Geometric category
269 DATA(insert ( 601 600 1532 e f ));
270 DATA(insert ( 602 600 1533 e f ));
271 DATA(insert ( 602 604 1449 a f ));
272 DATA(insert ( 603 600 1534 e f ));
273 DATA(insert ( 603 601 1541 e f ));
274 DATA(insert ( 603 604 1448 a f ));
275 DATA(insert ( 603 718 1479 e f ));
276 DATA(insert ( 604 600 1540 e f ));
277 DATA(insert ( 604 602 1447 a f ));
278 DATA(insert ( 604 603 1446 e f ));
279 DATA(insert ( 604 718 1474 e f ));
280 DATA(insert ( 718 600 1416 e f ));
281 DATA(insert ( 718 603 1480 e f ));
282 DATA(insert ( 718 604 1544 e f ));
285 * INET category
287 DATA(insert ( 650 869 0 i b ));
288 DATA(insert ( 869 650 1715 a f ));
291 * BitString category
293 DATA(insert ( 1560 1562 0 i b ));
294 DATA(insert ( 1562 1560 0 i b ));
295 /* Cross-category casts between bit and int4, int8 */
296 DATA(insert ( 20 1560 2075 e f ));
297 DATA(insert ( 23 1560 1683 e f ));
298 DATA(insert ( 1560 20 2076 e f ));
299 DATA(insert ( 1560 23 1684 e f ));
302 * Cross-category casts to and from TEXT
304 * We need entries here only for a few specialized cases where the behavior
305 * of the cast function differs from the datatype's I/O functions. Otherwise,
306 * parse_coerce.c will generate CoerceViaIO operations without any prompting.
308 * Note that the castcontext values specified here should be no stronger than
309 * parse_coerce.c's automatic casts ('a' to text, 'e' from text) else odd
310 * behavior will ensue when the automatic cast is applied instead of the
311 * pg_cast entry!
313 DATA(insert ( 650 25 730 a f ));
314 DATA(insert ( 869 25 730 a f ));
315 DATA(insert ( 16 25 2971 a f ));
316 DATA(insert ( 142 25 0 a b ));
317 DATA(insert ( 25 142 2896 e f ));
320 * Cross-category casts to and from VARCHAR
322 * We support all the same casts as for TEXT.
324 DATA(insert ( 650 1043 730 a f ));
325 DATA(insert ( 869 1043 730 a f ));
326 DATA(insert ( 16 1043 2971 a f ));
327 DATA(insert ( 142 1043 0 a b ));
328 DATA(insert ( 1043 142 2896 e f ));
331 * Cross-category casts to and from BPCHAR
333 * We support all the same casts as for TEXT.
335 DATA(insert ( 650 1042 730 a f ));
336 DATA(insert ( 869 1042 730 a f ));
337 DATA(insert ( 16 1042 2971 a f ));
338 DATA(insert ( 142 1042 0 a b ));
339 DATA(insert ( 1042 142 2896 e f ));
342 * Length-coercion functions
344 DATA(insert ( 1042 1042 668 i f ));
345 DATA(insert ( 1043 1043 669 i f ));
346 DATA(insert ( 1083 1083 1968 i f ));
347 DATA(insert ( 1114 1114 1961 i f ));
348 DATA(insert ( 1184 1184 1967 i f ));
349 DATA(insert ( 1186 1186 1200 i f ));
350 DATA(insert ( 1266 1266 1969 i f ));
351 DATA(insert ( 1560 1560 1685 i f ));
352 DATA(insert ( 1562 1562 1687 i f ));
353 DATA(insert ( 1700 1700 1703 i f ));
355 #endif /* PG_CAST_H */