1// +build go1.8
2
3package squirrel
4
5import (
6	"context"
7	"database/sql"
8
9	"github.com/lann/builder"
10)
11
12func (d *insertData) ExecContext(ctx context.Context) (sql.Result, error) {
13	if d.RunWith == nil {
14		return nil, RunnerNotSet
15	}
16	ctxRunner, ok := d.RunWith.(ExecerContext)
17	if !ok {
18		return nil, NoContextSupport
19	}
20	return ExecContextWith(ctx, ctxRunner, d)
21}
22
23func (d *insertData) QueryContext(ctx context.Context) (*sql.Rows, error) {
24	if d.RunWith == nil {
25		return nil, RunnerNotSet
26	}
27	ctxRunner, ok := d.RunWith.(QueryerContext)
28	if !ok {
29		return nil, NoContextSupport
30	}
31	return QueryContextWith(ctx, ctxRunner, d)
32}
33
34func (d *insertData) QueryRowContext(ctx context.Context) RowScanner {
35	if d.RunWith == nil {
36		return &Row{err: RunnerNotSet}
37	}
38	queryRower, ok := d.RunWith.(QueryRowerContext)
39	if !ok {
40		if _, ok := d.RunWith.(QueryerContext); !ok {
41			return &Row{err: RunnerNotQueryRunner}
42		}
43		return &Row{err: NoContextSupport}
44	}
45	return QueryRowContextWith(ctx, queryRower, d)
46}
47
48// ExecContext builds and ExecContexts the query with the Runner set by RunWith.
49func (b InsertBuilder) ExecContext(ctx context.Context) (sql.Result, error) {
50	data := builder.GetStruct(b).(insertData)
51	return data.ExecContext(ctx)
52}
53
54// QueryContext builds and QueryContexts the query with the Runner set by RunWith.
55func (b InsertBuilder) QueryContext(ctx context.Context) (*sql.Rows, error) {
56	data := builder.GetStruct(b).(insertData)
57	return data.QueryContext(ctx)
58}
59
60// QueryRowContext builds and QueryRowContexts the query with the Runner set by RunWith.
61func (b InsertBuilder) QueryRowContext(ctx context.Context) RowScanner {
62	data := builder.GetStruct(b).(insertData)
63	return data.QueryRowContext(ctx)
64}
65
66// ScanContext is a shortcut for QueryRowContext().Scan.
67func (b InsertBuilder) ScanContext(ctx context.Context, dest ...interface{}) error {
68	return b.QueryRowContext(ctx).Scan(dest...)
69}
70