Skip to content

Commit

Permalink
update repl
Browse files Browse the repository at this point in the history
  • Loading branch information
danicat committed Jul 14, 2024
1 parent 7bb4d05 commit fcaaf8f
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 16 deletions.
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ module github.com/danicat/testquery
go 1.22.5

require (
github.com/chzyer/readline v1.5.1
github.com/jedib0t/go-pretty/v6 v6.5.9
github.com/mattn/go-sqlite3 v1.14.22
golang.org/x/tools v0.23.0
Expand Down
7 changes: 7 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM=
github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ=
github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI=
github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk=
github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04=
github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/jedib0t/go-pretty/v6 v6.5.9 h1:ACteMBRrrmm1gMsXe9PSTOClQ63IXDUt03H5U+UV8OU=
Expand All @@ -12,6 +18,7 @@ github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg=
Expand Down
53 changes: 38 additions & 15 deletions main.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package main

import (
"bufio"
"context"
"database/sql"
"errors"
Expand All @@ -10,9 +9,11 @@ import (
"io"
"log"
"os"
"strings"

_ "github.com/mattn/go-sqlite3"

"github.com/chzyer/readline"
"github.com/jedib0t/go-pretty/v6/table"
)

Expand All @@ -21,13 +22,24 @@ func main() {
flag.Parse()

ctx := context.Background()
err := run(ctx, *pkgDir)

rl, err := readline.NewEx(&readline.Config{
Prompt: "> ",
HistoryFile: "/tmp/readline-multiline",
DisableAutoSaveHistory: true,
})
if err != nil {
log.Fatalln(err)
}
defer rl.Close()

err = run(ctx, *pkgDir, rl)
if err != nil && !errors.Is(err, io.EOF) && !errors.Is(err, context.Canceled) {
log.Fatalln(err)
}
}

func run(ctx context.Context, pkgDir string) error {
func run(ctx context.Context, pkgDir string, rl *readline.Instance) error {
// Initialize the in-memory SQLite database
db, err := sql.Open("sqlite3", ":memory:")
if err != nil {
Expand All @@ -45,7 +57,7 @@ func run(ctx context.Context, pkgDir string) error {
return fmt.Errorf("failed to populate tables: %w", err)
}

return prompt(ctx, db)
return prompt(ctx, db, rl)
}

func executeQuery(db *sql.DB, query string) error {
Expand Down Expand Up @@ -88,26 +100,37 @@ func executeQuery(db *sql.DB, query string) error {
return nil
}

func prompt(ctx context.Context, db *sql.DB) error {
reader := bufio.NewReader(os.Stdin)

func prompt(ctx context.Context, db *sql.DB, rl *readline.Instance) error {
var cmds []string
for {
select {
case <-ctx.Done():
return ctx.Err()
default:
}

fmt.Print("\n> ")
text, err := reader.ReadString('\n')
if errors.Is(err, io.EOF) {
fmt.Println()
return nil
} else if err != nil {
return fmt.Errorf("failed to read input: %w", err)
line, err := rl.Readline()
if err != nil {
return fmt.Errorf("failed to read line: %w", err)
}

err = executeQuery(db, text)
line = strings.TrimSpace(line)
if len(line) == 0 {
continue
}

cmds = append(cmds, line)
if !strings.HasSuffix(line, ";") {
rl.SetPrompt(">>> ")
continue
}

cmd := strings.Join(cmds, " ")
cmds = cmds[:0]
rl.SetPrompt("> ")
rl.SaveHistory(cmd)

err = executeQuery(db, cmd)
if err != nil {
fmt.Println("ERROR: ", err)
}
Expand Down
4 changes: 3 additions & 1 deletion sql/queries.sql
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@ select * from passed_tests;
select * from failed_tests;
select function_name, file, start_line, end_line from missing_coverage;
select test_name, function_name, start_line, end_line count from test_coverage where count > 0;
select file, line_number, content from all_code limit 10;
select file, line_number, content from all_code limit 10;

select file, line_number, content from all_code where (file, line_number) in (select file, start_line from test_coverage where count = 0);

0 comments on commit fcaaf8f

Please sign in to comment.