Skip to content

Commit

Permalink
Add forgotten ctx methods for DeleteBuilder (#246)
Browse files Browse the repository at this point in the history
Signed-off-by: Pierre Fenoll <pierrefenoll@gmail.com>
  • Loading branch information
fenollp committed Apr 27, 2020
1 parent 8186d41 commit 31b423b
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 1 deletion.
42 changes: 42 additions & 0 deletions delete_ctx.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,50 @@ func (d *deleteData) ExecContext(ctx context.Context) (sql.Result, error) {
return ExecContextWith(ctx, ctxRunner, d)
}

func (d *deleteData) QueryContext(ctx context.Context) (*sql.Rows, error) {
if d.RunWith == nil {
return nil, RunnerNotSet
}
ctxRunner, ok := d.RunWith.(QueryerContext)
if !ok {
return nil, NoContextSupport
}
return QueryContextWith(ctx, ctxRunner, d)
}

func (d *deleteData) QueryRowContext(ctx context.Context) RowScanner {
if d.RunWith == nil {
return &Row{err: RunnerNotSet}
}
queryRower, ok := d.RunWith.(QueryRowerContext)
if !ok {
if _, ok := d.RunWith.(QueryerContext); !ok {
return &Row{err: RunnerNotQueryRunner}
}
return &Row{err: NoContextSupport}
}
return QueryRowContextWith(ctx, queryRower, d)
}

// ExecContext builds and ExecContexts the query with the Runner set by RunWith.
func (b DeleteBuilder) ExecContext(ctx context.Context) (sql.Result, error) {
data := builder.GetStruct(b).(deleteData)
return data.ExecContext(ctx)
}

// QueryContext builds and QueryContexts the query with the Runner set by RunWith.
func (b DeleteBuilder) QueryContext(ctx context.Context) (*sql.Rows, error) {
data := builder.GetStruct(b).(deleteData)
return data.QueryContext(ctx)
}

// QueryRowContext builds and QueryRowContexts the query with the Runner set by RunWith.
func (b DeleteBuilder) QueryRowContext(ctx context.Context) RowScanner {
data := builder.GetStruct(b).(deleteData)
return data.QueryRowContext(ctx)
}

// ScanContext is a shortcut for QueryRowContext().Scan.
func (b DeleteBuilder) ScanContext(ctx context.Context, dest ...interface{}) error {
return b.QueryRowContext(ctx).Scan(dest...)
}
17 changes: 16 additions & 1 deletion delete_ctx_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,26 @@ func TestDeleteBuilderContextRunners(t *testing.T) {

b.ExecContext(ctx)
assert.Equal(t, expectedSql, db.LastExecSql)

b.QueryContext(ctx)
assert.Equal(t, expectedSql, db.LastQuerySql)

b.QueryRowContext(ctx)
assert.Equal(t, expectedSql, db.LastQueryRowSql)

err := b.ScanContext(ctx)
assert.NoError(t, err)
}

func TestDeleteBuilderContextNoRunner(t *testing.T) {
b := Delete("test")
b := Delete("test").Where("x != ?", 0).Suffix("RETURNING x")

_, err := b.ExecContext(ctx)
assert.Equal(t, RunnerNotSet, err)

_, err = b.QueryContext(ctx)
assert.Equal(t, RunnerNotSet, err)

err = b.ScanContext(ctx)
assert.Equal(t, RunnerNotSet, err)
}

0 comments on commit 31b423b

Please sign in to comment.