From 62b09bacb731a10a9adbddd084169732047f8d1e Mon Sep 17 00:00:00 2001 From: Jacques Grove Date: Tue, 28 Jul 2020 21:20:59 -0700 Subject: [PATCH 1/2] Issue #5825; reflect SERVER_STATUS_IN_TRANS and SERVER_STATUS_AUTOCOMMIT flags correctly for queries. Signed-off-by: Jacques Grove --- go/mysql/constants.go | 9 +++++++-- go/vt/vtgate/plugin_mysql_server.go | 10 ++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) 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..69ee6517170 100644 --- a/go/vt/vtgate/plugin_mysql_server.go +++ b/go/vt/vtgate/plugin_mysql_server.go @@ -210,6 +210,16 @@ func (vh *vtgateHandler) ComQuery(c *mysql.Conn, query string, callback func(*sq return mysql.NewSQLErrorFromError(err) } session, result, err := vh.vtg.Execute(ctx, session, query, make(map[string]*querypb.BindVariable)) + if session.InTransaction { + c.StatusFlags |= mysql.ServerStatusInTransaction + } else { + c.StatusFlags &= mysql.NoServerStatusInTransaction + } + if session.Autocommit { + c.StatusFlags |= mysql.ServerStatusAutocommit + } else { + c.StatusFlags &= mysql.NoServerStatusAutocommit + } err = mysql.NewSQLErrorFromError(err) if err != nil { return err From 3e4a8d61171ade6054bd33ff7e87532d759d6212 Mon Sep 17 00:00:00 2001 From: Andres Taylor Date: Tue, 11 Aug 2020 12:17:09 +0200 Subject: [PATCH 2/2] update status flags Signed-off-by: Andres Taylor --- go/vt/vtgate/plugin_mysql_server.go | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/go/vt/vtgate/plugin_mysql_server.go b/go/vt/vtgate/plugin_mysql_server.go index 69ee6517170..b4b9d5726d6 100644 --- a/go/vt/vtgate/plugin_mysql_server.go +++ b/go/vt/vtgate/plugin_mysql_server.go @@ -210,6 +210,15 @@ func (vh *vtgateHandler) ComQuery(c *mysql.Conn, query string, callback func(*sq return mysql.NewSQLErrorFromError(err) } session, result, err := vh.vtg.Execute(ctx, session, query, make(map[string]*querypb.BindVariable)) + err = mysql.NewSQLErrorFromError(err) + 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 { @@ -220,11 +229,6 @@ func (vh *vtgateHandler) ComQuery(c *mysql.Conn, query string, callback func(*sq } else { c.StatusFlags &= mysql.NoServerStatusAutocommit } - err = mysql.NewSQLErrorFromError(err) - if err != nil { - return err - } - return callback(result) } // ComPrepare is the handler for command prepare. @@ -313,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) }