From 76a68577ce61c02689ad450c054b69bf1a8d6f60 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 4 Dec 2010 15:56:11 -0800 Subject: add support for "clear" and "repack" methods TDB#clear maps to tdb_wipe_all and TDB#repack maps to TDB#repack. --- ext/tdb/extconf.rb | 1 + ext/tdb/tdb.c | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) (limited to 'ext') diff --git a/ext/tdb/extconf.rb b/ext/tdb/extconf.rb index 32adafe..5359f7d 100644 --- a/ext/tdb/extconf.rb +++ b/ext/tdb/extconf.rb @@ -7,6 +7,7 @@ dir_config('tdb') have_header('tdb.h') or abort 'tdb.h missing' have_library('tdb') or abort 'libtdb missing' have_func('tdb_jenkins_hash') +have_func('tdb_repack') have_const('TDB_ERR_NESTING', 'tdb.h') create_makefile('tdb_ext') diff --git a/ext/tdb/tdb.c b/ext/tdb/tdb.c index 373da17..d1b573a 100644 --- a/ext/tdb/tdb.c +++ b/ext/tdb/tdb.c @@ -619,6 +619,28 @@ static VALUE lockall_unmark(VALUE self) return Qtrue; } +/* + * clears out the database + */ +static VALUE clear(VALUE self) +{ + struct tdb_context *tdb = db(self, 1); + if ((int)my_tbr((rb_blocking_function_t *)tdb_wipe_all, tdb)) + my_raise(tdb); + return self; +} + +#ifdef HAVE_TDB_REPACK +/* repacks a database to reduce fragmentation, available with tdb 1.2.x+ */ +static VALUE repack(VALUE self) +{ + struct tdb_context *tdb = db(self, 1); + if ((int)my_tbr((rb_blocking_function_t *)tdb_repack, tdb)) + my_raise(tdb); + return self; +} +#endif /* HAVE_TDB_REPACK */ + void Init_tdb_ext(void) { cTDB = rb_define_class("TDB", rb_cObject); @@ -663,6 +685,10 @@ void Init_tdb_ext(void) rb_define_method(cTDB, "unlockall_read", unlockall_read, 0); rb_define_method(cTDB, "lockall_mark", lockall_mark, 0); rb_define_method(cTDB, "lockall_unmark", lockall_unmark, 0); + rb_define_method(cTDB, "clear", clear, 0); +#ifdef HAVE_TDB_REPACK + rb_define_method(cTDB, "repack", repack, 0); +#endif /* HAVE_TDB_REPACK */ init_errors(); init_hashes(); -- cgit v1.2.3-24-ge0c7