]> gitweb.ps.run Git - ziglmdb/commitdiff
changes
authorpatrick-scho <patrick.schoenberger@posteo.de>
Fri, 9 May 2025 17:23:11 +0000 (19:23 +0200)
committerpatrick-scho <patrick.schoenberger@posteo.de>
Fri, 9 May 2025 17:23:11 +0000 (19:23 +0200)
src/db.zig
src/lmdb.zig

index 4e8126de4c1c2cc23d5fd6dbdad91a5af4e14d4c..3e1b1863dafe3c0de451db578cd291904b65a774 100644 (file)
@@ -96,7 +96,7 @@ fn SetListBase(comptime K: type, comptime V: type) type {
         idx: ?Index = null,
 
         fn open_dbi(txn: lmdb.Txn) !lmdb.Dbi {
-            return try txn.dbi("SetList");
+            return try txn.dbi(null);
         }
         pub fn init(txn: lmdb.Txn) !Self {
             const head = View.Head{};
@@ -144,6 +144,15 @@ fn SetListViewBase(comptime K: type, comptime V: type) type {
         idx: SetListBase(K, V).Index,
         head: Head,
 
+        fn gen(self: @This()) !Key {
+            // TODO: limit loop
+            while (true) {
+                const key = try Prng.gen(self.dbi, Key);
+                if (!try self.dbi.has(self.item_idx(key))) {
+                    return key;
+                }
+            }
+        }
         fn item_idx(self: Self, k: K) ItemIndex {
             return .{ self.idx, k };
         }
@@ -171,7 +180,7 @@ fn SetListViewBase(comptime K: type, comptime V: type) type {
                 try self.item_put(item.next.?, next);
             }
 
-            if (self.head.first == k) self.head.first = item.next;
+            if (std.mem.eql(K, self.head.first, k)) self.head.first = item.next;
             if (self.head.last == k) self.head.last = item.prev;
             self.head.len -= 1;
             try self.head_update();
@@ -312,15 +321,6 @@ pub fn List(comptime V: type) type {
 
             base: ViewBase,
 
-            fn gen(self: @This()) !Key {
-                // TODO: limit loop
-                while (true) {
-                    const key = try Prng.gen(self.base.dbi, Key);
-                    if (!try self.base.dbi.has(self.base.item_idx(key))) {
-                        return key;
-                    }
-                }
-            }
             pub fn del(self: *@This(), key: Key) !void {
                 try self.base.del(key);
             }
@@ -331,7 +331,7 @@ pub fn List(comptime V: type) type {
                 return self.base.len();
             }
             pub fn append(self: *@This(), val: Val) !Key {
-                const key = try self.gen();
+                const key = try self.base.gen();
                 try self.base.append(key, val);
                 return key;
             }
index 88c8e22aecb985611418fb091b44f770fb5a368d..3c8ac3ab511d62f6e5659aba4fbf64fde138316d 100644 (file)
@@ -207,7 +207,7 @@ pub const Txn = struct {
     ptr: ?*lmdb.MDB_txn = undefined,
     env: Env = undefined,
 
-    pub fn dbi(self: Txn, name: [:0]const u8) !Dbi {
+    pub fn dbi(self: Txn, name: ?[:0]const u8) !Dbi {
         var result = Dbi{ .env = self.env, .txn = self };
         // TODO: lmdb.MDB_INTEGERKEY?
         switch (lmdb.mdb_dbi_open(self.ptr, @ptrCast(name), lmdb.MDB_CREATE, &result.ptr)) {