Skip to content

Commit 863285a

Browse files
remove-naive-query-framentation
1 parent 066a666 commit 863285a

4 files changed

Lines changed: 24 additions & 20 deletions

File tree

internal/stackql/acid/tsm_physio/best_effort_orchestrator.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ package tsm_physio //nolint:revive,stylecheck // prefer this nomenclature
22

33
import (
44
"fmt"
5-
"strings"
65

6+
"github.com/stackql/stackql-parser/go/vt/sqlparser"
77
"github.com/stackql/stackql/internal/stackql/acid/binlog"
88
"github.com/stackql/stackql/internal/stackql/acid/tsm"
99
"github.com/stackql/stackql/internal/stackql/acid/txn_context"
@@ -42,7 +42,8 @@ func (orc *bestEffortOrchestrator) processQueryOrQueries(
4242
) ([]internaldto.ExecutorOutput, bool) {
4343
var retVal []internaldto.ExecutorOutput
4444
cmdString := handlerCtx.GetRawQuery()
45-
for _, s := range strings.Split(cmdString, ";") {
45+
splitQueries, _ := sqlparser.SplitStatementToPieces(cmdString)
46+
for _, s := range splitQueries {
4647
response, hasResponse := orc.processQuery(handlerCtx, s)
4748
if hasResponse {
4849
retVal = append(retVal, response...)

internal/stackql/acid/tsm_physio/txn_orchestrator.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ package tsm_physio //nolint:stylecheck,revive // prefer this nomenclature
22

33
import (
44
"fmt"
5-
"strings"
65

76
"github.com/stackql/any-sdk/pkg/constants"
7+
"github.com/stackql/stackql-parser/go/vt/sqlparser"
88
"github.com/stackql/stackql/internal/stackql/acid/tsm"
99
"github.com/stackql/stackql/internal/stackql/acid/txn_context"
1010
"github.com/stackql/stackql/internal/stackql/handler"
@@ -68,7 +68,8 @@ func (orc *standardOrchestrator) processQueryOrQueries(
6868
) ([]internaldto.ExecutorOutput, bool) {
6969
var retVal []internaldto.ExecutorOutput
7070
cmdString := handlerCtx.GetRawQuery()
71-
for _, s := range strings.Split(cmdString, ";") {
71+
splitQueries, _ := sqlparser.SplitStatementToPieces(cmdString)
72+
for _, s := range splitQueries {
7273
response, hasResponse := orc.processQuery(handlerCtx, s)
7374
if hasResponse {
7475
retVal = append(retVal, response...)

internal/stackql/cmd/shell.go

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525

2626
"github.com/stackql/any-sdk/pkg/dto"
2727
"github.com/stackql/any-sdk/pkg/logging"
28+
"github.com/stackql/stackql-parser/go/vt/sqlparser"
2829
"github.com/stackql/stackql/internal/stackql/config"
2930
"github.com/stackql/stackql/internal/stackql/driver"
3031
"github.com/stackql/stackql/internal/stackql/entryutil"
@@ -225,20 +226,24 @@ var shellCmd = &cobra.Command{
225226
if inlineCommentIdx > -1 {
226227
line = line[:inlineCommentIdx]
227228
}
228-
semiColonIdx := strings.Index(line, ";")
229-
if semiColonIdx > -1 {
230-
line = strings.TrimSpace(line[:semiColonIdx+1])
231-
subSemiColonIdx := strings.Index(line, ";")
232-
sb.WriteString(" " + line[:subSemiColonIdx+1])
233-
rawQuery := sb.String()
234-
queryToExecute, qErr := entryutil.PreprocessInline(runtimeCtx, rawQuery)
235-
if qErr != nil {
236-
io.WriteString(outErrFile, "\r\n"+qErr.Error()+"\r\n") //nolint:errcheck // TODO: investigate
229+
hasRHSSemiColon := strings.HasSuffix(strings.TrimSpace(line), ";")
230+
splitQueries, _ := sqlparser.SplitStatementToPieces(line)
231+
if len(splitQueries) > 0 {
232+
for i, s := range splitQueries {
233+
if i == len(splitQueries)-1 && !hasRHSSemiColon {
234+
sb.Reset()
235+
sb.WriteString(s)
236+
}
237+
line = s
238+
sb.WriteString(" " + line)
239+
rawQuery := sb.String()
240+
queryToExecute, qErr := entryutil.PreprocessInline(runtimeCtx, rawQuery)
241+
if qErr != nil {
242+
io.WriteString(outErrFile, "\r\n"+qErr.Error()+"\r\n") //nolint:errcheck // TODO: investigate
243+
}
244+
l.WriteToHistory(rawQuery) //nolint:errcheck // TODO: investigate
245+
sessionRunnerInstance.RunCommand(queryToExecute)
237246
}
238-
l.WriteToHistory(rawQuery) //nolint:errcheck // TODO: investigate
239-
sessionRunnerInstance.RunCommand(queryToExecute)
240-
sb.Reset()
241-
sb.WriteString(line[subSemiColonIdx+1:])
242247
} else {
243248
sb.WriteString(" " + line)
244249
}

internal/stackql/driver/driver.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,6 @@ func (dr *basicStackQLDriver) CloneSQLBackend() sqlbackend.ISQLBackend {
147147
//nolint:revive // TODO: review
148148
func (dr *basicStackQLDriver) HandleSimpleQuery(ctx context.Context, query string) (sqldata.ISQLResultStream, error) {
149149
dr.handlerCtx.SetRawQuery(query)
150-
// if strings.Count(query, ";") > 1 {
151-
// return nil, fmt.Errorf("only support single queries in server mode at this time")
152-
// }
153150
res, ok := dr.processQueryOrQueries(dr.handlerCtx)
154151
if !ok {
155152
return nil, fmt.Errorf("no SQLresults available")

0 commit comments

Comments
 (0)