Documentation ¶
Overview ¶
Package sqlx provides general purpose extensions to database/sql.
It is intended to seamlessly wrap database/sql and provide convenience methods which are useful in the development of database driven applications. None of the underlying database/sql methods are changed. Instead all extended behavior is implemented through new methods defined on wrapper types.
Additions include scanning into structs, named query support, rebinding queries for different drivers, convenient shorthands for common error handling and more.
Index ¶
- Constants
- Variables
- func BindNamed(bindType int, query string, arg interface{}) (string, []interface{}, error)
- func BindType(driverName string) int
- func Get(q Queryer, dest interface{}, query string, args ...interface{}) error
- func In(query string, args ...interface{}) (string, []interface{}, error)
- func LoadFile(e Execer, path string) (*sql.Result, error)
- func MapScan(r ColScanner, dest map[string]interface{}) error
- func MustExec(e Execer, query string, args ...interface{}) sql.Result
- func Named(query string, arg interface{}) (string, []interface{}, error)
- func NamedExec(e Ext, query string, arg interface{}) (sql.Result, error)
- func Rebind(bindType int, query string) string
- func Select(q Queryer, dest interface{}, query string, args ...interface{}) error
- func SliceScan(r ColScanner) ([]interface{}, error)
- func StructScan(rows rowsi, dest interface{}) error
- type ColScanner
- type DB
- func (db *DB) Beginx() (*Tx, error)
- func (db *DB) BindNamed(query string, arg interface{}) (string, []interface{}, error)
- func (db *DB) DriverName() string
- func (db *DB) Get(dest interface{}, query string, args ...interface{}) error
- func (db *DB) MapperFunc(mf func(string) string)
- func (db *DB) MustBegin() *Tx
- func (db *DB) MustExec(query string, args ...interface{}) sql.Result
- func (db *DB) NamedExec(query string, arg interface{}) (sql.Result, error)
- func (db *DB) NamedQuery(query string, arg interface{}) (*Rows, error)
- func (db *DB) PrepareNamed(query string) (*NamedStmt, error)
- func (db *DB) Preparex(query string) (*Stmt, error)
- func (db *DB) QueryRowx(query string, args ...interface{}) *Row
- func (db *DB) Queryx(query string, args ...interface{}) (*Rows, error)
- func (db *DB) Rebind(query string) string
- func (db *DB) Select(dest interface{}, query string, args ...interface{}) error
- func (db *DB) Unsafe() *DB
- type Execer
- type Ext
- type NamedStmt
- func (n *NamedStmt) Close() error
- func (n *NamedStmt) Exec(arg interface{}) (sql.Result, error)
- func (n *NamedStmt) Get(dest interface{}, arg interface{}) error
- func (n *NamedStmt) MustExec(arg interface{}) sql.Result
- func (n *NamedStmt) Query(arg interface{}) (*sql.Rows, error)
- func (n *NamedStmt) QueryRow(arg interface{}) *Row
- func (n *NamedStmt) QueryRowx(arg interface{}) *Row
- func (n *NamedStmt) Queryx(arg interface{}) (*Rows, error)
- func (n *NamedStmt) Select(dest interface{}, arg interface{}) error
- func (n *NamedStmt) Unsafe() *NamedStmt
- type Preparer
- type Queryer
- type Row
- type Rows
- type Stmt
- func (s *Stmt) Get(dest interface{}, args ...interface{}) error
- func (s *Stmt) MustExec(args ...interface{}) sql.Result
- func (s *Stmt) QueryRowx(args ...interface{}) *Row
- func (s *Stmt) Queryx(args ...interface{}) (*Rows, error)
- func (s *Stmt) Select(dest interface{}, args ...interface{}) error
- func (s *Stmt) Unsafe() *Stmt
- type Tx
- func (tx *Tx) BindNamed(query string, arg interface{}) (string, []interface{}, error)
- func (tx *Tx) DriverName() string
- func (tx *Tx) Get(dest interface{}, query string, args ...interface{}) error
- func (tx *Tx) MustExec(query string, args ...interface{}) sql.Result
- func (tx *Tx) NamedExec(query string, arg interface{}) (sql.Result, error)
- func (tx *Tx) NamedQuery(query string, arg interface{}) (*Rows, error)
- func (tx *Tx) NamedStmt(stmt *NamedStmt) *NamedStmt
- func (tx *Tx) PrepareNamed(query string) (*NamedStmt, error)
- func (tx *Tx) Preparex(query string) (*Stmt, error)
- func (tx *Tx) QueryRowx(query string, args ...interface{}) *Row
- func (tx *Tx) Queryx(query string, args ...interface{}) (*Rows, error)
- func (tx *Tx) Rebind(query string) string
- func (tx *Tx) Select(dest interface{}, query string, args ...interface{}) error
- func (tx *Tx) Stmtx(stmt interface{}) *Stmt
- func (tx *Tx) Unsafe() *Tx
Constants ¶
const ( UNKNOWN = iota QUESTION DOLLAR NAMED )
Bindvar types supported by Rebind, BindMap and BindStruct.
Variables ¶
var NameMapper = strings.ToLower
NameMapper is used to map column names to struct field names. By default, it uses strings.ToLower to lowercase struct field names. It can be set to whatever you want, but it is encouraged to be set before sqlx is used as name-to-field mappings are cached after first use on a type.
Functions ¶
func BindNamed ¶
BindNamed binds a struct or a map to a query with named parameters. DEPRECATED: use sqlx.Named` instead of this, it may be removed in future.
func Get ¶
Get does a QueryRow using the provided Queryer, and scans the resulting row to dest. If dest is scannable, the result must only have one column. Otherwise, StructScan is used. Get will return sql.ErrNoRows like row.Scan would.
func In ¶
In expands slice values in args, returning the modified query string and a new arg list that can be executed by a database. The `query` should use the `?` bindVar. The return value uses the `?` bindVar.
func LoadFile ¶
LoadFile exec's every statement in a file (as a single call to Exec). LoadFile may return a nil *sql.Result if errors are encountered locating or reading the file at path. LoadFile reads the entire file into memory, so it is not suitable for loading large data dumps, but can be useful for initializing schemas or loading indexes.
FIXME: this does not really work with multi-statement files for mattn/go-sqlite3 or the go-mysql-driver/mysql drivers; pq seems to be an exception here. Detecting this by requiring something with DriverName() and then attempting to split the queries will be difficult to get right, and its current driver-specific behavior is deemed at least not complex in its incorrectness.
func MapScan ¶
func MapScan(r ColScanner, dest map[string]interface{}) error
MapScan scans a single Row into the dest map[string]interface{}. Use this to get results for SQL that might not be under your control (for instance, if you're building an interface for an SQL server that executes SQL from input). Please do not use this as a primary interface! This will modify the map sent to it in place, so reuse the same map with care. Columns which occur more than once in the result will overwrite eachother!
func Named ¶
Named takes a query using named parameters and an argument and returns a new query with a list of args that can be executed by a database. The return value uses the `?` bindvar.
func NamedExec ¶
NamedExec uses BindStruct to get a query executable by the driver and then runs Exec on the result. Returns an error from the binding or the query excution itself.
func Select ¶
Select executes a query using the provided Queryer, and StructScans each row into dest, which must be a slice. If the slice elements are scannable, then the result set must have only one column. Otherwise, StructScan is used. The *sql.Rows are closed automatically.
func SliceScan ¶
func SliceScan(r ColScanner) ([]interface{}, error)
SliceScan a row, returning a []interface{} with values similar to MapScan. This function is primarly intended for use where the number of columns is not known. Because you can pass an []interface{} directly to Scan, it's recommended that you do that as it will not have to allocate new slices per row.
func StructScan ¶
func StructScan(rows rowsi, dest interface{}) error
StructScan all rows from an sql.Rows or an sqlx.Rows into the dest slice. StructScan will scan in the entire rows result, so if you need do not want to allocate structs for the entire result, use Queryx and see sqlx.Rows.StructScan. If rows is sqlx.Rows, it will use its mapper, otherwise it will use the default.
Types ¶
type ColScanner ¶
type ColScanner interface { Columns() ([]string, error) Scan(dest ...interface{}) error Err() error }
ColScanner is an interface used by MapScan and SliceScan
type DB ¶
DB is a wrapper around sql.DB which keeps track of the driverName upon Open, used mostly to automatically bind named queries using the right bindvars.
func MustConnect ¶
MustConnect connects to a database and panics on error.
func MustOpen ¶
MustOpen is the same as sql.Open, but returns an *sqlx.DB instead and panics on error.
func NewDb ¶
NewDb returns a new sqlx DB wrapper for a pre-existing *sql.DB. The driverName of the original database is required for named query support.
func (*DB) DriverName ¶
DriverName returns the driverName passed to the Open function for this DB.
func (*DB) MapperFunc ¶
MapperFunc sets a new mapper for this db using the default sqlx struct tag and the provided mapper function.
func (*DB) MustBegin ¶
MustBegin starts a transaction, and panics on error. Returns an *sqlx.Tx instead of an *sql.Tx.
func (*DB) NamedQuery ¶
NamedQuery using this DB.
func (*DB) PrepareNamed ¶
PrepareNamed returns an sqlx.NamedStmt
type Ext ¶
Ext is a union interface which can bind, query, and exec, used by NamedQuery and NamedExec.
type NamedStmt ¶
NamedStmt is a prepared statement that executes named queries. Prepare it how you would execute a NamedQuery, but pass in a struct or map when executing.
func (*NamedStmt) Query ¶
Query executes a named statement using the struct argument, returning rows.
func (*NamedStmt) QueryRow ¶
QueryRow executes a named statement against the database. Because sqlx cannot create a *sql.Row with an error condition pre-set for binding errors, sqlx returns a *sqlx.Row instead.
func (*NamedStmt) QueryRowx ¶
QueryRowx this NamedStmt. Because of limitations with QueryRow, this is an alias for QueryRow.
type Queryer ¶
type Queryer interface { Query(query string, args ...interface{}) (*sql.Rows, error) Queryx(query string, args ...interface{}) (*Rows, error) QueryRowx(query string, args ...interface{}) *Row }
Queryer is an interface used by Get and Select
type Row ¶
Row is a reimplementation of sql.Row in order to gain access to the underlying sql.Rows.Columns() data, necessary for StructScan.
func (*Row) Columns ¶
Columns returns the underlying sql.Rows.Columns(), or the deferred error usually returned by Row.Scan()
func (*Row) Scan ¶
Scan is a fixed implementation of sql.Row.Scan, which does not discard the underlying error from the internal rows object if it exists.
func (*Row) StructScan ¶
StructScan a single Row into dest.
type Rows ¶
Rows is a wrapper around sql.Rows which caches costly reflect operations during a looped StructScan
func NamedQuery ¶
NamedQuery binds a named query and then runs Query on the result using the provided Ext (sqlx.Tx, sqlx.Db). It works with both structs and with map[string]interface{} types.
func (*Rows) StructScan ¶
StructScan is like sql.Rows.Scan, but scans a single Row into a single Struct. Use this and iterate over Rows manually when the memory load of Select() might be prohibitive. *Rows.StructScan caches the reflect work of matching up column positions to fields to avoid that overhead per scan, which means it is not safe to run StructScan on the same Rows instance with different struct types.
type Stmt ¶
Stmt is an sqlx wrapper around sql.Stmt with extra functionality
func (*Stmt) MustExec ¶
MustExec (panic) using this statement. Note that the query portion of the error output will be blank, as Stmt does not expose its query.
type Tx ¶
Tx is an sqlx wrapper around sql.Tx with extra functionality
func (*Tx) DriverName ¶
DriverName returns the driverName used by the DB which began this transaction.
func (*Tx) NamedQuery ¶
NamedQuery within a transaction.
func (*Tx) NamedStmt ¶
NamedStmt returns a version of the prepared statement which runs within a transaction.
func (*Tx) PrepareNamed ¶
PrepareNamed returns an sqlx.NamedStmt
Directories ¶
Path | Synopsis |
---|---|
Package reflectx implements extensions to the standard reflect lib suitable for implementing marshaling and unmarshaling packages.
|
Package reflectx implements extensions to the standard reflect lib suitable for implementing marshaling and unmarshaling packages. |