]> granicus.if.org Git - postgresql/blob - src/include/utils/builtins.h
added ALTER TABLE DROP COLUMN, early version
[postgresql] / src / include / utils / builtins.h
1 /*-------------------------------------------------------------------------
2  *
3  * builtins.h
4  *        Declarations for operations on built-in types.
5  *
6  *
7  * Copyright (c) 1994, Regents of the University of California
8  *
9  * $Id: builtins.h,v 1.96 2000/01/22 14:20:55 petere Exp $
10  *
11  * NOTES
12  *        This should normally only be included by fmgr.h.
13  *        Under no circumstances should it ever be included before
14  *        including fmgr.h!
15  * fmgr.h does not seem to include this file, so don't know where this
16  *      comment came from. Backend code must include this stuff explicitly
17  *      as far as I can tell...
18  * - thomas 1998-06-08
19  *
20  *-------------------------------------------------------------------------
21  */
22 #ifndef BUILTINS_H
23 #define BUILTINS_H
24
25 #include "storage/itemptr.h"
26 #include "utils/array.h"
27 #include "utils/datetime.h"
28 #include "utils/geo_decls.h"
29 #include "utils/inet.h"
30 #include "utils/int8.h"
31 #include "utils/nabstime.h"
32 #include "utils/numeric.h"
33 #include "access/heapam.h"              /* for HeapTuple */
34
35 /*
36  *              Defined in adt/
37  */
38 /* bool.c */
39 extern bool boolin(char *b);
40 extern char *boolout(bool b);
41 extern bool booleq(bool arg1, bool arg2);
42 extern bool boolne(bool arg1, bool arg2);
43 extern bool boollt(bool arg1, bool arg2);
44 extern bool boolgt(bool arg1, bool arg2);
45 extern bool istrue(bool arg1);
46 extern bool isfalse(bool arg1);
47
48 /* char.c */
49 extern int32 charin(char *ch);
50 extern char *charout(int32 ch);
51 extern int32 cidin(char *s);
52 extern char *cidout(int32 c);
53 extern bool chareq(int8 arg1, int8 arg2);
54 extern bool charne(int8 arg1, int8 arg2);
55 extern bool charlt(int8 arg1, int8 arg2);
56 extern bool charle(int8 arg1, int8 arg2);
57 extern bool chargt(int8 arg1, int8 arg2);
58 extern bool charge(int8 arg1, int8 arg2);
59 extern int8 charpl(int8 arg1, int8 arg2);
60 extern int8 charmi(int8 arg1, int8 arg2);
61 extern int8 charmul(int8 arg1, int8 arg2);
62 extern int8 chardiv(int8 arg1, int8 arg2);
63 extern bool cideq(int8 arg1, int8 arg2);
64 extern int8 text_char(text *arg1);
65 extern text *char_text(int8 arg1);
66
67 /* int.c */
68 extern int32 int2in(char *num);
69 extern char *int2out(int16 sh);
70 extern int16 *int2vectorin(char *shs);
71 extern char *int2vectorout(int16 *shs);
72 extern int32 *int44in(char *input_string);
73 extern char *int44out(int32 *an_array);
74 extern int32 int4in(char *num);
75 extern char *int4out(int32 l);
76 extern int32 i2toi4(int16 arg1);
77 extern int16 i4toi2(int32 arg1);
78 extern text *int2_text(int16 arg1);
79 extern int16 text_int2(text *arg1);
80 extern text *int4_text(int32 arg1);
81 extern int32 text_int4(text *arg1);
82 extern bool int4eq(int32 arg1, int32 arg2);
83 extern bool int4ne(int32 arg1, int32 arg2);
84 extern bool int4lt(int32 arg1, int32 arg2);
85 extern bool int4le(int32 arg1, int32 arg2);
86 extern bool int4gt(int32 arg1, int32 arg2);
87 extern bool int4ge(int32 arg1, int32 arg2);
88 extern bool int2eq(int16 arg1, int16 arg2);
89 extern bool int2ne(int16 arg1, int16 arg2);
90 extern bool int2lt(int16 arg1, int16 arg2);
91 extern bool int2le(int16 arg1, int16 arg2);
92 extern bool int2gt(int16 arg1, int16 arg2);
93 extern bool int2ge(int16 arg1, int16 arg2);
94 extern bool int24eq(int32 arg1, int32 arg2);
95 extern bool int24ne(int32 arg1, int32 arg2);
96 extern bool int24lt(int32 arg1, int32 arg2);
97 extern bool int24le(int32 arg1, int32 arg2);
98 extern bool int24gt(int32 arg1, int32 arg2);
99 extern bool int24ge(int32 arg1, int32 arg2);
100 extern bool int42eq(int32 arg1, int32 arg2);
101 extern bool int42ne(int32 arg1, int32 arg2);
102 extern bool int42lt(int32 arg1, int32 arg2);
103 extern bool int42le(int32 arg1, int32 arg2);
104 extern bool int42gt(int32 arg1, int32 arg2);
105 extern bool int42ge(int32 arg1, int32 arg2);
106 extern bool keyfirsteq(int16 *arg1, int16 arg2);
107 extern int32 int4um(int32 arg);
108 extern int32 int4pl(int32 arg1, int32 arg2);
109 extern int32 int4mi(int32 arg1, int32 arg2);
110 extern int32 int4mul(int32 arg1, int32 arg2);
111 extern int32 int4div(int32 arg1, int32 arg2);
112 extern int32 int4inc(int32 arg);
113 extern int16 int2um(int16 arg);
114 extern int16 int2pl(int16 arg1, int16 arg2);
115 extern int16 int2mi(int16 arg1, int16 arg2);
116 extern int16 int2mul(int16 arg1, int16 arg2);
117 extern int16 int2div(int16 arg1, int16 arg2);
118 extern int16 int2inc(int16 arg);
119 extern int32 int24pl(int32 arg1, int32 arg2);
120 extern int32 int24mi(int32 arg1, int32 arg2);
121 extern int32 int24mul(int32 arg1, int32 arg2);
122 extern int32 int24div(int32 arg1, int32 arg2);
123 extern int32 int42pl(int32 arg1, int32 arg2);
124 extern int32 int42mi(int32 arg1, int32 arg2);
125 extern int32 int42mul(int32 arg1, int32 arg2);
126 extern int32 int42div(int32 arg1, int32 arg2);
127 extern int32 int4mod(int32 arg1, int32 arg2);
128 extern int32 int2mod(int16 arg1, int16 arg2);
129 extern int32 int24mod(int32 arg1, int32 arg2);
130 extern int32 int42mod(int32 arg1, int32 arg2);
131 extern int32 int4fac(int32 arg1);
132 extern int32 int2fac(int16 arg1);
133 extern int16 int2larger(int16 arg1, int16 arg2);
134 extern int16 int2smaller(int16 arg1, int16 arg2);
135 extern int32 int4larger(int32 arg1, int32 arg2);
136 extern int32 int4smaller(int32 arg1, int32 arg2);
137
138 /* name.c */
139 extern NameData *namein(const char *s);
140 extern char *nameout(const NameData *s);
141 extern bool nameeq(const NameData *arg1, const NameData *arg2);
142 extern bool namene(const NameData *arg1, const NameData *arg2);
143 extern bool namelt(const NameData *arg1, const NameData *arg2);
144 extern bool namele(const NameData *arg1, const NameData *arg2);
145 extern bool namegt(const NameData *arg1, const NameData *arg2);
146 extern bool namege(const NameData *arg1, const NameData *arg2);
147 extern int      namecpy(Name n1, Name n2);
148 extern int      namestrcpy(Name name, const char *str);
149 extern int      namestrcmp(Name name, const char *str);
150
151 /* numutils.c */
152 /* XXX hack.  HP-UX has a ltoa (with different arguments) already. */
153 #ifdef __hpux
154 #define ltoa pg_ltoa
155 #endif   /* hpux */
156 extern int32 pg_atoi(char *s, int size, int c);
157 /* XXX hack.  QNX has itoa and ltoa (with different arguments) already. */
158 #ifdef __QNX__
159 #define itoa pg_itoa
160 #define ltoa pg_ltoa
161 #endif   /* QNX */
162 extern void itoa(int i, char *a);
163 extern void ltoa(int32 l, char *a);
164
165 /*
166  *              Per-opclass comparison functions for new btrees.  These are
167  *              stored in pg_amproc and defined in nbtree/
168  */
169 extern int32 btint2cmp(int16 a, int16 b);
170 extern int32 btint4cmp(int32 a, int32 b);
171 extern int32 btint8cmp(int64 *a, int64 *b);
172 extern int32 btint24cmp(int16 a, int32 b);
173 extern int32 btint42cmp(int32 a, int16 b);
174 extern int32 btfloat4cmp(float32 a, float32 b);
175 extern int32 btfloat8cmp(float64 a, float64 b);
176 extern int32 btoidcmp(Oid a, Oid b);
177 extern int32 btoidvectorcmp(Oid *a, Oid *b);
178 extern int32 btabstimecmp(AbsoluteTime a, AbsoluteTime b);
179 extern int32 btcharcmp(char a, char b);
180 extern int32 btnamecmp(NameData *a, NameData *b);
181 extern int32 bttextcmp(struct varlena * a, struct varlena * b);
182
183 /* support routines for the rtree access method, by opclass */
184 extern BOX *rt_box_union(BOX *a, BOX *b);
185 extern BOX *rt_box_inter(BOX *a, BOX *b);
186 extern void rt_box_size(BOX *a, float *size);
187 extern void rt_bigbox_size(BOX *a, float *size);
188 extern void rt_poly_size(POLYGON *a, float *size);
189 extern POLYGON *rt_poly_union(POLYGON *a, POLYGON *b);
190 extern POLYGON *rt_poly_inter(POLYGON *a, POLYGON *b);
191
192 /* projection utilities */
193 /* extern char *GetAttributeByName();
194    extern char *GetAttributeByNum(); ,
195  in executor/executor.h*/
196
197
198 extern int32 pqtest(struct varlena * vlena);
199
200 /* arrayfuncs.c */
201
202 /* date.c */
203 extern RelativeTime reltimein(char *timestring);
204 extern char *reltimeout(RelativeTime timevalue);
205 extern TimeInterval tintervalin(char *intervalstr);
206 extern char *tintervalout(TimeInterval interval);
207 extern RelativeTime timespan_reltime(TimeSpan *timespan);
208 extern TimeSpan *reltime_timespan(RelativeTime reltime);
209 extern TimeInterval mktinterval(AbsoluteTime t1, AbsoluteTime t2);
210 extern AbsoluteTime timepl(AbsoluteTime t1, RelativeTime t2);
211 extern AbsoluteTime timemi(AbsoluteTime t1, RelativeTime t2);
212
213 /* extern RelativeTime abstimemi(AbsoluteTime t1, AbsoluteTime t2);  static*/
214 extern int      ininterval(AbsoluteTime t, TimeInterval interval);
215 extern RelativeTime intervalrel(TimeInterval interval);
216 extern AbsoluteTime timenow(void);
217 extern bool reltimeeq(RelativeTime t1, RelativeTime t2);
218 extern bool reltimene(RelativeTime t1, RelativeTime t2);
219 extern bool reltimelt(RelativeTime t1, RelativeTime t2);
220 extern bool reltimegt(RelativeTime t1, RelativeTime t2);
221 extern bool reltimele(RelativeTime t1, RelativeTime t2);
222 extern bool reltimege(RelativeTime t1, RelativeTime t2);
223 extern bool intervalsame(TimeInterval i1, TimeInterval i2);
224 extern bool intervaleq(TimeInterval i1, TimeInterval i2);
225 extern bool intervalne(TimeInterval i1, TimeInterval i2);
226 extern bool intervallt(TimeInterval i1, TimeInterval i2);
227 extern bool intervalgt(TimeInterval i1, TimeInterval i2);
228 extern bool intervalle(TimeInterval i1, TimeInterval i2);
229 extern bool intervalge(TimeInterval i1, TimeInterval i2);
230 extern bool intervalleneq(TimeInterval i, RelativeTime t);
231 extern bool intervallenne(TimeInterval i, RelativeTime t);
232 extern bool intervallenlt(TimeInterval i, RelativeTime t);
233 extern bool intervallengt(TimeInterval i, RelativeTime t);
234 extern bool intervallenle(TimeInterval i, RelativeTime t);
235 extern bool intervallenge(TimeInterval i, RelativeTime t);
236 extern bool intervalct(TimeInterval i1, TimeInterval i2);
237 extern bool intervalov(TimeInterval i1, TimeInterval i2);
238 extern AbsoluteTime intervalstart(TimeInterval i);
239 extern AbsoluteTime intervalend(TimeInterval i);
240 extern text *timeofday(void);
241
242 /* filename.c */
243 extern char *filename_in(char *file);
244 extern char *filename_out(char *s);
245
246 /* float.c */
247 extern void CheckFloat8Val(double val); /* used by lex */
248 extern float32 float4in(char *num);
249 extern char *float4out(float32 num);
250 extern float64 float8in(char *num);
251 extern char *float8out(float64 num);
252 extern float32 float4abs(float32 arg1);
253 extern float32 float4um(float32 arg1);
254 extern float32 float4larger(float32 arg1, float32 arg2);
255 extern float32 float4smaller(float32 arg1, float32 arg2);
256 extern float64 float8abs(float64 arg1);
257 extern float64 float8um(float64 arg1);
258 extern float64 float8larger(float64 arg1, float64 arg2);
259 extern float64 float8smaller(float64 arg1, float64 arg2);
260 extern float32 float4pl(float32 arg1, float32 arg2);
261 extern float32 float4mi(float32 arg1, float32 arg2);
262 extern float32 float4mul(float32 arg1, float32 arg2);
263 extern float32 float4div(float32 arg1, float32 arg2);
264 extern float32 float4inc(float32 arg1);
265 extern float64 float8pl(float64 arg1, float64 arg2);
266 extern float64 float8mi(float64 arg1, float64 arg2);
267 extern float64 float8mul(float64 arg1, float64 arg2);
268 extern float64 float8div(float64 arg1, float64 arg2);
269 extern float64 float8inc(float64 arg1);
270 extern bool float4eq(float32 arg1, float32 arg2);
271 extern bool float4ne(float32 arg1, float32 arg2);
272 extern bool float4lt(float32 arg1, float32 arg2);
273 extern bool float4le(float32 arg1, float32 arg2);
274 extern bool float4gt(float32 arg1, float32 arg2);
275 extern bool float4ge(float32 arg1, float32 arg2);
276 extern bool float8eq(float64 arg1, float64 arg2);
277 extern bool float8ne(float64 arg1, float64 arg2);
278 extern bool float8lt(float64 arg1, float64 arg2);
279 extern bool float8le(float64 arg1, float64 arg2);
280 extern bool float8gt(float64 arg1, float64 arg2);
281 extern bool float8ge(float64 arg1, float64 arg2);
282 extern float64 ftod(float32 num);
283 extern float64 i4tod(int32 num);
284 extern float64 i2tod(int16 num);
285 extern float32 dtof(float64 num);
286 extern int32 dtoi4(float64 num);
287 extern int16 dtoi2(float64 num);
288 extern float32 i4tof(int32 num);
289 extern float32 i2tof(int16 num);
290 extern int32 ftoi4(float32 num);
291 extern int16 ftoi2(float32 num);
292 extern float64 text_float8(text *str);
293 extern float32 text_float4(text *str);
294 extern text *float8_text(float64 num);
295 extern text *float4_text(float32 num);
296 extern float64 dround(float64 arg1);
297 extern float64 dtrunc(float64 arg1);
298 extern float64 dsqrt(float64 arg1);
299 extern float64 dcbrt(float64 arg1);
300 extern float64 dpow(float64 arg1, float64 arg2);
301 extern float64 dexp(float64 arg1);
302 extern float64 dlog1(float64 arg1);
303 extern float64 float48pl(float32 arg1, float64 arg2);
304 extern float64 float48mi(float32 arg1, float64 arg2);
305 extern float64 float48mul(float32 arg1, float64 arg2);
306 extern float64 float48div(float32 arg1, float64 arg2);
307 extern float64 float84pl(float64 arg1, float32 arg2);
308 extern float64 float84mi(float64 arg1, float32 arg2);
309 extern float64 float84mul(float64 arg1, float32 arg2);
310 extern float64 float84div(float64 arg1, float32 arg2);
311 extern bool float48eq(float32 arg1, float64 arg2);
312 extern bool float48ne(float32 arg1, float64 arg2);
313 extern bool float48lt(float32 arg1, float64 arg2);
314 extern bool float48le(float32 arg1, float64 arg2);
315 extern bool float48gt(float32 arg1, float64 arg2);
316 extern bool float48ge(float32 arg1, float64 arg2);
317 extern bool float84eq(float64 arg1, float32 arg2);
318 extern bool float84ne(float64 arg1, float32 arg2);
319 extern bool float84lt(float64 arg1, float32 arg2);
320 extern bool float84le(float64 arg1, float32 arg2);
321 extern bool float84gt(float64 arg1, float32 arg2);
322 extern bool float84ge(float64 arg1, float32 arg2);
323
324 /* geo_ops.c, geo_selfuncs.c */
325 extern double *box_area(BOX *box);
326
327 /* misc.c */
328 extern bool nullvalue(Datum value, bool *isNull);
329 extern bool nonnullvalue(Datum value, bool *isNull);
330 extern bool oidrand(Oid o, int32 X);
331 extern bool oidsrand(int32 X);
332 extern int32 userfntest(int i);
333
334 /* define macros to replace mixed-case function calls - tgl 97/04/27 */
335 #define NullValue(v,b) nullvalue(v,b)
336 #define NonNullValue(v,b) nonnullvalue(v,b)
337
338 /* not_in.c */
339 extern bool int4notin(int32 not_in_arg, char *relation_and_attr);
340 extern bool oidnotin(Oid the_oid, char *compare);
341
342 /* oid.c */
343 extern Oid *oidvectorin(char *oidString);
344 extern char *oidvectorout(Oid *oidArray);
345 extern Oid      oidin(char *s);
346 extern char *oidout(Oid o);
347 extern bool oideq(Oid arg1, Oid arg2);
348 extern bool oidne(Oid arg1, Oid arg2);
349 extern bool oidvectoreq(Oid *arg1, Oid *arg2);
350 extern bool oidvectorne(Oid *arg1, Oid *arg2);
351 extern bool oidvectorlt(Oid *arg1, Oid *arg2);
352 extern bool oidvectorle(Oid *arg1, Oid *arg2);
353 extern bool oidvectorge(Oid *arg1, Oid *arg2);
354 extern bool oidvectorgt(Oid *arg1, Oid *arg2);
355 extern bool oideqint4(Oid arg1, int32 arg2);
356 extern bool int4eqoid(int32 arg1, Oid arg2);
357 extern text *oid_text(Oid arg1);
358 extern Oid      text_oid(text *arg1);
359
360 /* regexp.c */
361 extern bool nameregexeq(NameData *n, struct varlena * p);
362 extern bool nameregexne(NameData *s, struct varlena * p);
363 extern bool textregexeq(struct varlena * s, struct varlena * p);
364 extern bool textregexne(struct varlena * s, struct varlena * p);
365 extern bool nameicregexeq(NameData *s, struct varlena * p);
366 extern bool nameicregexne(NameData *s, struct varlena * p);
367 extern bool texticregexeq(struct varlena * s, struct varlena * p);
368 extern bool texticregexne(struct varlena * s, struct varlena * p);
369
370
371 /* regproc.c */
372 extern int32 regprocin(char *pro_name_and_oid);
373 extern char *regprocout(RegProcedure proid);
374 extern text *oidvectortypes(Oid *oidArray);
375 extern Oid      regproctooid(RegProcedure rp);
376
377 /* define macro to replace mixed-case function call - tgl 97/04/27 */
378 #define RegprocToOid(rp) regproctooid(rp)
379
380 /* ruleutils.c */
381 extern text *pg_get_ruledef(NameData *rname);
382 extern text     *pg_get_viewdef(NameData *rname);
383 extern text     *pg_get_indexdef(Oid indexrelid);
384 extern NameData *pg_get_userbyid(int32 uid);
385 extern char *deparse_expression(Node *expr, List *rangetables,
386                                                                 bool forceprefix);
387
388 /* selfuncs.c */
389 extern float64 eqsel(Oid opid, Oid relid, AttrNumber attno, Datum value, int32 flag);
390 extern float64 neqsel(Oid opid, Oid relid, AttrNumber attno, Datum value, int32 flag);
391 extern float64 intltsel(Oid opid, Oid relid, AttrNumber attno, Datum value, int32 flag);
392 extern float64 intgtsel(Oid opid, Oid relid, AttrNumber attno, Datum value, int32 flag);
393 extern float64 eqjoinsel(Oid opid, Oid relid1, AttrNumber attno1, Oid relid2, AttrNumber attno2);
394 extern float64 neqjoinsel(Oid opid, Oid relid1, AttrNumber attno1, Oid relid2, AttrNumber attno2);
395 extern float64 intltjoinsel(Oid opid, Oid relid1, AttrNumber attno1, Oid relid2, AttrNumber attno2);
396 extern float64 intgtjoinsel(Oid opid, Oid relid1, AttrNumber attno1, Oid relid2, AttrNumber attno2);
397 extern float64 btreesel(Oid operatorOid, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);
398 extern float64 btreenpage(Oid operatorOid, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);
399 extern float64 hashsel(Oid operatorOid, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);
400 extern float64 hashnpage(Oid operatorOid, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);
401 extern float64 rtsel(Oid operatorOid, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);
402 extern float64 rtnpage(Oid operatorOid, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);
403 extern float64 gistsel(Oid operatorObjectId, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);
404 extern float64 gistnpage(Oid operatorObjectId, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);
405
406 /* tid.c */
407 extern ItemPointer tidin(const char *str);
408 extern char *tidout(ItemPointer itemPtr);
409 extern bool tideq(ItemPointer,ItemPointer);
410 extern bool tidne(ItemPointer,ItemPointer);
411 extern text *tid_text(ItemPointer);
412 extern ItemPointer text_tid(const text *); 
413 extern ItemPointer currtid_byreloid(Oid relOid, ItemPointer); 
414 extern ItemPointer currtid_byrelname(const text* relName, ItemPointer); 
415
416 /* timestamp.c */
417 extern time_t timestamp_in(const char *timestamp_str);
418 extern char *timestamp_out(time_t timestamp);
419 extern time_t now(void);
420 bool            timestampeq(time_t t1, time_t t2);
421 bool            timestampne(time_t t1, time_t t2);
422 bool            timestamplt(time_t t1, time_t t2);
423 bool            timestampgt(time_t t1, time_t t2);
424 bool            timestample(time_t t1, time_t t2);
425 bool            timestampge(time_t t1, time_t t2);
426 DateTime   *timestamp_datetime(time_t timestamp);
427 time_t          datetime_timestamp(DateTime *datetime);
428
429 /* varchar.c */
430 extern char *bpcharin(char *s, int dummy, int32 atttypmod);
431 extern char *bpcharout(char *s);
432 extern char *bpchar(char *s, int32 slen);
433 extern ArrayType *_bpchar(ArrayType *v, int32 slen);
434 extern char *char_bpchar(int32 c);
435 extern int32 bpchar_char(char *s);
436 extern char *name_bpchar(NameData *s);
437 extern NameData *bpchar_name(char *s);
438 extern bool bpchareq(char *arg1, char *arg2);
439 extern bool bpcharne(char *arg1, char *arg2);
440 extern bool bpcharlt(char *arg1, char *arg2);
441 extern bool bpcharle(char *arg1, char *arg2);
442 extern bool bpchargt(char *arg1, char *arg2);
443 extern bool bpcharge(char *arg1, char *arg2);
444 extern int32 bpcharcmp(char *arg1, char *arg2);
445 extern int32 bpcharlen(char *arg);
446 extern int32 bpcharoctetlen(char *arg);
447 extern uint32 hashbpchar(struct varlena * key);
448
449 extern char *varcharin(char *s, int dummy, int32 atttypmod);
450 extern char *varcharout(char *s);
451 extern char *varchar(char *s, int32 slen);
452 extern ArrayType *_varchar(ArrayType *v, int32 slen);
453 extern bool varchareq(char *arg1, char *arg2);
454 extern bool varcharne(char *arg1, char *arg2);
455 extern bool varcharlt(char *arg1, char *arg2);
456 extern bool varcharle(char *arg1, char *arg2);
457 extern bool varchargt(char *arg1, char *arg2);
458 extern bool varcharge(char *arg1, char *arg2);
459 extern int32 varcharcmp(char *arg1, char *arg2);
460 extern int32 varcharlen(char *arg);
461 extern int32 varcharoctetlen(char *arg);
462 extern uint32 hashvarchar(struct varlena * key);
463
464 /* varlena.c */
465 extern text *textin(char *inputText);
466 extern char *textout(text *vlena);
467 extern text *textcat(text *arg1, text *arg2);
468 extern bool texteq(text *arg1, text *arg2);
469 extern bool textne(text *arg1, text *arg2);
470 extern int      varstr_cmp(char *arg1, int len1, char *arg2, int len2);
471 extern bool text_lt(text *arg1, text *arg2);
472 extern bool text_le(text *arg1, text *arg2);
473 extern bool text_gt(text *arg1, text *arg2);
474 extern bool text_ge(text *arg1, text *arg2);
475 extern text *text_larger(text *arg1, text *arg2);
476 extern text *text_smaller(text *arg1, text *arg2);
477 extern int32 textlen(text *arg);
478 extern int32 textoctetlen(text *arg);
479 extern int32 textpos(text *arg1, text *arg2);
480 extern text *text_substr(text *string, int32 m, int32 n);
481 extern text *name_text(NameData *s);
482 extern NameData *text_name(text *s);
483
484 extern struct varlena *byteain(char *inputText);
485 extern char *byteaout(struct varlena * vlena);
486 extern int32 byteaGetSize(struct varlena * v);
487 extern int32 byteaGetByte(struct varlena * v, int32 n);
488 extern int32 byteaGetBit(struct varlena * v, int32 n);
489 extern struct varlena *byteaSetByte(struct varlena * v, int32 n, int32 newByte);
490 extern struct varlena *byteaSetBit(struct varlena * v, int32 n, int32 newBit);
491
492 /* datetime.c */
493 extern DateADT date_in(char *datestr);
494 extern char *date_out(DateADT dateVal);
495 extern bool date_eq(DateADT dateVal1, DateADT dateVal2);
496 extern bool date_ne(DateADT dateVal1, DateADT dateVal2);
497 extern bool date_lt(DateADT dateVal1, DateADT dateVal2);
498 extern bool date_le(DateADT dateVal1, DateADT dateVal2);
499 extern bool date_gt(DateADT dateVal1, DateADT dateVal2);
500 extern bool date_ge(DateADT dateVal1, DateADT dateVal2);
501 extern int      date_cmp(DateADT dateVal1, DateADT dateVal2);
502 extern DateADT date_larger(DateADT dateVal1, DateADT dateVal2);
503 extern DateADT date_smaller(DateADT dateVal1, DateADT dateVal2);
504 extern int32 date_mi(DateADT dateVal1, DateADT dateVal2);
505 extern DateADT date_pli(DateADT dateVal, int32 days);
506 extern DateADT date_mii(DateADT dateVal, int32 days);
507 extern DateTime *date_datetime(DateADT date);
508 extern DateADT datetime_date(DateTime *datetime);
509 extern DateTime *datetime_datetime(DateADT date, TimeADT *time);
510 extern DateADT abstime_date(AbsoluteTime abstime);
511
512 extern TimeADT *time_in(char *timestr);
513 extern char *time_out(TimeADT *time);
514 extern bool time_eq(TimeADT *time1, TimeADT *time2);
515 extern bool time_ne(TimeADT *time1, TimeADT *time2);
516 extern bool time_lt(TimeADT *time1, TimeADT *time2);
517 extern bool time_le(TimeADT *time1, TimeADT *time2);
518 extern bool time_gt(TimeADT *time1, TimeADT *time2);
519 extern bool time_ge(TimeADT *time1, TimeADT *time2);
520 extern int      time_cmp(TimeADT *time1, TimeADT *time2);
521 extern TimeADT *datetime_time(DateTime *datetime);
522 extern int32 int4reltime(int32 timevalue);
523
524 /* like.c */
525 extern bool namelike(NameData *n, struct varlena * p);
526 extern bool namenlike(NameData *s, struct varlena * p);
527 extern bool textlike(struct varlena * s, struct varlena * p);
528 extern bool textnlike(struct varlena * s, struct varlena * p);
529
530 /* oracle_compat.c */
531
532 extern text *lower(text *string);
533 extern text *upper(text *string);
534 extern text *initcap(text *string);
535 extern text *lpad(text *string1, int4 len, text *string2);
536 extern text *rpad(text *string1, int4 len, text *string2);
537 extern text *ltrim(text *string, text *set);
538 extern text *rtrim(text *string, text *set);
539 extern text *translate(text *string, char from, char to);
540
541 /* acl.c */
542
543 /* inet_net_ntop.c */
544 char       *inet_net_ntop(int af, const void *src, int bits, char *dst, size_t size);
545 char       *inet_cidr_ntop(int af, const void *src, int bits, char *dst, size_t size);
546
547 /* inet_net_pton.c */
548 int                     inet_net_pton(int af, const char *src, void *dst, size_t size);
549
550 /* network.c */
551 inet       *inet_in(char *str);
552 char       *inet_out(inet *addr);
553 inet       *cidr_in(char *str);
554 char       *cidr_out(inet *addr);
555 bool            network_lt(inet *a1, inet *a2);
556 bool            network_le(inet *a1, inet *a2);
557 bool            network_eq(inet *a1, inet *a2);
558 bool            network_ge(inet *a1, inet *a2);
559 bool            network_gt(inet *a1, inet *a2);
560 bool            network_ne(inet *a1, inet *a2);
561 bool            network_sub(inet *a1, inet *a2);
562 bool            network_subeq(inet *a1, inet *a2);
563 bool            network_sup(inet *a1, inet *a2);
564 bool            network_supeq(inet *a1, inet *a2);
565 int4            network_cmp(inet *a1, inet *a2);
566
567 text       *network_network(inet *addr);
568 text       *network_netmask(inet *addr);
569 int4            network_masklen(inet *addr);
570 text       *network_broadcast(inet *addr);
571 text       *network_host(inet *addr);
572
573 /* mac.c */
574 macaddr    *macaddr_in(char *str);
575 char       *macaddr_out(macaddr *addr);
576 bool            macaddr_lt(macaddr *a1, macaddr *a2);
577 bool            macaddr_le(macaddr *a1, macaddr *a2);
578 bool            macaddr_eq(macaddr *a1, macaddr *a2);
579 bool            macaddr_ge(macaddr *a1, macaddr *a2);
580 bool            macaddr_gt(macaddr *a1, macaddr *a2);
581 bool            macaddr_ne(macaddr *a1, macaddr *a2);
582 int4            macaddr_cmp(macaddr *a1, macaddr *a2);
583 text       *macaddr_manuf(macaddr *addr);
584
585 /* numeric.c */
586 Numeric         numeric_in(char *str, int dummy, int32 typmod);
587 char       *numeric_out(Numeric num);
588 Numeric         numeric(Numeric num, int32 typmod);
589 Numeric         numeric_abs(Numeric num);
590 Numeric         numeric_sign(Numeric num);
591 Numeric         numeric_round(Numeric num, int32 scale);
592 Numeric         numeric_trunc(Numeric num, int32 scale);
593 Numeric         numeric_ceil(Numeric num);
594 Numeric         numeric_floor(Numeric num);
595 int32           numeric_cmp(Numeric num1, Numeric num2);
596 bool            numeric_eq(Numeric num1, Numeric num2);
597 bool            numeric_ne(Numeric num1, Numeric num2);
598 bool            numeric_gt(Numeric num1, Numeric num2);
599 bool            numeric_ge(Numeric num1, Numeric num2);
600 bool            numeric_lt(Numeric num1, Numeric num2);
601 bool            numeric_le(Numeric num1, Numeric num2);
602 Numeric         numeric_add(Numeric num1, Numeric num2);
603 Numeric         numeric_sub(Numeric num1, Numeric num2);
604 Numeric         numeric_mul(Numeric num1, Numeric num2);
605 Numeric         numeric_div(Numeric num1, Numeric num2);
606 Numeric         numeric_mod(Numeric num1, Numeric num2);
607 Numeric         numeric_inc(Numeric num);
608 Numeric         numeric_dec(Numeric num);
609 Numeric         numeric_smaller(Numeric num1, Numeric num2);
610 Numeric         numeric_larger(Numeric num1, Numeric num2);
611 Numeric         numeric_sqrt(Numeric num);
612 Numeric         numeric_exp(Numeric num);
613 Numeric         numeric_ln(Numeric num);
614 Numeric         numeric_log(Numeric num1, Numeric num2);
615 Numeric         numeric_power(Numeric num1, Numeric num2);
616 Numeric         int4_numeric(int32 val);
617 int32           numeric_int4(Numeric num);
618 Numeric         float4_numeric(float32 val);
619 float32         numeric_float4(Numeric num);
620 Numeric         float8_numeric(float64 val);
621 float64         numeric_float8(Numeric num);
622
623 /* ri_triggers.c */
624 HeapTuple       RI_FKey_check_ins(FmgrInfo *proinfo);
625 HeapTuple       RI_FKey_check_upd(FmgrInfo *proinfo);
626 HeapTuple       RI_FKey_noaction_del(FmgrInfo *proinfo);
627 HeapTuple       RI_FKey_noaction_upd(FmgrInfo *proinfo);
628 HeapTuple       RI_FKey_cascade_del(FmgrInfo *proinfo);
629 HeapTuple       RI_FKey_cascade_upd(FmgrInfo *proinfo);
630 HeapTuple       RI_FKey_restrict_del(FmgrInfo *proinfo);
631 HeapTuple       RI_FKey_restrict_upd(FmgrInfo *proinfo);
632 HeapTuple       RI_FKey_setnull_del(FmgrInfo *proinfo);
633 HeapTuple       RI_FKey_setnull_upd(FmgrInfo *proinfo);
634 HeapTuple       RI_FKey_setdefault_del(FmgrInfo *proinfo);
635 HeapTuple       RI_FKey_setdefault_upd(FmgrInfo *proinfo);
636
637 #endif   /* BUILTINS_H */