]> gitweb.ps.run Git - ziglmdb/blobdiff - src/db.zig
add clear method
[ziglmdb] / src / db.zig
index 3e54060bf12bd2a3064ff490ca25f35889c90502..6279a1ba6c834beed506a54efd80d5821c392a32 100644 (file)
@@ -183,6 +183,12 @@ pub fn SetView(comptime K: type) type {
 
             try self.dbi.del(self.item_idx(k));
         }
+        pub fn clear(self: *Self) !void {
+            var it = self.iterator();
+            while (it.next()) |i| {
+                try self.del(i);
+            }
+        }
         pub fn has(self: Self, k: K) !bool {
             return self.dbi.has(self.item_idx(k));
         }
@@ -357,6 +363,12 @@ pub fn ListView(comptime V: type) type {
 
             try self.dbi.del(self.item_idx(k));
         }
+        pub fn clear(self: *Self) !void {
+            var it = self.iterator();
+            while (it.next()) |kv| {
+                try self.del(kv.key);
+            }
+        }
         pub fn len(self: Self) usize {
             return self.head.len;
         }
@@ -513,6 +525,12 @@ pub fn SetListView(comptime K: type, comptime V: type) type {
 
             try self.dbi.del(self.item_idx(k));
         }
+        pub fn clear(self: *Self) !void {
+            var it = self.iterator();
+            while (it.next()) |kv| {
+                try self.del(kv.key);
+            }
+        }
         pub fn has(self: Self, k: K) !bool {
             return self.dbi.has(self.item_idx(k));
         }
@@ -584,7 +602,7 @@ test "db" {
 //     const db = List.init(txn, "b", u32);
 // }
 
-test "maplist" {
+test "set" {
     var env = try lmdb.Env.open("db", 1024 * 1024 * 1);
     // env.sync();
     defer env.close();
@@ -594,6 +612,76 @@ test "maplist" {
 
     var dbi = try txn.dbi("abc");
 
+    const A = struct {
+        ml: Set(usize),
+    };
+
+    var a: A = undefined;
+    const a_idx: u64 = 27;
+    if (try dbi.has(a_idx)) {
+        a = try dbi.get(a_idx, A);
+    } else {
+        a = A{ .ml = try Set(usize).init(txn) };
+        try dbi.put(a_idx, a);
+    }
+
+    var ml = try a.ml.open(txn);
+
+    const len = ml.len();
+    std.debug.print("{}\n", .{len});
+    try ml.append(len);
+    std.debug.print("{}\n", .{try ml.has(len)});
+    var it = ml.iterator();
+    while (it.next()) |i| {
+        std.debug.print("{}\n", .{i});
+    }
+}
+
+test "list" {
+    var env = try lmdb.Env.open("db", 1024 * 1024 * 1);
+    // env.sync();
+    defer env.close();
+
+    var txn = try env.txn();
+    defer txn.commit() catch {};
+
+    var dbi = try txn.dbi("def");
+
+    const A = struct {
+        ml: List(usize),
+    };
+
+    var a: A = undefined;
+    const a_idx: u64 = 27;
+    if (try dbi.has(a_idx)) {
+        a = try dbi.get(a_idx, A);
+    } else {
+        a = A{ .ml = try List(usize).init(txn) };
+        try dbi.put(a_idx, a);
+    }
+
+    var ml = try a.ml.open(txn);
+
+    const len = ml.len();
+    std.debug.print("{}\n", .{len});
+    const newest = try ml.append(len * 10);
+    std.debug.print("{}: {}\n", .{ newest, try ml.get(newest) });
+    var it = ml.iterator();
+    while (it.next()) |i| {
+        std.debug.print("{}: {}\n", .{ i.key, i.val });
+    }
+}
+
+test "setlist" {
+    var env = try lmdb.Env.open("db", 1024 * 1024 * 1);
+    // env.sync();
+    defer env.close();
+
+    var txn = try env.txn();
+    defer txn.commit() catch {};
+
+    var dbi = try txn.dbi("ghi");
+
     const A = struct {
         ml: SetList(usize, usize),
     };