| /* |
| * Copyright 2001-2004 Brandon Long |
| * All Rights Reserved. |
| * |
| * ClearSilver Templating System |
| * |
| * This code is made available under the terms of the ClearSilver License. |
| * http://www.clearsilver.net/license.hdf |
| * |
| */ |
| |
| #ifndef __WDB_H_ |
| #define __WDB_H_ 1 |
| |
| #include "util/skiplist.h" |
| #include "util/dict.h" |
| #include "util/ulist.h" |
| #include <db.h> |
| |
| typedef struct _column |
| { |
| char *name; |
| int ondisk_index; /* index# on disk, constant for life of db, |
| must be 1 or higher */ |
| int inmem_index; /* load time specific, needs to be flushed on |
| alter table */ |
| char type; |
| } WDBColumn; |
| |
| typedef struct _row |
| { |
| int table_version; /* random number which maps to the same number |
| of the table defn when loaded to verify they |
| match */ |
| char *key_value; |
| int data_count; |
| void *data[1]; |
| } WDBRow; |
| |
| typedef struct _cursor |
| { |
| int table_version; /* random number which maps to the same number |
| of the table defn when loaded to verify they |
| match */ |
| DBC *db_cursor; |
| } WDBCursor; |
| |
| typedef struct _wdb |
| { |
| char *name; |
| char *key; |
| char *path; |
| dictCtx attrs; |
| dictCtx cols; |
| skipList ondisk; |
| ULIST *cols_l; |
| DB *db; |
| int last_ondisk; |
| int defn_dirty; /* must save defn on destroy */ |
| int table_version; /* random number which maps to the same number |
| of the table defn when loaded/changed to |
| verify they match */ |
| } WDB; |
| |
| |
| #define WDB_TYPE_STR 's' |
| #define WDB_TYPE_INT 'i' |
| |
| #define WDBC_FIRST (1<<0) |
| #define WDBC_NEXT (1<<1) |
| #define WDBC_FIND (1<<2) |
| |
| #define WDBR_INSERT (1<<0) |
| |
| NEOERR * wdb_open (WDB **wdb, const char *name, int flags); |
| NEOERR * wdb_save (WDB *wdb); |
| NEOERR * wdb_update (WDB *wdb, const char *name, const char *key); |
| NEOERR * wdb_create (WDB **wdb, const char *path, const char *name, |
| const char *key, ULIST *col_def, int flags); |
| void wdb_destroy (WDB **wdb); |
| NEOERR * wdb_column_insert (WDB *wdb, int loc, const char *key, char type); |
| NEOERR * wdb_column_delete (WDB *wdb, const char *name); |
| NEOERR * wdb_column_update (WDB *wdb, const char *oldkey, const char *newkey); |
| NEOERR * wdb_column_exchange (WDB *wdb, const char *key1, const char *key2); |
| |
| /* |
| * function: wdb_keys |
| * description: this function returns the key and column names for the |
| * current database |
| * input: wdb - open database |
| * output: primary_key - pointer to the primary key |
| * data - pointer to a ULIST of the columns. |
| * both of these are allocated structures, you can clear data |
| * with uListDestroy (data, ULIST_FREE) |
| * return: STATUS_OK on no error or egerr.h error |
| */ |
| NEOERR * wdb_keys (WDB *wdb, char **primary_key, ULIST **data); |
| |
| NEOERR * wdb_attr_get (WDB *wdb, const char *key, char **value); |
| NEOERR * wdb_attr_set (WDB *wdb, const char *key, const char *value); |
| NEOERR * wdb_attr_next (WDB *wdb, char **key, char **value); |
| NEOERR * wdbr_lookup (WDB *wdb, const char *key, WDBRow **row); |
| NEOERR * wdbr_create (WDB *wdb, const char *key, WDBRow **row); |
| NEOERR * wdbr_save (WDB *wdb, WDBRow *row, int flags); |
| NEOERR * wdbr_delete (WDB *wdb, const char *key); |
| NEOERR * wdbr_destroy (WDB *wdb, WDBRow **row); |
| NEOERR * wdbr_get (WDB *wdb, WDBRow *row, const char *key, void **value); |
| NEOERR * wdbr_set (WDB *wdb, WDBRow *row, const char *key, void *value); |
| NEOERR * wdbr_dump (WDB *wdb, WDBRow *row); |
| NEOERR * wdbr_next (WDB *wdb, WDBCursor *cursor, WDBRow **row, int flags); |
| NEOERR * wdbr_find (WDB *wdb, WDBCursor *cursor, const char *key, WDBRow **row); |
| NEOERR * wdbc_create (WDB *wdb, WDBCursor **cursor); |
| NEOERR * wdbc_destroy (WDB *wdb, WDBCursor **cursor); |
| |
| #endif /* __WDB_H_ */ |