71 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
package db
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"database/sql"
 | 
						|
 | 
						|
	"github.com/go-gorp/gorp/v3"
 | 
						|
)
 | 
						|
 | 
						|
// These interfaces exist to aid in mocking database operations for unit tests.
 | 
						|
//
 | 
						|
// By convention, any function that takes a OneSelector, Selector,
 | 
						|
// Inserter, Execer, or SelectExecer as as an argument expects
 | 
						|
// that a context has already been applied to the relevant DbMap or
 | 
						|
// Transaction object.
 | 
						|
 | 
						|
// A OneSelector is anything that provides a `SelectOne` function.
 | 
						|
type OneSelector interface {
 | 
						|
	SelectOne(interface{}, string, ...interface{}) error
 | 
						|
}
 | 
						|
 | 
						|
// A Selector is anything that provides a `Select` function.
 | 
						|
type Selector interface {
 | 
						|
	Select(interface{}, string, ...interface{}) ([]interface{}, error)
 | 
						|
}
 | 
						|
 | 
						|
// A Inserter is anything that provides an `Insert` function
 | 
						|
type Inserter interface {
 | 
						|
	Insert(list ...interface{}) error
 | 
						|
}
 | 
						|
 | 
						|
// A Execer is anything that provides an `Exec` function
 | 
						|
type Execer interface {
 | 
						|
	Exec(string, ...interface{}) (sql.Result, error)
 | 
						|
}
 | 
						|
 | 
						|
// SelectExecer offers a subset of gorp.SqlExecutor's methods: Select and
 | 
						|
// Exec.
 | 
						|
type SelectExecer interface {
 | 
						|
	Selector
 | 
						|
	Execer
 | 
						|
}
 | 
						|
 | 
						|
// DatabaseMap offers the full combination of OneSelector, Inserter,
 | 
						|
// SelectExecer, and a Begin function for creating a Transaction.
 | 
						|
type DatabaseMap interface {
 | 
						|
	OneSelector
 | 
						|
	Inserter
 | 
						|
	SelectExecer
 | 
						|
	Begin() (Transaction, error)
 | 
						|
}
 | 
						|
 | 
						|
// Executor offers the full combination of OneSelector, Inserter, SelectExecer
 | 
						|
// and adds a handful of other high level Gorp methods we use in Boulder.
 | 
						|
type Executor interface {
 | 
						|
	OneSelector
 | 
						|
	Inserter
 | 
						|
	SelectExecer
 | 
						|
	Delete(...interface{}) (int64, error)
 | 
						|
	Get(interface{}, ...interface{}) (interface{}, error)
 | 
						|
	Update(...interface{}) (int64, error)
 | 
						|
}
 | 
						|
 | 
						|
// Transaction extends an Executor and adds Rollback, Commit, and WithContext.
 | 
						|
type Transaction interface {
 | 
						|
	Executor
 | 
						|
	Rollback() error
 | 
						|
	Commit() error
 | 
						|
	WithContext(ctx context.Context) gorp.SqlExecutor
 | 
						|
}
 |