aboutsummaryrefslogtreecommitdiff
path: root/sqlite_go18.go
diff options
context:
space:
mode:
authorAlexander Menzhinsky <amenzhinsky@gmail.com>2017-05-01 23:49:25 +0300
committerAlexander Menzhinsky <amenzhinsky@gmail.com>2017-05-04 00:31:54 +0300
commita0ae409cb1d614ceeefe7c7fbed576e332fba262 (patch)
treeb6a1b4349080e300d4c201fc45d1ad3663b2cf58 /sqlite_go18.go
parentced002fb38484376c1bc85a2cf1911e2a1aebaef (diff)
Add named parameters support
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
+}