vendor: Mega update all dependencies
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4080
This commit is contained in:
50
vendor/github.com/cznic/ql/driver.go
generated
vendored
50
vendor/github.com/cznic/ql/driver.go
generated
vendored
@@ -14,8 +14,10 @@ import (
|
||||
"fmt"
|
||||
"io"
|
||||
"math/big"
|
||||
"net/url"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
@@ -144,23 +146,51 @@ func (d *sqlDriver) lock() func() {
|
||||
// efficient re-use.
|
||||
//
|
||||
// The returned connection is only used by one goroutine at a time.
|
||||
//
|
||||
// The name supported URL parameters:
|
||||
//
|
||||
// headroom Size of the WAL headroom. See https://github.com/cznic/ql/issues/140.
|
||||
func (d *sqlDriver) Open(name string) (driver.Conn, error) {
|
||||
if d != fileDriver && d != memDriver {
|
||||
switch {
|
||||
case d == fileDriver:
|
||||
if !strings.Contains(name, "://") && !strings.HasPrefix(name, "file") {
|
||||
name = "file://" + name
|
||||
}
|
||||
case d == memDriver:
|
||||
if !strings.Contains(name, "://") && !strings.HasPrefix(name, "memory") {
|
||||
name = "memory://" + name
|
||||
}
|
||||
default:
|
||||
return nil, fmt.Errorf("open: unexpected/unsupported instance of driver.Driver: %p", d)
|
||||
}
|
||||
|
||||
switch {
|
||||
case d == fileDriver && strings.HasPrefix(name, "file://"):
|
||||
name = name[len("file://"):]
|
||||
case d == fileDriver && strings.HasPrefix(name, "memory://"):
|
||||
d = memDriver
|
||||
name = name[len("memory://"):]
|
||||
name = filepath.ToSlash(name) // Ensure / separated URLs on Windows
|
||||
uri, err := url.Parse(name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
name = filepath.Clean(name)
|
||||
if name == "" || name == "." || name == string(os.PathSeparator) {
|
||||
|
||||
switch uri.Scheme {
|
||||
case "file":
|
||||
// ok
|
||||
case "memory":
|
||||
d = memDriver
|
||||
default:
|
||||
return nil, fmt.Errorf("open: unexpected/unsupported scheme: %s", uri.Scheme)
|
||||
}
|
||||
|
||||
name = filepath.Clean(filepath.Join(uri.Host, uri.Path))
|
||||
if d == fileDriver && (name == "" || name == "." || name == string(os.PathSeparator)) {
|
||||
return nil, fmt.Errorf("invalid DB name %q", name)
|
||||
}
|
||||
|
||||
var headroom int64
|
||||
if a := uri.Query()["headroom"]; len(a) != 0 {
|
||||
if headroom, err = strconv.ParseInt(a[0], 10, 64); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
defer d.lock()()
|
||||
db := d.dbs[name]
|
||||
if db == nil {
|
||||
@@ -170,7 +200,7 @@ func (d *sqlDriver) Open(name string) (driver.Conn, error) {
|
||||
case true:
|
||||
db0, err = OpenMem()
|
||||
default:
|
||||
db0, err = OpenFile(name, &Options{CanCreate: true})
|
||||
db0, err = OpenFile(name, &Options{CanCreate: true, Headroom: headroom})
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
Reference in New Issue
Block a user