Update conditional to check speifically for COM_QUERY instead of specifically ignoring COM_STMT_PREPARE. Add conditional to SELECT LAST_INSERT_ID(), SELECT LAST_INSERT_ID() LIMIT 1, SELECT @@IDENTITY, SELECT @@IDENTITY LIMIT 1 intercepts.

pull/3826/head
Mike Doty 4 years ago
parent 2d0b85ece2
commit 565799b92b

@ -1201,7 +1201,8 @@ bool MySQL_Session::handler_special_queries(PtrSize_t *pkt) {
}
}
if (pkt->size==SELECT_VERSION_COMMENT_LEN+5 && strncmp((char *)SELECT_VERSION_COMMENT,(char *)pkt->ptr+5,pkt->size-5)==0) {
//handle 2564
if (pkt->size==SELECT_VERSION_COMMENT_LEN+5 && *(char *)(pkt->ptr+4)==(char)0x03 && strncmp((char *)SELECT_VERSION_COMMENT,(char *)pkt->ptr+5,pkt->size-5)==0) {
// FIXME: this doesn't return AUTOCOMMIT or IN_TRANS
PtrSize_t pkt_2;
if (deprecate_eof_active) {
@ -6201,7 +6202,7 @@ bool MySQL_Session::handler___status_WAITING_CLIENT_DATA___STATE_SLEEP___MYSQL_C
// handle case #1797
// handle case #2564
if ((pkt->size==SELECT_CONNECTION_ID_LEN+5 && *(char *)(pkt->ptr+4)!=(char)0x16 && strncasecmp((char *)SELECT_CONNECTION_ID,(char *)pkt->ptr+5,pkt->size-5)==0)) {
if ((pkt->size==SELECT_CONNECTION_ID_LEN+5 && *(char *)(pkt->ptr+4)==(char)0x03 && strncasecmp((char *)SELECT_CONNECTION_ID,(char *)pkt->ptr+5,pkt->size-5)==0)) {
char buf[32];
char buf2[32];
sprintf(buf,"%u",thread_session_id);
@ -6268,15 +6269,15 @@ bool MySQL_Session::handler___status_WAITING_CLIENT_DATA___STATE_SLEEP___MYSQL_C
// if we reached here, we don't know the right backend
// we try to determine if it is a simple "SELECT LAST_INSERT_ID()" or "SELECT @@IDENTITY" and we return mysql->last_insert_id
//handle 2564
if (
(pkt->size==SELECT_LAST_INSERT_ID_LEN+5 && strncasecmp((char *)SELECT_LAST_INSERT_ID,(char *)pkt->ptr+5,pkt->size-5)==0)
(pkt->size==SELECT_LAST_INSERT_ID_LEN+5 && *(char *)(pkt->ptr+4)==(char)0x03 && strncasecmp((char *)SELECT_LAST_INSERT_ID,(char *)pkt->ptr+5,pkt->size-5)==0)
||
(pkt->size==SELECT_LAST_INSERT_ID_LIMIT1_LEN+5 && strncasecmp((char *)SELECT_LAST_INSERT_ID_LIMIT1,(char *)pkt->ptr+5,pkt->size-5)==0)
(pkt->size==SELECT_LAST_INSERT_ID_LIMIT1_LEN+5 && *(char *)(pkt->ptr+4)==(char)0x03 && strncasecmp((char *)SELECT_LAST_INSERT_ID_LIMIT1,(char *)pkt->ptr+5,pkt->size-5)==0)
||
(pkt->size==SELECT_VARIABLE_IDENTITY_LEN+5 && strncasecmp((char *)SELECT_VARIABLE_IDENTITY,(char *)pkt->ptr+5,pkt->size-5)==0)
(pkt->size==SELECT_VARIABLE_IDENTITY_LEN+5 && *(char *)(pkt->ptr+4)==(char)0x03 && strncasecmp((char *)SELECT_VARIABLE_IDENTITY,(char *)pkt->ptr+5,pkt->size-5)==0)
||
(pkt->size==SELECT_VARIABLE_IDENTITY_LIMIT1_LEN+5 && strncasecmp((char *)SELECT_VARIABLE_IDENTITY_LIMIT1,(char *)pkt->ptr+5,pkt->size-5)==0)
(pkt->size==SELECT_VARIABLE_IDENTITY_LIMIT1_LEN+5 && *(char *)(pkt->ptr+4)==(char)0x03 && strncasecmp((char *)SELECT_VARIABLE_IDENTITY_LIMIT1,(char *)pkt->ptr+5,pkt->size-5)==0)
) {
char buf[32];
sprintf(buf,"%llu",last_insert_id);

Loading…
Cancel
Save