From 8f105183eb40a695bd968c180c99d7c0674c9303 Mon Sep 17 00:00:00 2001 From: mappu Date: Sun, 23 Jun 2024 15:57:20 +1200 Subject: [PATCH] redis: handle data browsing for different typed keys --- db_redis.go | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/db_redis.go b/db_redis.go index e4be5c8..a62c673 100644 --- a/db_redis.go +++ b/db_redis.go @@ -84,19 +84,53 @@ func (ld *redisLoadedDatabase) RenderForNav(f *TMainForm, ndata *navData) { colKey.SetCaption("Key") colKey.SetWidth(MY_WIDTH) colKey.SetAlignment(types.TaLeftJustify) + colType := f.contentBox.Columns().Add() + colType.SetCaption("Type") colVal := f.contentBox.Columns().Add() colVal.SetCaption("Value") for _, key := range allKeys { - val, err := ld.db.Get(ctx, key).Result() + typeName, err := ld.db.Type(ctx, key).Result() if err != nil { - vcl.ShowMessage(fmt.Sprintf("Listing keys in database %q: %v", ndata.bucketPath[0], err)) + vcl.ShowMessage(fmt.Sprintf("Loading %q/%q: %v", ndata.bucketPath[0], key, err)) return } dataEntry := f.contentBox.Items().Add() - dataEntry.SetCaption(key) // formatUtf8 - dataEntry.SubItems().Add(val) // formatUtf8 + dataEntry.SetCaption(key) // formatUtf8 + dataEntry.SubItems().Add(typeName) + + switch typeName { + case "string": + val, err := ld.db.Get(ctx, key).Result() + if err != nil { + vcl.ShowMessage(fmt.Sprintf("Loading %q/%q: %v", ndata.bucketPath[0], key, err)) + return + } + dataEntry.SubItems().Add(val) + + case "hash": + val, err := ld.db.HGetAll(ctx, key).Result() + if err != nil { + vcl.ShowMessage(fmt.Sprintf("Loading %q/%q: %v", ndata.bucketPath[0], key, err)) + return + } + // It's a map[string]string + dataEntry.SubItems().Add(formatAny(val)) + + case "lists": + fallthrough + case "sets": + fallthrough + case "sorted sets": + fallthrough + case "stream": + fallthrough + + default: + dataEntry.SubItems().Add("<<>>") + } + } // Valid