aboutsummaryrefslogtreecommitdiff
path: root/sqlite_go18.go
diff options
context:
space:
mode:
Diffstat (limited to 'sqlite_go18.go')
-rw-r--r--sqlite_go18.go72
1 files changed, 72 insertions, 0 deletions
diff --git a/sqlite_go18.go b/sqlite_go18.go
new file mode 100644
index 0000000..4338dcc
--- /dev/null
+++ b/sqlite_go18.go
@@ -0,0 +1,72 @@
+// Copyright 2017 The Sqlite Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//+build go1.8
+
+package sqlite
+
+import (
+ "context"
+ "database/sql/driver"
+ "errors"
+)
+
+// Ping implements driver.Pinger
+func (c *conn) Ping(ctx context.Context) error {
+ c.Lock()
+ defer c.Unlock()
+
+ if c.ppdb == 0 {
+ return errors.New("db is closed")
+ }
+
+ _, err := c.ExecContext(ctx, "select 1", nil)
+ return err
+}
+
+// BeginTx implements driver.ConnBeginTx
+func (c *conn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) {
+ return c.begin(ctx, txOptions{
+ Isolation: int(opts.Isolation),
+ ReadOnly: opts.ReadOnly,
+ })
+}
+
+// PrepareContext implements driver.ConnPrepareContext
+func (c *conn) PrepareContext(ctx context.Context, query string) (driver.Stmt, error) {
+ return c.prepare(ctx, query)
+}
+
+// ExecContext implements driver.ExecerContext
+func (c *conn) ExecContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Result, error) {
+ return c.exec(ctx, query, toNamedValues2(args))
+}
+
+// QueryContext implements driver.QueryerContext
+func (c *conn) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error) {
+ return c.query(ctx, query, toNamedValues2(args))
+}
+
+// ExecContext implements driver.StmtExecContext
+func (s *stmt) ExecContext(ctx context.Context, args []driver.NamedValue) (driver.Result, error) {
+ return s.exec(ctx, toNamedValues2(args))
+}
+
+// QueryContext implements driver.StmtQueryContext
+func (s *stmt) QueryContext(ctx context.Context, args []driver.NamedValue) (driver.Rows, error) {
+ return s.query(ctx, toNamedValues2(args))
+}
+
+// converts []driver.NamedValue to []namedValue
+func toNamedValues2(vals []driver.NamedValue) []namedValue {
+ args := make([]namedValue, 0, len(vals))
+ for _, val := range vals {
+ args = append(args, namedValue{
+ Name: val.Name,
+ Ordinal: val.Ordinal,
+ Value: val.Value,
+ })
+ }
+ return args
+}