summaryrefslogtreecommitdiff
path: root/src/include/utils/builtins.h
blob: 05252ca01e9c61ea829aeeb4bcb458f6bb106578 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
/*-------------------------------------------------------------------------
 *
 * builtins.h--
 *	  Declarations for operations on built-in types.
 *
 *
 * Copyright (c) 1994, Regents of the University of California
 *
 * $Id: builtins.h,v 1.22 1997/09/07 05:02:11 momjian Exp $
 *
 * NOTES
 *	  This should normally only be included by fmgr.h.
 *	  Under no circumstances should it ever be included before
 *	  including fmgr.h!
 *
 *-------------------------------------------------------------------------
 */
#ifndef BUILTINS_H
#define BUILTINS_H

#include <storage/itemptr.h>
#include <utils/geo_decls.h>
#include <utils/datetime.h>
#include <utils/nabstime.h>
#include <utils/cash.h>
#include <utils/rel.h>

/*
 *		Defined in adt/
 */
/* bool.c */
extern bool		boolin(char *b);
extern char    *boolout(long b);
extern bool		booleq(int8 arg1, int8 arg2);
extern bool		boolne(int8 arg1, int8 arg2);
extern bool		boollt(int8 arg1, int8 arg2);
extern bool		boolgt(int8 arg1, int8 arg2);

/* char.c */
extern int32	charin(char *ch);
extern char    *charout(int32 ch);
extern int32	cidin(char *s);
extern char    *cidout(int32 c);
extern char    *char16in(char *s);
extern char    *char16out(char *s);
extern bool		chareq(int8 arg1, int8 arg2);
extern bool		charne(int8 arg1, int8 arg2);
extern bool		charlt(int8 arg1, int8 arg2);
extern bool		charle(int8 arg1, int8 arg2);
extern bool		chargt(int8 arg1, int8 arg2);
extern bool		charge(int8 arg1, int8 arg2);
extern int8		charpl(int8 arg1, int8 arg2);
extern int8		charmi(int8 arg1, int8 arg2);
extern int8		charmul(int8 arg1, int8 arg2);
extern int8		chardiv(int8 arg1, int8 arg2);
extern bool		cideq(int8 arg1, int8 arg2);
extern bool		char16eq(char *arg1, char *arg2);
extern bool		char16ne(char *arg1, char *arg2);
extern bool		char16lt(char *arg1, char *arg2);
extern bool		char16le(char *arg1, char *arg2);
extern bool		char16gt(char *arg1, char *arg2);
extern bool		char16ge(char *arg1, char *arg2);
extern uint16	char2in(char *s);
extern char    *char2out(uint16 s);
extern bool		char2eq(uint16 a, uint16 b);
extern bool		char2ne(uint16 a, uint16 b);
extern bool		char2lt(uint16 a, uint16 b);
extern bool		char2le(uint16 a, uint16 b);
extern bool		char2gt(uint16 a, uint16 b);
extern bool		char2ge(uint16 a, uint16 b);
extern int32	char2cmp(uint16 a, uint16 b);
extern uint32	char4in(char *s);
extern char    *char4out(uint32 s);
extern bool		char4eq(uint32 a, uint32 b);
extern bool		char4ne(uint32 a, uint32 b);
extern bool		char4lt(uint32 a, uint32 b);
extern bool		char4le(uint32 a, uint32 b);
extern bool		char4gt(uint32 a, uint32 b);
extern bool		char4ge(uint32 a, uint32 b);
extern int32	char4cmp(uint32 a, uint32 b);
extern char    *char8in(char *s);
extern char    *char8out(char *s);
extern bool		char8eq(char *arg1, char *arg2);
extern bool		char8ne(char *arg1, char *arg2);
extern bool		char8lt(char *arg1, char *arg2);
extern bool		char8le(char *arg1, char *arg2);
extern bool		char8gt(char *arg1, char *arg2);
extern bool		char8ge(char *arg1, char *arg2);
extern int32	char8cmp(char *arg1, char *arg2);

