builtins.h 22.7 KB
Newer Older
1 2 3
/*-------------------------------------------------------------------------
 *
 * builtins.h--
4
 *	  Declarations for operations on built-in types.
5 6 7 8
 *
 *
 * Copyright (c) 1994, Regents of the University of California
 *
B
Bruce Momjian 已提交
9
 * $Id: builtins.h,v 1.69 1998/10/29 18:07:09 momjian Exp $
10 11
 *
 * NOTES
12 13 14
 *	  This should normally only be included by fmgr.h.
 *	  Under no circumstances should it ever be included before
 *	  including fmgr.h!
15
 * fmgr.h does not seem to include this file, so don't know where this
16 17
 *	comment came from. Backend code must include this stuff explicitly
 *	as far as I can tell...
18
 * - thomas 1998-06-08
19 20 21 22 23 24
 *
 *-------------------------------------------------------------------------
 */
#ifndef BUILTINS_H
#define BUILTINS_H

25
#include <storage/itemptr.h>
26
#include <utils/geo_decls.h>
27
#include <utils/datetime.h>
28
#include <utils/nabstime.h>
29
#include <utils/int8.h>
30
#include <utils/cash.h>
B
Bruce Momjian 已提交
31
#include <utils/inet.h>
32
#include <utils/rel.h>
33 34

/*
35
 *		Defined in adt/
36 37
 */
/* bool.c */
38
extern bool boolin(char *b);
39 40 41 42 43
extern char *boolout(bool b);
extern bool booleq(bool arg1, bool arg2);
extern bool boolne(bool arg1, bool arg2);
extern bool boollt(bool arg1, bool arg2);
extern bool boolgt(bool arg1, bool arg2);
44 45
extern bool istrue(bool arg1);
extern bool isfalse(bool arg1);
46 47

/* char.c */
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
extern int32 charin(char *ch);
extern char *charout(int32 ch);
extern int32 cidin(char *s);
extern char *cidout(int32 c);
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);
63 64

/* int.c */
65 66 67
extern int32 int2in(char *num);
extern char *int2out(int16 sh);
extern int16 *int28in(char *shs);
68
extern char *int28out(int16 *shs);
69
extern int32 *int44in(char *input_string);
70
extern char *int44out(int32 *an_array);
71 72 73 74
extern int32 int4in(char *num);
extern char *int4out(int32 l);
extern int32 i2toi4(int16 arg1);
extern int16 i4toi2(int32 arg1);
75 76 77 78
extern text *int2_text(int16 arg1);
extern int16 text_int2(text *arg1);
extern text *int4_text(int32 arg1);
extern int32 text_int4(text *arg1);
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
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);
103
extern bool keyfirsteq(int16 *arg1, int16 arg2);
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
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);
134 135 136

/* name.c */
extern NameData *namein(char *s);
137 138 139 140 141 142 143
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);
144 145 146
extern int	namecpy(Name n1, Name n2);
extern int	namestrcpy(Name name, char *str);
extern int	namestrcmp(Name name, char *str);
147 148 149

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

/*
158 159
 *		Per-opclass comparison functions for new btrees.  These are
 *		stored in pg_amproc and defined in nbtree/
160
 */
161 162 163 164 165 166 167
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);
168
extern int32 btoid8cmp(Oid *a, Oid *b);
169 170
extern int32 btabstimecmp(AbsoluteTime a, AbsoluteTime b);
extern int32 btcharcmp(char a, char b);
171
extern int32 btnamecmp(NameData *a, NameData *b);
172
extern int32 bttextcmp(struct varlena * a, struct varlena * b);
173 174

/* support routines for the rtree access method, by opclass */
B
Bruce Momjian 已提交
175 176 177 178
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);
179 180 181
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);
182 183

/* projection utilities */
184
/* extern char *GetAttributeByName();
185 186 187 188
   extern char *GetAttributeByNum(); ,
 in executor/executor.h*/


189
extern int32 pqtest(struct varlena * vlena);
190 191 192 193

/* arrayfuncs.c */

/* date.c */
194 195
extern int32 reltimein(char *timestring);
extern char *reltimeout(int32 timevalue);
196
extern TimeInterval tintervalin(char *intervalstr);
197
extern char *tintervalout(TimeInterval interval);
198
extern RelativeTime timespan_reltime(TimeSpan *timespan);
199
extern TimeSpan *reltime_timespan(RelativeTime reltime);
200 201 202
extern TimeInterval mktinterval(AbsoluteTime t1, AbsoluteTime t2);
extern AbsoluteTime timepl(AbsoluteTime t1, RelativeTime t2);
extern AbsoluteTime timemi(AbsoluteTime t1, RelativeTime t2);
203

