00001
00018 #ifndef HAM_HAMSTERDB_H__
00019 #define HAM_HAMSTERDB_H__
00020
00021 #ifdef __cplusplus
00022 extern "C" {
00023 #endif
00024
00025 #include <ham/types.h>
00026
00033 struct ham_db_t;
00034 typedef struct ham_db_t ham_db_t;
00035
00042 struct ham_env_t;
00043 typedef struct ham_env_t ham_env_t;
00044
00054 struct ham_cursor_t;
00055 typedef struct ham_cursor_t ham_cursor_t;
00056
00074 typedef struct
00075 {
00077 ham_size_t size;
00078
00080 void *data;
00081
00083 ham_u32_t flags;
00084
00086 ham_u32_t _intflags;
00087
00089 ham_u64_t _rid;
00090
00091 } ham_record_t;
00092
00094 #define HAM_RECORD_USER_ALLOC 1
00095
00115 typedef struct
00116 {
00118 ham_u16_t size;
00119
00121 void *data;
00122
00124 ham_u32_t flags;
00125
00127 ham_u32_t _flags;
00128 } ham_key_t;
00129
00131 #define HAM_KEY_USER_ALLOC 1
00132
00150 typedef struct {
00152 ham_u32_t name;
00153
00155 ham_u64_t value;
00156
00157 } ham_parameter_t;
00158
00165 #define HAM_SUCCESS ( 0)
00166
00167 #define HAM_INV_KEYSIZE ( -3)
00168
00169 #define HAM_INV_PAGESIZE ( -4)
00170
00171 #define HAM_OUT_OF_MEMORY ( -6)
00172
00173 #define HAM_NOT_INITIALIZED ( -7)
00174
00175 #define HAM_INV_PARAMETER ( -8)
00176
00177 #define HAM_INV_FILE_HEADER ( -9)
00178
00179 #define HAM_INV_FILE_VERSION (-10)
00180
00181 #define HAM_KEY_NOT_FOUND (-11)
00182
00183 #define HAM_DUPLICATE_KEY (-12)
00184
00185 #define HAM_INTEGRITY_VIOLATED (-13)
00186
00187 #define HAM_INTERNAL_ERROR (-14)
00188
00189 #define HAM_DB_READ_ONLY (-15)
00190
00191 #define HAM_BLOB_NOT_FOUND (-16)
00192
00193 #define HAM_PREFIX_REQUEST_FULLKEY (-17)
00194
00195 #define HAM_IO_ERROR (-18)
00196
00197 #define HAM_CACHE_FULL (-19)
00198
00199 #define HAM_NOT_IMPLEMENTED (-20)
00200
00201 #define HAM_FILE_NOT_FOUND (-21)
00202
00203 #define HAM_WOULD_BLOCK (-22)
00204
00205 #define HAM_NOT_READY (-23)
00206
00207 #define HAM_LIMITS_REACHED (-24)
00208
00209 #define HAM_ACCESS_DENIED (-25)
00210
00211 #define HAM_ALREADY_INITIALIZED (-27)
00212
00213 #define HAM_NEED_RECOVERY (-28)
00214
00215 #define HAM_CURSOR_STILL_OPEN (-29)
00216
00217 #define HAM_CURSOR_IS_NIL (-100)
00218
00219 #define HAM_DATABASE_NOT_FOUND (-200)
00220
00221 #define HAM_DATABASE_ALREADY_EXISTS (-201)
00222
00223 #define HAM_DATABASE_ALREADY_OPEN (-202)
00224
00225 #define HAM_LOG_INV_FILE_HEADER (-300)
00226
00248 typedef void (HAM_CALLCONV *ham_errhandler_fun)
00249 (int level, const char *message);
00250
00266 HAM_EXPORT void HAM_CALLCONV
00267 ham_set_errhandler(ham_errhandler_fun f);
00268
00276 HAM_EXPORT const char * HAM_CALLCONV
00277 ham_strerror(ham_status_t status);
00278
00286 HAM_EXPORT void HAM_CALLCONV
00287 ham_get_version(ham_u32_t *major, ham_u32_t *minor,
00288 ham_u32_t *revision);
00289
00297 HAM_EXPORT void HAM_CALLCONV
00298 ham_get_license(const char **licensee, const char **product);
00299
00316 HAM_EXPORT ham_status_t HAM_CALLCONV
00317 ham_env_new(ham_env_t **env);
00318
00330 HAM_EXPORT ham_status_t HAM_CALLCONV
00331 ham_env_delete(ham_env_t *env);
00332
00364 HAM_EXPORT ham_status_t HAM_CALLCONV
00365 ham_env_create(ham_env_t *env, const char *filename,
00366 ham_u32_t flags, ham_u32_t mode);
00367
00453 HAM_EXPORT ham_status_t HAM_CALLCONV
00454 ham_env_create_ex(ham_env_t *env, const char *filename,
00455 ham_u32_t flags, ham_u32_t mode, ham_parameter_t *param);
00456
00475 HAM_EXPORT ham_status_t HAM_CALLCONV
00476 ham_env_open(ham_env_t *env, const char *filename, ham_u32_t flags);
00477
00541 HAM_EXPORT ham_status_t HAM_CALLCONV
00542 ham_env_open_ex(ham_env_t *env, const char *filename,
00543 ham_u32_t flags, ham_parameter_t *param);
00544
00593 HAM_EXPORT ham_status_t HAM_CALLCONV
00594 ham_env_create_db(ham_env_t *env, ham_db_t *db,
00595 ham_u16_t name, ham_u32_t flags, ham_parameter_t *params);
00596
00626 HAM_EXPORT ham_status_t HAM_CALLCONV
00627 ham_env_open_db(ham_env_t *env, ham_db_t *db,
00628 ham_u16_t name, ham_u32_t flags, ham_parameter_t *params);
00629
00654 HAM_EXPORT ham_status_t HAM_CALLCONV
00655 ham_env_rename_db(ham_env_t *env, ham_u16_t oldname,
00656 ham_u16_t newname, ham_u32_t flags);
00657
00676 HAM_EXPORT ham_status_t HAM_CALLCONV
00677 ham_env_erase_db(ham_env_t *env, ham_u16_t name, ham_u32_t flags);
00678
00711 HAM_EXPORT ham_status_t HAM_CALLCONV
00712 ham_env_enable_encryption(ham_env_t *env, ham_u8_t key[16], ham_u32_t flags);
00713
00736 HAM_EXPORT ham_status_t HAM_CALLCONV
00737 ham_env_get_database_names(ham_env_t *env, ham_u16_t *names, ham_size_t *count);
00738
00773 HAM_EXPORT ham_status_t HAM_CALLCONV
00774 ham_env_close(ham_env_t *env, ham_u32_t flags);
00775
00791 struct ham_txn_t;
00792 typedef struct ham_txn_t ham_txn_t;
00793
00815 extern ham_status_t
00816 ham_txn_begin(ham_txn_t **txn, ham_db_t *db, ham_u32_t flags);
00817
00819 #define HAM_TXN_READ_ONLY 1
00820
00838 extern ham_status_t
00839 ham_txn_commit(ham_txn_t *txn, ham_u32_t flags);
00840
00858 extern ham_status_t
00859 ham_txn_abort(ham_txn_t *txn, ham_u32_t flags);
00860
00873 HAM_EXPORT ham_status_t HAM_CALLCONV
00874 ham_new(ham_db_t **db);
00875
00887 HAM_EXPORT ham_status_t HAM_CALLCONV
00888 ham_delete(ham_db_t *db);
00889
00912 HAM_EXPORT ham_status_t HAM_CALLCONV
00913 ham_create(ham_db_t *db, const char *filename,
00914 ham_u32_t flags, ham_u32_t mode);
00915
01007 HAM_EXPORT ham_status_t HAM_CALLCONV
01008 ham_create_ex(ham_db_t *db, const char *filename,
01009 ham_u32_t flags, ham_u32_t mode, ham_parameter_t *param);
01010
01030 HAM_EXPORT ham_status_t HAM_CALLCONV
01031 ham_open(ham_db_t *db, const char *filename, ham_u32_t flags);
01032
01100 HAM_EXPORT ham_status_t HAM_CALLCONV
01101 ham_open_ex(ham_db_t *db, const char *filename,
01102 ham_u32_t flags, ham_parameter_t *param);
01103
01105 #define HAM_WRITE_THROUGH 0x00000001
01106
01108 #define HAM_READ_ONLY 0x00000004
01109
01110
01111
01113 #define HAM_USE_BTREE 0x00000010
01114
01115
01116
01118 #define HAM_DISABLE_VAR_KEYLEN 0x00000040
01119
01121 #define HAM_IN_MEMORY_DB 0x00000080
01122
01123
01124
01126 #define HAM_DISABLE_MMAP 0x00000200
01127
01129 #define HAM_CACHE_STRICT 0x00000400
01130
01131
01132
01133 #define HAM_DISABLE_FREELIST_FLUSH 0x00000800
01134
01136 #define HAM_LOCK_EXCLUSIVE 0x00001000
01137
01139 #define HAM_RECORD_NUMBER 0x00002000
01140
01142 #define HAM_ENABLE_DUPLICATES 0x00004000
01143
01146 #define HAM_ENABLE_RECOVERY 0x00008000
01147
01149 #define HAM_AUTO_RECOVERY 0x00010000
01150
01153 #define HAM_ENABLE_TRANSACTIONS 0x00020000
01154
01157 #define HAM_PARAM_CACHESIZE 0x00000100
01158
01161 #define HAM_PARAM_PAGESIZE 0x00000101
01162
01164 #define HAM_PARAM_KEYSIZE 0x00000102
01165
01168 #define HAM_PARAM_MAX_ENV_DATABASES 0x00000103
01169
01177 HAM_EXPORT ham_u32_t HAM_CALLCONV
01178 ham_get_flags(ham_db_t *db);
01179
01189 HAM_EXPORT ham_status_t HAM_CALLCONV
01190 ham_get_error(ham_db_t *db);
01191
01204 typedef int (*ham_prefix_compare_func_t)
01205 (ham_db_t *db,
01206 const ham_u8_t *lhs, ham_size_t lhs_length,
01207 ham_size_t lhs_real_length,
01208 const ham_u8_t *rhs, ham_size_t rhs_length,
01209 ham_size_t rhs_real_length);
01210
01226 HAM_EXPORT ham_status_t HAM_CALLCONV
01227 ham_set_prefix_compare_func(ham_db_t *db, ham_prefix_compare_func_t foo);
01228
01237 typedef int (*ham_compare_func_t)(ham_db_t *db,
01238 const ham_u8_t *lhs, ham_size_t lhs_length,
01239 const ham_u8_t *rhs, ham_size_t rhs_length);
01240
01261 HAM_EXPORT ham_status_t HAM_CALLCONV
01262 ham_set_compare_func(ham_db_t *db, ham_compare_func_t foo);
01263
01293 HAM_EXPORT ham_status_t HAM_CALLCONV
01294 ham_enable_compression(ham_db_t *db, ham_u32_t level, ham_u32_t flags);
01295
01332 HAM_EXPORT ham_status_t HAM_CALLCONV
01333 ham_find(ham_db_t *db, ham_txn_t *txn, ham_key_t *key,
01334 ham_record_t *record, ham_u32_t flags);
01335
01390 HAM_EXPORT ham_status_t HAM_CALLCONV
01391 ham_insert(ham_db_t *db, ham_txn_t *txn, ham_key_t *key,
01392 ham_record_t *record, ham_u32_t flags);
01393
01395 #define HAM_OVERWRITE 1
01396
01398 #define HAM_DUPLICATE 2
01399
01401 #define HAM_DUPLICATE_INSERT_BEFORE 4
01402
01404 #define HAM_DUPLICATE_INSERT_AFTER 8
01405
01407 #define HAM_DUPLICATE_INSERT_FIRST 16
01408
01410 #define HAM_DUPLICATE_INSERT_LAST 32
01411
01433 HAM_EXPORT ham_status_t HAM_CALLCONV
01434 ham_erase(ham_db_t *db, ham_txn_t *txn, ham_key_t *key, ham_u32_t flags);
01435
01452 HAM_EXPORT ham_status_t HAM_CALLCONV
01453 ham_flush(ham_db_t *db, ham_u32_t flags);
01454
01489 HAM_EXPORT ham_status_t HAM_CALLCONV
01490 ham_close(ham_db_t *db, ham_u32_t flags);
01491
01493 #define HAM_AUTO_CLEANUP 1
01494
01495
01496 #define HAM_DONT_CLEAR_LOG 2
01497
01499 #define HAM_TXN_AUTO_ABORT 4
01500
01502 #define HAM_TXN_AUTO_COMMIT 8
01503
01535 HAM_EXPORT ham_status_t HAM_CALLCONV
01536 ham_cursor_create(ham_db_t *db, ham_txn_t *txn, ham_u32_t flags,
01537 ham_cursor_t **cursor);
01538
01557 HAM_EXPORT ham_status_t HAM_CALLCONV
01558 ham_cursor_clone(ham_cursor_t *src, ham_cursor_t **dest);
01559
01612 HAM_EXPORT ham_status_t HAM_CALLCONV
01613 ham_cursor_move(ham_cursor_t *cursor, ham_key_t *key,
01614 ham_record_t *record, ham_u32_t flags);
01615
01617 #define HAM_CURSOR_FIRST 1
01618
01620 #define HAM_CURSOR_LAST 2
01621
01623 #define HAM_CURSOR_NEXT 4
01624
01626 #define HAM_CURSOR_PREVIOUS 8
01627
01629 #define HAM_SKIP_DUPLICATES 16
01630
01632 #define HAM_ONLY_DUPLICATES 32
01633
01647 HAM_EXPORT ham_status_t HAM_CALLCONV
01648 ham_cursor_overwrite(ham_cursor_t *cursor, ham_record_t *record,
01649 ham_u32_t flags);
01650
01669 HAM_EXPORT ham_status_t HAM_CALLCONV
01670 ham_cursor_find(ham_cursor_t *cursor, ham_key_t *key, ham_u32_t flags);
01671
01741 HAM_EXPORT ham_status_t HAM_CALLCONV
01742 ham_cursor_insert(ham_cursor_t *cursor, ham_key_t *key,
01743 ham_record_t *record, ham_u32_t flags);
01744
01764 HAM_EXPORT ham_status_t HAM_CALLCONV
01765 ham_cursor_erase(ham_cursor_t *cursor, ham_u32_t flags);
01766
01782 HAM_EXPORT ham_status_t HAM_CALLCONV
01783 ham_cursor_get_duplicate_count(ham_cursor_t *cursor,
01784 ham_size_t *count, ham_u32_t flags);
01785
01797 HAM_EXPORT ham_status_t HAM_CALLCONV
01798 ham_cursor_close(ham_cursor_t *cursor);
01799
01800
01801
01802
01803
01804 #ifdef __cplusplus
01805 }
01806 #endif
01807
01808 #endif