Skip to content

Commit

Permalink
Explicit message error for ErrTableNotFound (#255)
Browse files Browse the repository at this point in the history
Co-authored-by: Ivan Trubach <[email protected]>
  • Loading branch information
carlosfrodrigues and tie authored Oct 13, 2020
1 parent 78c310c commit 5eed8d4
Show file tree
Hide file tree
Showing 7 changed files with 53 additions and 30 deletions.
25 changes: 13 additions & 12 deletions cmd/genji/shell/command.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package shell
import (
"bytes"
"context"
"errors"
"fmt"
"io"
"strings"
Expand Down Expand Up @@ -83,7 +84,7 @@ func displayTableIndex(db *genji.DB, tableName string) error {
_, err := tx.QueryDocument(ctx, "SELECT table_name FROM __genji_tables WHERE table_name = ?", tableName)
if err != nil {
if err == database.ErrDocumentNotFound {
return database.ErrTableNotFound
return fmt.Errorf("%w: %q", database.ErrTableNotFound, tableName)
}

return err
Expand Down Expand Up @@ -313,21 +314,21 @@ func runDumpCmd(db *genji.DB, tables []string, w io.Writer) error {

for i, table := range tables {
err = dumpTable(tx, table, w)
switch err {
case nil:
// Blank separation between tables.
if i > 0 {
if _, err := fmt.Fprintln(w, ""); err != nil {
return err
}
if err != nil {
// If table doesn’t exist we skip it.
if errors.Is(err, database.ErrTableNotFound) {
continue
}

case database.ErrTableNotFound: // If table doesn't exist we skip it.
continue
default:
_, err = fmt.Fprintln(w, "COMMIT;")
return err
}

// Blank separation between tables.
if i > 0 {
if _, err := fmt.Fprintln(w, ""); err != nil {
return err
}
}
}

// tables slice argument is not empty, all args tables has been displayed.
Expand Down
11 changes: 6 additions & 5 deletions database/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package database
import (
"bytes"
"encoding/binary"
"fmt"
"sync"

"github.com/genjidb/genji/document"
Expand Down Expand Up @@ -230,11 +231,11 @@ func (t *tableInfoStore) Get(tx *Transaction, tableName string) (*TableInfo, err

info, ok := t.tableInfos[tableName]
if !ok {
return nil, ErrTableNotFound
return nil, fmt.Errorf("%w: %q", ErrTableNotFound, tableName)
}

if info.transactionID != 0 && info.transactionID != tx.id {
return nil, ErrTableNotFound
return nil, fmt.Errorf("%w: %q", ErrTableNotFound, tableName)
}

return &info, nil
Expand All @@ -246,11 +247,11 @@ func (t *tableInfoStore) Delete(tx *Transaction, tableName string) error {

info, ok := t.tableInfos[tableName]
if !ok {
return ErrTableNotFound
return fmt.Errorf("%w: %q", ErrTableNotFound, tableName)
}

if info.transactionID != 0 && info.transactionID != tx.id {
return ErrTableNotFound
return fmt.Errorf("%w: %q", ErrTableNotFound, tableName)
}

st, err := tx.tx.GetStore([]byte(tableInfoStoreName))
Expand All @@ -261,7 +262,7 @@ func (t *tableInfoStore) Delete(tx *Transaction, tableName string) error {
key := []byte(tableName)
err = st.Delete(key)
if err == engine.ErrKeyNotFound {
return ErrTableNotFound
return fmt.Errorf("%w: %q", ErrTableNotFound, tableName)
}
if err != nil {
return err
Expand Down
9 changes: 7 additions & 2 deletions database/config_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package database

import (
"errors"
"testing"

"github.com/genjidb/genji/document"
Expand Down Expand Up @@ -64,15 +65,19 @@ func TestTableInfoStore(t *testing.T) {

// Getting a non-existing TableInfo should not work.
_, err = tx.tableInfoStore.Get(tx, "unknown")
require.Equal(t, ErrTableNotFound, err)
if !errors.Is(err, ErrTableNotFound) {
require.Equal(t, err, ErrTableNotFound)
}

// Deleting an existing TableInfo should work.
err = tx.tableInfoStore.Delete(tx, "foo1")
require.NoError(t, err)

// Deleting a non-existing TableInfo should not work.
err = tx.tableInfoStore.Delete(tx, "foo1")
require.Equal(t, ErrTableNotFound, err)
if !errors.Is(err, ErrTableNotFound) {
require.Equal(t, err, ErrTableNotFound)
}
})

t.Run("on rollback", func(t *testing.T) {
Expand Down
26 changes: 19 additions & 7 deletions database/transaction_test.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package database_test

import (
"errors"
"testing"

"github.com/genjidb/genji/database"
"github.com/genjidb/genji/document"
"github.com/genjidb/genji/document/encoding/msgpack"
Expand Down Expand Up @@ -79,7 +79,9 @@ func TestTxTable(t *testing.T) {

// Getting a table that doesn't exist should fail.
_, err = tx.GetTable("unknown")
require.EqualError(t, err, database.ErrTableNotFound.Error())
if !errors.Is(err, database.ErrTableNotFound) {
require.Equal(t, err, database.ErrTableNotFound)
}
})

t.Run("Drop", func(t *testing.T) {
Expand All @@ -94,11 +96,15 @@ func TestTxTable(t *testing.T) {

// Getting a table that has been dropped should fail.
_, err = tx.GetTable("test")
require.EqualError(t, err, database.ErrTableNotFound.Error())
if !errors.Is(err, database.ErrTableNotFound) {
require.Equal(t, err, database.ErrTableNotFound)
}

// Dropping a table that doesn't exist should fail.
err = tx.DropTable("test")
require.EqualError(t, err, database.ErrTableNotFound.Error())
if !errors.Is(err, database.ErrTableNotFound) {
require.Equal(t, err, database.ErrTableNotFound)
}
})

t.Run("Rename", func(t *testing.T) {
Expand All @@ -124,7 +130,9 @@ func TestTxTable(t *testing.T) {

// Getting the old table should return an error.
_, err = tx.GetTable("foo")
require.EqualError(t, database.ErrTableNotFound, err.Error())
if !errors.Is(err, database.ErrTableNotFound) {
require.Equal(t, err, database.ErrTableNotFound)
}

tb, err := tx.GetTable("zoo")
require.NoError(t, err)
Expand All @@ -144,7 +152,9 @@ func TestTxTable(t *testing.T) {

// Renaming a non existing table should return an error
err = tx.RenameTable("foo", "")
require.EqualError(t, database.ErrTableNotFound, err.Error())
if !errors.Is(err, database.ErrTableNotFound) {
require.Equal(t, err, database.ErrTableNotFound)
}
})
}

Expand Down Expand Up @@ -190,7 +200,9 @@ func TestTxCreateIndex(t *testing.T) {
err := tx.CreateIndex(database.IndexConfig{
IndexName: "idxFoo", TableName: "test", Path: parsePath(t, "foo"),
})
require.Equal(t, database.ErrTableNotFound, err)
if !errors.Is(err, database.ErrTableNotFound) {
require.Equal(t, err, database.ErrTableNotFound)
}
})
}

Expand Down
5 changes: 4 additions & 1 deletion sql/query/alter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package query_test

import (
"context"
"errors"
"testing"

"github.com/genjidb/genji"
Expand Down Expand Up @@ -33,7 +34,9 @@ func TestAlterTable(t *testing.T) {

// Selecting from the old name should fail.
err = db.Exec(ctx, "SELECT * FROM foo")
require.EqualError(t, err, database.ErrTableNotFound.Error())
if !errors.Is(err, database.ErrTableNotFound) {
require.Equal(t, err, database.ErrTableNotFound)
}

d, err := db.QueryDocument(ctx, "SELECT * FROM bar")
data, err := document.MarshalJSON(d)
Expand Down
2 changes: 1 addition & 1 deletion sql/query/drop.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ func (stmt DropTableStmt) Run(ctx context.Context, tx *database.Transaction, arg
}

err := tx.DropTable(stmt.TableName)
if err == database.ErrTableNotFound && stmt.IfExists {
if errors.Is(err, database.ErrTableNotFound) && stmt.IfExists {
err = nil
}

Expand Down
5 changes: 3 additions & 2 deletions sql/query/reindex.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ package query

import (
"context"

"errors"

"github.com/genjidb/genji/database"
"github.com/genjidb/genji/sql/query/expr"
)
Expand Down Expand Up @@ -30,7 +31,7 @@ func (stmt ReIndexStmt) Run(ctx context.Context, tx *database.Transaction, args
if err == nil {
return res, t.ReIndex()
}
if err != database.ErrTableNotFound {
if !errors.Is(err, database.ErrTableNotFound) {
return res, err
}

Expand Down

0 comments on commit 5eed8d4

Please sign in to comment.