diff options
author | Alexander Menzhinsky <amenzhinsky@gmail.com> | 2017-05-01 23:49:25 +0300 |
---|---|---|
committer | Alexander Menzhinsky <amenzhinsky@gmail.com> | 2017-05-04 00:31:54 +0300 |
commit | a0ae409cb1d614ceeefe7c7fbed576e332fba262 (patch) | |
tree | b6a1b4349080e300d4c201fc45d1ad3663b2cf58 /sqlite_go18.go | |
parent | ced002fb38484376c1bc85a2cf1911e2a1aebaef (diff) |
Add named parameters support
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 +} |