/* int.c */
extern int32	int2in(char *num);
extern char    *int2out(int16 sh);
extern int16   *int28in(char *shs);
extern char    *int28out(int16(*shs)[]);
extern int32   *int44in(char *input_string);
extern char    *int44out(int32 an_array[]);
extern int32	int4in(char *num);
extern char    *int4out(int32 l);
extern int32	i2toi4(int16 arg1);
extern int16	i4toi2(int32 arg1);
extern bool		int4eq(int32 arg1, int32 arg2);
extern bool		int4ne(int32 arg1, int32 arg2);
extern bool		int4lt(int32 arg1, int32 arg2);
extern bool		int4le(int32 arg1, int32 arg2);
extern bool		int4gt(int32 arg1, int32 arg2);
extern bool		int4ge(int32 arg1, int32 arg2);
extern bool		int2eq(int16 arg1, int16 arg2);
extern bool		int2ne(int16 arg1, int16 arg2);
extern bool		int2lt(int16 arg1, int16 arg2);
extern bool		int2le(int16 arg1, int16 arg2);
extern bool		int2gt(int16 arg1, int16 arg2);
extern bool		int2ge(int16 arg1, int16 arg2);
extern bool		int24eq(int32 arg1, int32 arg2);
extern bool		int24ne(int32 arg1, int32 arg2);
extern bool		int24lt(int32 arg1, int32 arg2);
extern bool		int24le(int32 arg1, int32 arg2);
extern bool		int24gt(int32 arg1, int32 arg2);
extern bool		int24ge(int32 arg1, int32 arg2);
extern bool		int42eq(int32 arg1, int32 arg2);
extern bool		int42ne(int32 arg1, int32 arg2);
extern bool		int42lt(int32 arg1, int32 arg2);
extern bool		int42le(int32 arg1, int32 arg2);
extern bool		int42gt(int32 arg1, int32 arg2);
extern bool		int42ge(int32 arg1, int32 arg2);
extern bool		keyfirsteq(int16 * arg1, int16 arg2);
extern int32	int4um(int32 arg);
extern int32	int4pl(int32 arg1, int32 arg2);
extern int32	int4mi(int32 arg1, int32 arg2);
extern int32	int4mul(int32 arg1, int32 arg2);
extern int32	int4div(int32 arg1, int32 arg2);
extern int32	int4inc(int32 arg);
extern int16	int2um(int16 arg);
extern int16	int2pl(int16 arg1, int16 arg2);
extern int16	int2mi(int16 arg1, int16 arg2);
extern int16	int2mul(int16 arg1, int16 arg2);
extern int16	int2div(int16 arg1, int16 arg2);
extern int16	int2inc(int16 arg);
extern int32	int24pl(int32 arg1, int32 arg2);
extern int32	int24mi(int32 arg1, int32 arg2);
extern int32	int24mul(int32 arg1, int32 arg2);
extern int32	int24div(int32 arg1, int32 arg2);
extern int32	int42pl(int32 arg1, int32 arg2);
extern int32	int42mi(int32 arg1, int32 arg2);
extern int32	int42mul(int32 arg1, int32 arg2);
extern int32	int42div(int32 arg1, int32 arg2);
extern int32	int4mod(int32 arg1, int32 arg2);
extern int32	int2mod(int16 arg1, int16 arg2);
extern int32	int24mod(int32 arg1, int32 arg2);
extern int32	int42mod(int32 arg1, int32 arg2);
extern int32	int4fac(int32 arg1);
extern int32	int2fac(int16 arg1);
extern int16	int2larger(int16 arg1, int16 arg2);
extern int16	int2smaller(int16 arg1, int16 arg2);
extern int32	int4larger(int32 arg1, int32 arg2);
extern int32	int4smaller(int32 arg1, int32 arg2);

