rel/rdb.h

00001 #ifndef RDB_RDB_H
00002 #define RDB_RDB_H
00003 
00004 /*
00005 $Id: rdb.h,v 1.181 2008/03/02 18:55:54 rhartmann Exp $
00006 
00007 This file is part of Duro, a relational database management system.
00008 Copyright (C) 2003-2008 René Hartmann.
00009 
00010 Duro is free software; you can redistribute it and/or modify
00011 it under the terms of the GNU General Public License as published by
00012 the Free Software Foundation; either version 2 of the License, or
00013 (at your option) any later version.
00014 
00015 Duro is distributed in the hope that it will be useful,
00016 but WITHOUT ANY WARRANTY; without even the implied warranty of
00017 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018 GNU General Public License for more details.
00019 
00020 You should have received a copy of the GNU General Public License
00021 along with Duro; if not, write to the Free Software Foundation, Inc.,
00022 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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     /* internal */
00076     struct RDB_type *typ;       /* Type, NULL for non-scalar types */
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              * Candidate keys. NULL if table is virtual and the keys have not been
00093              * inferred.
00094              */
00095             int keyc;
00096             RDB_string_vec *keyv;
00097             
00098             /* NULL if it's a real table */
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             /* Position of next element returned by qresult */
00110             RDB_int pos;
00111 
00112             RDB_int length; /* length of array; -1 means unknown */
00113 
00114             /* Elements (buffer, if tbp is not NULl) */
00115             int elemc;
00116             struct RDB_object *elemv;
00117 
00118             /* Buffers elements beyond elemc */
00119             struct RDB_object *tplp;
00120         } arr;
00121      } var;
00122      /* Used internally for conversion into the internal representation */
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 /* internal */
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     /* internal */
00147     char *name;
00148     enum _RDB_tp_kind kind;
00149 
00150     /* comparison function */
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; /* relation or array type */
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             /* RDB_TRUE if selector/getters/setters are provided by the system */
00169             RDB_bool sysimpl; 
00170 
00171             /* Actual representation, if the type is represented by another type.
00172                Otherwise NULL. */
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  * Built-in types
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  * Error types
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     /* internal */
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

Generated on Tue Mar 11 23:48:15 2008 for Duro by  doxygen 1.5.1