diff options
Diffstat (limited to 'vendor/github.com/ncruces/go-sqlite3/driver')
-rw-r--r-- | vendor/github.com/ncruces/go-sqlite3/driver/driver.go | 2 | ||||
-rw-r--r-- | vendor/github.com/ncruces/go-sqlite3/driver/whitespace.go | 61 |
2 files changed, 62 insertions, 1 deletions
diff --git a/vendor/github.com/ncruces/go-sqlite3/driver/driver.go b/vendor/github.com/ncruces/go-sqlite3/driver/driver.go index 477e9a940..b9bb03bb7 100644 --- a/vendor/github.com/ncruces/go-sqlite3/driver/driver.go +++ b/vendor/github.com/ncruces/go-sqlite3/driver/driver.go @@ -379,7 +379,7 @@ func (c *conn) PrepareContext(ctx context.Context, query string) (driver.Stmt, e if err != nil { return nil, err } - if tail != "" { + if notWhitespace(tail) { s.Close() return nil, util.TailErr } diff --git a/vendor/github.com/ncruces/go-sqlite3/driver/whitespace.go b/vendor/github.com/ncruces/go-sqlite3/driver/whitespace.go new file mode 100644 index 000000000..8f45706f5 --- /dev/null +++ b/vendor/github.com/ncruces/go-sqlite3/driver/whitespace.go @@ -0,0 +1,61 @@ +package driver + +func notWhitespace(sql string) bool { + const ( + code = iota + slash + minus + ccomment + sqlcomment + endcomment + ) + + state := code + for _, b := range ([]byte)(sql) { + if b == 0 { + break + } + + switch state { + case code: + switch b { + case '/': + state = slash + case '-': + state = minus + case ' ', ';', '\t', '\n', '\v', '\f', '\r': + continue + default: + return true + } + case slash: + if b != '*' { + return true + } + state = ccomment + case minus: + if b != '-' { + return true + } + state = sqlcomment + case ccomment: + if b == '*' { + state = endcomment + } + case sqlcomment: + if b == '\n' { + state = code + } + case endcomment: + switch b { + case '/': + state = code + case '*': + state = endcomment + default: + state = ccomment + } + } + } + return state == slash || state == minus +} |