Documentation
¶
Index ¶
- func DeregisterServerPubKey(name string)
- func RegisterServerPubKey(name string, pubKey *rsa.PublicKey)
- type BackendConnection
- func (conn *BackendConnection) Connect(ctx context.Context) error
- func (conn *BackendConnection) DataSourceName() string
- func (conn *BackendConnection) Execute(ctx context.Context, query string, wantFields bool) (result *mysql.Result, err error)
- func (conn *BackendConnection) ExecuteMulti(ctx context.Context, query string, wantFields bool) (result *mysql.Result, more bool, err error)
- func (conn *BackendConnection) ExecuteWithWarningCount(ctx context.Context, query string, wantFields bool) (result *mysql.Result, warnings uint16, err error)
- func (conn *BackendConnection) Ping(ctx context.Context) (err error)
- func (conn *BackendConnection) PrepareExecute(ctx context.Context, query string, data []byte) (result *mysql.Result, warnings uint16, err error)
- func (conn *BackendConnection) PrepareExecuteArgs(ctx context.Context, query string, args []interface{}) (result *mysql.Result, warnings uint16, err error)
- func (conn *BackendConnection) PrepareQuery(ctx context.Context, query string, data []byte) (Result *mysql.Result, warnings uint16, err error)
- func (conn *BackendConnection) PrepareQueryArgs(ctx context.Context, query string, args []interface{}) (Result *mysql.Result, warnings uint16, err error)
- func (conn *BackendConnection) ReadColumnDefinition(field *mysql.Field, index int) error
- func (conn *BackendConnection) ReadColumnDefinitionType(field *mysql.Field, index int) error
- func (conn *BackendConnection) ReadColumnDefinitions() ([]*mysql.Field, error)
- func (conn *BackendConnection) ReadComQueryResponse() (affectedRows uint64, lastInsertID uint64, status int, more bool, ...)
- func (conn *BackendConnection) ReadQueryResult(ctx context.Context, wantFields bool) (result *mysql.Result, more bool, warnings uint16, err error)
- func (conn *BackendConnection) WriteComFieldList(table string, wildcard string) error
- func (conn *BackendConnection) WriteComInitDB(db string) error
- func (conn *BackendConnection) WriteComQuery(query string) error
- func (conn *BackendConnection) WriteComQuit() error
- func (conn *BackendConnection) WriteComSetOption(operation uint16) error
- func (conn *BackendConnection) WriteComStmtClose(statementID uint32) (err error)
- type BackendStatement
- type Config
- type Connector
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func DeregisterServerPubKey ¶
func DeregisterServerPubKey(name string)
DeregisterServerPubKey removes the public key registered with the given name.
func RegisterServerPubKey ¶
RegisterServerPubKey registers a server RSA public key which can be used to send Content in a secure manner to the server without receiving the public key in a potentially insecure way from the server first. Registered keys can afterwards be used adding serverPubKey=<name> to the DSN.
Note: The provided rsa.PublicKey instance is exclusively owned by the driver after registering it and may not be modified.
Content, err := ioutil.ReadFile("mykey.pem")
if err != nil {
log.Fatal(err)
}
block, _ := pem.Decode(Content)
if block == nil || block.Type != "PUBLIC KEY" {
log.Fatal("failed to decode PEM block containing public key")
}
pub, err := x509.ParsePKIXPublicKey(block.Bytes)
if err != nil {
log.Fatal(err)
}
if rsaPubKey, ok := pub.(*rsa.PublicKey); ok {
mysql.RegisterServerPubKey("mykey", rsaPubKey)
} else {
log.Fatal("not a RSA public key")
}
Types ¶
type BackendConnection ¶
func (*BackendConnection) Connect ¶
func (conn *BackendConnection) Connect(ctx context.Context) error
func (*BackendConnection) DataSourceName ¶
func (conn *BackendConnection) DataSourceName() string
func (*BackendConnection) Execute ¶
func (conn *BackendConnection) Execute(ctx context.Context, query string, wantFields bool) (result *mysql.Result, err error)
Execute executes a query and returns the result. Returns a SQLError. Depending on the transport used, the error returned might be different for the same condition:
1. if the server closes the connection when no command is in flight:
1.1 unix: WriteComQuery will fail with a 'broken pipe', and we'll
return CRServerGone(2006).
1.2 tcp: WriteComQuery will most likely work, but ReadComQueryResponse
will fail, and we'll return CRServerLost(2013).
This is because closing a TCP socket on the server side sends
a FIN to the client (telling the client the server is done
writing), but on most platforms doesn't send a RST. So the
client has no idea it can't write. So it succeeds writing Content, which
*then* triggers the server to send a RST back, received a bit
later. By then, the client has already started waiting for
the response, and will just return a CRServerLost(2013).
So CRServerGone(2006) will almost never be seen with TCP.
2. if the server closes the connection when a command is in flight,
ReadComQueryResponse will fail, and we'll return CRServerLost(2013).
func (*BackendConnection) ExecuteMulti ¶
func (conn *BackendConnection) ExecuteMulti(ctx context.Context, query string, wantFields bool) (result *mysql.Result, more bool, err error)
ExecuteMulti is for fetching multiple results from a multi-statement result. It returns an additional 'more' flag. If it is set, you must fetch the additional results using ReadQueryResult.
func (*BackendConnection) ExecuteWithWarningCount ¶
func (conn *BackendConnection) ExecuteWithWarningCount(ctx context.Context, query string, wantFields bool) (result *mysql.Result, warnings uint16, err error)
ExecuteWithWarningCount is for fetching results and a warning count Note: In a future iteration this should be abolished and merged into the Execute API.
func (*BackendConnection) Ping ¶
func (conn *BackendConnection) Ping(ctx context.Context) (err error)
Ping implements driver.Pinger interface
func (*BackendConnection) PrepareExecute ¶
func (*BackendConnection) PrepareExecuteArgs ¶
func (*BackendConnection) PrepareQuery ¶
func (*BackendConnection) PrepareQueryArgs ¶
func (*BackendConnection) ReadColumnDefinition ¶
func (conn *BackendConnection) ReadColumnDefinition(field *mysql.Field, index int) error
ReadColumnDefinition reads the next Column Definition packet. Returns a SQLError.
func (*BackendConnection) ReadColumnDefinitionType ¶
func (conn *BackendConnection) ReadColumnDefinitionType(field *mysql.Field, index int) error
ReadColumnDefinitionType is a faster version of ReadColumnDefinition that only fills in the Type. Returns a SQLError.
func (*BackendConnection) ReadColumnDefinitions ¶
func (conn *BackendConnection) ReadColumnDefinitions() ([]*mysql.Field, error)
func (*BackendConnection) ReadComQueryResponse ¶
func (*BackendConnection) ReadQueryResult ¶
func (conn *BackendConnection) ReadQueryResult(ctx context.Context, wantFields bool) (result *mysql.Result, more bool, warnings uint16, err error)
ReadQueryResult gets the result from the last written query.
func (*BackendConnection) WriteComFieldList ¶
func (conn *BackendConnection) WriteComFieldList(table string, wildcard string) error
func (*BackendConnection) WriteComInitDB ¶
func (conn *BackendConnection) WriteComInitDB(db string) error
WriteComInitDB changes the default database to use. Client -> Server. Returns SQLError(CRServerGone) if it can't.
func (*BackendConnection) WriteComQuery ¶
func (conn *BackendConnection) WriteComQuery(query string) error
WriteComQuery writes a query for the server to execute. Client -> Server. Returns SQLError(CRServerGone) if it can't.
func (*BackendConnection) WriteComQuit ¶
func (conn *BackendConnection) WriteComQuit() error
WriteComQuit writes a Quit message for the server, to indicate we want to close the connection. Client -> Server. Returns SQLError(CRServerGone) if it can't.
func (*BackendConnection) WriteComSetOption ¶
func (conn *BackendConnection) WriteComSetOption(operation uint16) error
WriteComSetOption changes the connection's capability of executing multi statements. Returns SQLError(CRServerGone) if it can't.
func (*BackendConnection) WriteComStmtClose ¶
func (conn *BackendConnection) WriteComStmtClose(statementID uint32) (err error)
WriteComStmtClose close statement
type BackendStatement ¶
type BackendStatement struct {
// contains filtered or unexported fields
}
type Config ¶
type Config struct {
User string // Username
Passwd string // Password (requires User)
Net string // Network type
Addr string // Network address (requires Net)
DBName string // Database name
Params map[string]string // Connection parameters
Collation string // Connection collation
Loc *time.Location // Location for time.Time values
MaxAllowedPacket int // Max packet size allowed
ServerPubKey string // Server public key name
TLSConfig string // TLS configuration name
Timeout time.Duration // Dial timeout
ReadTimeout time.Duration // I/O read timeout
WriteTimeout time.Duration // I/O write timeout
AllowAllFiles bool // Allow all files to be used with LOAD DATA LOCAL INFILE
AllowCleartextPasswords bool // Allows the cleartext client side plugin
AllowNativePasswords bool // Allows the native password authentication method
AllowOldPasswords bool // Allows the old insecure password method
CheckConnLiveness bool // Check connections for liveness before using them
ClientFoundRows bool // Return number of matching rows instead of rows changed
ColumnsWithAlias bool // Prepend table alias to column names
InterpolateParams bool // Interpolate placeholders into query string
MultiStatements bool // Allow multiple statements in one query
ParseTime bool // Parse time values to time.Time
RejectReadOnly bool // Reject read-only connections
DisableClientDeprecateEOF bool // Disable client deprecate EOF
// contains filtered or unexported fields
}
func NewConfig ¶
func NewConfig() *Config
NewConfig creates a new ServerConfig and sets default values.