Skip to content

Commit 74339f1

Browse files
authored
Merge pull request #9693 from dolthub/nicktobey/sql
Ensure that errors are displayed in interactive mode
2 parents b4b20cf + 2636fa8 commit 74339f1

File tree

3 files changed

+35
-3
lines changed

3 files changed

+35
-3
lines changed

go/cmd/dolt/commands/sql.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -841,7 +841,9 @@ func execShell(sqlCtx *sql.Context, qryist cli.Queryist, format engine.PrintResu
841841
sqlStmt, err := sqlparser.Parse(query)
842842
// silently skip empty statements
843843
if err == nil || err == sqlparser.ErrEmpty {
844-
sqlSch, rowIter, _, err := processParsedQuery(sqlCtx, query, qryist, sqlStmt)
844+
var sqlSch sql.Schema
845+
var rowIter sql.RowIter
846+
sqlSch, rowIter, _, err = processParsedQuery(sqlCtx, query, qryist, sqlStmt)
845847
if err != nil {
846848
verr := formatQueryError("", err)
847849
shell.Println(verr.Verbose())
@@ -852,13 +854,16 @@ func execShell(sqlCtx *sql.Context, qryist cli.Queryist, format engine.PrintResu
852854
default:
853855
err = engine.PrettyPrintResults(sqlCtx, closureFormat, sqlSch, rowIter, pagerEnabled, toggleWarnings, true, binaryAsHex)
854856
}
857+
if err != nil {
858+
verr := formatQueryError("", err)
859+
shell.Println(verr.Verbose())
860+
}
855861
} else {
856862
if _, isUseStmt := sqlStmt.(*sqlparser.Use); isUseStmt {
857863
cli.Println("Database Changed")
858864
}
859865
}
860-
}
861-
if err != nil {
866+
} else {
862867
shell.Println(color.RedString(err.Error()))
863868
}
864869
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#!/usr/bin/expect
2+
3+
set timeout 5
4+
set env(NO_COLOR) 1
5+
6+
source "$env(BATS_CWD)/helper/common_expect_functions.tcl"
7+
8+
spawn dolt sql
9+
10+
expect_with_defaults {dolt-repo-[0-9]+/main\*> } { send "SELECT DOES_NOT_EXIST();\r" }
11+
12+
expect_with_defaults_2 "function: 'does_not_exist' not found\r" {dolt-repo-[0-9]+/main\*> } { send "SELECT JSON_PRETTY(\"INVALID\");\r" }
13+
14+
expect_with_defaults_2 "Invalid JSON text in argument 1 to function json_pretty: \"INVALID\"\r" {dolt-repo-[0-9]+/main\*> } { send "quit\r" }
15+
16+
expect eof
17+
exit

integration-tests/bats/sql-shell.bats

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,16 @@ teardown() {
3131
[ "$status" -eq 0 ]
3232
}
3333

34+
# bats test_tags=no_lambda
35+
@test "sql-shell: Query errors are printed in interactive shell" {
36+
skiponwindows "Need to install expect and make this script work on windows."
37+
if [ "$SQL_ENGINE" = "remote-engine" ]; then
38+
skip "shell on server returns Empty Set instead of OkResult"
39+
fi
40+
run $BATS_TEST_DIRNAME/sql-shell-error.expect
41+
[ "$status" -eq 0 ]
42+
}
43+
3444
# bats test_tags=no_lambda
3545
@test "sql-shell: database changed is printed in interactive shell" {
3646
skiponwindows "Need to install expect and make this script work on windows."

0 commit comments

Comments
 (0)