204
/* extern RelativeTime abstimemi(AbsoluteTime t1, AbsoluteTime t2);  static*/
205
extern int	ininterval(AbsoluteTime t, TimeInterval interval);
206 207
extern RelativeTime intervalrel(TimeInterval interval);
extern AbsoluteTime timenow(void);
208 209 210 211 212 213
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);
214
extern bool intervalsame(TimeInterval i1, TimeInterval i2);
215
extern bool intervaleq(TimeInterval i1, TimeInterval i2);
216 217 218 219 220
extern bool intervalne(TimeInterval i1, TimeInterval i2);
extern bool intervallt(TimeInterval i1, TimeInterval i2);
extern bool intervalgt(TimeInterval i1, TimeInterval i2);
extern bool intervalle(TimeInterval i1, TimeInterval i2);
extern bool intervalge(TimeInterval i1, TimeInterval i2);
221 222 223 224 225 226 227 228
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);
229 230
extern AbsoluteTime intervalstart(TimeInterval i);
extern AbsoluteTime intervalend(TimeInterval i);
231
extern text *timeofday(void);
232 233

/* filename.c */
234 235
extern char *filename_in(char *file);
extern char *filename_out(char *s);
236 237

/* float.c */
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
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);
310

311
/* geo_ops.c, geo_selfuncs.c */
B
Bruce Momjian 已提交
312
extern double *box_area(BOX *box);
313 314

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

321 322 323 324
/* 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)

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

/* oid.c */
330
extern Oid *oid8in(char *oidString);
331
extern char *oid8out(Oid *oidArray);
332 333 334 335
extern Oid	oidin(char *s);
extern char *oidout(Oid o);
extern bool oideq(Oid arg1, Oid arg2);
extern bool oidne(Oid arg1, Oid arg2);
336
extern bool oid8eq(Oid *arg1, Oid *arg2);
B
Bruce Momjian 已提交
337
extern bool oid8ne(Oid *arg1, Oid *arg2);
338 339 340 341
extern bool oid8lt(Oid *arg1, Oid *arg2);
extern bool oid8le(Oid *arg1, Oid *arg2);
extern bool oid8ge(Oid *arg1, Oid *arg2);
extern bool oid8gt(Oid *arg1, Oid *arg2);
342 343
extern bool oideqint4(Oid arg1, int32 arg2);
extern bool int4eqoid(int32 arg1, Oid arg2);
344
extern text *oid_text(Oid arg1);
345
extern Oid	text_oid(text *arg1);
346 347

/* regexp.c */
348 349
extern bool nameregexeq(NameData *n, struct varlena * p);
extern bool nameregexne(NameData *s, struct varlena * p);
350 351
extern bool textregexeq(struct varlena * s, struct varlena * p);
extern bool textregexne(struct varlena * s, struct varlena * p);
352 353
extern bool nameicregexeq(NameData *s, struct varlena * p);
extern bool nameicregexne(NameData *s, struct varlena * p);
354 355
extern bool texticregexeq(struct varlena * s, struct varlena * p);
extern bool texticregexne(struct varlena * s, struct varlena * p);
356 357 358


/* regproc.c */
B
Bruce Momjian 已提交
359
extern int32 regprocin(char *pro_name_and_oid);
360
extern char *regprocout(RegProcedure proid);
361
extern text *oid8types(Oid *oidArray);
362
extern Oid	regproctooid(RegProcedure rp);
363 364 365

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

/* selfuncs.c */
368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383
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);
384 385 386

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

/* timestamp.c */
390 391 392 393 394 395 396 397 398
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);
399 400
DateTime   *timestamp_datetime(time_t timestamp);
time_t		datetime_timestamp(DateTime *datetime);
401

402
/* varchar.c */
403
extern char *bpcharin(char *s, int dummy, int32 atttypmod);
404
extern char *bpcharout(char *s);
405 406 407
extern char *bpchar(char *s, int32 slen);
extern char *char_bpchar(int32 c);
extern int32 bpchar_char(char *s);
408 409
extern char *name_bpchar(NameData *s);
extern NameData *bpchar_name(char *s);
410 411 412 413 414 415 416
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);
417
extern int32 bpcharlen(char *arg);
M
Marc G. Fournier 已提交
418
extern int32 bpcharoctetlen(char *arg);
419 420
extern uint32 hashbpchar(struct varlena * key);

421
extern char *varcharin(char *s, int dummy, int32 atttypmod);
422
extern char *varcharout(char *s);
423
extern char *varchar(char *s, int32 slen);
424 425 426 427 428 429 430
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);
431
extern int32 varcharlen(char *arg);
M
Marc G. Fournier 已提交
432
extern int32 varcharoctetlen(char *arg);
433
extern uint32 hashvarchar(struct varlena * key);
434 435