/* name.c */
extern NameData *namein(char *s);
extern char    *nameout(NameData * s);
extern bool		nameeq(NameData * arg1, NameData * arg2);
extern bool		namene(NameData * arg1, NameData * arg2);
extern bool		namelt(NameData * arg1, NameData * arg2);
extern bool		namele(NameData * arg1, NameData * arg2);
extern bool		namegt(NameData * arg1, NameData * arg2);
extern bool		namege(NameData * arg1, NameData * arg2);
extern int		namecmp(Name n1, Name n2);
extern int		namecpy(Name n1, Name n2);
extern int		namestrcpy(Name name, char *str);
extern int		namestrcmp(Name name, char *str);

/* numutils.c */
/* XXX hack.  HP-UX has a ltoa (with different arguments) already. */
#ifdef hpux
#define ltoa pg_ltoa
#endif							/* hpux */
extern int32	pg_atoi(char *s, int size, int c);
extern void		itoa(int i, char *a);
extern void		ltoa(int32 l, char *a);

/*
 *		Per-opclass comparison functions for new btrees.  These are
 *		stored in pg_amproc and defined in nbtree/
 */
extern int32	btint2cmp(int16 a, int16 b);
extern int32	btint4cmp(int32 a, int32 b);
extern int32	btint24cmp(int16 a, int32 b);
extern int32	btint42cmp(int32 a, int16 b);
extern int32	btfloat4cmp(float32 a, float32 b);
extern int32	btfloat8cmp(float64 a, float64 b);
extern int32	btoidcmp(Oid a, Oid b);
extern int32	btabstimecmp(AbsoluteTime a, AbsoluteTime b);
extern int32	btcharcmp(char a, char b);
extern int32	btchar2cmp(uint16 a, uint16 b);
extern int32	btchar4cmp(uint32 a, uint32 b);
extern int32	btchar8cmp(char *a, char *b);
extern int32	btchar16cmp(char *a, char *b);
extern int32	btnamecmp(NameData * a, NameData * b);
extern int32	bttextcmp(struct varlena * a, struct varlena * b);

/* support routines for the rtree access method, by opclass */
extern BOX	   *rt_box_union(BOX * a, BOX * b);
extern BOX	   *rt_box_inter(BOX * a, BOX * b);
extern void		rt_box_size(BOX * a, float *size);
extern void		rt_bigbox_size(BOX * a, float *size);
extern void		rt_poly_size(POLYGON * a, float *size);
extern POLYGON *rt_poly_union(POLYGON * a, POLYGON * b);
extern POLYGON *rt_poly_inter(POLYGON * a, POLYGON * b);

/* projection utilities */
/* extern char *GetAttributeByName();
   extern char *GetAttributeByNum(); ,
 in executor/executor.h*/


extern int32	pqtest(struct varlena * vlena);

/* arrayfuncs.c */

/* date.c */
extern int32	reltimein(char *timestring);
extern char    *reltimeout(int32 timevalue);
extern TimeInterval tintervalin(char *intervalstr);
extern char    *tintervalout(TimeInterval interval);
extern RelativeTime timespan_reltime(TimeSpan * timespan);
extern TimeSpan *reltime_timespan(RelativeTime reltime);
extern TimeInterval mktinterval(AbsoluteTime t1, AbsoluteTime t2);
extern AbsoluteTime timepl(AbsoluteTime t1, RelativeTime t2);
extern AbsoluteTime timemi(AbsoluteTime t1, RelativeTime t2);

/* extern RelativeTime abstimemi(AbsoluteTime t1, AbsoluteTime t2);  static*/
extern int		ininterval(AbsoluteTime t, TimeInterval interval);
extern RelativeTime intervalrel(TimeInterval interval);
extern AbsoluteTime timenow(void);
extern bool		reltimeeq(RelativeTime t1, RelativeTime t2);
extern bool		reltimene(RelativeTime t1, RelativeTime t2);
extern bool		reltimelt(RelativeTime t1, RelativeTime t2);
extern bool		reltimegt(RelativeTime t1, RelativeTime t2);
extern bool		reltimele(RelativeTime t1, RelativeTime t2);
extern bool		reltimege(RelativeTime t1, RelativeTime t2);
extern bool		intervaleq(TimeInterval i1, TimeInterval i2);
extern bool		intervalleneq(TimeInterval i, RelativeTime t);
extern bool		intervallenne(TimeInterval i, RelativeTime t);
extern bool		intervallenlt(TimeInterval i, RelativeTime t);
extern bool		intervallengt(TimeInterval i, RelativeTime t);
extern bool		intervallenle(TimeInterval i, RelativeTime t);
extern bool		intervallenge(TimeInterval i, RelativeTime t);
extern bool		intervalct(TimeInterval i1, TimeInterval i2);
extern bool		intervalov(TimeInterval i1, TimeInterval i2);
extern AbsoluteTime intervalstart(TimeInterval i);
extern AbsoluteTime intervalend(TimeInterval i);
extern int		isreltime(char *timestring);
extern text    *timeofday(void);

