Skip to content

Commit

Permalink
cli: use tx in insert command
Browse files Browse the repository at this point in the history
  • Loading branch information
tzzed authored Feb 26, 2022
1 parent 2282f4b commit b4606f7
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 7 deletions.
14 changes: 14 additions & 0 deletions cmd/genji/commands/insert.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"github.com/cockroachdb/errors"
"github.com/urfave/cli/v2"

"github.com/genjidb/genji"
"github.com/genjidb/genji/cmd/genji/dbutil"
)

Expand Down Expand Up @@ -88,6 +89,19 @@ func runInsertCommand(ctx context.Context, dbPath, table string, auto bool, args
}
defer db.Close()

err = insert(db, table, createTable, args...)
if err != nil {
if createTable {
_ = os.RemoveAll(dbPath)
}

return err
}

return nil
}

func insert(db *genji.DB, table string, createTable bool, args ...string) error {
if createTable {
err := db.Exec("CREATE TABLE " + table)
if err != nil {
Expand Down
19 changes: 12 additions & 7 deletions cmd/genji/dbutil/insert.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,27 @@ import (
"io"

"github.com/cockroachdb/errors"

"github.com/genjidb/genji"
"github.com/genjidb/genji/document"
)

// InsertJSON reads json documents from r and inserts them into the selected table.
// The reader can be either a stream of json objects or an array of objects.
func InsertJSON(db *genji.DB, table string, r io.Reader) error {
tx, err := db.Begin(true)
if err != nil {
return err
}
defer tx.Rollback()

q := fmt.Sprintf("INSERT INTO %s VALUES ?", table)
rd := bufio.NewReader(r)
var c byte
var err error

// read first non white space byte to determine
// read first non-white space byte to determine
// whether we are reading from a json stream or
// an array of json objects.
c, err = readByteIgnoreWhitespace(rd)
c, err := readByteIgnoreWhitespace(rd)
if err != nil {
return err
}
Expand All @@ -43,7 +48,7 @@ func InsertJSON(db *genji.DB, table string, r io.Reader) error {
return err
}

if err := db.Exec(q, &fb); err != nil {
if err := tx.Exec(q, &fb); err != nil {
return err
}
}
Expand All @@ -66,7 +71,7 @@ func InsertJSON(db *genji.DB, table string, r io.Reader) error {
return err
}

if err := db.Exec(q, &fb); err != nil {
if err := tx.Exec(q, &fb); err != nil {
return err
}
}
Expand All @@ -84,7 +89,7 @@ func InsertJSON(db *genji.DB, table string, r io.Reader) error {
return fmt.Errorf("found %q, but expected '{' or '['", c)
}

return nil
return tx.Commit()
}

func readByteIgnoreWhitespace(r *bufio.Reader) (byte, error) {
Expand Down

0 comments on commit b4606f7

Please sign in to comment.