summaryrefslogtreecommitdiff
path: root/src/libicalss/icalbdbset.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libicalss/icalbdbset.h')
-rw-r--r--src/libicalss/icalbdbset.h147
1 files changed, 147 insertions, 0 deletions
diff --git a/src/libicalss/icalbdbset.h b/src/libicalss/icalbdbset.h
new file mode 100644
index 00000000..90f0aca8
--- /dev/null
+++ b/src/libicalss/icalbdbset.h
@@ -0,0 +1,147 @@
+/* -*- Mode: C -*- */
+/*======================================================================
+ FILE: icalbdbset.h
+ CREATOR: dml 12 December 2001
+ (C) COPYRIGHT 2001, Critical Path
+
+ $Id: icalbdbset.h,v 1.5 2008-01-02 20:07:39 dothebart Exp $
+ $Locker: $
+======================================================================*/
+
+#ifndef ICALBDBSET_H
+#define ICALBDBSET_H
+
+#include <libical/ical.h>
+#include <libicalss/icalset.h>
+#include <libicalss/icalgauge.h>
+#include <db.h>
+
+typedef struct icalbdbset_impl icalbdbset;
+
+enum icalbdbset_subdb_type {ICALBDB_CALENDARS, ICALBDB_EVENTS, ICALBDB_TODOS, ICALBDB_REMINDERS};
+typedef enum icalbdbset_subdb_type icalbdbset_subdb_type;
+
+/** sets up the db environment, should be done in parent thread.. */
+int icalbdbset_init_dbenv(char *db_env_dir, void (*logDbFunc)(const char*, char*));
+
+icalset* icalbdbset_init(icalset* set, const char *dsn, void *options);
+int icalbdbset_cleanup(void);
+void icalbdbset_checkpoint(void);
+void icalbdbset_rmdbLog(void);
+
+/** Creates a component handle. flags allows caller to
+ specify if database is internally a BTREE or HASH */
+icalset * icalbdbset_new(const char* database_filename,
+ icalbdbset_subdb_type subdb_type,
+ int dbtype, int flag);
+
+DB * icalbdbset_bdb_open_secondary(DB *dbp,
+ const char *subdb,
+ const char *sindex,
+ int (*callback) (DB *db,
+ const DBT *dbt1,
+ const DBT *dbt2,
+ DBT *dbt3),
+ int type);
+
+char *icalbdbset_parse_data(DBT *dbt, char *(*pfunc)(const DBT *dbt)) ;
+
+void icalbdbset_free(icalset* set);
+
+/* cursor operations */
+int icalbdbset_acquire_cursor(DB *dbp, DB_TXN* tid, DBC **rdbcp);
+int icalbdbset_cget(DBC *dbcp, DBT *key, DBT *data, int access_method);
+int icalbdbset_cput(DBC *dbcp, DBT *key, DBT *data, int access_method);
+
+int icalbdbset_get_first(DBC *dbcp, DBT *key, DBT *data);
+int icalbdbset_get_next(DBC *dbcp, DBT *key, DBT *data);
+int icalbdbset_get_last(DBC *dbcp, DBT *key, DBT *data);
+int icalbdbset_get_key(DBC *dbcp, DBT *key, DBT *data);
+int icalbdbset_delete(DB *dbp, DBT *key);
+int icalbdbset_put(DB *dbp, DBT *key, DBT *data, int access_method);
+int icalbdbset_get(DB *dbp, DB_TXN *tid, DBT *key, DBT *data, int flags);
+
+const char* icalbdbset_path(icalset* set);
+const char* icalbdbset_subdb(icalset* set);
+
+/* Mark the set as changed, so it will be written to disk when it
+ is freed. Commit writes to disk immediately. */
+void icalbdbset_mark(icalset* set);
+icalerrorenum icalbdbset_commit(icalset *set);
+
+icalerrorenum icalbdbset_add_component(icalset* set,
+ icalcomponent* child);
+
+icalerrorenum icalbdbset_remove_component(icalset* set,
+ icalcomponent* child);
+
+int icalbdbset_count_components(icalset* set,
+ icalcomponent_kind kind);
+
+/* Restrict the component returned by icalbdbset_first, _next to those
+ that pass the gauge. _clear removes the gauge */
+icalerrorenum icalbdbset_select(icalset* store, icalgauge* gauge);
+void icalbdbset_clear(icalset* store);
+
+/* Get and search for a component by uid */
+icalcomponent* icalbdbset_fetch(icalset* set, icalcomponent_kind kind, const char* uid);
+int icalbdbset_has_uid(icalset* set, const char* uid);
+icalcomponent* icalbdbset_fetch_match(icalset* set, icalcomponent *c);
+
+
+icalerrorenum icalbdbset_modify(icalset* set, icalcomponent *old,
+ icalcomponent *newc);
+
+/* cluster management functions */
+icalerrorenum icalbdbset_set_cluster(icalset* set, icalcomponent* cluster);
+icalerrorenum icalbdbset_free_cluster(icalset* set);
+icalcomponent* icalbdbset_get_cluster(icalset* set);
+
+/* Iterate through components. If a gauge has been defined, these
+ will skip over components that do not pass the gauge */
+
+icalcomponent* icalbdbset_get_current_component (icalset* set);
+icalcomponent* icalbdbset_get_first_component(icalset* set);
+icalcomponent* icalbdbset_get_next_component(icalset* set);
+
+/* External iterator for thread safety */
+icalsetiter icalbdbset_begin_component(icalset* set, icalcomponent_kind kind, icalgauge* gauge, const char* tzid);
+
+icalcomponent* icalbdbset_form_a_matched_recurrence_component(icalsetiter* itr);
+
+icalcomponent* icalbdbsetiter_to_next(icalset* set, icalsetiter* i);
+icalcomponent* icalbdbsetiter_to_prior(icalset* set, icalsetiter* i);
+
+/* Return a reference to the internal component. You probably should
+ not be using this. */
+
+icalcomponent* icalbdbset_get_component(icalset* set);
+
+DB_ENV *icalbdbset_get_env(void);
+
+
+int icalbdbset_begin_transaction(DB_TXN* parent_id, DB_TXN** txnid);
+int icalbdbset_commit_transaction(DB_TXN* txnid);
+
+DB* icalbdbset_bdb_open(const char* path,
+ const char *subdb,
+ int type,
+ mode_t mode, int flag);
+
+
+typedef struct icalbdbset_options {
+ icalbdbset_subdb_type subdb; /**< the subdatabase to open */
+ int dbtype; /**< db_open type: DB_HASH | DB_BTREE */
+ mode_t mode; /**< file mode */
+ u_int32_t flag; /**< DB->set_flags(): DB_DUP | DB_DUPSORT */
+ char *(*pfunc)(const DBT *dbt); /**< parsing function */
+ int (*callback) (DB *db, /**< callback for secondary db open */
+ const DBT *dbt1,
+ const DBT *dbt2,
+ DBT *dbt3);
+} icalbdbset_options;
+
+#endif /* !ICALBDBSET_H */
+
+
+