Documentation ¶
Overview ¶
Package query implements helpers around database/sql to execute various kinds of very common SQL queries.
Index ¶
- func Count(tx *sql.Tx, table string, where string, args ...interface{}) (int, error)
- func CountAll(tx *sql.Tx) (map[string]int, error)
- func DeleteObject(tx *sql.Tx, table string, id int64) (bool, error)
- func Dump(tx *sql.Tx, schema string, schemaOnly bool) (string, error)
- func InsertStrings(tx *sql.Tx, stmt string, values []string) error
- func IsRetriableError(err error) bool
- func Params(n int) string
- func Retry(f func() error) error
- func SelectConfig(tx *sql.Tx, table string, where string, args ...interface{}) (map[string]string, error)
- func SelectIntegers(tx *sql.Tx, query string, args ...interface{}) ([]int, error)
- func SelectObjects(stmt *sql.Stmt, dest Dest, args ...interface{}) error
- func SelectStrings(tx *sql.Tx, query string, args ...interface{}) ([]string, error)
- func SelectURIs(stmt *sql.Stmt, f func(a ...interface{}) string, args ...interface{}) ([]string, error)
- func Transaction(db *sql.DB, f func(*sql.Tx) error) error
- func UpdateConfig(tx *sql.Tx, table string, values map[string]string) error
- func UpsertObject(tx *sql.Tx, table string, columns []string, values []interface{}) (int64, error)
- type Dest
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func CountAll ¶
CountAll returns a map associating each table name in the database with the total count of its rows.
func DeleteObject ¶
DeleteObject removes the row identified by the given ID. The given table must have a primary key column called 'id'.
It returns a flag indicating if a matching row was actually found and deleted or not.
func Dump ¶
Dump returns a SQL text dump of all rows across all tables, similar to sqlite3's dump feature
func InsertStrings ¶
InsertStrings inserts a new row for each of the given strings, using the given insert statement template, which must define exactly one insertion column and one substitution placeholder for the values. For example: InsertStrings(tx, "INSERT INTO foo(name) VALUES %s", []string{"bar"}).
func IsRetriableError ¶
IsRetriableError returns true if the given error might be transient and the interaction can be safely retried.
func Params ¶
Params returns a parameters expression with the given number of '?' placeholders. E.g. Params(2) -> "(?, ?)". Useful for IN and VALUES expressions.
func Retry ¶
Retry wraps a function that interacts with the database, and retries it in case a transient error is hit.
This should by typically used to wrap transactions.
func SelectConfig ¶
func SelectConfig(tx *sql.Tx, table string, where string, args ...interface{}) (map[string]string, error)
SelectConfig executes a query statement against a "config" table, which must have 'key' and 'value' columns. By default this query returns all keys, but additional WHERE filters can be specified.
Returns a map of key names to their associated values.
func SelectIntegers ¶
SelectIntegers executes a statement which must yield rows with a single integer column. It returns the list of column values.
func SelectObjects ¶
SelectObjects executes a statement which must yield rows with a specific columns schema. It invokes the given Dest hook for each yielded row.
func SelectStrings ¶
SelectStrings executes a statement which must yield rows with a single string column. It returns the list of column values.
func SelectURIs ¶
func SelectURIs(stmt *sql.Stmt, f func(a ...interface{}) string, args ...interface{}) ([]string, error)
SelectURIs returns a list of LXD API URI strings for the resource yielded by the given query.
The f argument must be a function that formats the entity URI using the columns yielded by the query.
func Transaction ¶
Transaction executes the given function within a database transaction.
func UpdateConfig ¶
UpdateConfig updates the given keys in the given table. Config keys set to empty values will be deleted.
func UpsertObject ¶
UpsertObject inserts or replaces a new row with the given column values, to the given table using columns order. For example:
UpsertObject(tx, "cars", []string{"id", "brand"}, []interface{}{1, "ferrari"})
The number of elements in 'columns' must match the one in 'values'.