/* dt.c */
extern DateTime *datetime_in(char *str);
extern char    *datetime_out(DateTime * datetime);
extern TimeSpan *timespan_in(char *str);
extern char    *timespan_out(TimeSpan * timespan);
extern int		datetime2tm(DateTime dt, int *tzp, struct tm * tm, double *fsec, char **tzn);

/* filename.c */
extern char    *filename_in(char *file);
extern char    *filename_out(char *s);

/* float.c */
extern void		CheckFloat8Val(double val);		/* used by lex */
extern float32	float4in(char *num);
extern char    *float4out(float32 num);
extern float64	float8in(char *num);
extern char    *float8out(float64 num);
extern float32	float4abs(float32 arg1);
extern float32	float4um(float32 arg1);
extern float32	float4larger(float32 arg1, float32 arg2);
extern float32	float4smaller(float32 arg1, float32 arg2);
extern float64	float8abs(float64 arg1);
extern float64	float8um(float64 arg1);
extern float64	float8larger(float64 arg1, float64 arg2);
extern float64	float8smaller(float64 arg1, float64 arg2);
extern float32	float4pl(float32 arg1, float32 arg2);
extern float32	float4mi(float32 arg1, float32 arg2);
extern float32	float4mul(float32 arg1, float32 arg2);
extern float32	float4div(float32 arg1, float32 arg2);
extern float32	float4inc(float32 arg1);
extern float64	float8pl(float64 arg1, float64 arg2);
extern float64	float8mi(float64 arg1, float64 arg2);
extern float64	float8mul(float64 arg1, float64 arg2);
extern float64	float8div(float64 arg1, float64 arg2);
extern float64	float8inc(float64 arg1);
extern bool		float4eq(float32 arg1, float32 arg2);
extern bool		float4ne(float32 arg1, float32 arg2);
extern bool		float4lt(float32 arg1, float32 arg2);
extern bool		float4le(float32 arg1, float32 arg2);
extern bool		float4gt(float32 arg1, float32 arg2);
extern bool		float4ge(float32 arg1, float32 arg2);
extern bool		float8eq(float64 arg1, float64 arg2);
extern bool		float8ne(float64 arg1, float64 arg2);
extern bool		float8lt(float64 arg1, float64 arg2);
extern bool		float8le(float64 arg1, float64 arg2);
extern bool		float8gt(float64 arg1, float64 arg2);
extern bool		float8ge(float64 arg1, float64 arg2);
extern float64	ftod(float32 num);
extern float64	i4tod(int32 num);
extern float64	i2tod(int16 num);
extern float32	dtof(float64 num);
extern int32	dtoi4(float64 num);
extern int16	dtoi2(float64 num);
extern float32	i4tof(int32 num);
extern float32	i2tof(int16 num);
extern int32	ftoi4(float32 num);
extern int16	ftoi2(float32 num);
extern float64	dround(float64 arg1);
extern float64	dtrunc(float64 arg1);
extern float64	dsqrt(float64 arg1);
extern float64	dcbrt(float64 arg1);
extern float64	dpow(float64 arg1, float64 arg2);
extern float64	dexp(float64 arg1);
extern float64	dlog1(float64 arg1);
extern float64	float48pl(float32 arg1, float64 arg2);
extern float64	float48mi(float32 arg1, float64 arg2);
extern float64	float48mul(float32 arg1, float64 arg2);
extern float64	float48div(float32 arg1, float64 arg2);
extern float64	float84pl(float64 arg1, float32 arg2);
extern float64	float84mi(float64 arg1, float32 arg2);
extern float64	float84mul(float64 arg1, float32 arg2);
extern float64	float84div(float64 arg1, float32 arg2);
extern bool		float48eq(float32 arg1, float64 arg2);
extern bool		float48ne(float32 arg1, float64 arg2);
extern bool		float48lt(float32 arg1, float64 arg2);
extern bool		float48le(float32 arg1, float64 arg2);
extern bool		float48gt(float32 arg1, float64 arg2);
extern bool		float48ge(float32 arg1, float64 arg2);
extern bool		float84eq(float64 arg1, float32 arg2);
extern bool		float84ne(float64 arg1, float32 arg2);
extern bool		float84lt(float64 arg1, float32 arg2);
extern bool		float84le(float64 arg1, float32 arg2);
extern bool		float84gt(float64 arg1, float32 arg2);
extern bool		float84ge(float64 arg1, float32 arg2);

