|
8 | 8 |
|
9 | 9 | _ "github.com/libsql/libsql-client-go/libsql" |
10 | 10 | _ "github.com/mattn/go-sqlite3" |
11 | | - "github.com/xwb1989/sqlparser" |
12 | 11 |
|
13 | 12 | "github.com/libsql/libsql-shell-go/pkg/shell/enums" |
14 | 13 | "github.com/libsql/libsql-shell-go/pkg/shell/shellerrors" |
@@ -61,9 +60,31 @@ func (db *Db) Close() { |
61 | 60 | db.sqlDb.Close() |
62 | 61 | } |
63 | 62 |
|
| 63 | +func splitStatementToPieces(statementsString string) (pieces []string, err error) { |
| 64 | + pieces = make([]string, 0, 16) |
| 65 | + embedded := map[rune]bool{'\'': false, '"': false} |
| 66 | + stmtBegin := 0 |
| 67 | + var stmt string |
| 68 | + for i, char := range statementsString { |
| 69 | + if status, present := embedded[char]; present { |
| 70 | + embedded[char] = !status |
| 71 | + } |
| 72 | + if embedded['\''] || embedded['"'] || char != ';' { |
| 73 | + continue |
| 74 | + } |
| 75 | + stmt = statementsString[stmtBegin : i] |
| 76 | + pieces = append(pieces, stmt) |
| 77 | + stmtBegin = i+1 |
| 78 | + } |
| 79 | + if stmtBegin < len(statementsString) { |
| 80 | + pieces = append(pieces, statementsString[stmtBegin :]) |
| 81 | + } |
| 82 | + return pieces, nil |
| 83 | +} |
| 84 | + |
64 | 85 | func (db *Db) ExecuteStatements(statementsString string) (StatementsResult, error) { |
65 | 86 |
|
66 | | - statements, err := sqlparser.SplitStatementToPieces(statementsString) |
| 87 | + statements, err := splitStatementToPieces(statementsString) |
67 | 88 | if err != nil { |
68 | 89 | return StatementsResult{}, err |
69 | 90 | } |
|
0 commit comments