From b14a478f3c9e84db5bc07d4c6af13559f07afdd9 Mon Sep 17 00:00:00 2001 From: Daniel Nichter Date: Mon, 1 Jul 2013 13:59:12 -0700 Subject: [PATCH] Test --output json-anon. --- bin/pt-query-digest | 26 +- lib/JSONReportFormatter.pm | 38 +-- t/pt-query-digest/json.t | 10 + .../samples/json/slow002-anon.txt | 257 ++++++++++++++++++ 4 files changed, 301 insertions(+), 30 deletions(-) create mode 100644 t/pt-query-digest/samples/json/slow002-anon.txt diff --git a/bin/pt-query-digest b/bin/pt-query-digest index 1ad0855a..7c50dd53 100755 --- a/bin/pt-query-digest +++ b/bin/pt-query-digest @@ -7983,19 +7983,21 @@ override query_report => sub { push @tables, { status => $status, create => $create }; } - if ( $item =~ m/^(?:[\(\s]*select|insert|replace)/ ) { - if ( $item =~ m/^(?:insert|replace)/ ) { + if ( !$args{anon} ) { + if ( $item =~ m/^(?:[\(\s]*select|insert|replace)/ ) { + if ( $item =~ m/^(?:insert|replace)/ ) { + } + else { + + } } else { - - } - } - else { - my $converted = $qr->convert_to_select( - $sample->{arg} || '', - ); - if ( $converted && $converted =~ m/^[\(\s]*select/i ) { - $class->{example}->{as_select} = $converted; + my $converted = $qr->convert_to_select( + $sample->{arg} || '', + ); + if ( $converted && $converted =~ m/^[\(\s]*select/i ) { + $class->{example}->{as_select} = $converted; + } } } } @@ -14184,7 +14186,7 @@ sub print_reports { variations => $o->get('variations'), group => { map { $_=>1 } qw(rusage date hostname files header) }, resume => $resume, - anon => $report_class eq 'json-anon', + anon => $o->get('output') eq 'json-anon', ); } diff --git a/lib/JSONReportFormatter.pm b/lib/JSONReportFormatter.pm index a0926214..465127a2 100644 --- a/lib/JSONReportFormatter.pm +++ b/lib/JSONReportFormatter.pm @@ -342,26 +342,28 @@ override query_report => sub { push @tables, { status => $status, create => $create }; } - # Convert possible non-SELECTs for EXPLAIN. - if ( $item =~ m/^(?:[\(\s]*select|insert|replace)/ ) { - if ( $item =~ m/^(?:insert|replace)/ ) { - # Cannot convert or EXPLAIN INSERT or REPLACE queries. + if ( !$args{anon} ) { + # Convert possible non-SELECTs for EXPLAIN. + if ( $item =~ m/^(?:[\(\s]*select|insert|replace)/ ) { + if ( $item =~ m/^(?:insert|replace)/ ) { + # Cannot convert or EXPLAIN INSERT or REPLACE queries. + } + else { + # SELECT queries don't need to converted for EXPLAIN. + + # TODO: return the actual EXPLAIN plan + # $self->explain_report($query, $vals->{default_db}); + } } else { - # SELECT queries don't need to converted for EXPLAIN. - - # TODO: return the actual EXPLAIN plan - # $self->explain_report($query, $vals->{default_db}); - } - } - else { - # Query is not SELECT, INSERT, or REPLACE, so we can convert - # it for EXPLAIN. - my $converted = $qr->convert_to_select( - $sample->{arg} || '', - ); - if ( $converted && $converted =~ m/^[\(\s]*select/i ) { - $class->{example}->{as_select} = $converted; + # Query is not SELECT, INSERT, or REPLACE, so we can convert + # it for EXPLAIN. + my $converted = $qr->convert_to_select( + $sample->{arg} || '', + ); + if ( $converted && $converted =~ m/^[\(\s]*select/i ) { + $class->{example}->{as_select} = $converted; + } } } } diff --git a/t/pt-query-digest/json.t b/t/pt-query-digest/json.t index 11ee76e6..fbb1e4d1 100644 --- a/t/pt-query-digest/json.t +++ b/t/pt-query-digest/json.t @@ -39,6 +39,16 @@ ok( 'json output for slow002' ) or diag($test_diff); +ok( + no_diff( + sub { pt_query_digest::main(qw(--output json-anon), + "$sample/slowlogs/slow002.txt") }, + "$results/slow002-anon.txt", + sed => [ qq/'s!$trunk!TRUNK!'/ ], + ), + 'json-anon output for slow002' +) or diag($test_diff); + # --type tcpdump ok( diff --git a/t/pt-query-digest/samples/json/slow002-anon.txt b/t/pt-query-digest/samples/json/slow002-anon.txt new file mode 100644 index 00000000..42791f45 --- /dev/null +++ b/t/pt-query-digest/samples/json/slow002-anon.txt @@ -0,0 +1,257 @@ + +{ + "classes" : [ + { + "attribute" : "fingerprint", + "checksum" : "66825DDC008FFA89", + "distillate" : "UPDATE db?.tuningdetail_?_? db?.gonzo", + "fingerprint" : "update d?tuningdetail_?_? n inner join d?gonzo a using(gonzo) set n.column? = a.column?, n.word? = a.word?", + "metrics" : { + "Filesort" : { + "yes" : "0" + }, + "Filesort_on_disk" : { + "yes" : "0" + }, + "Full_join" : { + "yes" : "0" + }, + "Full_scan" : { + "yes" : "1" + }, + "Lock_time" : { + "avg" : "0.000091", + "max" : "0.000091", + "median" : "0.000091", + "min" : "0.000091", + "pct" : "0.125000", + "pct_95" : "0.000091", + "stddev" : "0.000000", + "sum" : "0.000091" + }, + "Merge_passes" : { + "avg" : "0", + "max" : "0", + "median" : "0", + "min" : "0", + "pct" : "0", + "pct_95" : "0", + "stddev" : "0", + "sum" : "0" + }, + "QC_Hit" : { + "yes" : "0" + }, + "Query_length" : { + "avg" : "129", + "max" : "129", + "median" : "129", + "min" : "129", + "pct" : "0", + "pct_95" : "129", + "stddev" : "0", + "sum" : "129" + }, + "Query_time" : { + "avg" : "0.726052", + "max" : "0.726052", + "median" : "0.726052", + "min" : "0.726052", + "pct" : "0.125000", + "pct_95" : "0.726052", + "stddev" : "0.000000", + "sum" : "0.726052" + }, + "Rows_examined" : { + "avg" : "62951", + "max" : "62951", + "median" : "62951", + "min" : "62951", + "pct" : "0", + "pct_95" : "62951", + "stddev" : "0", + "sum" : "62951" + }, + "Rows_sent" : { + "avg" : "0", + "max" : "0", + "median" : "0", + "min" : "0", + "pct" : "0", + "pct_95" : "0", + "stddev" : "0", + "sum" : "0" + }, + "Tmp_table" : { + "yes" : "0" + }, + "Tmp_table_on_disk" : { + "yes" : "0" + }, + "db" : { + "value" : "db1" + }, + "host" : { + "value" : "" + }, + "user" : { + "value" : "[SQL_SLAVE]" + } + }, + "query_count" : 1, + "tables" : [ + { + "create" : "SHOW CREATE TABLE `db2`.`tuningdetail_21_265507`\\G", + "status" : "SHOW TABLE STATUS FROM `db2` LIKE 'tuningdetail_21_265507'\\G" + }, + { + "create" : "SHOW CREATE TABLE `db1`.`gonzo`\\G", + "status" : "SHOW TABLE STATUS FROM `db1` LIKE 'gonzo'\\G" + } + ], + "ts_max" : "2007-12-18 11:48:27", + "ts_min" : "2007-12-18 11:48:27" + } + ], + "global" : { + "files" : [ + { + "name" : "TRUNK/t/lib/samples/slowlogs/slow002.txt", + "size" : 3841 + } + ], + "metrics" : { + "Filesort" : { + "cnt" : "0" + }, + "Filesort_on_disk" : { + "cnt" : "0" + }, + "Full_join" : { + "cnt" : "0" + }, + "Full_scan" : { + "cnt" : "1" + }, + "InnoDB_IO_r_bytes" : { + "avg" : "0", + "max" : "0", + "median" : "0", + "min" : "0", + "pct_95" : "0", + "stddev" : "0", + "sum" : "0" + }, + "InnoDB_IO_r_ops" : { + "avg" : "0", + "max" : "0", + "median" : "0", + "min" : "0", + "pct_95" : "0", + "stddev" : "0", + "sum" : "0" + }, + "InnoDB_IO_r_wait" : { + "avg" : "0.000000", + "max" : "0.000000", + "median" : "0.000000", + "min" : "0.000000", + "pct_95" : "0.000000", + "stddev" : "0.000000", + "sum" : "0.000000" + }, + "InnoDB_pages_distinct" : { + "avg" : "17", + "max" : "24", + "median" : "17", + "min" : "11", + "pct_95" : "23", + "stddev" : "3", + "sum" : "107" + }, + "InnoDB_queue_wait" : { + "avg" : "0.000000", + "max" : "0.000000", + "median" : "0.000000", + "min" : "0.000000", + "pct_95" : "0.000000", + "stddev" : "0.000000", + "sum" : "0.000000" + }, + "InnoDB_rec_lock_wait" : { + "avg" : "0.000000", + "max" : "0.000000", + "median" : "0.000000", + "min" : "0.000000", + "pct_95" : "0.000000", + "stddev" : "0.000000", + "sum" : "0.000000" + }, + "Lock_time" : { + "avg" : "0.000038", + "max" : "0.000091", + "median" : "0.000026", + "min" : "0.000000", + "pct_95" : "0.000089", + "stddev" : "0.000028", + "sum" : "0.000304" + }, + "Merge_passes" : { + "avg" : "0", + "max" : "0", + "median" : "0", + "min" : "0", + "pct_95" : "0", + "stddev" : "0", + "sum" : "0" + }, + "QC_Hit" : { + "cnt" : "0" + }, + "Query_length" : { + "avg" : "62", + "max" : "129", + "median" : "62", + "min" : "5", + "pct_95" : "124", + "stddev" : "34", + "sum" : "502" + }, + "Query_time" : { + "avg" : "0.095260", + "max" : "0.726052", + "median" : "0.000516", + "min" : "0.000012", + "pct_95" : "0.705093", + "stddev" : "0.231765", + "sum" : "0.762080" + }, + "Rows_examined" : { + "avg" : "7868", + "max" : "62951", + "median" : "0", + "min" : "0", + "pct_95" : "61003", + "stddev" : "20174", + "sum" : "62951" + }, + "Rows_sent" : { + "avg" : "0", + "max" : "0", + "median" : "0", + "min" : "0", + "pct_95" : "0", + "stddev" : "0", + "sum" : "0" + }, + "Tmp_table" : { + "cnt" : "0" + }, + "Tmp_table_on_disk" : { + "cnt" : "0" + } + }, + "query_count" : 8, + "unique_query_count" : 7 + } +}