/* geo_ops.c, geo_selfuncs.c */
extern double  *box_area(BOX * box);

/* misc.c */
extern bool		nullvalue(Datum value, bool * isNull);
extern bool		nonnullvalue(Datum value, bool * isNull);
extern bool		oidrand(Oid o, int32 X);
extern bool		oidsrand(int32 X);
extern int32	userfntest(int i);

/* define macros to replace mixed-case function calls - tgl 97/04/27 */
#define NullValue(v,b) nullvalue(v,b)
#define NonNullValue(v,b) nonnullvalue(v,b)

/* not_in.c */
extern bool		int4notin(int16 not_in_arg, char *relation_and_attr);
extern bool		oidnotin(Oid the_oid, char *compare);

/* oid.c */
extern Oid	   *oid8in(char *oidString);
extern char    *oid8out(Oid(*oidArray)[]);
extern Oid		oidin(char *s);
extern char    *oidout(Oid o);
extern bool		oideq(Oid arg1, Oid arg2);
extern bool		oidne(Oid arg1, Oid arg2);
extern bool		oid8eq(Oid arg1[], Oid arg2[]);
extern bool		oideqint4(Oid arg1, int32 arg2);
extern bool		int4eqoid(int32 arg1, Oid arg2);

/* regexp.c */
extern bool		char2regexeq(uint16 arg1, struct varlena * p);
extern bool		char2regexne(uint16 arg1, struct varlena * p);
extern bool		char4regexeq(uint32 arg1, struct varlena * p);
extern bool		char4regexne(uint32 arg1, struct varlena * p);
extern bool		char8regexeq(char *s, struct varlena * p);
extern bool		char8regexne(char *s, struct varlena * p);
extern bool		char16regexeq(char *s, struct varlena * p);
extern bool		char16regexne(char *s, struct varlena * p);
extern bool		nameregexeq(NameData * n, struct varlena * p);
extern bool		nameregexne(NameData * s, struct varlena * p);
extern bool		textregexeq(struct varlena * s, struct varlena * p);
extern bool		textregexne(struct varlena * s, struct varlena * p);
extern bool		char2icregexeq(uint16 arg1, struct varlena * p);
extern bool		char2icregexne(uint16 arg1, struct varlena * p);
extern bool		char4icregexeq(uint32 arg1, struct varlena * p);
extern bool		char4icregexne(uint32 arg1, struct varlena * p);
extern bool		char8icregexeq(char *s, struct varlena * p);
extern bool		char8icregexne(char *s, struct varlena * p);
extern bool		char16icregexeq(char *s, struct varlena * p);
extern bool		char16icregexne(char *s, struct varlena * p);
extern bool		nameicregexeq(NameData * s, struct varlena * p);
extern bool		nameicregexne(NameData * s, struct varlena * p);
extern bool		texticregexeq(struct varlena * s, struct varlena * p);
extern bool		texticregexne(struct varlena * s, struct varlena * p);


