26 #include <rec/dbdefs.h> 28 #include <gen/hashmap.h> 29 #include <gen/hashtable.h> 30 #include <gen/types.h> 32 #include <obj/object.h> 33 #include <obj/excontext.h> 34 #include <obj/expression.h> 35 #include <obj/builtintypes.h> 36 #include <obj/tuple.h> 37 #include <obj/array.h> 38 #include <obj/operator.h> 39 #include <obj/objmatch.h> 43 #define RDB_THE_PREFIX "the_" 45 #define RDB_TREAT_PREFIX "treat_as_" 46 #define RDB_TREAT_PREFIX_LEN (sizeof(RDB_TREAT_PREFIX) - 1) 48 typedef struct RDB_expression RDB_expression;
69 typedef struct RDB_qresult RDB_qresult;
71 #ifndef DOXYGEN_SHOULD_SKIP_THIS 73 typedef struct RDB_database RDB_database;
75 typedef struct RDB_transaction RDB_transaction;
77 typedef struct RDB_transaction {
80 RDB_environment *envp;
81 RDB_rec_transaction *tx;
83 struct RDB_transaction *parentp;
90 typedef int RDB_apply_constraint_fn(RDB_expression *,
const char *,
91 RDB_exec_context *, RDB_transaction *);
109 typedef RDB_object *RDB_getobjfn(
const char *,
void *);
139 RDB_expression *condp;
149 RDB_expression *condp;
175 RDB_TYPE_ORDERED = 1,
204 RDB_get_dbs(RDB_environment *, RDB_object *, RDB_exec_context *);
209 int,
const RDB_string_vec[],
210 RDB_exec_context *, RDB_transaction *);
215 int keyc,
const RDB_string_vec[],
217 RDB_exec_context *, RDB_transaction *);
222 int,
const RDB_string_vec[],
227 int,
const RDB_string_vec keyv[],
234 int,
const RDB_string_vec[],
235 RDB_exec_context *, RDB_transaction *);
238 RDB_create_public_table_from_type(
const char *,
240 int,
const RDB_string_vec[],
241 RDB_exec_context *, RDB_transaction *);
245 RDB_exec_context *, RDB_transaction *);
248 RDB_get_table(
const char *, RDB_exec_context *, RDB_transaction *);
251 RDB_drop_table(RDB_object *, RDB_exec_context *, RDB_transaction *);
257 RDB_table_keys(RDB_object *, RDB_exec_context *, RDB_string_vec **);
267 RDB_add_table(RDB_object *, RDB_database *, RDB_exec_context *, RDB_transaction *);
270 RDB_insert(RDB_object *tbp,
const RDB_object *tplp, RDB_exec_context *,
274 RDB_update(RDB_object *, RDB_expression *,
int attrc,
278 RDB_delete(RDB_object *tbp, RDB_expression *condp, RDB_exec_context *,
282 RDB_copy_table(RDB_object *dstp, RDB_object *srcp, RDB_exec_context *,
295 RDB_getobjfn *,
void *,
296 RDB_exec_context *, RDB_transaction *);
304 RDB_apply_constraint_fn *,
305 RDB_getobjfn *,
void *,
306 RDB_exec_context *, RDB_transaction *);
309 RDB_max(RDB_object *, RDB_expression *, RDB_exec_context *,
310 RDB_transaction *, RDB_object *);
313 RDB_min(RDB_object *tbp, RDB_expression *, RDB_exec_context *,
314 RDB_transaction *, RDB_object *);
317 RDB_all(RDB_object *tbp, RDB_expression *, RDB_exec_context *,
318 RDB_transaction *, RDB_bool *);
321 RDB_any(RDB_object *tbp, RDB_expression *, RDB_exec_context *,
322 RDB_transaction *, RDB_bool *);
325 RDB_sum(RDB_object *, RDB_expression *, RDB_exec_context *,
326 RDB_transaction *, RDB_object *);
329 RDB_avg(RDB_object *, RDB_expression *, RDB_exec_context *,
330 RDB_transaction *, RDB_float *);
334 RDB_transaction *, RDB_bool *);
337 RDB_subset(RDB_object *tb1p, RDB_object *tb2p, RDB_exec_context *,
338 RDB_transaction *, RDB_bool *);
342 RDB_transaction *, RDB_bool *);
365 RDB_cardinality(RDB_object *tbp, RDB_exec_context *, RDB_transaction *);
371 RDB_vtable_expr(
const RDB_object *);
380 RDB_expr_is_serial(
const RDB_expression *);
384 const RDB_seq_item idxcompv[],
int flags, RDB_exec_context *,
391 RDB_infer_keys(RDB_expression *, RDB_getobjfn *,
void *,
392 RDB_environment *, RDB_exec_context *, RDB_transaction *,
393 RDB_string_vec **, RDB_bool *);
397 RDB_expression *, RDB_expression *,
int,
398 RDB_exec_context *, RDB_transaction *);
402 RDB_expression *, RDB_expression *,
int, RDB_exec_context *,
406 RDB_get_type(
const char *name, RDB_exec_context *, RDB_transaction *);
409 RDB_drop_type(
const char *name, RDB_exec_context *, RDB_transaction *);
412 RDB_next_attr_sorted(
const RDB_type *,
const char *);
415 RDB_type_attr_type(
const RDB_type *,
const char *);
427 RDB_begin_tx(RDB_exec_context *, RDB_transaction *, RDB_database *dbp,
428 RDB_transaction *parent);
431 RDB_commit(RDB_exec_context *, RDB_transaction *);
440 RDB_handle_err(RDB_exec_context *, RDB_transaction *);
444 RDB_exec_context *, RDB_transaction *, RDB_bool *);
452 RDB_getobjfn *,
void *, RDB_exec_context *, RDB_transaction *);
455 RDB_add_tuple(RDB_object *,
const RDB_object *,
456 RDB_exec_context *, RDB_transaction *);
459 RDB_union_tuples(
const RDB_object *,
const RDB_object *, RDB_exec_context *,
460 RDB_transaction *, RDB_object *);
464 RDB_exec_context *, RDB_object *restplp);
468 RDB_exec_context *, RDB_object *restplp);
473 RDB_exec_context *, RDB_transaction *);
476 RDB_table_iterator(RDB_object *,
int,
const RDB_seq_item[],
477 RDB_exec_context *, RDB_transaction *);
480 RDB_del_table_iterator(RDB_qresult *, RDB_exec_context *, RDB_transaction *);
483 RDB_next_tuple(RDB_qresult *, RDB_object *, RDB_exec_context *,
488 RDB_object *comp, RDB_environment *,
489 RDB_exec_context *, RDB_transaction *);
493 const RDB_object *comp, RDB_environment *,
494 RDB_exec_context *, RDB_transaction *);
497 RDB_evaluate(RDB_expression *, RDB_getobjfn *,
void *, RDB_environment *,
498 RDB_exec_context *, RDB_transaction *, RDB_object *);
502 RDB_environment *, RDB_exec_context *, RDB_transaction *);
506 RDB_exec_context *, RDB_transaction *, RDB_bool *);
509 RDB_evaluate_bool(RDB_expression *, RDB_getobjfn *getfnp,
void *getdata,
510 RDB_environment *, RDB_exec_context *, RDB_transaction *, RDB_bool *);
514 RDB_expression *, RDB_exec_context *);
518 void *, RDB_exec_context *, RDB_transaction *);
522 const char *,
const char *,
524 RDB_exec_context *, RDB_transaction *);
529 const char *,
const char *,
531 RDB_exec_context *, RDB_transaction *);
535 const char *,
const char *,
537 RDB_exec_context *, RDB_transaction *);
540 RDB_create_update_op_version(
const char *,
const char *,
int,
RDB_parameter[],
541 const char *,
const char *,
543 RDB_exec_context *, RDB_transaction *);
547 RDB_environment *, RDB_exec_context *, RDB_transaction *);
551 RDB_environment *, RDB_exec_context *, RDB_transaction *);
555 RDB_exec_context *, RDB_transaction *, RDB_object *);
559 RDB_exec_context *, RDB_transaction *, RDB_object *);
563 RDB_exec_context *, RDB_transaction *);
567 RDB_exec_context *, RDB_transaction *);
570 RDB_drop_op(
const char *, RDB_exec_context *, RDB_transaction *);
573 RDB_drop_op_version(
const char *,
const char *,
574 RDB_exec_context *, RDB_transaction *);
578 RDB_ro_op_func *, RDB_exec_context *);
582 RDB_exec_context *, RDB_transaction *);
589 RDB_net_form_to_tuple(RDB_object *,
const char *, RDB_exec_context *);
592 RDB_net_hescape(RDB_object *,
const char *, RDB_exec_context *);
595 RDB_obj_to_bin(RDB_object *,
const RDB_object *, RDB_exec_context *);
598 RDB_bin_to_obj(
const RDB_object *, RDB_object *, RDB_exec_context *);
RDB_bool asc
Definition: rdb.h:62
int RDB_drop_table_by_name(const char *, RDB_exec_context *, RDB_transaction *)
Definition: database.c:1673
int RDB_set_table_name(RDB_object *, const char *, RDB_exec_context *, RDB_transaction *)
Definition: database.c:1705
const char * RDB_db_name(const RDB_database *)
Definition: database.c:43
int RDB_init_table(RDB_object *, const char *, int, const RDB_attr[], int, const RDB_string_vec[], RDB_exec_context *)
Definition: table.c:374
RDB_environment * RDB_db_env(RDB_database *)
Definition: database.c:57
RDB_database * RDB_get_db_from_env(const char *, RDB_environment *, RDB_exec_context *, RDB_transaction *)
Definition: database.c:662
int RDB_drop_table(RDB_object *, RDB_exec_context *, RDB_transaction *)
Definition: database.c:1576
int RDB_table_contains(RDB_object *tbp, const RDB_object *, RDB_exec_context *, RDB_transaction *, RDB_bool *)
Definition: contains.c:51
int RDB_begin_tx(RDB_exec_context *, RDB_transaction *, RDB_database *dbp, RDB_transaction *parent)
Definition: transaction.c:142
RDB_object * RDB_get_table(const char *, RDB_exec_context *, RDB_transaction *)
Definition: database.c:1297
RDB_int RDB_multi_assign(int, const RDB_ma_insert[], int, const RDB_ma_update[], int, const RDB_ma_delete[], int, const RDB_ma_vdelete[], int, const RDB_ma_copy[], RDB_getobjfn *, void *, RDB_exec_context *, RDB_transaction *)
Definition: assign.c:2166
int RDB_obj_property(const RDB_object *, const char *compname, RDB_object *comp, RDB_environment *, RDB_exec_context *, RDB_transaction *)
Definition: objectx.c:721
Definition: operator.h:36
int RDB_set_init_value(RDB_object *, RDB_type *, RDB_environment *, RDB_exec_context *)
Definition: objectx.c:902
int RDB_extend_tuple(RDB_object *, int attrc, const RDB_virtual_attr attrv[], RDB_getobjfn *, void *, RDB_exec_context *, RDB_transaction *)
Definition: tuplex.c:153
int RDB_init_builtin(RDB_exec_context *)
Definition: builtinops.c:1306
int RDB_obj_set_property(RDB_object *, const char *compname, const RDB_object *comp, RDB_environment *, RDB_exec_context *, RDB_transaction *)
Definition: objectx.c:818
int RDB_table_to_array(RDB_object *arrp, RDB_object *, int seqitc, const RDB_seq_item seqitv[], int flags, RDB_exec_context *, RDB_transaction *)
Definition: arrayx.c:130
RDB_object * RDB_create_table_from_type(const char *name, RDB_type *, int keyc, const RDB_string_vec[], int, const RDB_attr[], RDB_exec_context *, RDB_transaction *)
Definition: database.c:1212
RDB_object * RDB_expr_to_vtable(RDB_expression *, RDB_exec_context *, RDB_transaction *)
Definition: vtable.c:76
int RDB_drop_constraint(const char *name, RDB_exec_context *, RDB_transaction *)
Definition: constraint.c:264
char * attrname
Definition: rdb.h:60
int RDB_expr_resolve_varname_expr(RDB_expression **, const char *, RDB_expression *, RDB_exec_context *)
Definition: expression.c:64
int RDB_commit(RDB_exec_context *, RDB_transaction *)
Definition: transaction.c:166
int RDB_create_update_op(const char *, int, RDB_parameter[], const char *, const char *, const char *, RDB_exec_context *, RDB_transaction *)
Definition: uoperator.c:303
RDB_bool RDB_expr_refers(const RDB_expression *, const RDB_object *)
Definition: expressionx.c:194
int RDB_init_table_from_type(RDB_object *tbp, const char *name, RDB_type *reltyp, int keyc, const RDB_string_vec keyv[], int default_attrc, const RDB_attr *default_attrv, RDB_exec_context *ecp)
Definition: table.c:337
RDB_bool RDB_table_is_user(const RDB_object *)
Definition: table.c:632
int RDB_map_public_table(const char *, RDB_expression *, RDB_exec_context *, RDB_transaction *)
Definition: ptable.c:163
int RDB_apply_constraints(int, const RDB_ma_insert[], int, const RDB_ma_update[], int, const RDB_ma_delete[], int, const RDB_ma_vdelete[], int, const RDB_ma_copy[], RDB_apply_constraint_fn *, RDB_getobjfn *, void *, RDB_exec_context *, RDB_transaction *)
Definition: assign.c:2725
int RDB_union_tuples(const RDB_object *, const RDB_object *, RDB_exec_context *, RDB_transaction *, RDB_object *)
Definition: tuplex.c:107
int RDB_call_update_op_by_name(const char *name, int argc, RDB_object *argv[], RDB_exec_context *, RDB_transaction *)
Definition: uoperator.c:762
RDB_expression * RDB_expr_resolve_varnames(RDB_expression *, RDB_getobjfn *, void *, RDB_exec_context *, RDB_transaction *)
Definition: expressionx.c:128
RDB_type * RDB_get_type(const char *name, RDB_exec_context *, RDB_transaction *)
Definition: utype.c:724
int RDB_rollback(RDB_exec_context *, RDB_transaction *)
Definition: transaction.c:211
int RDB_drop_db(RDB_database *, RDB_exec_context *)
Definition: database.c:814
int RDB_call_update_op(RDB_operator *, int argc, RDB_object *[], RDB_exec_context *, RDB_transaction *)
Definition: uoperator.c:786
RDB_bool RDB_is_selector(const RDB_operator *)
Definition: utype.c:610
RDB_attr * RDB_table_attrs(const RDB_object *, int *)
Definition: table.c:732
Definition: transaction.c:22
int RDB_table_is_empty(RDB_object *, RDB_exec_context *, RDB_transaction *, RDB_bool *resultp)
Definition: aggrf.c:804
RDB_int RDB_cardinality(RDB_object *tbp, RDB_exec_context *, RDB_transaction *)
Definition: aggrf.c:860
const char * RDB_table_name(const RDB_object *)
Definition: table.c:434
RDB_operator * RDB_get_update_op(const char *, int, RDB_type *[], RDB_environment *, RDB_exec_context *, RDB_transaction *)
Definition: uoperator.c:579
RDB_int RDB_move_tuples(RDB_object *, RDB_object *, int, RDB_exec_context *, RDB_transaction *)
Definition: table.c:271
int RDB_call_ro_op_by_name_e(const char *, int, RDB_object *[], RDB_environment *, RDB_exec_context *, RDB_transaction *, RDB_object *)
Definition: uoperator.c:450
int RDB_create_constraint(const char *name, RDB_expression *, RDB_exec_context *, RDB_transaction *)
Definition: constraint.c:187
RDB_bool RDB_tx_is_running(RDB_transaction *)
Definition: transaction.c:269
RDB_int RDB_delete(RDB_object *tbp, RDB_expression *condp, RDB_exec_context *, RDB_transaction *)
Definition: assign.c:2702
int RDB_create_ro_op(const char *, int, RDB_parameter[], RDB_type *, const char *, const char *, const char *, RDB_exec_context *, RDB_transaction *)
Definition: uoperator.c:159
int RDB_table_matching_tuple(RDB_object *, const RDB_object *, RDB_exec_context *, RDB_transaction *, RDB_bool *)
Definition: match.c:358
int RDB_create_table_index(const char *name, RDB_object *tbp, int idxcompc, const RDB_seq_item idxcompv[], int flags, RDB_exec_context *, RDB_transaction *)
Definition: table.c:1021
Definition: transaction.c:17
int RDB_wrap_tuple(const RDB_object *tplp, int wrapc, const RDB_wrapping wrapv[], RDB_exec_context *, RDB_object *restplp)
Definition: tuplex.c:246
int RDB_insert(RDB_object *tbp, const RDB_object *tplp, RDB_exec_context *, RDB_transaction *)
Definition: assign.c:2572
int RDB_create_ro_op_version(const char *, const char *, int, RDB_parameter[], RDB_type *, const char *, const char *, const char *, RDB_exec_context *, RDB_transaction *)
Definition: uoperator.c:174
RDB_bool RDB_table_is_real(const RDB_object *)
Definition: table.c:603
int RDB_unwrap_tuple(const RDB_object *tplp, int attrc, char *attrv[], RDB_exec_context *, RDB_object *restplp)
Definition: tuplex.c:324
int RDB_sum(RDB_object *, RDB_expression *, RDB_exec_context *, RDB_transaction *, RDB_object *)
Definition: aggrf.c:547
int RDB_any(RDB_object *tbp, RDB_expression *, RDB_exec_context *, RDB_transaction *, RDB_bool *)
Definition: aggrf.c:171
int RDB_all(RDB_object *tbp, RDB_expression *, RDB_exec_context *, RDB_transaction *, RDB_bool *)
Definition: aggrf.c:55
int RDB_drop_table_index(const char *name, RDB_exec_context *, RDB_transaction *)
Definition: table.c:1130
RDB_operator * RDB_get_update_op_by_args(const char *, int, RDB_object *[], RDB_environment *, RDB_exec_context *, RDB_transaction *)
Definition: uoperator.c:669
int RDB_drop_op(const char *, RDB_exec_context *, RDB_transaction *)
Definition: uoperator.c:816
int RDB_obj_equals(const RDB_object *, const RDB_object *, RDB_exec_context *, RDB_transaction *, RDB_bool *)
Definition: objectx.c:666
RDB_object * RDB_create_table(const char *, int, const RDB_attr[], int, const RDB_string_vec[], RDB_exec_context *, RDB_transaction *)
Definition: database.c:1181
int RDB_subset(RDB_object *tb1p, RDB_object *tb2p, RDB_exec_context *, RDB_transaction *, RDB_bool *)
Definition: table.c:666
int RDB_max(RDB_object *, RDB_expression *, RDB_exec_context *, RDB_transaction *, RDB_object *)
Definition: aggrf.c:287
int RDB_add_table(RDB_object *, RDB_database *, RDB_exec_context *, RDB_transaction *)
Definition: database.c:1872
RDB_bool RDB_table_is_persistent(const RDB_object *)
Definition: table.c:586
int RDB_rollback_all(RDB_exec_context *, RDB_transaction *)
Definition: transaction.c:246
int RDB_drop_type(const char *name, RDB_exec_context *, RDB_transaction *)
Definition: utype.c:496
int RDB_define_type(const char *, int, const RDB_possrep[], RDB_expression *, RDB_expression *, int, RDB_exec_context *, RDB_transaction *)
Definition: utype.c:217
int RDB_create_public_table(const char *, int, const RDB_attr[], int, const RDB_string_vec[], RDB_exec_context *, RDB_transaction *)
Definition: ptable.c:123
int RDB_evaluate(RDB_expression *, RDB_getobjfn *, void *, RDB_environment *, RDB_exec_context *, RDB_transaction *, RDB_object *)
Definition: evaluate.c:705
RDB_type * RDB_expr_type(RDB_expression *, RDB_gettypefn *, void *, RDB_environment *, RDB_exec_context *, RDB_transaction *)
Definition: exprtype.c:1258
int RDB_expr_equals(const RDB_expression *, const RDB_expression *, RDB_exec_context *, RDB_transaction *, RDB_bool *)
Definition: expressionx.c:139
int RDB_define_subtype(const char *, int, RDB_type *[], int, const RDB_possrep[], RDB_expression *, RDB_expression *, int, RDB_exec_context *, RDB_transaction *)
Definition: utype.c:254
RDB_bool RDB_table_is_stored(const RDB_object *)
Definition: table.c:618
int RDB_avg(RDB_object *, RDB_expression *, RDB_exec_context *, RDB_transaction *, RDB_float *)
Definition: aggrf.c:685
RDB_int RDB_update(RDB_object *, RDB_expression *, int attrc, const RDB_attr_update updv[], RDB_exec_context *, RDB_transaction *)
Definition: assign.c:2649
RDB_database * RDB_tx_db(RDB_transaction *)
Definition: transaction.c:283
int RDB_extract_tuple(RDB_object *, RDB_exec_context *, RDB_transaction *, RDB_object *)
Definition: table.c:519
int RDB_get_dbs(RDB_environment *, RDB_object *, RDB_exec_context *)
Definition: database.c:943
int RDB_copy_table(RDB_object *dstp, RDB_object *srcp, RDB_exec_context *, RDB_transaction *)
Definition: table.c:471
int RDB_call_ro_op_by_name(const char *, int, RDB_object *[], RDB_exec_context *, RDB_transaction *, RDB_object *)
Definition: uoperator.c:436
int RDB_min(RDB_object *tbp, RDB_expression *, RDB_exec_context *, RDB_transaction *, RDB_object *)
Definition: aggrf.c:417
RDB_database * RDB_create_db_from_env(const char *, RDB_environment *, RDB_exec_context *)
Definition: database.c:620