home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / postgres / postgre4.z / postgre4 / src / lib / H / utils / fmgr.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-27  |  13.3 KB  |  594 lines

  1. /*
  2.  * fmgr.h --
  3.  *    Definitions for using internal procedures.
  4.  *
  5.  * Identification:
  6.  *    $Header: /private/postgres/src/lib/H/utils/RCS/fmgr.h,v 1.64 1992/08/16 03:39:29 mer Exp $
  7.  */
  8.  
  9. #ifndef    FMgrIncluded        /* Include this file only once */
  10. #define FMgrIncluded    1
  11.  
  12. typedef char *    ((*func_ptr)());    /* ptr to func returning (char *) */
  13.  
  14. #include "utils/dynamic_loader.h"
  15.  
  16. extern char    *fmgr();
  17.  
  18. /*
  19.  * EnableDynamicFunctionManager --
  20.  *    Enables/disables dynamic function loading.
  21.  *
  22.  * Exceptions:
  23.  */
  24. extern
  25. void
  26. EnableDynamicFunctionManager ARGS((
  27.     func_ptr    function
  28. ));
  29.  
  30. /*
  31.  *    Maximum number of arguments for a builtin function.
  32.  *    The structure gets shoved onto the stack when a function is called
  33.  *    from the function manager.  This allows us to configure MAXFMGRARGS
  34.  *    in one place instead of having to having a giant switch.
  35.  */
  36. #define    MAXFMGRARGS    9
  37.  
  38. extern char *(*DynamicFunctionManagerP)();
  39.  
  40. typedef struct {
  41.     char    *data[MAXFMGRARGS];
  42. } FmgrValues;
  43.  
  44.  
  45. /*
  46.  *    Flags for the builtin oprrest selectivity routines.
  47.  */
  48. #define    SEL_CONSTANT     1    /* constant does not vary (not a parameter) */
  49. #define    SEL_RIGHT    2     /* constant appears to right of operator */
  50.  
  51.  
  52. /*
  53.  *     Initial internal proids follow...
  54.  */
  55. #define    F_BOOLIN        28
  56. #define    F_BOOLOUT        29
  57. #define    F_BYTEAIN        30
  58. #define    F_BYTEAOUT        31
  59. #define    F_CHARIN        32
  60. #define    F_CHAROUT        33
  61. #define    F_CHAR16IN        34
  62. #define    F_CHAR16OUT        35
  63. #define    F_DATETIMEIN        36
  64. #define    F_DATETIMEOUT        37
  65. #define    F_INT2IN        38
  66. #define    F_INT2OUT        39
  67. #define    F_INT28IN        40
  68. #define    F_INT28OUT        41
  69. #define    F_INT4IN        42
  70. #define    F_OIDIN            42
  71. #define    F_INT4OUT        43
  72. #define    F_OIDOUT        43
  73. #define    F_REGPROCIN        44
  74. #define    F_REGPROCOUT        45
  75. #define    F_TEXTIN        46
  76. #define    F_TEXTOUT        47
  77. #define    F_TIDIN            48
  78. #define    F_TIDOUT        49
  79. #define    F_XIDIN            50
  80. #define    F_XIDOUT        51
  81. #define    F_CIDIN            52
  82. #define    F_CIDOUT        53
  83. #define    F_OID8IN        54
  84. #define    F_OID8OUT        55
  85. #define F_LOCKIN        56
  86. #define F_LOCKOUT        57
  87. #define F_STUBIN        58
  88. #define F_STUBOUT        59
  89.  
  90. #define    F_BOOLEQ        60
  91. #define    F_CHAREQ        61
  92. #define    F_CHAR16EQ        62
  93. #define    F_INT2EQ        63
  94. #define    F_INT2LT        64
  95. #define    F_INT4EQ        65
  96. #define    F_INT4LT        66
  97. #define    F_TEXTEQ        67
  98. #define    F_XIDEQ            68
  99. #define    F_CIDEQ            69
  100. #define F_CHARNE        70
  101. #define F_CHARLT        71
  102. #define F_CHARLE        72
  103. #define F_CHARGT        73
  104. #define F_CHARGE        74
  105. #define F_CHARPL        75
  106. #define F_CHARMI        76
  107. #define F_CHARMUL        77
  108. #define F_CHARDIV        78
  109. #define F_CHAR16REGEXEQ        79
  110. #define F_CHAR16REGEXNE        80
  111. #define F_TEXTREGEXEQ        81
  112. #define F_TEXTREGEXNE        82
  113.  
  114. #define F_BOOLNE        84
  115.  
  116. #define    F_RTSEL            97
  117. #define    F_RTNPAGE        98
  118. #define    F_BTREESEL        99
  119. #define    F_BTREENPG        100
  120. #define    F_EQSEL            101
  121. #define    F_NEQSEL        102
  122. #define    F_INTLTSEL        103
  123. #define    F_INTGTSEL        104
  124. #define    F_EQJOINSEL        105
  125. #define    F_NEQJOINSEL        106
  126. #define    F_INTLTJOINSEL        107
  127. #define    F_INTGTJOINSEL        108
  128.  
  129. #define    F_BTREEENDSCAN        109
  130. #define    F_BTREEMARKPOS        110
  131. #define    F_BTREERESTRPOS        111
  132. #define    F_BTREEINSERT        112
  133. #define    F_BTREEDELETE        113
  134. #define    F_BTREEGETNEXT        114
  135. #define    F_BTREEBUILD        115
  136. #define    F_BTREERESCAN        116
  137.  
  138. /*
  139.  *  BTBEGINSCAN is defined below -- no room for it here.
  140.  */
  141.  
  142. #define    F_POINT_IN        117
  143. #define    F_POINT_OUT        118
  144. #define    F_LSEG_IN        119
  145. #define    F_LSEG_OUT        120
  146. #define    F_PATH_IN        121
  147. #define    F_PATH_OUT        122
  148. #define    F_BOX_IN        123
  149. #define    F_BOX_OUT        124
  150. #define    F_BOX_OVERLAP        125
  151. #define    F_BOX_GE        126
  152. #define    F_BOX_GT        127
  153. #define    F_BOX_EQ        128
  154. #define    F_BOX_LT        129
  155. #define    F_BOX_LE        130
  156. /*
  157.  *  F_BOX_SAME is defined below -- no space here.
  158.  */
  159. #define    F_POINT_ABOVE        131
  160. #define    F_POINT_LEFT        132
  161. #define    F_POINT_RIGHT        133
  162. #define    F_POINT_BELOW        134
  163. #define    F_POINT_EQ        135
  164. #define    F_ON_PB            136
  165. #define    F_ON_PPATH        137
  166. #define    F_BOX_CENTER        138
  167. #define    F_AREASEL        139
  168. #define    F_AREAJOINSEL        140
  169. #define    F_INT4MUL        141
  170. #define    F_INT4FAC        142
  171. #define    F_POINTDIST        143
  172. #define    F_INT4NE        144
  173. #define    F_INT2NE        145
  174. #define    F_INT2GT        146
  175. #define    F_INT4GT        147
  176. #define    F_INT2LE        148
  177. #define    F_INT4LE        149
  178. #define    F_INT4GE        150
  179. #define    F_INT2GE        151
  180. #define    F_INT2MUL        152
  181. #define    F_INT2DIV        153
  182. #define    F_INT4DIV        154
  183. #define    F_INT2MOD        155
  184. #define    F_INT4MOD        156
  185. #define    F_TEXTNE        157
  186. #define    F_INT24EQ        158
  187. #define    F_INT42EQ        159
  188. #define    F_INT24LT        160
  189. #define    F_INT42LT        161
  190. #define    F_INT24GT        162
  191. #define    F_INT42GT        163
  192. #define    F_INT24NE        164
  193. #define    F_INT42NE        165
  194. #define    F_INT24LE        166
  195. #define    F_INT42LE        167
  196. #define    F_INT24GE        168
  197. #define    F_INT42GE        169
  198. #define    F_INT24MUL        170
  199. #define    F_INT42MUL        171
  200. #define    F_INT24DIV        172
  201. #define    F_INT42DIV        173
  202. #define    F_INT24MOD        174
  203. #define    F_INT42MOD        175
  204. #define    F_INT2PL        176
  205. #define    F_INT4PL        177
  206. #define    F_INT24PL        178
  207. #define    F_INT42PL        179
  208. #define    F_INT2MI        180
  209. #define    F_INT4MI        181
  210. #define    F_INT24MI        182
  211. #define    F_INT42MI        183
  212. #define    F_OIDEQ            184
  213. #define    F_OIDNE                   185
  214.  
  215. #define    F_BOX_SAME               186
  216. #define    F_BOX_CONTAIN               187
  217. #define    F_BOX_LEFT               188
  218. #define    F_BOX_OVERLEFT               189
  219. #define    F_BOX_OVERRIGHT               190
  220. #define    F_BOX_RIGHT               191
  221. #define    F_BOX_CONTAINED               192
  222.  
  223. /* these are pg_amproc entries for rtrees on boxes */
  224. #define F_RT_BOX_UNION        193
  225. #define F_RT_BOX_INTER        194
  226. #define F_RT_BOX_SIZE        195
  227. #define F_RT_BIGBOX_SIZE    196
  228.  
  229. /* these are pg_amproc entries for rtrees on polygons */
  230. #define F_RT_POLY_UNION        197
  231. #define F_RT_POLY_INTER        198
  232. #define F_RT_POLY_SIZE        199
  233.  
  234. #define    F_FLOAT4IN        200
  235. #define    F_FLOAT4OUT        201
  236. #define    F_FLOAT4MUL        202
  237. #define    F_FLOAT4DIV        203
  238. #define    F_FLOAT4PL        204
  239. #define    F_FLOAT4MI        205
  240. #define    F_FLOAT4UM        206
  241. #define    F_FLOAT4ABS        207
  242. #define F_FLOAT4INC        208
  243. #define F_FLOAT4LARGER        209
  244.                 /* 210 is taken by pg_type */
  245. #define F_FLOAT4SMALLER        211
  246. #define F_INT4UM        212
  247. #define F_INT2UM        213
  248. #define    F_FLOAT8IN        214
  249. #define    F_FLOAT8OUT        215
  250. #define    F_FLOAT8MUL        216
  251. #define    F_FLOAT8DIV        217
  252. #define    F_FLOAT8PL        218
  253. #define    F_FLOAT8MI        219
  254. #define    F_FLOAT8UM        220
  255. #define    F_FLOAT8ABS        221
  256. #define    F_FLOAT8INC        222
  257. #define    F_FLOAT8LARGER        223
  258. #define    F_FLOAT8SMALLER        224
  259. #define    F_DROUND        228
  260. #define    F_DTRUNC        229
  261. #define    F_DSQRT            230
  262. #define    F_DCBRT            231
  263. #define    F_DPOW            232
  264. #define    F_DEXP            233
  265. #define    F_DLOG            234
  266. #define F_ABSTIMEIN             240
  267. #define F_ABSTIMEOUT            241
  268. #define F_RELTIMEIN             242
  269. #define F_RELTIMEOUT            243
  270. #define F_TIMEPL                244
  271. /*
  272.  * XXX 242 to 273 reserved for time constructs
  273.  */
  274. #define F_TIMEMI        245
  275. #define F_TINTERVALIN        246
  276. #define F_TINTERVALOUT        247
  277. #define F_ININTERVAL        248
  278. #define F_INTERVALREL        249
  279. #define F_TIMENOW        250
  280.  
  281. #define F_ABSTIMEEQ        251
  282. #define F_ABSTIMENE        252
  283. #define F_ABSTIMELT        253
  284. #define F_ABSTIMEGT        254
  285. #define F_ABSTIMELE        255
  286. #define F_ABSTIMEGE        256
  287. #define F_RELTIMEEQ        257
  288. #define F_RELTIMENE        258
  289. #define F_RELTIMELT        259
  290. #define F_RELTIMEGT        260
  291. #define F_RELTIMELE        261
  292. #define F_RELTIMEGE        262
  293.  
  294. #define F_INTERVALEQ        263
  295. #define F_INTERVALCT        264
  296. #define F_INTERVALOV        265
  297. #define F_INTERVALLENEQ        266
  298. #define F_INTERVALLENNE        267
  299. #define F_INTERVALLENLT        268
  300. #define F_INTERVALLENGT        269
  301. #define F_INTERVALLENLE        270
  302. #define F_INTERVALLENGE        271
  303. #define F_INTERVALSTART        272
  304. #define F_INTERVALEND        273
  305.  
  306. #define    F_INT2FAC        276
  307. #define    F_FLOAT48MUL        279
  308. #define    F_FLOAT48DIV        280
  309. #define    F_FLOAT48PL        281
  310. #define    F_FLOAT48MI        282
  311. #define    F_FLOAT84MUL        283
  312. #define    F_FLOAT84DIV        284
  313. #define    F_FLOAT84PL        285
  314. #define    F_FLOAT84MI        286
  315. #define    F_FLOAT4EQ        287
  316. #define    F_FLOAT4NE        288
  317. #define    F_FLOAT4LT        289
  318. #define    F_FLOAT4LE        290
  319. #define    F_FLOAT4GT        291
  320. #define    F_FLOAT4GE        292
  321. #define    F_FLOAT8EQ        293
  322. #define    F_FLOAT8NE        294
  323. #define    F_FLOAT8LT        295
  324. #define    F_FLOAT8LE        296
  325. #define    F_FLOAT8GT        297
  326. #define    F_FLOAT8GE        298
  327. #define    F_FLOAT48EQ        299
  328. #define    F_FLOAT48NE        300
  329. #define    F_FLOAT48LT        301
  330. #define    F_FLOAT48LE        302
  331. #define    F_FLOAT48GT        303
  332. #define    F_FLOAT48GE        304
  333. #define    F_FLOAT84EQ        305
  334. #define    F_FLOAT84NE        306
  335. #define    F_FLOAT84LT        307
  336. #define    F_FLOAT84LE        308
  337. #define    F_FLOAT84GT        309
  338. #define    F_FLOAT84GE        310
  339.  
  340. #define    F_F4TOF8        311
  341. #define    F_F8TOF4        312
  342. #define    F_I2TOI4        313
  343. #define    F_I4TOI2        314
  344. #define F_KEYFIRSTEQ        315
  345.  
  346. /*
  347.  *  more access method interface routines (no room for them above)
  348.  */
  349. #define F_BTBEGINSCAN        319
  350.  
  351. #define F_RTINSERT        320
  352. #define    F_RTDELETE        321
  353. #define    F_RTGETTUPLE        322
  354. #define    F_RTBUILD        323
  355. #define    F_RTBEGINSCAN        324
  356. #define    F_RTENDSCAN        325
  357. #define    F_RTMARKPOS        326
  358. #define    F_RTRESTRPOS        327
  359. #define    F_RTRESCAN        328
  360.  
  361. #define F_NBTGETTUPLE        330
  362. #define F_NBTINSERT        331
  363. #define F_NBTDELETE        332
  364. #define F_NBTBEGINSCAN        333
  365. #define F_NBTRESCAN        334
  366. #define F_NBTENDSCAN        335
  367. #define F_NBTMARKPOS        336
  368. #define F_NBTRESTRPOS        337
  369. #define F_NBTBUILD        338
  370.  
  371. #define    F_POLY_SAME               339
  372. #define    F_POLY_CONTAIN        340
  373. #define    F_POLY_LEFT               341
  374. #define    F_POLY_OVERLEFT        342
  375. #define    F_POLY_OVERRIGHT    343
  376. #define    F_POLY_RIGHT        344
  377. #define    F_POLY_CONTAINED    345
  378. #define    F_POLY_OVERLAP        346
  379. #define F_POLY_IN            347
  380. #define F_POLY_OUT            348
  381.  
  382. /*
  383.  *  pg_amproc entries for new btrees -- per-opclass comparison functions.
  384.  */
  385.  
  386. #define F_BTINT2CMP        350
  387. #define F_BTINT4CMP        351
  388. #define F_BTINT42CMP        352
  389. #define F_BTINT24CMP        353
  390. #define F_BTFLOAT4CMP        354
  391. #define F_BTFLOAT8CMP        355
  392. #define F_BTOIDCMP        356
  393. #define F_BTABSTIMECMP        357
  394. #define F_BTCHARCMP        358
  395. #define F_BTCHAR16CMP        359
  396. #define F_BTTEXTCMP        360
  397.  
  398. #define F_LSEG_DISTANCE        361
  399. #define F_LSEG_INTERPT        362
  400. #define F_DIST_PS        363
  401. #define F_DIST_PB        364
  402. #define F_DIST_SB        365
  403. #define F_CLOSE_PS        366
  404. #define F_CLOSE_PB        367
  405. #define F_CLOSE_SB        368
  406. #define F_ON_PS            369
  407. #define F_PATH_DISTANCE        370
  408. #define F_DIST_PPTH        371
  409.  
  410. #define F_ON_SB            372
  411. #define F_INTER_SB        373
  412.  
  413. #define    F_FTREEINSERT        612
  414. #define    F_FTREEDELETE        613
  415. #define    F_FTREEGETNEXT        614
  416. #define    F_FTREEBUILD        615
  417. #define    F_KW_IN            616
  418. #define    F_KW_OUT        617
  419. #define    F_KW_EQ            618
  420. #define    F_KW_LT            619
  421. #define    F_KW_LE            620
  422. #define    F_KW_GT            621
  423. #define    F_KW_GE            622
  424. #define    F_KWLIST_IN        623
  425. #define    F_KWLIST_OUT        624
  426. #define    F_KWLIST_EXTRACT    626
  427. #define    F_KWLIST_COUNT        627
  428. #define    F_KWLIST_ELEMENT    628
  429. #define    F_KWLIST_LISTIFY    629
  430. #define    F_KWLISTSEL        630
  431. #define    F_KWLISTNPAGES        631
  432.  
  433. #define F_GETATTRIBUTEBYNAME    649
  434.  
  435. #define F_INT4NOTIN        650
  436. #define F_OIDNOTIN        651
  437. #define F_INT44IN        652
  438. #define F_INT44OUT        653
  439.  
  440. #define F_GETATTRIBUTEBYNUM    654
  441.  
  442. #define F_CHAR16LT        655
  443. #define F_CHAR16LE        656
  444. #define F_CHAR16GT        657
  445. #define F_CHAR16GE        658
  446. #define F_CHAR16NE        659
  447.  
  448. #define F_LOCKADD        700
  449. #define F_LOCKRM        701
  450.  
  451. /*
  452.  * General miscellaneous routines.
  453.  */
  454.  
  455. #define F_PG_USERNAME        710
  456. #define F_USERFNTEST        711
  457. /*
  458.  * routines for the 'bytea' type.
  459.  */
  460. #define F_BYTEASIZE        720
  461. #define F_BYTEAGETBYTE        721
  462. #define F_BYTEASETBYTE        722
  463. #define F_BYTEAGETBIT        723
  464. #define F_BYTEASETBIT        724
  465.  
  466. /* ----------------
  467.  *    test routine for backend-pq functions
  468.  * ----------------
  469.  */
  470. #define F_PQTEST        730
  471.  
  472. /* ----------------
  473.  *    text comparison functions
  474.  * ----------------
  475.  */
  476.  
  477. #define F_TEXTLT        740
  478. #define F_TEXTLE        741
  479. #define F_TEXTGT        742
  480. #define F_TEXTGE        743
  481.  
  482. /*
  483.  * special array input and output routines
  484.  */
  485.  
  486. #define F_ARRAY_IN        750
  487. #define F_ARRAY_OUT        751
  488.  
  489. #define F_FILENAME_IN   752
  490. #define F_FILENAME_OUT  753
  491.  
  492. #define F_SMGRIN        760
  493. #define F_SMGROUT        761
  494. #define F_SMGREQ        762
  495. #define F_SMGRNE        763
  496.  
  497. #define F_LO_FILEIN        764
  498. #define F_LO_FILEOUT    765
  499.  
  500. #define F_INT4INC        766
  501. #define F_INT2INC        767
  502. #define F_INT4LARGER        768
  503. #define F_INT4SMALLER        769
  504. #define F_INT2LARGER        770
  505. #define F_INT2SMALLER        771
  506.  
  507. #define F_NOBTGETTUPLE        800
  508. #define F_NOBTINSERT        801
  509. #define F_NOBTDELETE        802
  510. #define F_NOBTBEGINSCAN        803
  511. #define F_NOBTRESCAN        804
  512. #define F_NOBTENDSCAN        805
  513. #define F_NOBTMARKPOS        806
  514. #define F_NOBTRESTRPOS        807
  515. #define F_NOBTBUILD        808
  516.  
  517. #define F_FIMPORT        900
  518. #define F_FEXPORT        901
  519. #define F_FABSTRACT        902
  520.  
  521. #define F_OIDINT4IN        920
  522. #define F_OIDINT4OUT        921
  523. #define F_OIDINT4LT        922
  524. #define F_OIDINT4LE        923
  525. #define F_OIDINT4EQ        924
  526. #define F_OIDINT4GE        925
  527. #define F_OIDINT4GT        926
  528. #define F_OIDINT4NE        927
  529. #define F_OIDINT4CMP        928
  530. #define F_MKOIDINT4        929
  531.  
  532. #define F_OIDCHAR16IN        940
  533. #define F_OIDCHAR16OUT        941
  534. #define F_OIDCHAR16LT        942
  535. #define F_OIDCHAR16LE        943
  536. #define F_OIDCHAR16EQ        944
  537. #define F_OIDCHAR16GE        945
  538. #define F_OIDCHAR16GT        946
  539. #define F_OIDCHAR16NE        947
  540. #define F_OIDCHAR16CMP        948
  541. #define F_MKOIDCHAR16        949
  542.  
  543. #define F_FILETOOID             950
  544. #define F_LOCREATOID            951
  545. #define F_LOOPEN                952
  546. #define F_LOCLOSE               953
  547. #define F_LOREAD                954
  548. #define F_LOWRITE               955
  549. #define F_LOLSEEK               956
  550. #define F_LOCREAT               957
  551. #define F_LOTELL                958
  552. #define F_LOFTRUNCATE           959
  553. #define F_LOSTAT                960
  554. #define F_LORENAME              961
  555. #define F_LOMKDIR               962
  556. #define F_LORMDIR               963
  557. #define F_LOUNLINK              964
  558.  
  559. #define F_PFTPREAD        970
  560. #define F_PFTPWRITE        971
  561. #define F_REGTOOID        972
  562.  
  563. #define F_PATH_INTER        973
  564. #define F_BOX_COPY        974
  565. #define F_BOX_AREA        975
  566. #define F_BOX_LENGTH        976
  567. #define F_BOX_HEIGHT        977
  568. #define F_BOX_DISTANCE        978
  569.  
  570. #define F_BOX_INTERSECT        980
  571. #define F_BOX_DIAGONAL        981
  572. #define F_PATH_N_LT        982
  573. #define F_PATH_N_GT        983
  574. #define F_PATH_N_EQ        984
  575. #define F_PATH_N_LE        985
  576. #define F_PATH_N_GE        986
  577. #define F_PATH_LENGTH        987
  578. #define F_POINT_COPY        988
  579. #define F_POINT_VERT        989
  580. #define F_POINT_HORIZ        990
  581. #define F_POINT_DISTANCE    991
  582. #define F_POINT_SLOPE        992
  583. #define F_LSEG_CONSTRUCT    993
  584. #define F_LSEG_INTERSECT    994
  585. #define F_LSEG_PARALLEL        995
  586. #define F_LSEG_PERP        996
  587. #define F_LSEG_VERTICAL        997
  588. #define F_LSEG_HORIZONTAL    998
  589. #define F_LSEG_EQ        999
  590. #define F_NULLVALUE             1029
  591. #define F_NONNULLVALUE          1030
  592.  
  593. #endif    /* !defined(FMgrIncluded) */
  594.