From 225e1f15fc510067983f2d904db07939527993c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Mon, 9 Oct 2017 17:22:56 +0200 Subject: [PATCH] Minor protocol fixes Bugfixes: - didn't remember flags generate_STMT_PREPARE_RESPONSE() - was returning 2 warnings for INIT_DB --- lib/MySQL_Protocol.cpp | 13 ++++++++++--- lib/MySQL_Session.cpp | 4 ++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/MySQL_Protocol.cpp b/lib/MySQL_Protocol.cpp index 03c59f480..e22a9c1e1 100644 --- a/lib/MySQL_Protocol.cpp +++ b/lib/MySQL_Protocol.cpp @@ -787,6 +787,13 @@ bool MySQL_Protocol::generate_STMT_PREPARE_RESPONSE(uint8_t sequence_id, MySQL_S memcpy(okpack+14,&stmt_info->warning_count,sizeof(uint16_t)); (*myds)->PSarrayOUT->add((void *)okpack,16); sid++; + int setStatus = SERVER_STATUS_AUTOCOMMIT; + if (myds) { + setStatus = 0; + unsigned int Trx_id = (*myds)->sess->FindOneActiveTransaction(); + setStatus = (Trx_id >= 0 ? SERVER_STATUS_IN_TRANS : 0 ); + if ((*myds)->sess->autocommit) setStatus += SERVER_STATUS_AUTOCOMMIT; + } if (stmt_info->num_params) { for (i=0; inum_params; i++) { generate_pkt_field(true,NULL,NULL,sid, @@ -794,7 +801,7 @@ bool MySQL_Protocol::generate_STMT_PREPARE_RESPONSE(uint8_t sequence_id, MySQL_S 63,0,253,128,0,false,0,NULL); // NOTE: charset is 63 = binary ! sid++; } - generate_pkt_EOF(true,NULL,NULL,sid,0,SERVER_STATUS_AUTOCOMMIT); // FIXME : for now we pass a very broken flag + generate_pkt_EOF(true,NULL,NULL,sid,0,setStatus); sid++; } if (stmt_info->num_columns) { @@ -804,10 +811,10 @@ bool MySQL_Protocol::generate_STMT_PREPARE_RESPONSE(uint8_t sequence_id, MySQL_S fd->db, fd->table, fd->org_table, fd->name, fd->org_name, - fd->charsetnr, field->length, fd->type, fd->flags, fd->decimals, false,0,NULL); + fd->charsetnr, fd->length, fd->type, fd->flags, fd->decimals, false,0,NULL); sid++; } - generate_pkt_EOF(true,NULL,NULL,sid,0,SERVER_STATUS_AUTOCOMMIT); // FIXME : for now we pass a very broken flag + generate_pkt_EOF(true,NULL,NULL,sid,0,setStatus); sid++; } return true; diff --git a/lib/MySQL_Session.cpp b/lib/MySQL_Session.cpp index 444a74304..46018bec8 100644 --- a/lib/MySQL_Session.cpp +++ b/lib/MySQL_Session.cpp @@ -3435,7 +3435,7 @@ void MySQL_Session::handler___status_WAITING_CLIENT_DATA___STATE_SLEEP___MYSQL_C unsigned int nTrx=NumActiveTransactions(); uint16_t setStatus = (nTrx ? SERVER_STATUS_IN_TRANS : 0 ); if (autocommit) setStatus += SERVER_STATUS_AUTOCOMMIT; - client_myds->myprot.generate_pkt_OK(true,NULL,NULL,1,0,0,setStatus,2,NULL); + client_myds->myprot.generate_pkt_OK(true,NULL,NULL,1,0,0,setStatus,0,NULL); client_myds->DSS=STATE_SLEEP; } else { l_free(pkt->size,pkt->ptr); @@ -3474,7 +3474,7 @@ void MySQL_Session::handler___status_WAITING_CLIENT_DATA___STATE_SLEEP___MYSQL_C unsigned int nTrx=NumActiveTransactions(); uint16_t setStatus = (nTrx ? SERVER_STATUS_IN_TRANS : 0 ); if (autocommit) setStatus += SERVER_STATUS_AUTOCOMMIT; - client_myds->myprot.generate_pkt_OK(true,NULL,NULL,1,0,0,setStatus,2,NULL); + client_myds->myprot.generate_pkt_OK(true,NULL,NULL,1,0,0,setStatus,0,NULL); client_myds->DSS=STATE_SLEEP; } else { l_free(pkt->size,pkt->ptr);