From b1bdf969270fb59ef2cf0381394ac0b71cfee73f Mon Sep 17 00:00:00 2001 From: Daniel Nichter Date: Thu, 26 Sep 2013 19:16:19 -0700 Subject: [PATCH] Keep GLOBAL in distill of SHOW GLOBAL STATUS|VARIABLES. --- bin/pt-query-digest | 9 +++++---- lib/QueryRewriter.pm | 9 +++++---- t/lib/QueryRewriter.t | 14 +++++++------- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/bin/pt-query-digest b/bin/pt-query-digest index a4e79a9a..a0d0c8e7 100755 --- a/bin/pt-query-digest +++ b/bin/pt-query-digest @@ -2799,8 +2799,8 @@ $bal = qr/ my $olc_re = qr/(?:--|#)[^'"\r\n]*(?=[\r\n]|\Z)/; # One-line comments my $mlc_re = qr#/\*[^!].*?\*/#sm; # But not /*!version */ -my $vlc_re = qr#/\*.*?[0-9+].*?\*/#sm; # For SHOW + /*!version */ -my $vlc_rf = qr#^(SHOW).*?/\*![0-9+].*?\*/#sm; # Variation for SHOW +my $vlc_re = qr#/\*.*?[0-9]+.*?\*/#sm; # For SHOW + /*!version */ +my $vlc_rf = qr#^(?:SHOW).*?/\*![0-9]+(.*?)\*/#sm; # Variation for SHOW sub new { @@ -2815,7 +2815,8 @@ sub strip_comments { $query =~ s/$mlc_re//go; $query =~ s/$olc_re//go; if ( $query =~ m/$vlc_rf/i ) { # contains show + version - $query =~ s/$vlc_re//go; + my $qualifier = $1 || ''; + $query =~ s/$vlc_re/$qualifier/go; } return $query; } @@ -2957,7 +2958,7 @@ sub distill_verbs { PTDEBUG && _d($query); $query = uc $query; - $query =~ s/\s+(?:GLOBAL|SESSION|FULL|STORAGE|ENGINE)\b/ /g; + $query =~ s/\s+(?:SESSION|FULL|STORAGE|ENGINE)\b/ /g; $query =~ s/\s+COUNT[^)]+\)//g; $query =~ s/\s+(?:FOR|FROM|LIKE|WHERE|LIMIT|IN)\b.+//ms; diff --git a/lib/QueryRewriter.pm b/lib/QueryRewriter.pm index aed3832b..05d1fcaa 100644 --- a/lib/QueryRewriter.pm +++ b/lib/QueryRewriter.pm @@ -48,8 +48,8 @@ $bal = qr/ # performance. The multi-line pattern does not match version-comments. my $olc_re = qr/(?:--|#)[^'"\r\n]*(?=[\r\n]|\Z)/; # One-line comments my $mlc_re = qr#/\*[^!].*?\*/#sm; # But not /*!version */ -my $vlc_re = qr#/\*.*?[0-9+].*?\*/#sm; # For SHOW + /*!version */ -my $vlc_rf = qr#^(SHOW).*?/\*![0-9+].*?\*/#sm; # Variation for SHOW +my $vlc_re = qr#/\*.*?[0-9]+.*?\*/#sm; # For SHOW + /*!version */ +my $vlc_rf = qr#^(?:SHOW).*?/\*![0-9]+(.*?)\*/#sm; # Variation for SHOW sub new { @@ -65,7 +65,8 @@ sub strip_comments { $query =~ s/$mlc_re//go; $query =~ s/$olc_re//go; if ( $query =~ m/$vlc_rf/i ) { # contains show + version - $query =~ s/$vlc_re//go; + my $qualifier = $1 || ''; + $query =~ s/$vlc_re/$qualifier/go; } return $query; } @@ -273,7 +274,7 @@ sub distill_verbs { # Remove common keywords. $query = uc $query; - $query =~ s/\s+(?:GLOBAL|SESSION|FULL|STORAGE|ENGINE)\b/ /g; + $query =~ s/\s+(?:SESSION|FULL|STORAGE|ENGINE)\b/ /g; # This should be in the regex above but Perl doesn't seem to match # COUNT\(.+\) properly when it's grouped. $query =~ s/\s+COUNT[^)]+\)//g; diff --git a/t/lib/QueryRewriter.t b/t/lib/QueryRewriter.t index 4b6d6c61..2d8f7f89 100644 --- a/t/lib/QueryRewriter.t +++ b/t/lib/QueryRewriter.t @@ -1248,7 +1248,7 @@ my %status_tests = ( 'SHOW SLAVE HOSTS' => 'SHOW SLAVE HOSTS', 'SHOW SLAVE STATUS' => 'SHOW SLAVE STATUS', 'SHOW STATUS' => 'SHOW STATUS', - 'SHOW GLOBAL STATUS' => 'SHOW STATUS', + 'SHOW GLOBAL STATUS' => 'SHOW GLOBAL STATUS', 'SHOW SESSION STATUS' => 'SHOW STATUS', 'SHOW STATUS LIKE "pattern"' => 'SHOW STATUS', 'SHOW STATUS WHERE foo=bar' => 'SHOW STATUS', @@ -1270,7 +1270,7 @@ my %status_tests = ( 'SHOW TRIGGERS LIKE "pattern"' => 'SHOW TRIGGERS', 'SHOW TRIGGERS WHERE foo=bar' => 'SHOW TRIGGERS', 'SHOW VARIABLES' => 'SHOW VARIABLES', - 'SHOW GLOBAL VARIABLES' => 'SHOW VARIABLES', + 'SHOW GLOBAL VARIABLES' => 'SHOW GLOBAL VARIABLES', 'SHOW SESSION VARIABLES' => 'SHOW VARIABLES', 'SHOW VARIABLES LIKE "pattern"' => 'SHOW VARIABLES', 'SHOW VARIABLES WHERE foo=bar' => 'SHOW VARIABLES', @@ -1312,8 +1312,8 @@ foreach my $show ( @show ) { # Issue 735: mk-query-digest doesn't distill query correctly is( $qr->distill('SHOW /*!50002 GLOBAL */ STATUS'), - 'SHOW STATUS', - "distills SHOW STATUS" + 'SHOW GLOBAL STATUS', + "distills SHOW /*!50002 GLOBAL */ STATUS" ); is( @@ -1330,14 +1330,14 @@ is( is( $qr->distill('SHOW GLOBAL STATUS'), - 'SHOW STATUS', + 'SHOW GLOBAL STATUS', "distills SHOW GLOBAL STATUS" ); is( $qr->distill('SHOW GLOBAL VARIABLES'), - 'SHOW VARIABLES', - "distills SHOW VARIABLES" + 'SHOW GLOBAL VARIABLES', + "distills SHOW GLOBAL VARIABLES" ); is(