diff options
Diffstat (limited to 'sqlite_go18.go')
-rw-r--r-- | sqlite_go18.go | 72 |
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 +} |