add KVList function to db
Raphael Sprenger
Thu, 01 Oct 2026 18:51:08 +0200
2 files changed,
67 insertions(+),
0 deletions(-)
M
internal/db/kv.go
→
internal/db/kv.go
@@ -25,6 +25,25 @@ err := db.read.QueryRowContext(ctx, "SELECT value FROM kv_store WHERE key = ?", key).Scan(&rawVal)
return rawVal, err } +func (db *DB) KVList(ctx context.Context) (map[string]any, error) { + rows, err := db.read.QueryContext(ctx, "SELECT key, value FROM kv_store") + if err != nil { + return nil, err + } + defer rows.Close() + + result := make(map[string]any) + for rows.Next() { + var key string + var value any + if err := rows.Scan(&key, &value); err != nil { + return nil, err + } + result[key] = value + } + return result, rows.Err() +} + func (db *DB) KVInc(ctx context.Context, key string, delta int64) (int64, error) { tx, err := db.GetWriteTx(ctx) if err != nil {
M
internal/db/kv_test.go
→
internal/db/kv_test.go
@@ -77,6 +77,54 @@ t.Errorf("Incrementation mismatch! Expected final value %d, got %d", expected+1, res)
} } +// TestKVList tests that the KVList function returns all stored key value pairs +func TestKVList(t *testing.T) { + posternDB, err := OpenDB(&Config{ + DBPath: path.Join(t.TempDir(), "meta.db"), + }) + if err != nil { + t.Fatal(err) + } + + defer func(posternDB *DB) { + err := posternDB.Close() + if err != nil { + t.Fatal(err) + } + }(posternDB) + + want := map[string]any{ + "key-1": "value-1", + "key-2": int64(42), + } + + for key, val := range want { + if err := posternDB.KVSet(t.Context(), key, val); err != nil { + t.Fatalf("KVSet setup failed: %v", err) + } + } + + got, err := posternDB.KVList(t.Context()) + if err != nil { + t.Fatalf("KVList failed: %v", err) + } + + if len(got) != len(want) { + t.Fatalf("Expected %d pairs, got %d", len(want), len(got)) + } + + for key, expected := range want { + val, ok := got[key] + if !ok { + t.Errorf("Missing key %q in KVList result", key) + continue + } + if val != expected { + t.Errorf("Key %q: expected value %v, got %v", key, expected, val) + } + } +} + // TestKVIncString tests that the KVInc function does not increment invalid values func TestKVIncString(t *testing.T) { posternDB, err := OpenDB(&Config{