diff --git a/db_badger.go b/db_badger.go index 8310a23..18e908c 100644 --- a/db_badger.go +++ b/db_badger.go @@ -103,8 +103,8 @@ func (ld *badgerLoadedDatabase) NavContext(ndata *navData) ([]contextAction, err return nil, nil // No special actions are supported } -func (ld *badgerLoadedDatabase) ExecQuery(query string, resultArea *vcl.TStringGrid) { - vcl.ShowMessage("Badger doesn't support querying") +func (ld *badgerLoadedDatabase) ExecQuery(query string, resultArea *vcl.TStringGrid) error { + return errors.New("Badger doesn't support querying") } func (ld *badgerLoadedDatabase) Close() { diff --git a/db_bolt.go b/db_bolt.go index 63891f5..3e43c76 100644 --- a/db_bolt.go +++ b/db_bolt.go @@ -185,8 +185,8 @@ func (ld *boltLoadedDatabase) DeleteBucket(ndata *navData) { } } -func (ld *boltLoadedDatabase) ExecQuery(query string, resultArea *vcl.TStringGrid) { - vcl.ShowMessage("Bolt doesn't support querying") +func (ld *boltLoadedDatabase) ExecQuery(query string, resultArea *vcl.TStringGrid) error { + return errors.New("Bolt doesn't support querying") } func (ld *boltLoadedDatabase) Close() { diff --git a/db_debconf.go b/db_debconf.go index 236eefc..1e632cb 100644 --- a/db_debconf.go +++ b/db_debconf.go @@ -89,8 +89,8 @@ func (ld *debconfLoadedDatabase) NavContext(ndata *navData) ([]contextAction, er return nil, nil // No special actions are supported } -func (ld *debconfLoadedDatabase) ExecQuery(query string, resultArea *vcl.TStringGrid) { - vcl.ShowMessage("debconf doesn't support querying") +func (ld *debconfLoadedDatabase) ExecQuery(query string, resultArea *vcl.TStringGrid) error { + return errors.New("debconf doesn't support querying") } func (ld *debconfLoadedDatabase) Close() { diff --git a/db_none.go b/db_none.go index df5de41..1d75b4b 100644 --- a/db_none.go +++ b/db_none.go @@ -28,7 +28,8 @@ func (n *noLoadedDatabase) ApplyChanges(f *TMainForm, ndata *navData) error { return errors.New("Editing is not supported") } -func (n *noLoadedDatabase) ExecQuery(query string, resultArea *vcl.TStringGrid) { +func (n *noLoadedDatabase) ExecQuery(query string, resultArea *vcl.TStringGrid) error { + return nil } func (n *noLoadedDatabase) NavChildren(ndata *navData) ([]string, error) { diff --git a/db_pebble.go b/db_pebble.go index e0b6f72..0ea2f98 100644 --- a/db_pebble.go +++ b/db_pebble.go @@ -94,8 +94,8 @@ func (ld *pebbleLoadedDatabase) NavContext(ndata *navData) ([]contextAction, err return nil, nil // No special actions are supported } -func (ld *pebbleLoadedDatabase) ExecQuery(query string, resultArea *vcl.TStringGrid) { - vcl.ShowMessage("pebble doesn't support querying") +func (ld *pebbleLoadedDatabase) ExecQuery(query string, resultArea *vcl.TStringGrid) error { + return errors.New("pebble doesn't support querying") } func (ld *pebbleLoadedDatabase) Close() { diff --git a/db_redis.go b/db_redis.go index 8b70589..d4dd5a4 100644 --- a/db_redis.go +++ b/db_redis.go @@ -168,22 +168,20 @@ func (ld *redisLoadedDatabase) NavContext(ndata *navData) ([]contextAction, erro return nil, nil // No special actions are supported } -func (ld *redisLoadedDatabase) ExecQuery(query string, resultArea *vcl.TStringGrid) { +func (ld *redisLoadedDatabase) ExecQuery(query string, resultArea *vcl.TStringGrid) error { ctx := context.Background() // Need to parse the query into separate string+args fields for the protocol fields, err := lexer.Fields(query) if err != nil { - vcl.ShowMessage(fmt.Sprintf("Parsing the query: %v", err)) - return + return fmt.Errorf("Parsing the query: %w", err) } fields_boxed := box_interface(fields) ret, err := ld.db.Do(ctx, fields_boxed...).Result() if err != nil { - vcl.ShowMessage(fmt.Sprintf("The redis query returned an error: %v", err)) - return + return fmt.Errorf("The redis query returned an error: %w", err) } vcl_stringgrid_clear(resultArea) @@ -212,6 +210,8 @@ func (ld *redisLoadedDatabase) ExecQuery(query string, resultArea *vcl.TStringGr vcl_stringgrid_columnwidths(resultArea) resultArea.SetEnabled(true) + + return nil } func (ld *redisLoadedDatabase) Close() { diff --git a/db_sqlite.go b/db_sqlite.go index ed4349b..a7fe190 100644 --- a/db_sqlite.go +++ b/db_sqlite.go @@ -164,11 +164,10 @@ func populateRows(rr *sql.Rows, dest *vcl.TStringGrid) { } } -func (ld *sqliteLoadedDatabase) ExecQuery(query string, resultArea *vcl.TStringGrid) { +func (ld *sqliteLoadedDatabase) ExecQuery(query string, resultArea *vcl.TStringGrid) error { rr, err := ld.db.Query(query) if err != nil { - vcl.ShowMessage(err.Error()) - return + return err } defer rr.Close() @@ -177,8 +176,7 @@ func (ld *sqliteLoadedDatabase) ExecQuery(query string, resultArea *vcl.TStringG columns, err := rr.Columns() if err != nil { - vcl.ShowMessage(err.Error()) - return + return err } populateColumns(columns, resultArea) @@ -187,6 +185,7 @@ func (ld *sqliteLoadedDatabase) ExecQuery(query string, resultArea *vcl.TStringG vcl_stringgrid_columnwidths(resultArea) resultArea.SetEnabled(true) + return nil } func (ld *sqliteLoadedDatabase) NavChildren(ndata *navData) ([]string, error) { diff --git a/loadedDatabase.go b/loadedDatabase.go index 88852c7..0d7eef0 100644 --- a/loadedDatabase.go +++ b/loadedDatabase.go @@ -20,7 +20,7 @@ type loadedDatabase interface { RootElement() *vcl.TTreeNode RenderForNav(f *TMainForm, ndata *navData) ApplyChanges(f *TMainForm, ndata *navData) error - ExecQuery(query string, resultArea *vcl.TStringGrid) + ExecQuery(query string, resultArea *vcl.TStringGrid) error NavChildren(ndata *navData) ([]string, error) NavContext(ndata *navData) ([]contextAction, error) Keepalive(ndata *navData) diff --git a/main.go b/main.go index b0a5739..f1a5581 100644 --- a/main.go +++ b/main.go @@ -712,7 +712,11 @@ func (f *TMainForm) OnQueryExecute(sender vcl.IObject) { } ndata := (*navData)(node.Data()) - ndata.ld.ExecQuery(queryString, f.queryResult) + err := ndata.ld.ExecQuery(queryString, f.queryResult) + if err != nil { + vcl.ShowMessage(err.Error()) + return + } } func (f *TMainForm) OnNavChange(sender vcl.IObject, node *vcl.TTreeNode) {