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