Fixed some context cancelation bugs in sql shell

This commit is contained in:
Zach Musgrave
2023-02-28 10:02:55 -08:00
parent 1764592c07
commit af184bdd55
2 changed files with 19 additions and 6 deletions

View File

@@ -895,6 +895,8 @@ func runShell(sqlCtx *sql.Context, se *engine.SqlEngine) error {
}
})
initialCtx := sqlCtx.Context
shell.Uninterpreted(func(c *ishell.Context) {
query := c.Args[0]
if len(strings.TrimSpace(query)) == 0 {
@@ -926,9 +928,7 @@ func runShell(sqlCtx *sql.Context, se *engine.SqlEngine) error {
var nextPrompt string
var sqlSch sql.Schema
var rowIter sql.RowIter
initialCtx := sqlCtx.Context
cont := func() bool {
subCtx, stop := signal.NotifyContext(initialCtx, os.Interrupt, syscall.SIGTERM)
defer stop()
@@ -979,8 +979,15 @@ func newCompleter(
ctx *sql.Context,
se *engine.SqlEngine,
) (completer *sqlCompleter, rerr error) {
subCtx, stop := signal.NotifyContext(ctx.Context, os.Interrupt, syscall.SIGTERM)
defer stop()
_, iter, err := se.Query(ctx, "select table_schema, table_name, column_name from information_schema.columns;")
sqlCtx, err := se.NewContext(subCtx, ctx.Session)
if err != nil {
return nil, err
}
_, iter, err := se.Query(sqlCtx, "select table_schema, table_name, column_name from information_schema.columns;")
if err != nil {
return nil, err
}
@@ -990,12 +997,12 @@ func newCompleter(
if err != nil && rerr == nil {
rerr = err
}
}(iter, ctx)
}(iter, sqlCtx)
identifiers := make(map[string]struct{})
var columnNames []string
for {
r, err := iter.Next(ctx)
r, err := iter.Next(sqlCtx)
if err == io.EOF {
break
} else if err != nil {

View File

@@ -2,30 +2,36 @@
set timeout 2
spawn dolt sql
expect {
"doltsql> " { send "CREATE TABLE test(pk BIGINT PRIMARY KEY, v1 BIGINT UNIQUE);\r"; }
timeout { exit 1; }
failed { exit 1; }
}
expect {
"doltsql> " { send "INSERT INTO test VALUES (0,0);\r"; }
timeout { exit 1; }
failed { exit 1; }
}
expect {
"doltsql> " { send "INSERT INTO test VALUES (1,0);\r"; }
timeout { exit 1; }
"UNIQUE" { exp_continue; }
failed { exp_continue; }
}
expect {
"doltsql> " { send "INSERT INTO test VALUES (1,1);\r"; }
timeout { exit 1; }
failed { exit 1; }
}
expect {
"doltsql> " { send "INSERT INTO test VALUES (2,2);\r"; }
timeout { exit 1; }
failed { exit 1; }
}
expect eof