From dfc51c33529d5a8ef67828d1abbcf839e645559e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Jaramago=20Fern=C3=A1ndez?= Date: Tue, 16 Mar 2021 09:07:52 +0000 Subject: [PATCH] Closes #3247: Added support for command 'SELECT CONNECTION_ID()' in order to support 'mycli' client --- lib/ProxySQL_Admin.cpp | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/lib/ProxySQL_Admin.cpp b/lib/ProxySQL_Admin.cpp index bce678fc3..1f05d1b1a 100644 --- a/lib/ProxySQL_Admin.cpp +++ b/lib/ProxySQL_Admin.cpp @@ -4014,6 +4014,39 @@ void admin_session_handler(MySQL_Session *sess, void *_pa, PtrSize_t *pkt) { goto __run_query; } + // trivial implementation for 'connection_id()' to support 'mycli'. See #3247 + if (!strncasecmp("select connection_id()", query_no_space, strlen("select connection_id()"))) { + char buf[32]; + // 'connection_id()' is always forced to be '0' + sprintf(buf, "%lu", static_cast(0)); + uint16_t setStatus = 0; + MySQL_Data_Stream* myds=sess->client_myds; + MySQL_Protocol* myprot=&sess->client_myds->myprot; + myds->DSS=STATE_QUERY_SENT_DS; + int sid = 1; + myprot->generate_pkt_column_count(true,NULL,NULL,sid,1); + sid++; + myprot->generate_pkt_field( + true, NULL, NULL, sid, (char *)"", (char *)"", (char *)"", + (char *)"CONNECTION_ID()", (char *)"", 63, 31, MYSQL_TYPE_LONGLONG, 161, 0, false, 0, NULL + ); + sid++; + myds->DSS=STATE_COLUMN_DEFINITION; + myprot->generate_pkt_EOF(true,NULL,NULL,sid,0, setStatus); sid++; + char **p=(char **)malloc(sizeof(char*)*1); + unsigned long *l=(unsigned long *)malloc(sizeof(unsigned long *)*1); + l[0]=strlen(buf);; + p[0]=buf; + myprot->generate_pkt_row(true,NULL,NULL,sid,1,l,p); sid++; + myds->DSS=STATE_ROW; + myprot->generate_pkt_EOF(true,NULL,NULL,sid,0, setStatus); sid++; + myds->DSS=STATE_SLEEP; + run_query=false; + free(l); + free(p); + goto __run_query; + } + if (query_no_space_length==SELECT_DB_USER_LEN) { if (!strncasecmp(SELECT_DB_USER, query_no_space, query_no_space_length)) { l_free(query_length,query);