/* regproc.c */
extern int32	regprocin(char *proname);
extern char    *regprocout(RegProcedure proid);
extern Oid		regproctooid(RegProcedure rp);

/* define macro to replace mixed-case function call - tgl 97/04/27 */
#define RegprocToOid(rp) regproctooid(rp)

/* selfuncs.c */
extern float64	eqsel(Oid opid, Oid relid, AttrNumber attno, char *value, int32 flag);
extern float64	neqsel(Oid opid, Oid relid, AttrNumber attno, char *value, int32 flag);
extern float64	intltsel(Oid opid, Oid relid, AttrNumber attno, int32 value, int32 flag);
extern float64	intgtsel(Oid opid, Oid relid, AttrNumber attno, int32 value, int32 flag);
extern float64	eqjoinsel(Oid opid, Oid relid1, AttrNumber attno1, Oid relid2, AttrNumber attno2);
extern float64	neqjoinsel(Oid opid, Oid relid1, AttrNumber attno1, Oid relid2, AttrNumber attno2);
extern float64	intltjoinsel(Oid opid, Oid relid1, AttrNumber attno1, Oid relid2, AttrNumber attno2);
extern float64	intgtjoinsel(Oid opid, Oid relid1, AttrNumber attno1, Oid relid2, AttrNumber attno2);
extern float64	btreesel(Oid operatorOid, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);
extern float64	btreenpage(Oid operatorOid, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);
extern float64	hashsel(Oid operatorOid, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);
extern float64	hashnpage(Oid operatorOid, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);
extern float64	rtsel(Oid operatorOid, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);
extern float64	rtnpage(Oid operatorOid, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);
extern float64	gistsel(Oid operatorObjectId, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);
extern float64	gistnpage(Oid operatorObjectId, Oid indrelid, AttrNumber attributeNumber, char *constValue, int32 constFlag, int32 nIndexKeys, Oid indexrelid);

/* tid.c */
extern ItemPointer tidin(char *str);
extern char    *tidout(ItemPointer itemPtr);

/* timestamp.c */
extern time_t	timestamp_in(const char *timestamp_str);
extern char    *timestamp_out(time_t timestamp);
extern time_t	now(void);
bool			timestampeq(time_t t1, time_t t2);
bool			timestampne(time_t t1, time_t t2);
bool			timestamplt(time_t t1, time_t t2);
bool			timestampgt(time_t t1, time_t t2);
bool			timestample(time_t t1, time_t t2);
bool			timestampge(time_t t1, time_t t2);
DateTime	   *timestamp_datetime(time_t timestamp);

/* varchar.c */
extern char    *bpcharin(char *s, int dummy, int typlen);
extern char    *bpcharout(char *s);
extern char    *varcharin(char *s, int dummy, int typlen);
extern char    *varcharout(char *s);
extern bool		bpchareq(char *arg1, char *arg2);
extern bool		bpcharne(char *arg1, char *arg2);
extern bool		bpcharlt(char *arg1, char *arg2);
extern bool		bpcharle(char *arg1, char *arg2);
extern bool		bpchargt(char *arg1, char *arg2);
extern bool		bpcharge(char *arg1, char *arg2);
extern int32	bpcharcmp(char *arg1, char *arg2);
extern bool		varchareq(char *arg1, char *arg2);
extern bool		varcharne(char *arg1, char *arg2);
extern bool		varcharlt(char *arg1, char *arg2);
extern bool		varcharle(char *arg1, char *arg2);
extern bool		varchargt(char *arg1, char *arg2);
extern bool		varcharge(char *arg1, char *arg2);
extern int32	varcharcmp(char *arg1, char *arg2);
extern uint32	hashbpchar(struct varlena * key);
extern uint32	hashvarchar(struct varlena * key);

