00001 #ifndef RDB_RDB_H
00002 #define RDB_RDB_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <rec/env.h>
00026 #include <rec/recmap.h>
00027 #include <gen/hashmap.h>
00028 #include <gen/hashtable.h>
00029 #include <gen/types.h>
00030
00031 #include <stdlib.h>
00032
00033 enum {
00034 RDB_ERROR = -1,
00035 RDB_UNBUFFERED = 1
00036 };
00037
00038 typedef struct {
00039 char *name;
00040 int compc;
00041 struct RDB_attr *compv;
00042 } RDB_possrep;
00043
00044 enum _RDB_obj_kind {
00045 RDB_OB_INITIAL,
00046 RDB_OB_BOOL,
00047 RDB_OB_INT,
00048 RDB_OB_FLOAT,
00049 RDB_OB_BIN,
00050 RDB_OB_TABLE,
00051 RDB_OB_TUPLE,
00052 RDB_OB_ARRAY
00053 };
00054
00055 typedef struct {
00057 int strc;
00059 char **strv;
00060 } RDB_string_vec;
00061
00062 typedef struct RDB_expression RDB_expression;
00063
00064 typedef struct RDB_expr_list {
00065 RDB_expression *firstp;
00066 RDB_expression *lastp;
00067 struct RDB_expr_list *nextp;
00068 } RDB_expr_list;
00069
00074 typedef struct RDB_object {
00075
00076 struct RDB_type *typ;
00077 enum _RDB_obj_kind kind;
00078 union {
00079 RDB_bool bool_val;
00080 RDB_int int_val;
00081 RDB_float float_val;
00082 struct {
00083 void *datap;
00084 size_t len;
00085 } bin;
00086 struct {
00087 RDB_bool is_user;
00088 RDB_bool is_persistent;
00089 char *name;
00090
00091
00092
00093
00094
00095 int keyc;
00096 RDB_string_vec *keyv;
00097
00098
00099 RDB_expression *exp;
00100
00101 struct RDB_stored_table *stp;
00102 } tb;
00103 RDB_hashtable tpl_tab;
00104 struct {
00105 struct RDB_expression *texp;
00106 struct RDB_transaction *txp;
00107 struct RDB_qresult *qrp;
00108
00109
00110 RDB_int pos;
00111
00112 RDB_int length;
00113
00114
00115 int elemc;
00116 struct RDB_object *elemv;
00117
00118
00119 struct RDB_object *tplp;
00120 } arr;
00121 } var;
00122
00123 struct RDB_type *store_typ;
00124 } RDB_object;
00125
00126 typedef struct {
00127 RDB_bool error_active;
00128 RDB_object error;
00129 RDB_hashmap pmap;
00130 } RDB_exec_context;
00131
00132 typedef int RDB_ro_op_func(const char *name, int argc, RDB_object *argv[],
00133 const void *iargp, size_t iarglen, RDB_exec_context *,
00134 struct RDB_transaction *txp,
00135 RDB_object *retvalp);
00136
00137
00138 enum _RDB_tp_kind {
00139 RDB_TP_SCALAR,
00140 RDB_TP_TUPLE,
00141 RDB_TP_RELATION,
00142 RDB_TP_ARRAY
00143 };
00144
00145 typedef struct RDB_type {
00146
00147 char *name;
00148 enum _RDB_tp_kind kind;
00149
00150
00151 RDB_ro_op_func *comparep;
00152 size_t compare_iarglen;
00153 void *compare_iargp;
00154
00155 RDB_int ireplen;
00156
00157 union {
00158 struct RDB_type *basetyp;
00159 struct {
00160 int attrc;
00161 struct RDB_attr *attrv;
00162 } tuple;
00163 struct {
00164 int repc;
00165 RDB_possrep *repv;
00166 RDB_bool builtin;
00167
00168
00169 RDB_bool sysimpl;
00170
00171
00172
00173 struct RDB_type *arep;
00174
00175 RDB_expression *constraintp;
00176 } scalar;
00177 } var;
00178 } RDB_type;
00179
00180 #if defined (_WIN32) && !defined (NO_DLL_IMPORT)
00181 #define _RDB_EXTERN_VAR __declspec(dllimport)
00182 #else
00183 #define _RDB_EXTERN_VAR extern
00184 #endif
00185
00186
00187
00188
00189 _RDB_EXTERN_VAR RDB_type RDB_BOOLEAN;
00190 _RDB_EXTERN_VAR RDB_type RDB_INTEGER;
00191 _RDB_EXTERN_VAR RDB_type RDB_FLOAT;
00192 _RDB_EXTERN_VAR RDB_type RDB_STRING;
00193 _RDB_EXTERN_VAR RDB_type RDB_BINARY;
00194
00195
00196
00197
00198 _RDB_EXTERN_VAR RDB_type RDB_NO_RUNNING_TX_ERROR;
00199 _RDB_EXTERN_VAR RDB_type RDB_INVALID_ARGUMENT_ERROR;
00200 _RDB_EXTERN_VAR RDB_type RDB_TYPE_MISMATCH_ERROR;
00201 _RDB_EXTERN_VAR RDB_type RDB_NOT_FOUND_ERROR;
00202 _RDB_EXTERN_VAR RDB_type RDB_OPERATOR_NOT_FOUND_ERROR;
00203 _RDB_EXTERN_VAR RDB_type RDB_NAME_ERROR;
00204 _RDB_EXTERN_VAR RDB_type RDB_ELEMENT_EXISTS_ERROR;
00205 _RDB_EXTERN_VAR RDB_type RDB_TYPE_CONSTRAINT_VIOLATION_ERROR;
00206 _RDB_EXTERN_VAR RDB_type RDB_KEY_VIOLATION_ERROR;
00207 _RDB_EXTERN_VAR RDB_type RDB_PREDICATE_VIOLATION_ERROR;
00208 _RDB_EXTERN_VAR RDB_type RDB_AGGREGATE_UNDEFINED_ERROR;
00209 _RDB_EXTERN_VAR RDB_type RDB_VERSION_MISMATCH_ERROR;
00210 _RDB_EXTERN_VAR RDB_type RDB_NOT_SUPPORTED_ERROR;
00211
00212 _RDB_EXTERN_VAR RDB_type RDB_NO_MEMORY_ERROR;
00213 _RDB_EXTERN_VAR RDB_type RDB_LOCK_NOT_GRANTED_ERROR;
00214 _RDB_EXTERN_VAR RDB_type RDB_DEADLOCK_ERROR;
00215 _RDB_EXTERN_VAR RDB_type RDB_RESOURCE_NOT_FOUND_ERROR;
00216 _RDB_EXTERN_VAR RDB_type RDB_INTERNAL_ERROR;
00217 _RDB_EXTERN_VAR RDB_type RDB_FATAL_ERROR;
00218 _RDB_EXTERN_VAR RDB_type RDB_SYSTEM_ERROR;
00219
00220 _RDB_EXTERN_VAR RDB_type RDB_SYNTAX_ERROR;
00221
00222 typedef struct {
00223 char *name;
00224 RDB_expression *exp;
00225 } RDB_virtual_attr;
00226
00227 typedef struct {
00228 char *from;
00229 char *to;
00230 } RDB_renaming;
00231
00232 typedef struct {
00233 int attrc;
00234 char **attrv;
00235 char *attrname;
00236 } RDB_wrapping;
00237
00238 typedef struct {
00240 char *attrname;
00242 RDB_bool asc;
00243 } RDB_seq_item;
00244
00245 typedef struct RDB_database RDB_database;
00246
00247 typedef struct RDB_transaction {
00248
00249 RDB_database *dbp;
00250 RDB_environment *envp;
00251 DB_TXN *txid;
00252 void *user_data;
00253 struct RDB_transaction *parentp;
00254 struct RDB_rmlink *delrmp;
00255 struct RDB_ixlink *delixp;
00256 } RDB_transaction;
00257
00258 typedef RDB_object *RDB_getobjfn(const char *, void *);
00259
00260 typedef RDB_type *RDB_gettypefn(const char *, void *);
00261
00262 char *
00263 RDB_db_name(RDB_database *dbp);
00264
00265 RDB_environment *
00266 RDB_db_env(RDB_database *);
00267
00268 RDB_database *
00269 RDB_create_db_from_env(const char *name, RDB_environment *envp,
00270 RDB_exec_context *);
00271
00272 RDB_database *
00273 RDB_get_db_from_env(const char *name, RDB_environment *, RDB_exec_context *);
00274
00275 int
00276 RDB_drop_db(RDB_database *, RDB_exec_context *);
00277
00278 int
00279 RDB_get_dbs(RDB_environment *, RDB_object *, RDB_exec_context *);
00280
00281 typedef struct RDB_attr {
00283 char *name;
00284
00286 RDB_type *typ;
00287
00292 RDB_object *defaultp;
00293
00299 int options;
00300 } RDB_attr;
00301
00302 RDB_object *
00303 RDB_create_table(const char *name,
00304 int attrc, const RDB_attr attrv[],
00305 int keyc, const RDB_string_vec keyv[],
00306 RDB_exec_context *, RDB_transaction *);
00307
00308 RDB_object *
00309 RDB_create_table_from_type(const char *name,
00310 RDB_type *reltyp,
00311 int keyc, const RDB_string_vec keyv[],
00312 RDB_exec_context *, RDB_transaction *);
00313
00314 int
00315 RDB_init_table(RDB_object *tbp, const char *name,
00316 int attrc, const RDB_attr attrv[],
00317 int keyc, const RDB_string_vec keyv[],
00318 RDB_exec_context *ecp);
00319
00320 int
00321 RDB_init_table_from_type(RDB_object *tbp, const char *name, RDB_type *reltyp,
00322 int keyc, const RDB_string_vec keyv[], RDB_exec_context *);
00323
00324 RDB_object *
00325 RDB_get_table(const char *name, RDB_exec_context *, RDB_transaction *);
00326
00327 int
00328 RDB_drop_table(RDB_object *tbp, RDB_exec_context *, RDB_transaction *);
00329
00330 int
00331 RDB_table_keys(RDB_object *, RDB_exec_context *, RDB_string_vec **keyvp);
00332
00333 char *
00334 RDB_table_name(const RDB_object *);
00335
00336 int
00337 RDB_set_table_name(RDB_object *tbp, const char *name, RDB_exec_context *,
00338 RDB_transaction *);
00339
00340 int
00341 RDB_add_table(RDB_object *, RDB_exec_context *, RDB_transaction *);
00342
00343 typedef struct {
00344 char *name;
00345 RDB_expression *exp;
00346 } RDB_attr_update;
00347
00348 int
00349 RDB_insert(RDB_object *tbp, const RDB_object *tplp, RDB_exec_context *,
00350 RDB_transaction *);
00351
00352 RDB_int
00353 RDB_update(RDB_object *, RDB_expression *, int attrc,
00354 const RDB_attr_update updv[], RDB_exec_context *, RDB_transaction *);
00355
00356 RDB_int
00357 RDB_delete(RDB_object *tbp, RDB_expression *condp, RDB_exec_context *,
00358 RDB_transaction *);
00359
00360 int
00361 RDB_copy_table(RDB_object *dstp, RDB_object *srcp, RDB_exec_context *,
00362 RDB_transaction *);
00363
00364 typedef struct {
00365 RDB_object *tbp;
00366 RDB_object *objp;
00367 } RDB_ma_insert;
00368
00369 typedef struct {
00370 RDB_object *tbp;
00371 RDB_expression *condp;
00372 int updc;
00373 RDB_attr_update *updv;
00374 } RDB_ma_update;
00375
00376 typedef struct {
00377 RDB_object *tbp;
00378 RDB_expression *condp;
00379 } RDB_ma_delete;
00380
00381 typedef struct {
00382 RDB_object *dstp;
00383 RDB_object *srcp;
00384 } RDB_ma_copy;
00385
00386 RDB_int
00387 RDB_multi_assign(int insc, const RDB_ma_insert insv[],
00388 int updc, const RDB_ma_update updv[],
00389 int delc, const RDB_ma_delete delv[],
00390 int copyc, const RDB_ma_copy copyv[],
00391 RDB_exec_context *, RDB_transaction *);
00392
00393 int
00394 RDB_max(RDB_object *tbp, const char *attrname, RDB_exec_context *,
00395 RDB_transaction *, RDB_object *resultp);
00396
00397 int
00398 RDB_min(RDB_object *tbp, const char *attrname, RDB_exec_context *,
00399 RDB_transaction *, RDB_object *resultp);
00400
00401 int
00402 RDB_all(RDB_object *tbp, const char *attrname, RDB_exec_context *,
00403 RDB_transaction *, RDB_bool *resultp);
00404
00405 int
00406 RDB_any(RDB_object *tbp, const char *attrname, RDB_exec_context *,
00407 RDB_transaction *, RDB_bool *resultp);
00408
00409 int
00410 RDB_sum(RDB_object *tbp, const char *attrname, RDB_exec_context *,
00411 RDB_transaction *, RDB_object *resultp);
00412
00413 int
00414 RDB_avg(RDB_object *tbp, const char *attrname, RDB_exec_context *,
00415 RDB_transaction *, RDB_float *resultp);
00416
00417 int
00418 RDB_table_contains(RDB_object *tbp, const RDB_object *tplp, RDB_exec_context *,
00419 RDB_transaction *, RDB_bool *resultp);
00420
00421 int
00422 RDB_subset(RDB_object *tb1p, RDB_object *tb2p, RDB_exec_context *,
00423 RDB_transaction *, RDB_bool *resultp);
00424
00425 int
00426 RDB_extract_tuple(RDB_object *, RDB_exec_context *, RDB_transaction *,
00427 RDB_object *);
00428
00429 RDB_bool
00430 RDB_table_is_persistent(const RDB_object *);
00431
00432 RDB_bool
00433 RDB_table_is_real(const RDB_object *);
00434
00435 int
00436 RDB_table_is_empty(RDB_object *, RDB_exec_context *, RDB_transaction *,
00437 RDB_bool *resultp);
00438
00439 RDB_int
00440 RDB_cardinality(RDB_object *tbp, RDB_exec_context *, RDB_transaction *);
00441
00442 RDB_object *
00443 RDB_expr_to_vtable(RDB_expression *, RDB_exec_context *, RDB_transaction *);
00444
00445 int
00446 RDB_create_table_index(const char *name, RDB_object *tbp, int idxcompc,
00447 const RDB_seq_item idxcompv[], int flags, RDB_exec_context *,
00448 RDB_transaction *);
00449
00450 int
00451 RDB_drop_table_index(const char *name, RDB_exec_context *, RDB_transaction *);
00452
00453 int
00454 RDB_define_type(const char *name, int repc, const RDB_possrep repv[],
00455 RDB_expression *constraintp, RDB_exec_context *,
00456 RDB_transaction *);
00457
00458 RDB_type *
00459 RDB_get_type(const char *name, RDB_exec_context *, RDB_transaction *);
00460
00461 RDB_type *
00462 RDB_dup_nonscalar_type(RDB_type *typ, RDB_exec_context *);
00463
00464 RDB_bool
00465 RDB_type_is_numeric(const RDB_type *);
00466
00467 RDB_type *
00468 RDB_create_tuple_type(int attrc, const RDB_attr attrv[],
00469 RDB_exec_context *);
00470
00471 RDB_type *
00472 RDB_create_relation_type(int attrc, const RDB_attr attrv[],
00473 RDB_exec_context *);
00474
00475 RDB_type *
00476 RDB_create_relation_type_from_base(RDB_type *, RDB_exec_context *);
00477
00478 RDB_type *
00479 RDB_create_array_type(RDB_type *, RDB_exec_context *);
00480
00481 int
00482 RDB_drop_type(RDB_type *, RDB_exec_context *, RDB_transaction *);
00483
00484 char *
00485 RDB_type_name(const RDB_type *);
00486
00487 RDB_bool
00488 RDB_type_is_scalar(const RDB_type *);
00489
00490 RDB_bool
00491 RDB_type_is_relation(const RDB_type *);
00492
00493 RDB_bool
00494 RDB_type_is_tuple(const RDB_type *);
00495
00496 RDB_attr *
00497 RDB_type_attrs(RDB_type *, int *);
00498
00499 RDB_bool
00500 RDB_type_equals(const RDB_type *, const RDB_type *);
00501
00502 RDB_type *
00503 RDB_obj_type(const RDB_object *);
00504
00505 void
00506 RDB_obj_set_typeinfo(RDB_object *, RDB_type *);
00507
00508 RDB_type *
00509 RDB_type_attr_type(const RDB_type *, const char *);
00510
00523 #define RDB_tx_db(txp) ((txp)->dbp)
00524
00534 #define RDB_tx_env(txp) ((txp)->envp)
00535
00538 RDB_bool
00539 RDB_tx_is_running(RDB_transaction *);
00540
00541 int
00542 RDB_begin_tx(RDB_exec_context *, RDB_transaction *, RDB_database *dbp,
00543 RDB_transaction *parent);
00544
00545 int
00546 RDB_commit(RDB_exec_context *, RDB_transaction *);
00547
00548 int
00549 RDB_rollback(RDB_exec_context *, RDB_transaction *);
00550
00551 int
00552 RDB_tuple_set(RDB_object *, const char *name, const RDB_object *,
00553 RDB_exec_context *);
00554
00555 int
00556 RDB_tuple_set_bool(RDB_object *, const char *name, RDB_bool val,
00557 RDB_exec_context *);
00558
00559 int
00560 RDB_tuple_set_int(RDB_object *, const char *name, RDB_int val,
00561 RDB_exec_context *);
00562
00563 int
00564 RDB_tuple_set_float(RDB_object *, const char *name, RDB_float val,
00565 RDB_exec_context *);
00566
00567 int
00568 RDB_tuple_set_string(RDB_object *, const char *name, const char *,
00569 RDB_exec_context *);
00570
00571 RDB_object *
00572 RDB_tuple_get(const RDB_object *, const char *name);
00573
00574 RDB_bool
00575 RDB_tuple_get_bool(const RDB_object *, const char *name);
00576
00577 RDB_int
00578 RDB_tuple_get_int(const RDB_object *, const char *name);
00579
00580 RDB_float
00581 RDB_tuple_get_float(const RDB_object *, const char *name);
00582
00583 RDB_int
00584 RDB_tuple_size(const RDB_object *);
00585
00586 void
00587 RDB_tuple_attr_names(const RDB_object *, char **namev);
00588
00589 char *
00590 RDB_tuple_get_string(const RDB_object *, const char *name);
00591
00592 int
00593 RDB_project_tuple(const RDB_object *, int attrc, char *attrv[],
00594 RDB_exec_context *, RDB_object *restplp);
00595
00596 int
00597 RDB_remove_tuple(const RDB_object *, int attrc, char *attrv[],
00598 RDB_exec_context *, RDB_object *restplp);
00599
00600 int
00601 RDB_extend_tuple(RDB_object *, int attrc, const RDB_virtual_attr attrv[],
00602 RDB_exec_context *, RDB_transaction *);
00603
00604 int
00605 RDB_add_tuple(RDB_object *, const RDB_object *,
00606 RDB_exec_context *, RDB_transaction *);
00607
00608 int
00609 RDB_join_tuples(const RDB_object *, const RDB_object *, RDB_exec_context *,
00610 RDB_transaction *, RDB_object *);
00611
00612 int
00613 RDB_rename_tuple(const RDB_object *, int renc, const RDB_renaming renv[],
00614 RDB_exec_context *, RDB_object *restplp);
00615
00616 int
00617 RDB_wrap_tuple(const RDB_object *tplp, int wrapc, const RDB_wrapping wrapv[],
00618 RDB_exec_context *, RDB_object *restplp);
00619
00620 int
00621 RDB_unwrap_tuple(const RDB_object *tplp, int attrc, char *attrv[],
00622 RDB_exec_context *, RDB_object *restplp);
00623
00624 int
00625 RDB_table_to_array(RDB_object *arrp, RDB_object *,
00626 int seqitc, const RDB_seq_item seqitv[], int flags,
00627 RDB_exec_context *, RDB_transaction *);
00628
00629 RDB_object *
00630 RDB_array_get(RDB_object *, RDB_int idx, RDB_exec_context *);
00631
00632 int
00633 RDB_array_set(RDB_object *, RDB_int idx, const RDB_object *tplp,
00634 RDB_exec_context *);
00635
00636 RDB_int
00637 RDB_array_length(RDB_object *, RDB_exec_context *);
00638
00639 int
00640 RDB_set_array_length(RDB_object *arrp, RDB_int len, RDB_exec_context *);
00641
00642 int
00643 RDB_obj_equals(const RDB_object *, const RDB_object *, RDB_exec_context *,
00644 RDB_transaction *, RDB_bool *);
00645
00646 int
00647 RDB_copy_obj(RDB_object *dstvalp, const RDB_object *srcvalp,
00648 RDB_exec_context *);
00649
00650 void
00651 RDB_init_obj(RDB_object *);
00652
00653 int
00654 RDB_destroy_obj(RDB_object *, RDB_exec_context *);
00655
00656 void
00657 RDB_bool_to_obj(RDB_object *, RDB_bool v);
00658
00659 void
00660 RDB_int_to_obj(RDB_object *, RDB_int v);
00661
00662 void
00663 RDB_float_to_obj(RDB_object *, RDB_float v);
00664
00665 int
00666 RDB_string_to_obj(RDB_object *, const char *str, RDB_exec_context *);
00667
00668 int
00669 RDB_obj_to_string(RDB_object *dstp, const RDB_object *srcp,
00670 RDB_exec_context *);
00671
00672 int
00673 RDB_append_string(RDB_object *, const char *, RDB_exec_context *);
00674
00675 int
00676 RDB_obj_comp(const RDB_object *, const char *compname,
00677 RDB_object *comp, RDB_exec_context *, RDB_transaction *);
00678
00679 int
00680 RDB_obj_set_comp(RDB_object *, const char *compname,
00681 const RDB_object *comp, RDB_exec_context *,
00682 RDB_transaction *);
00683
00684 RDB_bool
00685 RDB_obj_bool(const RDB_object *);
00686
00687 RDB_int
00688 RDB_obj_int(const RDB_object *);
00689
00690 RDB_float
00691 RDB_obj_float(const RDB_object *);
00692
00693 char *
00694 RDB_obj_string(const RDB_object *);
00695
00696 int
00697 RDB_binary_set(RDB_object *, size_t pos, const void *srcp, size_t len,
00698 RDB_exec_context *);
00699
00700 int
00701 RDB_binary_get(const RDB_object *, size_t pos, size_t len,
00702 RDB_exec_context *, void **pp, size_t *alenp);
00703
00704 size_t
00705 RDB_binary_length(const RDB_object *);
00706
00707 void
00708 _RDB_set_obj_type(RDB_object *, RDB_type *typ);
00709
00710 RDB_bool
00711 RDB_expr_is_const(const RDB_expression *);
00712
00713 RDB_expression *
00714 RDB_bool_to_expr(RDB_bool, RDB_exec_context *);
00715
00716 RDB_expression *
00717 RDB_int_to_expr(RDB_int, RDB_exec_context *);
00718
00719 RDB_expression *
00720 RDB_float_to_expr(RDB_float, RDB_exec_context *);
00721
00722 RDB_expression *
00723 RDB_string_to_expr(const char *, RDB_exec_context *);
00724
00725 RDB_expression *
00726 RDB_obj_to_expr(const RDB_object *, RDB_exec_context *);
00727
00728 RDB_expression *
00729 RDB_table_ref(RDB_object *tbp, RDB_exec_context *);
00730
00731 RDB_expression *
00732 RDB_var_ref(const char *varname, RDB_exec_context *);
00733
00734 RDB_expression *
00735 RDB_eq(RDB_expression *, RDB_expression *, RDB_exec_context *);
00736
00737 RDB_expression *
00738 RDB_tuple_attr(RDB_expression *, const char *attrname, RDB_exec_context *);
00739
00740 RDB_expression *
00741 RDB_expr_comp(RDB_expression *, const char *, RDB_exec_context *);
00742
00743 RDB_expression *
00744 RDB_ro_op(const char *opname, RDB_exec_context *);
00745
00746 void
00747 RDB_add_arg(RDB_expression *exp, RDB_expression *argp);
00748
00749 RDB_object *
00750 RDB_expr_obj(RDB_expression *exp);
00751
00752 void
00753 RDB_init_expr_list(RDB_expr_list *explistp);
00754
00755 int
00756 RDB_destroy_expr_list(RDB_expr_list *, RDB_exec_context *);
00757
00758 RDB_int
00759 RDB_expr_list_length(const RDB_expr_list *);
00760
00761 void
00762 RDB_expr_list_append(RDB_expr_list *, RDB_expression *);
00763
00764 void
00765 RDB_join_expr_lists(RDB_expr_list *, RDB_expr_list *);
00766
00767 int
00768 RDB_evaluate(RDB_expression *, RDB_getobjfn *, void *,
00769 RDB_exec_context *, RDB_transaction *, RDB_object *);
00770
00771 RDB_type *
00772 RDB_expr_type(RDB_expression *, RDB_gettypefn *, void *,
00773 RDB_exec_context *, RDB_transaction *);
00774
00775 int
00776 RDB_evaluate_bool(RDB_expression *, RDB_getobjfn *getfnp, void *getdata,
00777 RDB_exec_context *, RDB_transaction *, RDB_bool *);
00778
00779 int
00780 RDB_drop_expr(RDB_expression *, RDB_exec_context *);
00781
00782 RDB_expression *
00783 RDB_expr_resolve_varnames(const RDB_expression *, RDB_getobjfn *,
00784 void *, RDB_exec_context *, RDB_transaction *);
00785
00786 int
00787 RDB_create_ro_op(const char *name, int argc, RDB_type *argtv[], RDB_type *rtyp,
00788 const char *libname, const char *symname,
00789 const void *iargp, size_t iarglen,
00790 RDB_exec_context *, RDB_transaction *);
00791
00792 int
00793 RDB_create_update_op(const char *name, int argc, RDB_type *argtv[],
00794 RDB_bool upd[], const char *libname, const char *symname,
00795 const void *iargp, size_t iarglen,
00796 RDB_exec_context *, RDB_transaction *);
00797
00798 int
00799 RDB_call_ro_op(const char *name, int argc, RDB_object *argv[],
00800 RDB_exec_context *, RDB_transaction *, RDB_object *retvalp);
00801
00802 int
00803 RDB_call_update_op(const char *name, int argc, RDB_object *argv[],
00804 RDB_exec_context *, RDB_transaction *);
00805
00806 int
00807 RDB_drop_op(const char *name, RDB_exec_context *, RDB_transaction *);
00808
00809 int
00810 RDB_create_constraint(const char *name, RDB_expression *,
00811 RDB_exec_context *, RDB_transaction *);
00812
00813 int
00814 RDB_drop_constraint(const char *name, RDB_exec_context *,
00815 RDB_transaction *);
00816
00817 void
00818 RDB_init_exec_context(RDB_exec_context *);
00819
00820 void
00821 RDB_destroy_exec_context(RDB_exec_context *);
00822
00823 RDB_object *
00824 RDB_raise_err(RDB_exec_context *);
00825
00826 RDB_object *
00827 RDB_get_err(RDB_exec_context *);
00828
00829 void
00830 RDB_clear_err(RDB_exec_context *);
00831
00832 RDB_object *
00833 RDB_raise_no_memory(RDB_exec_context *);
00834
00835 RDB_object *
00836 RDB_raise_invalid_argument(const char *, RDB_exec_context *);
00837
00838 RDB_object *
00839 RDB_raise_no_running_tx(RDB_exec_context *);
00840
00841 RDB_object *
00842 RDB_raise_not_found(const char *, RDB_exec_context *);
00843
00844 RDB_object *
00845 RDB_raise_type_mismatch(const char *, RDB_exec_context *);
00846
00847 RDB_object *
00848 RDB_raise_operator_not_found(const char *, RDB_exec_context *);
00849
00850 RDB_object *
00851 RDB_raise_type_constraint_violation(const char *, RDB_exec_context *);
00852
00853 RDB_object *
00854 RDB_raise_element_exists(const char *info, RDB_exec_context *);
00855
00856 RDB_object *
00857 RDB_raise_not_supported(const char *info, RDB_exec_context *);
00858
00859 RDB_object *
00860 RDB_raise_name(const char *info, RDB_exec_context *);
00861
00862 RDB_object *
00863 RDB_raise_predicate_violation(const char *info, RDB_exec_context *);
00864
00865 RDB_object *
00866 RDB_raise_system(const char *info, RDB_exec_context *);
00867
00868 RDB_object *
00869 RDB_raise_resource_not_found(const char *info, RDB_exec_context *);
00870
00871 RDB_object *
00872 RDB_raise_internal(const char *info, RDB_exec_context *);
00873
00874 RDB_object *
00875 RDB_raise_lock_not_granted(RDB_exec_context *);
00876
00877 RDB_object *
00878 RDB_raise_aggregate_undefined(RDB_exec_context *);
00879
00880 RDB_object *
00881 RDB_raise_version_mismatch(RDB_exec_context *);
00882
00883 RDB_object *
00884 RDB_raise_syntax(const char *, RDB_exec_context *);
00885
00886 int
00887 RDB_ec_set_property(RDB_exec_context *, const char *name, void *);
00888
00889 void *
00890 RDB_ec_get_property(RDB_exec_context *, const char *name);
00891
00892 void *
00893 RDB_alloc(size_t, RDB_exec_context *);
00894
00895 void *
00896 RDB_realloc(void *, size_t, RDB_exec_context *);
00897
00898 void
00899 RDB_free(void *);
00900
00901 int
00902 RDB_major_version(void);
00903
00904 int
00905 RDB_minor_version(void);
00906
00907 #endif