Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion go/cmd/dolt/commands/debug.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import (

"github.com/dolthub/go-mysql-server/sql"
"github.com/dolthub/go-mysql-server/sql/analyzer"
"github.com/dolthub/ishell"
"github.com/pkg/profile"
"github.com/sirupsen/logrus"
textunicode "golang.org/x/text/encoding/unicode"
Expand Down Expand Up @@ -391,7 +392,7 @@ func debugAnalyze(ctx *sql.Context, tempDir string, sqlEng *engine.SqlEngine, sq
cli.CliErr = origCliErr
}()

scanner := NewStreamScanner(sqlFile)
scanner := ishell.NewStreamScanner(sqlFile)
var query string
for scanner.Scan() {
if fileReadProg != nil {
Expand Down
3 changes: 2 additions & 1 deletion go/cmd/dolt/commands/filter-branch.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
sqle "github.com/dolthub/go-mysql-server"
"github.com/dolthub/go-mysql-server/sql"
"github.com/dolthub/go-mysql-server/sql/analyzer"
"github.com/dolthub/ishell"

"github.com/dolthub/dolt/go/cmd/dolt/cli"
"github.com/dolthub/dolt/go/cmd/dolt/commands/engine"
Expand Down Expand Up @@ -281,7 +282,7 @@ func processFilterQuery(ctx context.Context, dEnv *env.DoltEnv, root doltdb.Root
return nil, err
}

scanner := NewStreamScanner(strings.NewReader(query))
scanner := ishell.NewStreamScanner(strings.NewReader(query))
if err != nil {
return nil, err
}
Expand Down
74 changes: 48 additions & 26 deletions go/cmd/dolt/commands/sql.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ import (
"golang.org/x/text/transform"
"gopkg.in/src-d/go-errors.v1"

eventsapi "github.com/dolthub/eventsapi_schema/dolt/services/eventsapi/v1alpha1"

"github.com/dolthub/dolt/go/cmd/dolt/cli"
"github.com/dolthub/dolt/go/cmd/dolt/cli/prompt"
"github.com/dolthub/dolt/go/cmd/dolt/commands/engine"
Expand All @@ -50,7 +52,6 @@ import (
"github.com/dolthub/dolt/go/libraries/utils/iohelp"
"github.com/dolthub/dolt/go/libraries/utils/osutil"
"github.com/dolthub/dolt/go/store/val"
eventsapi "github.com/dolthub/eventsapi_schema/dolt/services/eventsapi/v1alpha1"
)

var sqlDocs = cli.CommandDocumentationContent{
Expand Down Expand Up @@ -624,7 +625,7 @@ func validateSqlArgs(apr *argparser.ArgParseResults) error {

// execBatchMode runs all the queries in the input reader
func execBatchMode(ctx *sql.Context, qryist cli.Queryist, input io.Reader, continueOnErr bool, format engine.PrintResultFormat, binaryAsHex bool) error {
scanner := NewStreamScanner(input)
scanner := ishell.NewStreamScanner(input)
var query string
for scanner.Scan() {
// The session we get is wrapped in a command begin/end block.
Expand All @@ -647,7 +648,7 @@ func execBatchMode(ctx *sql.Context, qryist cli.Queryist, input io.Reader, conti
if err == sqlparser.ErrEmpty {
continue
} else if err != nil {
err = buildBatchSqlErr(scanner.state.statementStartLine, query, err)
err = buildBatchSqlErr(scanner.StatementStartLine(), query, err)
if !continueOnErr {
return err
} else {
Expand All @@ -659,7 +660,7 @@ func execBatchMode(ctx *sql.Context, qryist cli.Queryist, input io.Reader, conti
ctx.SetQueryTime(time.Now())
sqlSch, rowIter, _, err := processParsedQuery(ctx, query, qryist, sqlStatement)
if err != nil {
err = buildBatchSqlErr(scanner.state.statementStartLine, query, err)
err = buildBatchSqlErr(scanner.StatementStartLine(), query, err)
if !continueOnErr {
return err
} else {
Expand All @@ -678,7 +679,7 @@ func execBatchMode(ctx *sql.Context, qryist cli.Queryist, input io.Reader, conti
}
err = engine.PrettyPrintResults(ctx, format, sqlSch, rowIter, false, false, false, binaryAsHex)
if err != nil {
err = buildBatchSqlErr(scanner.state.statementStartLine, query, err)
err = buildBatchSqlErr(scanner.StatementStartLine(), query, err)
if !continueOnErr {
return err
} else {
Expand All @@ -690,7 +691,7 @@ func execBatchMode(ctx *sql.Context, qryist cli.Queryist, input io.Reader, conti
}

if err := scanner.Err(); err != nil {
return buildBatchSqlErr(scanner.state.statementStartLine, query, err)
return buildBatchSqlErr(scanner.StatementStartLine(), query, err)
}

return nil
Expand Down Expand Up @@ -844,38 +845,59 @@ func execShell(sqlCtx *sql.Context, qryist cli.Queryist, format engine.PrintResu
}
}
} else {
// statements holds the individual SQL statements to run. For
// normal input, ishell already scanned the typed input into
// complete statements (single pass). The \edit transform produces
// new SQL that ishell never saw, so split it here.
statements := c.Statements
if cmdType == TransformCommand {
query = newQuery
trackHistory(shell, query+";")
statements = nil
scanner := ishell.NewStreamScannerWithDelimiter(strings.NewReader(query), shell.LineTerminator())
for scanner.Scan() {
statements = append(statements, scanner.Text())
}
if scanErr := scanner.Err(); scanErr != nil {
shell.Println(color.RedString(scanErr.Error()))
}
}
lastSqlCmd = query
sqlStmt, err := sqlparser.Parse(query)
// silently skip empty statements
if err == nil || err == sqlparser.ErrEmpty {
var sqlSch sql.Schema
var rowIter sql.RowIter
sqlSch, rowIter, _, err = processParsedQuery(sqlCtx, query, qryist, sqlStmt)

for _, stmt := range statements {
if strings.TrimSpace(stmt) == "" {
continue
}
sqlStmt, err := sqlparser.Parse(stmt)
if err == sqlparser.ErrEmpty {
continue
}
if err != nil {
verr := formatQueryError("", err)
shell.Println(color.RedString(err.Error()))
continue
}
sqlSch, rowIter, _, execErr := processParsedQuery(sqlCtx, stmt, qryist, sqlStmt)
if execErr != nil {
verr := formatQueryError("", execErr)
shell.Println(verr.Verbose())
} else if rowIter != nil {
continue
}
if rowIter != nil {
switch closureFormat {
case engine.FormatTabular, engine.FormatVertical:
err = engine.PrettyPrintResultsExtended(sqlCtx, closureFormat, sqlSch, rowIter, pagerEnabled, toggleWarnings, true, binaryAsHex)
if printErr := engine.PrettyPrintResultsExtended(sqlCtx, closureFormat, sqlSch, rowIter, pagerEnabled, toggleWarnings, true, binaryAsHex); printErr != nil {
verr := formatQueryError("", printErr)
shell.Println(verr.Verbose())
}
default:
err = engine.PrettyPrintResults(sqlCtx, closureFormat, sqlSch, rowIter, pagerEnabled, toggleWarnings, true, binaryAsHex)
}
if err != nil {
verr := formatQueryError("", err)
shell.Println(verr.Verbose())
}
} else {
if _, isUseStmt := sqlStmt.(*sqlparser.Use); isUseStmt {
cli.Println("Database Changed")
if printErr := engine.PrettyPrintResults(sqlCtx, closureFormat, sqlSch, rowIter, pagerEnabled, toggleWarnings, true, binaryAsHex); printErr != nil {
verr := formatQueryError("", printErr)
shell.Println(verr.Verbose())
}
}
} else if _, isUseStmt := sqlStmt.(*sqlparser.Use); isUseStmt {
cli.Println("Database Changed")
}
} else {
shell.Println(color.RedString(err.Error()))
}
}

Expand Down
Loading
Loading