/* varlena.c */
436
extern text *textin(char *inputText);
437
extern char *textout(text *vlena);
438
extern text *textcat(text *arg1, text *arg2);
439 440
extern bool texteq(text *arg1, text *arg2);
extern bool textne(text *arg1, text *arg2);
441
extern int	varstr_cmp(char *arg1, int len1, char *arg2, int len2);
442 443 444 445
extern bool text_lt(text *arg1, text *arg2);
extern bool text_le(text *arg1, text *arg2);
extern bool text_gt(text *arg1, text *arg2);
extern bool text_ge(text *arg1, text *arg2);
446
extern int32 textlen(text *arg);
M
Marc G. Fournier 已提交
447
extern int32 textoctetlen(text *arg);
448
extern int32 textpos(text *arg1, text *arg2);
449
extern text *text_substr(text *string, int32 m, int32 n);
450 451
extern text *name_text(NameData *s);
extern NameData *text_name(text *s);
452 453

extern struct varlena *byteain(char *inputText);
454
extern char *byteaout(struct varlena * vlena);
455 456 457
extern int32 byteaGetSize(struct varlena * v);
extern int32 byteaGetByte(struct varlena * v, int32 n);
extern int32 byteaGetBit(struct varlena * v, int32 n);
458 459
extern struct varlena *byteaSetByte(struct varlena * v, int32 n, int32 newByte);
extern struct varlena *byteaSetBit(struct varlena * v, int32 n, int32 newBit);
460

461
/* datetime.c */
462 463 464 465 466 467 468 469 470 471 472 473 474 475
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);
476
extern DateTime *date_datetime(DateADT date);
477
extern DateADT datetime_date(DateTime *datetime);
478
extern DateTime *datetime_datetime(DateADT date, TimeADT *time);
479
extern DateADT abstime_date(AbsoluteTime abstime);
480 481

extern TimeADT *time_in(char *timestr);
482 483 484 485 486 487 488 489
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);
490
extern TimeADT *datetime_time(DateTime *datetime);
491
extern int32 int4reltime(int32 timevalue);
492 493

/* like.c */
494 495
extern bool namelike(NameData *n, struct varlena * p);
extern bool namenlike(NameData *s, struct varlena * p);
496 497
extern bool textlike(struct varlena * s, struct varlena * p);
extern bool textnlike(struct varlena * s, struct varlena * p);
498

499 500
/* oracle_compat.c */

501 502 503 504 505 506 507 508 509
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);
510

511 512
/* acl.c */

513 514
/* inet_net_ntop.c */
char *inet_net_ntop(int af, const void *src, int bits, char *dst, size_t size);
B
Bruce Momjian 已提交
515
char *inet_cidr_ntop(int af, const void *src, int bits, char *dst, size_t size);
516 517 518 519

/* inet_net_pton.c */
int inet_net_pton(int af, const char *src, void *dst, size_t size);

B
Bruce Momjian 已提交
520
/* network.c */
521 522
inet	   *inet_in(char *str);
char	   *inet_out(inet * addr);
B
Bruce Momjian 已提交
523 524
inet	   *cidr_in(char *str);
char	   *cidr_out(inet *addr);
B
Bruce Momjian 已提交
525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541
bool		network_lt(inet * a1, inet * a2);
bool		network_le(inet * a1, inet * a2);
bool		network_eq(inet * a1, inet * a2);
bool		network_ge(inet * a1, inet * a2);
bool		network_gt(inet * a1, inet * a2);
bool		network_ne(inet * a1, inet * a2);
bool		network_sub(inet * a1, inet * a2);
bool		network_subeq(inet * a1, inet * a2);
bool		network_sup(inet * a1, inet * a2);
bool		network_supeq(inet * a1, inet * a2);
int4		network_cmp(inet * a1, inet * a2);

text	   *network_network(inet * addr);
text	   *network_netmask(inet * addr);
int4		network_masklen(inet * addr);
text	   *network_broadcast(inet * addr);
text	   *network_host(inet * addr);
542 543 544 545 546 547 548 549 550 551 552 553 554 555

/* mac.c */
macaddr    *macaddr_in(char *str);
char	   *macaddr_out(macaddr * addr);
bool		macaddr_lt(macaddr * a1, macaddr * a2);
bool		macaddr_le(macaddr * a1, macaddr * a2);
bool		macaddr_eq(macaddr * a1, macaddr * a2);
bool		macaddr_ge(macaddr * a1, macaddr * a2);
bool		macaddr_gt(macaddr * a1, macaddr * a2);
bool		macaddr_ne(macaddr * a1, macaddr * a2);
int4		macaddr_cmp(macaddr * a1, macaddr * a2);
text	   *macaddr_manuf(macaddr * addr);


556
#endif	 /* BUILTINS_H */