|
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,40 @@ 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 | + embeddedChar := ' ' |
| 66 | + var stmt string |
| 67 | + stmtBegin := 0 |
| 68 | + for i, char := range statementsString { |
| 69 | + if char == embeddedChar && char != ' ' { |
| 70 | + embeddedChar = ' ' |
| 71 | + continue |
| 72 | + } |
| 73 | + if (char == '\'' || char == '"') && embeddedChar == ' ' { |
| 74 | + embeddedChar = char |
| 75 | + continue |
| 76 | + } |
| 77 | + if embeddedChar != ' ' || char != ';' { |
| 78 | + continue |
| 79 | + } |
| 80 | + stmt = strings.TrimSpace(statementsString[stmtBegin : i+1]) |
| 81 | + if len(stmt) < 1 || strings.HasPrefix(stmt, ";") { |
| 82 | + stmtBegin = i + 1 |
| 83 | + continue |
| 84 | + } |
| 85 | + pieces = append(pieces, stmt) |
| 86 | + stmtBegin = i + 1 |
| 87 | + } |
| 88 | + if stmtBegin < len(statementsString) { |
| 89 | + pieces = append(pieces, statementsString[stmtBegin:]) |
| 90 | + } |
| 91 | + return pieces, nil |
| 92 | +} |
| 93 | + |
64 | 94 | func (db *Db) ExecuteStatements(statementsString string) (StatementsResult, error) {
|
65 | 95 |
|
66 |
| - statements, err := sqlparser.SplitStatementToPieces(statementsString) |
| 96 | + statements, err := splitStatementToPieces(statementsString) |
67 | 97 | if err != nil {
|
68 | 98 | return StatementsResult{}, err
|
69 | 99 | }
|
|
0 commit comments