Skip to content
3 changes: 2 additions & 1 deletion cmd/go-mysqlserver/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ func main() {

// Create a connection with user root and an empty password.
// You can use your own handler to handle command here.
conn, err := server.NewConn(c, "root", "", server.EmptyHandler{})
srv := server.NewDefaultServer()
conn, err := srv.NewConn(c, "root", "", server.EmptyHandler{})
if err != nil {
log.Fatal(err)
}
Expand Down
4 changes: 3 additions & 1 deletion driver/driver_options_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,8 @@ func CreateMockServer(t *testing.T) *testServer {

handler := &mockHandler{}

s := server.NewDefaultServer()

go func() {
for {
conn, err := l.Accept()
Expand All @@ -283,7 +285,7 @@ func CreateMockServer(t *testing.T) *testServer {
}

go func() {
co, err := server.NewCustomizedConn(conn, defaultServer, inMemProvider, handler)
co, err := s.NewCustomizedConn(conn, inMemProvider, handler)
if err != nil {
return
}
Expand Down
53 changes: 25 additions & 28 deletions server/conn.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package server
import (
"errors"
"net"
"sync"
"sync/atomic"

"github.com/go-mysql-org/go-mysql/mysql"
Expand Down Expand Up @@ -36,51 +37,47 @@ type Conn struct {
closed atomic.Bool
}

var baseConnID uint32 = 10000
var (
baseConnID uint32 = 10000
defaultServer = sync.OnceValue(func() *Server {
return NewDefaultServer()
})
)

// NewConn: create connection with default server settings
//
// Deprecated: Use [Server.NewConn] instead.
func NewConn(conn net.Conn, user string, password string, h Handler) (*Conn, error) {
p := NewInMemoryProvider()
p.AddUser(user, password)

var packetConn *packet.Conn
if defaultServer.tlsConfig != nil {
packetConn = packet.NewTLSConn(conn)
} else {
packetConn = packet.NewConn(conn)
}
return defaultServer().NewConn(conn, user, password, h)
}

c := &Conn{
Conn: packetConn,
serverConf: defaultServer,
credentialProvider: p,
h: h,
connectionID: atomic.AddUint32(&baseConnID, 1),
stmts: make(map[uint32]*Stmt),
salt: mysql.RandomBuf(20),
}
c.closed.Store(false)
// NewCustomizedConn: create connection with customized server settings
//
// Deprecated: Use [Server.NewCustomizedConn] instead.
func NewCustomizedConn(conn net.Conn, serverConf *Server, p CredentialProvider, h Handler) (*Conn, error) {
return serverConf.NewCustomizedConn(conn, p, h)
}

if err := c.handshake(); err != nil {
c.Close()
return nil, err
}
// NewConn: create connection with default server settings
func (s *Server) NewConn(conn net.Conn, user string, password string, h Handler) (*Conn, error) {
p := NewInMemoryProvider()
p.AddUser(user, password)

return c, nil
return s.NewCustomizedConn(conn, p, h)
}

// NewCustomizedConn: create connection with customized server settings
func NewCustomizedConn(conn net.Conn, serverConf *Server, p CredentialProvider, h Handler) (*Conn, error) {
func (s *Server) NewCustomizedConn(conn net.Conn, p CredentialProvider, h Handler) (*Conn, error) {
var packetConn *packet.Conn
if serverConf.tlsConfig != nil {
if s.tlsConfig != nil {
packetConn = packet.NewTLSConn(conn)
} else {
packetConn = packet.NewConn(conn)
}

c := &Conn{
Conn: packetConn,
serverConf: serverConf,
serverConf: s,
credentialProvider: p,
h: h,
connectionID: atomic.AddUint32(&baseConnID, 1),
Expand Down
2 changes: 0 additions & 2 deletions server/server_conf.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@ import (
"github.com/go-mysql-org/go-mysql/mysql"
)

var defaultServer = NewDefaultServer()

// Defines a basic MySQL server with configs.
//
// We do not aim at implementing the whole MySQL connection suite to have the best compatibilities for the clients.
Expand Down
Loading