Package driver
Overview ?
Overview ?
Package driver defines interfaces to be implemented by database drivers as used by package sql.
Most code should use package sql.
Index
- Variables
- func IsScanValue(v interface{}) bool
- func IsValue(v interface{}) bool
- type ColumnConverter
- type Conn
- type Driver
- type Execer
- type NotNull
- func (n NotNull) ConvertValue(v interface{}) (Value, error)
- type Null
- func (n Null) ConvertValue(v interface{}) (Value, error)
- type Result
- type Rows
- type RowsAffected
- func (RowsAffected) LastInsertId() (int64, error)
- func (v RowsAffected) RowsAffected() (int64, error)
- type Stmt
- type Tx
- type Value
- type ValueConverter
- type Valuer
Package files
Variables
var Bool boolType
Bool is a ValueConverter that converts input values to bools.
The conversion rules are:
- booleans are returned unchanged - for integer types, 1 is true 0 is false, other integers are an error - for strings and []byte, same rules as strconv.ParseBool - all other types are an error
var DefaultParameterConverter defaultConverter
DefaultParameterConverter is the default implementation of ValueConverter that's used when a Stmt doesn't implement ColumnConverter.
DefaultParameterConverter returns the given value directly if IsValue(value). Otherwise integer type are converted to int64, floats to float64, and strings to []byte. Other types are an error.
var ErrBadConn = errors.New("driver: bad connection")
ErrBadConn should be returned by a driver to signal to the sql package that a driver.Conn is in a bad state (such as the server having earlier closed the connection) and the sql package should retry on a new connection.
To prevent duplicate operations, ErrBadConn should NOT be returned if there's a possibility that the database server might have performed the operation. Even if the server sends back an error, you shouldn't return ErrBadConn.
var ErrSkip = errors.New("driver: skip fast-path; continue as if unimplemented")
ErrSkip may be returned by some optional interfaces' methods to indicate at runtime that the fast path is unavailable and the sql package should continue as if the optional interface was not implemented. ErrSkip is only supported where explicitly documented.
var Int32 int32Type
Int32 is a ValueConverter that converts input values to int64, respecting the limits of an int32 value.
var ResultNoRows noRows
ResultNoRows is a pre-defined Result for drivers to return when a DDL command (such as a CREATE TABLE) succeeds. It returns an error for both LastInsertId and RowsAffected.
var String stringType
String is a ValueConverter that converts its input to a string. If the value is already a string or []byte, it's unchanged. If the value is of another type, conversion to string is done with fmt.Sprintf("%v", v).
func IsScanValue
func IsScanValue(v interface{}) bool
IsScanValue reports whether v is a valid Value scan type. Unlike IsValue, IsScanValue does not permit the string type.
func IsValue
func IsValue(v interface{}) bool
IsValue reports whether v is a valid Value parameter type. Unlike IsScanValue, IsValue permits the string type.
type ColumnConverter
type ColumnConverter interface { // ColumnConverter returns a ValueConverter for the provided // column index. If the type of a specific column isn't known // or shouldn't be handled specially, DefaultValueConverter // can be returned. ColumnConverter(idx int) ValueConverter }
ColumnConverter may be optionally implemented by Stmt if the the statement is aware of its own columns' types and can convert from any type to a driver Value.
type Conn
type Conn interface { // Prepare returns a prepared statement, bound to this connection. Prepare(query string) (Stmt, error) // Close invalidates and potentially stops any current // prepared statements and transactions, marking this // connection as no longer in use. // // Because the sql package maintains a free pool of // connections and only calls Close when there's a surplus of // idle connections, it shouldn't be necessary for drivers to // do their own connection caching. Close() error // Begin starts and returns a new transaction. Begin() (Tx, error) }
Conn is a connection to a database. It is not used concurrently by multiple goroutines.
Conn is assumed to be stateful.
type Driver
type Driver interface { // Open returns a new connection to the database. // The name is a string in a driver-specific format. // // Open may return a cached connection (one previously // closed), but doing so is unnecessary; the sql package // maintains a pool of idle connections for efficient re-use. // // The returned connection is only used by one goroutine at a // time. Open(name string) (Conn, error) }
Driver is the interface that must be implemented by a database driver.
type Execer
type Execer interface { Exec(query string, args []Value) (Result, error) }
Execer is an optional interface that may be implemented by a Conn.
If a Conn does not implement Execer, the db package's DB.Exec will first prepare a query, execute the statement, and then close the statement.
Exec may return ErrSkip.
type NotNull
type NotNull struct { Converter ValueConverter }
NotNull is a type that implements ValueConverter by disallowing nil values but otherwise delegating to another ValueConverter.
func (NotNull) ConvertValue
func (n NotNull) ConvertValue(v interface{}) (Value, error)
type Null
type Null struct { Converter ValueConverter }
Null is a type that implements ValueConverter by allowing nil values but otherwise delegating to another ValueConverter.
func (Null) ConvertValue
func (n Null) ConvertValue(v interface{}) (Value, error)
type Result
type Result interface { // LastInsertId returns the database's auto-generated ID // after, for example, an INSERT into a table with primary // key. LastInsertId() (int64, error) // RowsAffected returns the number of rows affected by the // query. RowsAffected() (int64, error) }
Result is the result of a query execution.
type Rows
type Rows interface { // Columns returns the names of the columns. The number of // columns of the result is inferred from the length of the // slice. If a particular column name isn't known, an empty // string should be returned for that entry. Columns() []string // Close closes the rows iterator. Close() error // Next is called to populate the next row of data into // the provided slice. The provided slice will be the same // size as the Columns() are wide. // // The dest slice may be populated only with // a driver Value type, but excluding string. // All string values must be converted to []byte. // // Next should return io.EOF when there are no more rows. Next(dest []Value) error }
Rows is an iterator over an executed query's results.
type RowsAffected
type RowsAffected int64
RowsAffected implements Result for an INSERT or UPDATE operation which mutates a number of rows.
func (RowsAffected) LastInsertId
func (RowsAffected) LastInsertId() (int64, error)
func (RowsAffected) RowsAffected
func (v RowsAffected) RowsAffected() (int64, error)
type Stmt
type Stmt interface { // Close closes the statement. // // Closing a statement should not interrupt any outstanding // query created from that statement. That is, the following // order of operations is valid: // // * create a driver statement // * call Query on statement, returning Rows // * close the statement // * read from Rows // // If closing a statement invalidates currently-running // queries, the final step above will incorrectly fail. // // TODO(bradfitz): possibly remove the restriction above, if // enough driver authors object and find it complicates their // code too much. The sql package could be smarter about // refcounting the statement and closing it at the appropriate // time. Close() error // NumInput returns the number of placeholder parameters. // // If NumInput returns >= 0, the sql package will sanity check // argument counts from callers and return errors to the caller // before the statement's Exec or Query methods are called. // // NumInput may also return -1, if the driver doesn't know // its number of placeholders. In that case, the sql package // will not sanity check Exec or Query argument counts. NumInput() int // Exec executes a query that doesn't return rows, such // as an INSERT or UPDATE. Exec(args []Value) (Result, error) // Exec executes a query that may return rows, such as a // SELECT. Query(args []Value) (Rows, error) }
Stmt is a prepared statement. It is bound to a Conn and not used by multiple goroutines concurrently.
type Tx
type Tx interface { Commit() error Rollback() error }
Tx is a transaction.
type Value
type Value interface{}
A driver Value is a value that drivers must be able to handle. A Value is either nil or an instance of one of these types:
int64 float64 bool []byte string [*] everywhere except from Rows.Next. time.Time
type ValueConverter
type ValueConverter interface {
// ConvertValue converts a value to a driver Value.
ConvertValue(v interface{}) (Value, error)
}
ValueConverter is the interface providing the ConvertValue method.
Various implementations of ValueConverter are provided by the driver package to provide consistent implementations of conversions between drivers. The ValueConverters have several uses:
* converting from the Value types as provided by the sql package into a database table's specific column type and making sure it fits, such as making sure a particular int64 fits in a table's uint16 column. * converting a value as given from the database into one of the driver Value types. * by the sql package, for converting from a driver's Value type to a user's type in a scan.
type Valuer
type Valuer interface {
// Value returns a driver Value.
Value() (Value, error)
}
Valuer is the interface providing the Value method.
Types implementing Valuer interface are able to convert themselves to a driver Value.
Except as noted, the content of this page is licensed under the Creative Commons Attribution 3.0 License, and code is licensed under a BSD license.
Terms of Service | Privacy Policy