about summary refs log tree commit homepage
path: root/ext/tdb/tdb.c
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2010-12-04 15:56:11 -0800
committerEric Wong <normalperson@yhbt.net>2010-12-04 15:56:11 -0800
commit76a68577ce61c02689ad450c054b69bf1a8d6f60 (patch)
tree0b4b3ecbc08eaba319401f4726b108c3a0a24cb4 /ext/tdb/tdb.c
parent91774f18ae0bb044c24d75d275ccb90b1bd80ad0 (diff)
downloadruby-tdb-76a68577ce61c02689ad450c054b69bf1a8d6f60.tar.gz
TDB#clear maps to tdb_wipe_all and TDB#repack maps
to TDB#repack.
Diffstat (limited to 'ext/tdb/tdb.c')
-rw-r--r--ext/tdb/tdb.c26
1 files changed, 26 insertions, 0 deletions
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();