Documentation ¶
Overview ¶
Package sqladapter provides common logic for SQL adapters.
Index ¶
- func IsKeyValue(v interface{}) bool
- func NewTx(adapter AdapterSession, tx *sql.Tx) (sqlbuilder.Tx, error)
- func NumActiveStatements() int64
- func RegisterAdapter(name string, adapter AdapterSession) sqlbuilder.Adapter
- func ReplaceWithDollarSign(in string) string
- func TxContext(ctx context.Context, sess sqlbuilder.Session, fn func(tx sqlbuilder.Tx) error) error
- type AdapterSession
- type BaseTx
- type Collection
- type CollectionAdapter
- type QueryStatus
- type Result
- func (r *Result) All(dst interface{}) error
- func (r *Result) And(conds ...interface{}) db.Result
- func (r *Result) Base() interface{}
- func (r *Result) Close() error
- func (r *Result) Count() (uint64, error)
- func (r *Result) Cursor(cursorColumn string) db.Result
- func (r *Result) Delete() error
- func (r *Result) Err() error
- func (r *Result) Exists() (bool, error)
- func (r *Result) Fn(in interface{}) error
- func (r *Result) GroupBy(fields ...interface{}) db.Result
- func (r *Result) Limit(n int) db.Result
- func (r *Result) Next(dst interface{}) bool
- func (r *Result) NextPage(cursorValue interface{}) db.Result
- func (r *Result) Offset(n int) db.Result
- func (r *Result) One(dst interface{}) error
- func (r *Result) OrderBy(fields ...interface{}) db.Result
- func (r *Result) Page(pageNumber uint) db.Result
- func (r *Result) Paginate(pageSize uint) db.Result
- func (r *Result) Prev() immutable.Immutable
- func (r *Result) PrevPage(cursorValue interface{}) db.Result
- func (r *Result) SQLBuilder() sqlbuilder.SQLBuilder
- func (r *Result) Select(fields ...interface{}) db.Result
- func (r *Result) String() string
- func (r *Result) TotalEntries() (uint64, error)
- func (r *Result) TotalPages() (uint, error)
- func (r *Result) Update(values interface{}) error
- func (r *Result) Where(conds ...interface{}) db.Result
- type Session
- type SessionTx
- type Stmt
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func IsKeyValue ¶
func IsKeyValue(v interface{}) bool
IsKeyValue reports whether v is a valid value for a primary key that can be used with Find(pKey).
func NewTx ¶
func NewTx(adapter AdapterSession, tx *sql.Tx) (sqlbuilder.Tx, error)
NewTx wraps a *sql.Tx and returns a sqlbuilder.Tx.
func NumActiveStatements ¶
func NumActiveStatements() int64
NumActiveStatements returns the global number of prepared statements in use at any point.
func RegisterAdapter ¶
func RegisterAdapter(name string, adapter AdapterSession) sqlbuilder.Adapter
RegisterAdapter registers a new SQL adapter.
func ReplaceWithDollarSign ¶
ReplaceWithDollarSign turns a SQL statament with '?' placeholders into dollar placeholders, like $1, $2, ..., $n
func TxContext ¶
func TxContext(ctx context.Context, sess sqlbuilder.Session, fn func(tx sqlbuilder.Tx) error) error
TxContext creates a transaction context and runs fn within it.
Types ¶
type AdapterSession ¶
type AdapterSession interface { Template() *exql.Template NewCollection() CollectionAdapter // Open opens a new connection OpenDSN(sess Session, dsn string) (*sql.DB, error) // Collections returns a list of non-system tables from the database. Collections(sess Session) ([]string, error) // TableExists returns an error if the given table does not exist. TableExists(sess Session, name string) error // LookupName returns the name of the database. LookupName(sess Session) (string, error) // PrimaryKeys returns all primary keys on the table. PrimaryKeys(sess Session, name string) ([]string, error) }
AdapterSession defines methods to be implemented by SQL adapters.
type BaseTx ¶
type BaseTx interface { db.Tx // Committed returns true if the transaction was already commited. Committed() bool }
BaseTx provides logic for methods that can be shared across all SQL adapters.
type Collection ¶
type Collection interface { // Insert inserts a new item into the collection. Insert(interface{}) (*db.InsertResult, error) // Name returns the name of the collection. Name() string // Session returns the db.Session the collection belongs to. Session() db.Session // Exists returns true if the collection exists, false otherwise. Exists() (bool, error) // Find defined a new result set. Find(conds ...interface{}) db.Result Count() (uint64, error) // Truncate removes all elements on the collection and resets the // collection's IDs. Truncate() error // InsertReturning inserts a new item into the collection and refreshes the // item with actual data from the database. This is useful to get automatic // values, such as timestamps, or IDs. InsertReturning(item interface{}) error // UpdateReturning updates an item from the collection and refreshes the item // with actual data from the database. This is useful to get automatic // values, such as timestamps, or IDs. UpdateReturning(item interface{}) error // PrimaryKeys returns the names of all primary keys in the table. PrimaryKeys() []string // SQLBuilder returns a sqlbuilder.SQLBuilder instance. SQLBuilder() sqlbuilder.SQLBuilder }
Collection satisfies db.Collection.
func NewCollection ¶
func NewCollection(sess Session, name string, adapter CollectionAdapter) Collection
NewCollection initializes a Collection by wrapping a CollectionAdapter.
type CollectionAdapter ¶
type CollectionAdapter interface { // Insert prepares and executes an INSERT statament. When the item is // succefully added, Insert returns a unique identifier of the newly added // element (or nil if the unique identifier couldn't be determined). Insert(Collection, interface{}) (interface{}, error) }
CollectionAdapter defines methods to be implemented by SQL adapters.
type QueryStatus ¶
type QueryStatus struct { SessID uint64 TxID uint64 RowsAffected *int64 LastInsertID *int64 Query string Args []interface{} Err error Start time.Time End time.Time Context context.Context }
QueryStatus represents the status of a query after being executed.
func (*QueryStatus) String ¶
func (q *QueryStatus) String() string
String returns a formatted log message.
type Result ¶
type Result struct {
// contains filtered or unexported fields
}
func NewResult ¶
func NewResult(builder sqlbuilder.SQLBuilder, table string, conds []interface{}) *Result
NewResult creates and Results a new Result set on the given table, this set is limited by the given exql.Where conditions.
func (*Result) Err ¶
Err returns the last error that has happened with the result set, nil otherwise
func (*Result) GroupBy ¶
GroupBy is used to group Results that have the same value in the same column or columns.
func (*Result) Offset ¶
Offset determines how many documents will be skipped before starting to grab Results.
func (*Result) OrderBy ¶
OrderBy determines sorting of Results according to the provided names. Fields may be prefixed by - (minus) which means descending order, ascending order would be used otherwise.
func (*Result) SQLBuilder ¶
func (r *Result) SQLBuilder() sqlbuilder.SQLBuilder
func (*Result) TotalEntries ¶
func (*Result) TotalPages ¶
type Session ¶
type Session interface { sqlbuilder.SQLBuilder // PrimaryKeys returns all primary keys on the table. PrimaryKeys(tableName string) ([]string, error) // Collections returns a list of references to all collections in the // database. Collections() ([]db.Collection, error) // Name returns the name of the database. Name() string // Close closes the database session Close() error // Ping checks if the database server is reachable. Ping() error // Reset clears all caches the session is using Reset() // Collection returns a new collection. Collection(string) db.Collection // ConnectionURL returns the ConnectionURL that was used to create the // Session. ConnectionURL() db.ConnectionURL // Open attempts to establish a connection to the database server. Open() error // TableExists returns an error if the table doesn't exists. TableExists(name string) error // Driver returns the underlying driver the session is using Driver() interface{} Save(db.Model) error Get(db.Model, interface{}) error // WaitForConnection attempts to run the given connection function a fixed // number of times before failing. WaitForConnection(func() error) error // BindDB sets the *sql.DB the session will use. BindDB(*sql.DB) error // Session returns the *sql.DB the session is using. DB() *sql.DB // BindTx binds a transaction to the current session. BindTx(context.Context, *sql.Tx) error // Returns the current transaction the session is using. Transaction() BaseTx // NewClone clones the database using the given AdapterSession as base. NewClone(AdapterSession, bool) (Session, error) // Context returns the default context the session is using. Context() context.Context // SetContext sets a default context for the session. SetContext(context.Context) // TxOptions returns the default TxOptions for new transactions in the // session. TxOptions() *sql.TxOptions // SetTxOptions sets default TxOptions for the session. SetTxOptions(txOptions sql.TxOptions) NewSessionTx(ctx context.Context) (SessionTx, error) NewTx(ctx context.Context) (sqlbuilder.Tx, error) Tx(fn func(sess sqlbuilder.Tx) error) error TxContext(ctx context.Context, fn func(sess sqlbuilder.Tx) error) error WithContext(context.Context) sqlbuilder.Session db.Settings }
Session satisfies db.Session.
func NewSession ¶
func NewSession(connURL db.ConnectionURL, adapter AdapterSession) Session
NewSession creates a new Session.
type SessionTx ¶
SessionTx represents a database session within a transaction.
func NewSessionTx ¶
NewSessionTx creates a database session within a transaction.
type Stmt ¶
Stmt represents a *sql.Stmt that is cached and provides the OnPurge method to allow it to clean after itself.
func NewStatement ¶
NewStatement creates an returns an opened statement