rel/rdb.h

00001 #ifndef RDB_RDB_H
00002 #define RDB_RDB_H
00003 
00004 /*
00005 $Id: rdb.h,v 1.185 2009/02/25 22:35:41 rhartmann Exp $
00006 
00007 This file is part of Duro, a relational database management system.
00008 Copyright (C) 2003-2009 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     /*
00076      * Internal 
00077      */
00078 
00079     /* The type. If the value is non-scalar and not a table, it is NULL by default,
00080      * but can be set by calling RDB_obj_set_typeinfo().
00081      * In this case, the caller is responsible for managing the type
00082      * (e.g. destroying the type when the RDB_object is destroyed).
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              * Candidate keys. NULL if table is virtual and the keys have not been
00102              * inferred.
00103              */
00104             int keyc;
00105             RDB_string_vec *keyv;
00106             
00107             /* NULL if it's a real table */
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             /* Position of next element returned by qresult */
00119             RDB_int pos;
00120 
00121             RDB_int length; /* length of array; -1 means unknown */
00122 
00123             /* Elements (buffer, if tbp is not NULl) */
00124             int elemc;
00125             struct RDB_object *elemv;
00126 
00127             /* Buffers elements beyond elemc */
00128             struct RDB_object *tplp;
00129         } arr;
00130      } var;
00131      /* Used internally for conversion into the internal representation */
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 /* internal */
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     /* internal */
00158     char *name;
00159     enum _RDB_tp_kind kind;
00160 
00161     /* comparison function */
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; /* relation or array type */
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             /* RDB_TRUE if selector/getters/setters are provided by the system */
00180             RDB_bool sysimpl; 
00181 
00182             /* Actual representation, if the type is represented by another type.
00183                Otherwise NULL. */
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  * Built-in types
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  * Error types
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     /* internal */
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

Generated on Fri Mar 6 21:30:52 2009 for Duro by  doxygen 1.5.1