summaryrefslogtreecommitdiff
path: root/vendor/github.com/ncruces/go-sqlite3/driver/driver.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/ncruces/go-sqlite3/driver/driver.go')
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/driver/driver.go38
1 files changed, 36 insertions, 2 deletions
diff --git a/vendor/github.com/ncruces/go-sqlite3/driver/driver.go b/vendor/github.com/ncruces/go-sqlite3/driver/driver.go
index c02ba4b4f..c6c758ac2 100644
--- a/vendor/github.com/ncruces/go-sqlite3/driver/driver.go
+++ b/vendor/github.com/ncruces/go-sqlite3/driver/driver.go
@@ -130,6 +130,11 @@ type SQLite struct {
term func(*sqlite3.Conn) error
}
+var (
+ // Ensure these interfaces are implemented:
+ _ driver.DriverContext = &SQLite{}
+)
+
// Open implements [database/sql/driver.Driver].
func (d *SQLite) Open(name string) (driver.Conn, error) {
c, err := d.newConnector(name)
@@ -255,6 +260,35 @@ func (n *connector) Connect(ctx context.Context) (_ driver.Conn, err error) {
return c, nil
}
+// Conn is implemented by the SQLite [database/sql] driver connections.
+//
+// It can be used to access SQLite features like [online backup]:
+//
+// db, err := driver.Open("temp.db")
+// if err != nil {
+// log.Fatal(err)
+// }
+// defer db.Close()
+//
+// conn, err := db.Conn(context.TODO())
+// if err != nil {
+// log.Fatal(err)
+// }
+//
+// err = conn.Raw(func(driverConn any) error {
+// conn := driverConn.(driver.Conn)
+// return conn.Raw().Backup("main", "backup.db")
+// })
+// if err != nil {
+// log.Fatal(err)
+// }
+//
+// [online backup]: https://sqlite.org/backup.html
+type Conn interface {
+ Raw() *sqlite3.Conn
+ driver.Conn
+}
+
type conn struct {
*sqlite3.Conn
txLock string
@@ -266,10 +300,10 @@ type conn struct {
var (
// Ensure these interfaces are implemented:
+ _ Conn = &conn{}
+ _ driver.ConnBeginTx = &conn{}
_ driver.ConnPrepareContext = &conn{}
_ driver.ExecerContext = &conn{}
- _ driver.ConnBeginTx = &conn{}
- _ sqlite3.DriverConn = &conn{}
)
func (c *conn) Raw() *sqlite3.Conn {