From f79d17afed9ac443418f27fcd898f48010b943c6 Mon Sep 17 00:00:00 2001 From: mappu Date: Sun, 23 Jun 2024 16:29:11 +1200 Subject: [PATCH] badger: support temporary in-memory databases --- db_badger.go | 23 +++++++++++++++++------ main.go | 11 +++++++++++ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/db_badger.go b/db_badger.go index 2cacab9..7241a0d 100644 --- a/db_badger.go +++ b/db_badger.go @@ -12,7 +12,6 @@ import ( type badgerLoadedDatabase struct { displayName string - path string db *badger.DB nav *vcl.TTreeNode @@ -117,18 +116,30 @@ var _ loadedDatabase = &badgerLoadedDatabase{} // interface assertion // +func (f *TMainForm) badgerAddDatabaseFromMemory() { + f.badgerAddDatabaseFrom(badger.DefaultOptions("").WithInMemory(true)) +} + func (f *TMainForm) badgerAddDatabaseFromDirectory(path string) { + f.badgerAddDatabaseFrom(badger.DefaultOptions(path)) +} + +func (f *TMainForm) badgerAddDatabaseFrom(opts badger.Options) { // TODO load in background thread to stop blocking the UI - db, err := badger.Open(badger.DefaultOptions(path)) + db, err := badger.Open(opts) if err != nil { - vcl.ShowMessage(fmt.Sprintf("Failed to load database '%s': %s", path, err.Error())) + vcl.ShowMessage(fmt.Sprintf("Failed to load database: %s", err.Error())) return } ld := &badgerLoadedDatabase{ - path: path, - displayName: filepath.Base(path), - db: db, + db: db, + } + + if opts.Dir == "" { + ld.displayName = ":memory:" // SQLite-style naming + } else { + ld.displayName = filepath.Base(opts.Dir) } ld.nav = f.Buckets.Items().Add(nil, ld.displayName) diff --git a/main.go b/main.go index f61ff70..7e77014 100644 --- a/main.go +++ b/main.go @@ -57,6 +57,12 @@ func (f *TMainForm) OnFormCreate(sender vcl.IObject) { mnuFileBadgerOpen.SetOnClick(f.OnMnuFileBadgerOpenClick) mnuFileBadger.Add(mnuFileBadgerOpen) + mnuFileBadgerMemory := vcl.NewMenuItem(mnuFileBadger) + mnuFileBadgerMemory.SetCaption("New in-memory database") + mnuFileBadgerMemory.SetImageIndex(imgDatabaseAdd) + mnuFileBadgerMemory.SetOnClick(f.OnMnuFileBadgerMemoryClick) + mnuFileBadger.Add(mnuFileBadgerMemory) + // mnuFileBolt := vcl.NewMenuItem(mnuFile) @@ -277,6 +283,11 @@ func (f *TMainForm) OnMnuFileBadgerOpenClick(sender vcl.IObject) { } } +func (f *TMainForm) OnMnuFileBadgerMemoryClick(sender vcl.IObject) { + f.badgerAddDatabaseFromMemory() + +} + func (f *TMainForm) OnMnuFileSqliteMemoryClick(sender vcl.IObject) { f.sqliteAddDatabaseFromFile(`:memory:`) }