diff options
-rw-r--r-- | main.go | 28 |
1 files changed, 24 insertions, 4 deletions
@@ -77,8 +77,13 @@ Running debby with any other arguments will run it as a dolt command.` fmt.Println(err) } case "": - // Execute command - ExecuteDoltCommand(args...) + // Execute command or if it's not a valid command, run as SQL + if !ExecuteDoltCommand(args...) { + err = RunSQL(strings.Join(args, " "), "") + if err != nil { + fmt.Println(err) + } + } case "exit", "quit": // Exit return @@ -123,7 +128,8 @@ func Readline() string { return rtext } -func ExecuteDoltCommand(args ...string) { +// Return false if the comand is not a real Dolt command +func ExecuteDoltCommand(args ...string) bool { var nargs []string var join bool // If an arg starts with a quote, start joining everything to the last element until an arg ends with a quote @@ -148,7 +154,11 @@ func ExecuteDoltCommand(args ...string) { cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr cmd.Stdin = os.Stdin - cmd.Run() + err := cmd.Run() + if err != nil { + return false + } + return true } func SaveToTable(table, file string) error { @@ -260,12 +270,22 @@ func RunSQL(query, table string) error { defer os.Remove(f.Name()) // Run the query and write the output to the file + // If the output is empty, return nil cmd := exec.Command("dolt", "sql", "-q", query, "-r", "csv") cmd.Stdout = f + cmd.Stderr = os.Stderr err = cmd.Run() if err != nil { return err } + f.Close() + fi, err := os.Stat(f.Name()) + if err != nil { + return err + } + if fi.Size() == 0 { + return nil + } // Open the file in visidata err = OpenVisidata(f.Name(), "-f", "csv") |