diff --git a/go/vt/vtgate/plugin_mysql_server.go b/go/vt/vtgate/plugin_mysql_server.go index 265d8b7c9cb..8e102b6689b 100644 --- a/go/vt/vtgate/plugin_mysql_server.go +++ b/go/vt/vtgate/plugin_mysql_server.go @@ -128,6 +128,10 @@ func newVtgateHandler(vtg *VTGate) *vtgateHandler { } func (vh *vtgateHandler) NewConnection(c *mysql.Conn) { + // Match VTGate's default session state (Autocommit: true) so the + // handshake packet reports correct status flags to the client. + c.StatusFlags |= mysql.ServerStatusAutocommit + vh.mu.Lock() defer vh.mu.Unlock() vh.connections[c.ConnectionID] = c diff --git a/go/vt/vtgate/plugin_mysql_server_test.go b/go/vt/vtgate/plugin_mysql_server_test.go index 1eac6b350ae..7b13ce2d7a6 100644 --- a/go/vt/vtgate/plugin_mysql_server_test.go +++ b/go/vt/vtgate/plugin_mysql_server_test.go @@ -198,6 +198,20 @@ func TestConnectionRespectsExistingUnixSocket(t *testing.T) { } } +func TestNewConnectionSetsAutocommitStatusFlag(t *testing.T) { + vh := &vtgateHandler{ + connections: make(map[uint32]*mysql.Conn), + } + + c := &mysql.Conn{} + assert.Zero(t, c.StatusFlags, "StatusFlags should be zero before NewConnection") + + vh.NewConnection(c) + + assert.True(t, c.StatusFlags&mysql.ServerStatusAutocommit != 0, + "NewConnection should set ServerStatusAutocommit flag to match VTGate's default session state") +} + var newSpanOK = func(ctx context.Context, label string) (trace.Span, context.Context) { return trace.NoopSpan{}, context.Background() }