From 942a5987e24338b376ae4570e8b4cdd310eba2ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Mon, 20 May 2019 15:39:21 +1000 Subject: [PATCH 1/2] Improvement in query digest to remove minus signs --- lib/c_tokenizer.c | 54 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 47 insertions(+), 7 deletions(-) diff --git a/lib/c_tokenizer.c b/lib/c_tokenizer.c index 3efe43c37..8e15ac752 100644 --- a/lib/c_tokenizer.c +++ b/lib/c_tokenizer.c @@ -379,7 +379,17 @@ char *mysql_query_digest_and_first_comment(char *s, int _len, char **first_comme // Last char process if(len == i + 1) { + char *_p = p_r_t; + _p-=3; p_r = p_r_t; + if ( _p >= r && *(_p+2) == '-') { + if ( + ( *(_p+1) == ',' ) || ( *(_p+1) == '(' ) || + ( ( *(_p+1) == ' ' ) && ( *_p == ',' || *_p == '(' ) ) + ) { + p_r--; + } + } *p_r++ = '?'; flag = 0; break; @@ -404,13 +414,23 @@ char *mysql_query_digest_and_first_comment(char *s, int _len, char **first_comme // satisfied closing string - swap string to ? if(*s == qutr_char && (len == i+1 || *(s + SIZECHAR) != qutr_char)) { - p_r = p_r_t; - *p_r++ = '?'; - flag = 0; - if(i < len) - s++; - i++; - continue; + char *_p = p_r_t; + _p-=3; + p_r = p_r_t; + if ( _p >= r && *(_p+2) == '-') { + if ( + ( *(_p+1) == ',' ) || ( *(_p+1) == '(' ) || + ( ( *(_p+1) == ' ' ) && ( *_p == ',' || *_p == '(' ) ) + ) { + p_r--; + } + } + *p_r++ = '?'; + flag = 0; + if(i < len) + s++; + i++; + continue; } } @@ -422,6 +442,16 @@ char *mysql_query_digest_and_first_comment(char *s, int _len, char **first_comme // last single char if(p_r_t == p_r) { + char *_p = p_r_t; + _p-=3; + if ( _p >= r && *(_p+2) == '-') { + if ( + ( *(_p+1) == ',' ) || ( *(_p+1) == '(' ) || + ( ( *(_p+1) == ' ' ) && ( *_p == ',' || *_p == '(' ) ) + ) { + p_r--; + } + } *p_r++ = '?'; i++; continue; @@ -432,7 +462,17 @@ char *mysql_query_digest_and_first_comment(char *s, int _len, char **first_comme { if(is_digit_string(p_r_t, p_r)) { + char *_p = p_r_t; + _p-=3; p_r = p_r_t; + if ( _p >= r && *(_p+2) == '-') { + if ( + ( *(_p+1) == ',' ) || ( *(_p+1) == '(' ) || + ( ( *(_p+1) == ' ' ) && ( *_p == ',' || *_p == '(' ) ) + ) { + p_r--; + } + } *p_r++ = '?'; if(len == i+1) { From 8783d55fd237180de33658b716b7d9a85fce0fcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Mon, 20 May 2019 15:43:20 +1000 Subject: [PATCH 2/2] Improvement in query digest to remove plus signs --- lib/c_tokenizer.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/c_tokenizer.c b/lib/c_tokenizer.c index 8e15ac752..8928ef631 100644 --- a/lib/c_tokenizer.c +++ b/lib/c_tokenizer.c @@ -382,7 +382,7 @@ char *mysql_query_digest_and_first_comment(char *s, int _len, char **first_comme char *_p = p_r_t; _p-=3; p_r = p_r_t; - if ( _p >= r && *(_p+2) == '-') { + if ( _p >= r && ( *(_p+2) == '-' || *(_p+2) == '+') ) { if ( ( *(_p+1) == ',' ) || ( *(_p+1) == '(' ) || ( ( *(_p+1) == ' ' ) && ( *_p == ',' || *_p == '(' ) ) @@ -417,7 +417,7 @@ char *mysql_query_digest_and_first_comment(char *s, int _len, char **first_comme char *_p = p_r_t; _p-=3; p_r = p_r_t; - if ( _p >= r && *(_p+2) == '-') { + if ( _p >= r && ( *(_p+2) == '-' || *(_p+2) == '+') ) { if ( ( *(_p+1) == ',' ) || ( *(_p+1) == '(' ) || ( ( *(_p+1) == ' ' ) && ( *_p == ',' || *_p == '(' ) ) @@ -444,7 +444,7 @@ char *mysql_query_digest_and_first_comment(char *s, int _len, char **first_comme { char *_p = p_r_t; _p-=3; - if ( _p >= r && *(_p+2) == '-') { + if ( _p >= r && ( *(_p+2) == '-' || *(_p+2) == '+') ) { if ( ( *(_p+1) == ',' ) || ( *(_p+1) == '(' ) || ( ( *(_p+1) == ' ' ) && ( *_p == ',' || *_p == '(' ) ) @@ -465,7 +465,7 @@ char *mysql_query_digest_and_first_comment(char *s, int _len, char **first_comme char *_p = p_r_t; _p-=3; p_r = p_r_t; - if ( _p >= r && *(_p+2) == '-') { + if ( _p >= r && ( *(_p+2) == '-' || *(_p+2) == '+') ) { if ( ( *(_p+1) == ',' ) || ( *(_p+1) == '(' ) || ( ( *(_p+1) == ' ' ) && ( *_p == ',' || *_p == '(' ) )