diff --git a/go/mysql/constants.go b/go/mysql/constants.go index 7236a7e742b..f2f6403f603 100644 --- a/go/mysql/constants.go +++ b/go/mysql/constants.go @@ -496,8 +496,13 @@ const ( // Originally found in include/mysql/mysql_com.h // See http://dev.mysql.com/doc/internals/en/status-flags.html const ( - // ServerStatusAutocommit is SERVER_STATUS_AUTOCOMMIT. - ServerStatusAutocommit = 0x0002 + // ServerStatusAutocommit is SERVER_STATUS_IN_TRANS + ServerStatusInTransaction = 0x0001 + NoServerStatusInTransaction = 0xFFFE + + // ServerStatusAutocommit is SERVER_STATUS_AUTOCOMMIT + ServerStatusAutocommit = 0x0002 + NoServerStatusAutocommit = 0xFFFD // ServerMoreResultsExists is SERVER_MORE_RESULTS_EXISTS ServerMoreResultsExists = 0x0008 diff --git a/go/vt/vtgate/plugin_mysql_server.go b/go/vt/vtgate/plugin_mysql_server.go index ded421e99b7..b4b9d5726d6 100644 --- a/go/vt/vtgate/plugin_mysql_server.go +++ b/go/vt/vtgate/plugin_mysql_server.go @@ -214,9 +214,23 @@ func (vh *vtgateHandler) ComQuery(c *mysql.Conn, query string, callback func(*sq if err != nil { return err } + fillInTxStatusFlags(c, session) return callback(result) } +func fillInTxStatusFlags(c *mysql.Conn, session *vtgatepb.Session) { + if session.InTransaction { + c.StatusFlags |= mysql.ServerStatusInTransaction + } else { + c.StatusFlags &= mysql.NoServerStatusInTransaction + } + if session.Autocommit { + c.StatusFlags |= mysql.ServerStatusAutocommit + } else { + c.StatusFlags &= mysql.NoServerStatusAutocommit + } +} + // ComPrepare is the handler for command prepare. func (vh *vtgateHandler) ComPrepare(c *mysql.Conn, query string, bindVars map[string]*querypb.BindVariable) ([]*querypb.Field, error) { var ctx context.Context @@ -303,6 +317,7 @@ func (vh *vtgateHandler) ComStmtExecute(c *mysql.Conn, prepare *mysql.PrepareDat err = mysql.NewSQLErrorFromError(err) return err } + fillInTxStatusFlags(c, session) return callback(qr) }