Skip to content

Commit

Permalink
Update cmd/genji
Browse files Browse the repository at this point in the history
  • Loading branch information
tie committed Oct 9, 2020
1 parent e5a9fa1 commit 8e1af49
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 50 deletions.
6 changes: 3 additions & 3 deletions cmd/genji/insert.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ func skipSpaces(r *bufio.Reader) (byte, error) {
return c, nil
}

func executeInsertCommand(ctx context.Context, db *genji.DB, table string, r io.Reader) error {
func executeInsertCommand(db *genji.DB, table string, r io.Reader) error {
q := fmt.Sprintf("INSERT INTO %s VALUES ?", table)
rd := bufio.NewReader(r)
var c byte
Expand Down Expand Up @@ -153,15 +153,15 @@ func runInsertCommand(ctx context.Context, e, dbPath, table string, auto bool, a
fi, _ := os.Stdin.Stat()
m := fi.Mode()
if (m & os.ModeNamedPipe) != 0 {
return executeInsertCommand(ctx, db, table, os.Stdin)
return executeInsertCommand(db, table, os.Stdin)
}

if len(args) == 0 {
return errors.New("no data to insert")
}

for _, arg := range args {
if err := executeInsertCommand(ctx, db, table, strings.NewReader(arg)); err != nil {
if err := executeInsertCommand(db, table, strings.NewReader(arg)); err != nil {
return err
}
}
Expand Down
23 changes: 10 additions & 13 deletions cmd/genji/insert_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,13 @@ func TestExecuteInsertCommand(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ctx := context.Background()
db, err := genji.Open(ctx, ":memory:")
db, err := genji.Open(context.Background(), ":memory:")
require.NoError(t, err)
defer db.Close()

err = db.Exec(`CREATE TABLE foo`)
require.NoError(t, err)
err = executeInsertCommand(ctx, db, "foo", strings.NewReader(tt.data))
err = executeInsertCommand(db, "foo", strings.NewReader(tt.data))
if tt.fails {
require.Error(t, err)
return
Expand All @@ -48,7 +47,7 @@ func TestExecuteInsertCommand(t *testing.T) {
require.NoError(t, err)

var buf bytes.Buffer
err = document.IteratorToJSON(ctx, &buf, res)
err = document.IteratorToJSON(&buf, res)
require.NoError(t, err)
require.JSONEq(t, tt.want, buf.String())

Expand All @@ -70,21 +69,20 @@ func TestExecuteInsertCommand(t *testing.T) {
`{"Name": "Sam", "Text": "Go fmt who?"}`,
`{"Name": "Ed", "Text": "Go fmt yourself!"}`}

ctx := context.Background()
db, err := genji.Open(ctx, ":memory:")
db, err := genji.Open(context.Background(), ":memory:")
require.NoError(t, err)
defer db.Close()

err = db.Exec(`CREATE TABLE foo`)
require.NoError(t, err)
err = executeInsertCommand(ctx, db, "foo", strings.NewReader(jsonArray))
err = executeInsertCommand(db, "foo", strings.NewReader(jsonArray))
require.NoError(t, err)
res, err := db.Query("SELECT * FROM foo")
defer res.Close()
require.NoError(t, err)

i := 0
_ = res.Iterate(ctx, func(d document.Document) error {
_ = res.Iterate(func(d document.Document) error {
data, err := document.MarshalJSON(d)
require.NoError(t, err)
require.JSONEq(t, jsonStreamResult[i], string(data))
Expand All @@ -106,31 +104,30 @@ func TestExecuteInsertCommand(t *testing.T) {
`{"Name": "Sam", "Text": "Go fmt who?"}`,
`{"Name": "Ed", "Text": "Go fmt yourself!"}`}

ctx := context.Background()
db, err := genji.Open(ctx, ":memory:")
db, err := genji.Open(context.Background(), ":memory:")
defer db.Close()
require.NoError(t, err)

err = db.Exec(`CREATE TABLE foo`)
require.NoError(t, err)

err = executeInsertCommand(ctx, db, "foo", strings.NewReader(jsonStream))
err = executeInsertCommand(db, "foo", strings.NewReader(jsonStream))
require.NoError(t, err)

res, err := db.Query("SELECT * FROM foo")
defer res.Close()
require.NoError(t, err)

i := 0
_ = res.Iterate(ctx, func(d document.Document) error {
_ = res.Iterate(func(d document.Document) error {
data, err := document.MarshalJSON(d)
require.NoError(t, err)
require.JSONEq(t, jsonStreamResult[i], string(data))
i++
return nil
})

wantCount, err := res.Count(ctx)
wantCount, err := res.Count()
require.NoError(t, err)
require.Equal(t, wantCount, i)
})
Expand Down
4 changes: 1 addition & 3 deletions cmd/genji/main.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package main

import (
"context"
"fmt"
"os"

Expand Down Expand Up @@ -113,8 +112,7 @@ $ curl https://api.github.com/repos/genjidb/genji/issues | genji insert --db my.
engine = "badger"
}

ctx := context.Background()
return shell.Run(ctx, &shell.Options{
return shell.Run(c.Context, &shell.Options{
Engine: engine,
DBPath: dbpath,
})
Expand Down
33 changes: 16 additions & 17 deletions cmd/genji/shell/command.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package shell

import (
"bytes"
"context"
"fmt"
"io"
"strings"
Expand All @@ -26,7 +25,7 @@ var commands = []struct {
}

// runTablesCmd shows all tables.
func runTablesCmd(ctx context.Context, db *genji.DB, cmd []string) error {
func runTablesCmd(db *genji.DB, cmd []string) error {
if len(cmd) > 1 {
return fmt.Errorf("usage: .tables")
}
Expand All @@ -37,7 +36,7 @@ func runTablesCmd(ctx context.Context, db *genji.DB, cmd []string) error {
}
defer res.Close()

return res.Iterate(ctx, func(d document.Document) error {
return res.Iterate(func(d document.Document) error {
var tableName string
err = document.Scan(d, &tableName)
if err != nil {
Expand Down Expand Up @@ -80,14 +79,14 @@ func displayTableIndex(db *genji.DB, tableName string) error {
}

// displayAllIndexes shows all indexes that the database contains.
func displayAllIndexes(ctx context.Context, db *genji.DB) error {
func displayAllIndexes(db *genji.DB) error {
res, err := db.Query("SELECT * FROM __genji_indexes")
if err != nil {
return err
}
defer res.Close()

return res.Iterate(ctx, func(d document.Document) error {
return res.Iterate(func(d document.Document) error {
var index database.IndexConfig

if err := index.ScanDocument(d); err != nil {
Expand All @@ -102,14 +101,14 @@ func displayAllIndexes(ctx context.Context, db *genji.DB) error {
}

// runIndexesCmd executes all indexes of the database or all indexes of the given table.
func runIndexesCmd(ctx context.Context, db *genji.DB, in []string) error {
func runIndexesCmd(db *genji.DB, in []string) error {
switch len(in) {
case 1:
// If the input is ".indexes"
return displayAllIndexes(ctx, db)
return displayAllIndexes(db)
case 2:
// If the input is ".indexes <tableName>"
return displayTableIndex(ctx, db, in[1])
return displayTableIndex(db, in[1])
}

return fmt.Errorf("usage: .indexes [tablename]")
Expand Down Expand Up @@ -156,10 +155,10 @@ func displaySuggestions(in string) error {
}

// dumpTable displays the content of the given table as SQL statements.
func dumpTable(ctx context.Context, tx *genji.Tx, tableName string, w io.Writer) error {
func dumpTable(tx *genji.Tx, tableName string, w io.Writer) error {
var buf bytes.Buffer

t, err := tx.GetTable(ctx, tableName)
t, err := tx.GetTable(tx.Context, tableName)
if err != nil {
return err
}
Expand All @@ -168,7 +167,7 @@ func dumpTable(ctx context.Context, tx *genji.Tx, tableName string, w io.Writer)
return err
}

ti, err := t.Info(ctx)
ti, err := t.Info(tx.Context)
if err != nil {
return err
}
Expand Down Expand Up @@ -210,7 +209,7 @@ func dumpTable(ctx context.Context, tx *genji.Tx, tableName string, w io.Writer)
buf.Reset()

// Indexes statements.
indexes, err := t.Indexes(ctx)
indexes, err := t.Indexes(tx.Context)
if err != nil {
return err
}
Expand All @@ -237,7 +236,7 @@ func dumpTable(ctx context.Context, tx *genji.Tx, tableName string, w io.Writer)

// Inserts statements.
insert := fmt.Sprintf("INSERT INTO %s VALUES ", t.Name())
return res.Iterate(ctx, func(d document.Document) error {
return res.Iterate(func(d document.Document) error {
buf.WriteString(insert)

data, err := document.MarshalJSON(d)
Expand All @@ -258,7 +257,7 @@ func dumpTable(ctx context.Context, tx *genji.Tx, tableName string, w io.Writer)
}

// runDumpCmd dumps the given tables if provided, otherwise it dumps the whole database.
func runDumpCmd(ctx context.Context, db *genji.DB, tables []string, w io.Writer) error {
func runDumpCmd(db *genji.DB, tables []string, w io.Writer) error {
tx, err := db.Begin(false)
if err != nil {
return err
Expand All @@ -270,7 +269,7 @@ func runDumpCmd(ctx context.Context, db *genji.DB, tables []string, w io.Writer)
}

for i, table := range tables {
err = dumpTable(ctx, tx, table, w)
err = dumpTable(tx, table, w)
switch err {
case nil:
// Blank separation between tables.
Expand Down Expand Up @@ -305,7 +304,7 @@ func runDumpCmd(ctx context.Context, db *genji.DB, tables []string, w io.Writer)
defer res.Close()

i := 0
err = res.Iterate(ctx, func(d document.Document) error {
err = res.Iterate(func(d document.Document) error {
// Blank separation between tables.
if i > 0 {
if _, err := fmt.Fprintln(w, ""); err != nil {
Expand All @@ -320,7 +319,7 @@ func runDumpCmd(ctx context.Context, db *genji.DB, tables []string, w io.Writer)
return err
}

if err := dumpTable(ctx, tx, tableName, w); err != nil {
if err := dumpTable(tx, tableName, w); err != nil {
return err
}

Expand Down
15 changes: 6 additions & 9 deletions cmd/genji/shell/command_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,7 @@ func TestRunTablesCmd(t *testing.T) {
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
ctx := context.Background()
db, err := genji.Open(ctx, ":memory:")
db, err := genji.Open(context.Background(), ":memory:")
require.NoError(t, err)
defer db.Close()

Expand Down Expand Up @@ -67,8 +66,7 @@ func TestIndexesCmd(t *testing.T) {

for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
ctx := context.Background()
db, err := genji.Open(ctx, ":memory:")
db, err := genji.Open(context.Background(), ":memory:")
require.NoError(t, err)
defer db.Close()

Expand All @@ -80,7 +78,7 @@ func TestIndexesCmd(t *testing.T) {
CREATE INDEX idx_c ON test (c);
`)
require.NoError(t, err)
if err := runIndexesCmd(ctx, db, test.in); (err != nil) != test.wantErr {
if err := runIndexesCmd(db, test.in); (err != nil) != test.wantErr {
require.Errorf(t, err, "", test.wantErr)
}
})
Expand All @@ -105,8 +103,7 @@ func TestRunDumpCmd(t *testing.T) {

testFn := func(withIndexes, withConstraints bool) func(t *testing.T) {
return func(t *testing.T) {
ctx := context.Background()
db, err := genji.Open(ctx, ":memory:")
db, err := genji.Open(context.Background(), ":memory:")
require.NoError(t, err)
defer db.Close()

Expand Down Expand Up @@ -136,7 +133,7 @@ func TestRunDumpCmd(t *testing.T) {
err = db.View(func(tx *genji.Tx) error {
// indexes is unordered, we cannot guess the order.
// we have to test only one index creation.
indexes, err := tx.ListIndexes(ctx)
indexes, err := tx.ListIndexes(tx.Context)
require.NoError(t, err)
for _, index := range indexes {
info := fmt.Sprintf("CREATE INDEX %s ON %s (%s);\n", index.IndexName, index.TableName,
Expand All @@ -158,7 +155,7 @@ func TestRunDumpCmd(t *testing.T) {
bwant.WriteString(tt.want)

var buf bytes.Buffer
err = runDumpCmd(ctx, db, []string{`test`}, &buf)
err = runDumpCmd(db, []string{`test`}, &buf)
require.NoError(t, err)
bwant.WriteString(ci)
require.Equal(t, bwant.String(), buf.String())
Expand Down
10 changes: 5 additions & 5 deletions cmd/genji/shell/shell.go
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ func (sh *Shell) runCommand(ctx context.Context, in string) error {
return err
}

return runTablesCmd(ctx, db, cmd)
return runTablesCmd(db, cmd)
case ".exit":
if len(cmd) > 1 {
return fmt.Errorf("usage: .exit")
Expand All @@ -301,14 +301,14 @@ func (sh *Shell) runCommand(ctx context.Context, in string) error {
if err != nil {
return err
}
return runIndexesCmd(ctx, db, cmd)
return runIndexesCmd(db, cmd)
case ".dump":
db, err := sh.getDB(ctx)
if err != nil {
return err
}

return runDumpCmd(ctx, db, cmd[1:], os.Stdout)
return runDumpCmd(db, cmd[1:], os.Stdout)
default:
return displaySuggestions(in)
}
Expand All @@ -332,7 +332,7 @@ func (sh *Shell) runQuery(ctx context.Context, q string) error {
enc := json.NewEncoder(os.Stdout)
enc.SetEscapeHTML(false)
enc.SetIndent("", " ")
return res.Iterate(ctx, func(d document.Document) error {
return res.Iterate(func(d document.Document) error {
return enc.Encode(d)
})
}
Expand Down Expand Up @@ -444,7 +444,7 @@ func (sh *Shell) getAllTables(ctx context.Context) ([]string, error) {
}
defer res.Close()

err = res.Iterate(ctx, func(d document.Document) error {
err = res.Iterate(func(d document.Document) error {
var tableName string
err = document.Scan(d, &tableName)
if err != nil {
Expand Down

0 comments on commit 8e1af49

Please sign in to comment.