builtins.h
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:25k
源码类别:

数据库系统

开发平台:

Unix_Linux

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