/* varlena.c */
extern struct varlena *byteain(char *inputText);
extern char    *byteaout(struct varlena * vlena);
extern struct varlena *textin(char *inputText);
extern char    *textout(struct varlena * vlena);
extern text    *textcat(text * t1, text * t2);
extern bool		texteq(struct varlena * arg1, struct varlena * arg2);
extern bool		textne(struct varlena * arg1, struct varlena * arg2);
extern bool		text_lt(struct varlena * arg1, struct varlena * arg2);
extern bool		text_le(struct varlena * arg1, struct varlena * arg2);
extern bool		text_gt(struct varlena * arg1, struct varlena * arg2);
extern bool		text_ge(struct varlena * arg1, struct varlena * arg2);
extern int32	textpos(text * t1, text * t2);
extern int32	byteaGetSize(struct varlena * v);
extern int32	byteaGetByte(struct varlena * v, int32 n);
extern int32	byteaGetBit(struct varlena * v, int32 n);
extern struct varlena *byteaSetByte(struct varlena * v, int32 n, int32 newByte);
extern struct varlena *byteaSetBit(struct varlena * v, int32 n, int32 newBit);

/* datetime.c */
extern DateADT	date_in(char *datestr);
extern char    *date_out(DateADT dateVal);
extern bool		date_eq(DateADT dateVal1, DateADT dateVal2);
extern bool		date_ne(DateADT dateVal1, DateADT dateVal2);
extern bool		date_lt(DateADT dateVal1, DateADT dateVal2);
extern bool		date_le(DateADT dateVal1, DateADT dateVal2);
extern bool		date_gt(DateADT dateVal1, DateADT dateVal2);
extern bool		date_ge(DateADT dateVal1, DateADT dateVal2);
extern int		date_cmp(DateADT dateVal1, DateADT dateVal2);
extern DateADT	date_larger(DateADT dateVal1, DateADT dateVal2);
extern DateADT	date_smaller(DateADT dateVal1, DateADT dateVal2);
extern int32	date_mi(DateADT dateVal1, DateADT dateVal2);
extern DateADT	date_pli(DateADT dateVal, int32 days);
extern DateADT	date_mii(DateADT dateVal, int32 days);
extern DateTime *date_datetime(DateADT date);
extern DateADT	datetime_date(DateTime * datetime);
extern DateTime *datetime_datetime(DateADT date, TimeADT * time);
extern DateADT	abstime_date(AbsoluteTime abstime);

extern TimeADT *time_in(char *timestr);
extern char    *time_out(TimeADT * time);
extern bool		time_eq(TimeADT * time1, TimeADT * time2);
extern bool		time_ne(TimeADT * time1, TimeADT * time2);
extern bool		time_lt(TimeADT * time1, TimeADT * time2);
extern bool		time_le(TimeADT * time1, TimeADT * time2);
extern bool		time_gt(TimeADT * time1, TimeADT * time2);
extern bool		time_ge(TimeADT * time1, TimeADT * time2);
extern int		time_cmp(TimeADT * time1, TimeADT * time2);
extern int32	int42reltime(int32 timevalue);

/* like.c */
extern bool		char2like(uint16 arg1, struct varlena * p);
extern bool		char2nlike(uint16 arg1, struct varlena * p);
extern bool		char4like(uint32 arg1, struct varlena * p);
extern bool		char4nlike(uint32 arg1, struct varlena * p);
extern bool		char8like(char *s, struct varlena * p);
extern bool		char8nlike(char *s, struct varlena * p);
extern bool		char16like(char *s, struct varlena * p);
extern bool		char16nlike(char *s, struct varlena * p);
extern bool		namelike(NameData * n, struct varlena * p);
extern bool		namenlike(NameData * s, struct varlena * p);
extern bool		textlike(struct varlena * s, struct varlena * p);
extern bool		textnlike(struct varlena * s, struct varlena * p);

/* oracle_compat.c */

extern text    *lower(text * string);
extern text    *upper(text * string);
extern text    *initcap(text * string);
extern text    *lpad(text * string1, int4 len, text * string2);
extern text    *rpad(text * string1, int4 len, text * string2);
extern text    *ltrim(text * string, text * set);
extern text    *rtrim(text * string, text * set);
extern text    *substr(text * string, int4 m, int4 n);
extern text    *translate(text * string, char from, char to);

/* acl.c */

#endif							/* BUILTINS_H */