Documentation ¶
Index ¶
- Variables
- func GetDeferredProjections(iter sql.RowIter) (sql.RowIter, []sql.Expression)
- func Intercept(h Interceptor)
- func RowToSQL(ctx *sql.Context, sch sql.Schema, row sql.Row, projs []sql.Expression) ([]sqltypes.Value, error)
- type Chain
- type Config
- type DoneFunc
- type Handler
- func (h *Handler) ComBind(ctx context.Context, c *mysql.Conn, query string, ...) (mysql.BoundQuery, []*querypb.Field, error)
- func (h *Handler) ComBinlogDumpGTID(c *mysql.Conn, logFile string, logPos uint64, gtidSet mysql.GTIDSet) error
- func (h *Handler) ComExecuteBound(ctx context.Context, conn *mysql.Conn, query string, ...) error
- func (h *Handler) ComInitDB(c *mysql.Conn, schemaName string) error
- func (h *Handler) ComMultiQuery(ctx context.Context, c *mysql.Conn, query string, callback mysql.ResultSpoolFn) (string, error)
- func (h *Handler) ComParsedQuery(ctx context.Context, c *mysql.Conn, query string, parsed sqlparser.Statement, ...) error
- func (h *Handler) ComPrepare(ctx context.Context, c *mysql.Conn, query string, prepare *mysql.PrepareData) ([]*querypb.Field, error)
- func (h *Handler) ComPrepareParsed(ctx context.Context, c *mysql.Conn, query string, parsed sqlparser.Statement, ...) (mysql.ParsedQuery, []*querypb.Field, error)
- func (h *Handler) ComQuery(ctx context.Context, c *mysql.Conn, query string, callback mysql.ResultSpoolFn) error
- func (h *Handler) ComRegisterReplica(c *mysql.Conn, replicaHost string, replicaPort uint16, replicaUser string, ...) error
- func (h *Handler) ComResetConnection(c *mysql.Conn) error
- func (h *Handler) ComStmtExecute(ctx context.Context, c *mysql.Conn, prepare *mysql.PrepareData, ...) error
- func (h *Handler) ConnectionAborted(_ *mysql.Conn, _ string) error
- func (h *Handler) ConnectionClosed(c *mysql.Conn)
- func (h *Handler) NewConnection(c *mysql.Conn)
- func (h *Handler) NewContext(ctx context.Context, c *mysql.Conn, query string) (*sql.Context, error)
- func (h *Handler) ParserOptionsForConnection(c *mysql.Conn) (sqlparser.ParserOptions, error)
- func (h *Handler) WarningCount(c *mysql.Conn) uint16
- type HandlerWrapper
- type Interceptor
- type Listener
- type MultiStmtMode
- type Option
- type ProtocolListener
- type ProtocolListenerFunc
- type QueryExecutor
- type Server
- type ServerEventListener
- type SessionBuilder
- type SessionManager
- func (s *SessionManager) AddConn(conn *mysql.Conn)
- func (s *SessionManager) GetCurrentDB(conn *mysql.Conn) string
- func (s *SessionManager) Iter(f func(session sql.Session) (stop bool, err error)) error
- func (s *SessionManager) KillConnection(connID uint32) error
- func (s *SessionManager) NewContext(ctx context.Context, conn *mysql.Conn, query string) (*sql.Context, error)
- func (s *SessionManager) NewContextWithQuery(ctx context.Context, conn *mysql.Conn, query string) (*sql.Context, error)
- func (s *SessionManager) NewSession(ctx context.Context, conn *mysql.Conn) error
- func (s *SessionManager) RemoveConn(conn *mysql.Conn)
- func (s *SessionManager) SetDB(conn *mysql.Conn, dbName string) error
Constants ¶
This section is empty.
Variables ¶
var ( // QueryCounter describes a metric that accumulates number of queries monotonically. QueryCounter = discard.NewCounter() // QueryErrorCounter describes a metric that accumulates number of failed queries monotonically. QueryErrorCounter = discard.NewCounter() // QueryHistogram describes a queries latency. QueryHistogram = discard.NewHistogram() )
var ErrConnectionWasClosed = errors.NewKind("connection was closed")
ErrConnectionWasClosed will be returned if we try to use a previously closed connection
var ErrRowTimeout = errors.NewKind("row read wait bigger than connection timeout")
ErrRowTimeout will be returned if the wait for the row is longer than the connection timeout
var UnixSocketInUseError = errors.New("bind address at given unix socket path is already in use")
Functions ¶
func GetDeferredProjections ¶ added in v0.19.0
GetDeferredProjections looks for a top-level deferred projection, retrieves its projections, and removes it from the iterator tree.
func Intercept ¶ added in v0.18.0
func Intercept(h Interceptor)
Types ¶
type Chain ¶ added in v0.18.0
type Chain interface { // ComQuery is called when a connection receives a query. // Note the contents of the query slice may change after // the first call to callback. So the Handler should not // hang on to the byte slice. ComQuery(ctx context.Context, c *mysql.Conn, query string, callback mysql.ResultSpoolFn) error // ComMultiQuery is called when a connection receives a query and the // client supports MULTI_STATEMENT. It should process the first // statement in |query| and return the remainder. It will be called // multiple times until the remainder is |""|. ComMultiQuery(ctx context.Context, c *mysql.Conn, query string, callback mysql.ResultSpoolFn) (string, error) // ComPrepare is called when a connection receives a prepared // statement query. ComPrepare(ctx context.Context, c *mysql.Conn, query string, prepare *mysql.PrepareData) ([]*querypb.Field, error) // ComStmtExecute is called when a connection receives a statement // execute query. ComStmtExecute(ctx context.Context, c *mysql.Conn, prepare *mysql.PrepareData, callback func(*sqltypes.Result) error) error }
type Config ¶
type Config struct { // Protocol for the connection. Protocol string // Address of the server. Address string // Custom listener for the mysql server. Use this if you don't want ports or unix sockets to be opened automatically. // This can be useful in testing by using a pure go net.Conn implementation. Listener net.Listener // Tracer to use in the server. By default, a noop tracer will be used if // no tracer is provided. Tracer trace.Tracer // Version string to advertise in running server Version string // ConnReadTimeout is the server's read timeout ConnReadTimeout time.Duration // ConnWriteTimeout is the server's write timeout ConnWriteTimeout time.Duration // MaxConnections is the maximum number of simultaneous connections that the server will allow. MaxConnections uint64 // TLSConfig is the configuration for TLS on this server. If |nil|, TLS is not supported. TLSConfig *tls.Config // RequestSecureTransport will require incoming connections to be TLS. Requires non-|nil| TLSConfig. RequireSecureTransport bool // DisableClientMultiStatements will prevent processing of incoming // queries as if they contain more than one query. This processing // currently works in some simple cases, but breaks in the presence of // statements (such as in CREATE TRIGGER queries). Configuring the // server to disable processing these is one option for users to get // support back for single queries that contain statements, at the cost // of not supporting the CLIENT_MULTI_STATEMENTS option on the server. DisableClientMultiStatements bool // NoDefaults prevents using persisted configuration for new server sessions NoDefaults bool // Socket is a path to unix socket file Socket string AllowClearTextWithoutTLS bool // MaxLoggedQueryLen sets the length at which queries written to the logs are truncated. A value of 0 will // result in no truncation. A value less than 0 will result in the queries being omitted from the logs completely MaxLoggedQueryLen int // EncodeLoggedQuery determines if logged queries are base64 encoded. // If true, queries will be logged as base64 encoded strings. // If false (default behavior), queries will be logged as strings, but newlines and tabs will be replaced with spaces. EncodeLoggedQuery bool // Options add additional options to customize the server. Options []Option }
Config for the mysql server.
type DoneFunc ¶
type DoneFunc func()
DoneFunc is a function that must be executed when the session is used and it can be disposed.
type Handler ¶
type Handler struct {
// contains filtered or unexported fields
}
Handler is a connection handler for a SQLe engine, implementing the Vitess mysql.Handler interface.
func (*Handler) ComBind ¶ added in v0.18.0
func (h *Handler) ComBind(ctx context.Context, c *mysql.Conn, query string, parsedQuery mysql.ParsedQuery, prepare *mysql.PrepareData) (mysql.BoundQuery, []*querypb.Field, error)
func (*Handler) ComBinlogDumpGTID ¶ added in v0.18.1
func (h *Handler) ComBinlogDumpGTID(c *mysql.Conn, logFile string, logPos uint64, gtidSet mysql.GTIDSet) error
ComBinlogDumpGTID implements the mysql.BinlogReplicaHandler interface.
func (*Handler) ComExecuteBound ¶ added in v0.18.0
func (*Handler) ComMultiQuery ¶ added in v0.12.0
func (*Handler) ComParsedQuery ¶ added in v0.18.0
func (h *Handler) ComParsedQuery( ctx context.Context, c *mysql.Conn, query string, parsed sqlparser.Statement, callback mysql.ResultSpoolFn, ) error
ComParsedQuery executes a pre-parsed SQL query on the SQLe engine.
func (*Handler) ComPrepare ¶
func (h *Handler) ComPrepare(ctx context.Context, c *mysql.Conn, query string, prepare *mysql.PrepareData) ([]*querypb.Field, error)
ComPrepare parses, partially analyzes, and caches a prepared statement's plan with the given [c.ConnectionID].
func (*Handler) ComPrepareParsed ¶ added in v0.18.0
func (*Handler) ComQuery ¶
func (h *Handler) ComQuery( ctx context.Context, c *mysql.Conn, query string, callback mysql.ResultSpoolFn, ) error
ComQuery executes a SQL query on the SQLe engine.
func (*Handler) ComRegisterReplica ¶ added in v0.18.1
func (h *Handler) ComRegisterReplica(c *mysql.Conn, replicaHost string, replicaPort uint16, replicaUser string, replicaPassword string) error
ComRegisterReplica implements the mysql.BinlogReplicaHandler interface.
func (*Handler) ComResetConnection ¶
ComResetConnection implements the mysql.Handler interface.
This command resets the connection's session, clearing out any cached prepared statements, locks, user and session variables. The currently selected database is preserved.
The COM_RESET command can be sent manually through the mysql client by issuing the "resetconnection" (or "\x") client command.
func (*Handler) ComStmtExecute ¶
func (*Handler) ConnectionAborted ¶ added in v0.19.0
func (*Handler) ConnectionClosed ¶
ConnectionClosed reports that a connection has been closed.
func (*Handler) NewConnection ¶
NewConnection reports that a new connection has been established.
func (*Handler) NewContext ¶ added in v0.19.0
func (*Handler) ParserOptionsForConnection ¶ added in v0.17.0
func (*Handler) WarningCount ¶
WarningCount is called at the end of each query to obtain the value to be returned to the client in the EOF packet. Note that this will be called either in the context of the ComQuery callback if the result does not contain any fields, or after the last ComQuery call completes.
type HandlerWrapper ¶ added in v0.18.1
HandlerWrapper provides a way for clients to wrap the mysql.Handler used by the server with a custom implementation that wraps it.
type Interceptor ¶ added in v0.18.0
type Interceptor interface { // Priority returns the priority of the interceptor. Priority() int // Query is called when a connection receives a query. // Note the contents of the query slice may change after // the first call to callback. So the Handler should not // hang on to the byte slice. Query(ctx context.Context, chain Chain, c *mysql.Conn, query string, callback func(res *sqltypes.Result, more bool) error) error // ParsedQuery is called when a connection receives a // query that has already been parsed. Note the contents // of the query slice may change after the first call to // callback. So the Handler should not hang on to the byte // slice. ParsedQuery(chain Chain, c *mysql.Conn, query string, parsed sqlparser.Statement, callback func(res *sqltypes.Result, more bool) error) error // MultiQuery is called when a connection receives a query and the // client supports MULTI_STATEMENT. It should process the first // statement in |query| and return the remainder. It will be called // multiple times until the remainder is |""|. MultiQuery(ctx context.Context, chain Chain, c *mysql.Conn, query string, callback func(res *sqltypes.Result, more bool) error) (string, error) // Prepare is called when a connection receives a prepared // statement query. Prepare(ctx context.Context, chain Chain, c *mysql.Conn, query string, prepare *mysql.PrepareData) ([]*querypb.Field, error) // StmtExecute is called when a connection receives a statement // execute query. StmtExecute(ctx context.Context, chain Chain, c *mysql.Conn, prepare *mysql.PrepareData, callback func(*sqltypes.Result) error) error }
type Listener ¶
type Listener struct {
// contains filtered or unexported fields
}
Listener implements a single listener with two net.Listener, one for TCP socket and another for unix socket connections.
func NewListener ¶
NewListener creates a new Listener. 'protocol' takes "tcp" and 'address' takes "host:port" information for TCP socket connection. For unix socket connection, 'unixSocketPath' takes a path for the unix socket file. If 'unixSocketPath' is empty, no need to create the second listener.
type MultiStmtMode ¶ added in v0.12.0
type MultiStmtMode int
const ( MultiStmtModeOff MultiStmtMode = 0 MultiStmtModeOn MultiStmtMode = 1 )
type Option ¶ added in v0.18.0
type Option func(e *sqle.Engine, sm *SessionManager, handler mysql.Handler)
Option is an option to customize server.
type ProtocolListener ¶ added in v0.18.0
ProtocolListener handles connections based on the configuration it was given. These listeners also implement their own protocol, which by default will be the MySQL wire protocol, but another protocol may be provided.
type ProtocolListenerFunc ¶ added in v0.18.0
type ProtocolListenerFunc func(cfg mysql.ListenerConfig) (ProtocolListener, error)
ProtocolListenerFunc returns a ProtocolListener based on the configuration it was given.
var DefaultProtocolListenerFunc ProtocolListenerFunc = func(cfg mysql.ListenerConfig) (ProtocolListener, error) { return mysql.NewListenerWithConfig(cfg) }
DefaultProtocolListenerFunc is the protocol listener, which defaults to Vitess' protocol listener. Changing this function will change the protocol listener used when creating all servers. If multiple servers are needed with different protocols, then create each server after changing this function. Servers retain the protocol that they were created with.
type QueryExecutor ¶ added in v0.18.0
type QueryExecutor func( ctx *sql.Context, query string, parsed sqlparser.Statement, analyzed sql.Node, bindings map[string]*querypb.BindVariable, qFlags *sql.QueryFlags, ) (sql.Schema, sql.RowIter, *sql.QueryFlags, error)
QueryExecutor is a function that executes a query and returns the result as a schema and iterator. Either of |parsed| or |analyzed| can be nil depending on the use case
type Server ¶
type Server struct { Listener ProtocolListener Engine *gms.Engine // contains filtered or unexported fields }
Server is a MySQL server for SQLe engines.
func NewServer ¶
func NewServer(cfg Config, e *sqle.Engine, sb SessionBuilder, listener ServerEventListener) (*Server, error)
NewServer creates a server with the given protocol, address, authentication details given a SQLe engine and a session builder.
func NewServerWithHandler ¶ added in v0.18.1
func NewServerWithHandler( cfg Config, e *sqle.Engine, sb SessionBuilder, listener ServerEventListener, wrapper HandlerWrapper, ) (*Server, error)
NewServerWithHandler creates a Server with a handler wrapped by the provided wrapper function.
func (*Server) SessionManager ¶ added in v0.12.0
func (s *Server) SessionManager() *SessionManager
SessionManager returns the session manager for this server.
func (*Server) WarnIfLoadFileInsecure ¶ added in v0.18.0
func (s *Server) WarnIfLoadFileInsecure()
type ServerEventListener ¶ added in v0.12.0
type SessionBuilder ¶
SessionBuilder creates sessions given a MySQL connection and a server address.
type SessionManager ¶
type SessionManager struct {
// contains filtered or unexported fields
}
SessionManager is in charge of creating new sessions for the given connections and keep track of which sessions are in each connection, so they can be cancelled if the connection is closed.
func NewSessionManager ¶
func NewSessionManager( builder SessionBuilder, tracer trace.Tracer, getDbFunc func(ctx *sql.Context, db string) (sql.Database, error), memory *sql.MemoryManager, processlist sql.ProcessList, addr string, ) *SessionManager
NewSessionManager creates a SessionManager with the given SessionBuilder.
func (*SessionManager) AddConn ¶ added in v0.15.0
func (s *SessionManager) AddConn(conn *mysql.Conn)
AddConn adds a connection to be tracked by the SessionManager. Should be called as soon as possible after the server has accepted the connection. Results in the connection being tracked by ProcessList and being available through KillConnection. The connection will be tracked until RemoveConn is called, so clients should ensure a call to AddConn is always paired up with a call to RemoveConn.
func (*SessionManager) GetCurrentDB ¶ added in v0.19.0
func (s *SessionManager) GetCurrentDB(conn *mysql.Conn) string
GetCurrentDB returns the current database name of the given connection session.
func (*SessionManager) Iter ¶ added in v0.12.0
Iter iterates over the active sessions and executes the specified callback function on each one.
func (*SessionManager) KillConnection ¶ added in v0.14.0
func (s *SessionManager) KillConnection(connID uint32) error
Exposed through (*sql.Context).Services.KillConnection. Calls Close on the tracked connection with |connID|. The full teardown of the connection is asychronous, similar to how |Process.Kill| for tearing down an inflight query is asynchronous. The connection and any running query will remain in the ProcessList and in the SessionManager until it has been torn down by the server handler.
func (*SessionManager) NewContext ¶
func (s *SessionManager) NewContext(ctx context.Context, conn *mysql.Conn, query string) (*sql.Context, error)
NewContext creates a new context for the session at the given conn.
func (*SessionManager) NewContextWithQuery ¶
func (s *SessionManager) NewContextWithQuery(ctx context.Context, conn *mysql.Conn, query string) (*sql.Context, error)
NewContextWithQuery creates a new context for the session at the given conn.
func (*SessionManager) NewSession ¶
NewSession creates a Session for the given connection and saves it to the session pool.
func (*SessionManager) RemoveConn ¶ added in v0.15.0
func (s *SessionManager) RemoveConn(conn *mysql.Conn)
Remove the session assosiated with |conn| from the session manager.