diff --git a/bin/pt-query-digest b/bin/pt-query-digest index dd3ea403..751dbd3f 100755 --- a/bin/pt-query-digest +++ b/bin/pt-query-digest @@ -7778,7 +7778,12 @@ sub explain_report { $explain .= "# *************************** $i. " . "row ***************************\n"; foreach my $j ( 0 .. $#row ) { - $explain .= sprintf "# %13s: %s\n", $sth->{NAME}->[$j], + # In some OSes/Perl versions, the filtered row can be reported with or without decimals. + # Example, in Ubuntu 16.04 it is being printed as 100.00 while in Ubuntu 18.04 it is + # being printed as 100. + # To make it testeable, we need to have a consistent format across versions. + my $value_format = $sth->{NAME}->[$j] eq 'filtered' ? "%.02f" : "%s"; + $explain .= sprintf "# %13s: $value_format\n", $sth->{NAME}->[$j], defined $row[$j] ? $row[$j] : 'NULL'; } $i++; # next row number diff --git a/lib/QueryReportFormatter.pm b/lib/QueryReportFormatter.pm index 8dd649c9..ea540070 100644 --- a/lib/QueryReportFormatter.pm +++ b/lib/QueryReportFormatter.pm @@ -1332,7 +1332,8 @@ sub explain_report { $explain .= "# *************************** $i. " . "row ***************************\n"; foreach my $j ( 0 .. $#row ) { - $explain .= sprintf "# %13s: %s\n", $sth->{NAME}->[$j], + my $value_format = $sth->{NAME}->[$j] eq 'filtered' ? "%.02f" : "%s"; + $explain .= sprintf "# %13s: $value_format\n", $sth->{NAME}->[$j], defined $row[$j] ? $row[$j] : 'NULL'; } $i++; # next row number diff --git a/t/pt-query-digest/samples/issue_1196-output-5.7.txt b/t/pt-query-digest/samples/issue_1196-output-5.7.txt index ff7fa7f9..4cd38fdd 100644 --- a/t/pt-query-digest/samples/issue_1196-output-5.7.txt +++ b/t/pt-query-digest/samples/issue_1196-output-5.7.txt @@ -45,7 +45,7 @@ select t.a, count(*) from t join t t2 using(a) group by 1 order by 2 desc limit # key_len: NULL # ref: NULL # rows: 14 -# filtered: 100 +# filtered: 100.00 # Extra: Using temporary; Using filesort # *************************** 2. row *************************** # id: 1 @@ -58,5 +58,5 @@ select t.a, count(*) from t join t t2 using(a) group by 1 order by 2 desc limit # key_len: NULL # ref: NULL # rows: 14 -# filtered: 10 +# filtered: 10.00 # Extra: Using where; Using join buffer (Block Nested Loop) diff --git a/t/pt-query-digest/samples/slow007_explain_1-57.txt b/t/pt-query-digest/samples/slow007_explain_1-57.txt index f02b486e..09850ded 100644 --- a/t/pt-query-digest/samples/slow007_explain_1-57.txt +++ b/t/pt-query-digest/samples/slow007_explain_1-57.txt @@ -41,5 +41,5 @@ SELECT fruit FROM trees\G # key_len: 27 # ref: NULL # rows: 1 -# filtered: 100 +# filtered: 100.00 # Extra: Using index diff --git a/t/pt-query-digest/samples/slow007_explain_2-57.txt b/t/pt-query-digest/samples/slow007_explain_2-57.txt index eee6d10d..8265bf7b 100644 --- a/t/pt-query-digest/samples/slow007_explain_2-57.txt +++ b/t/pt-query-digest/samples/slow007_explain_2-57.txt @@ -41,5 +41,5 @@ SELECT fruit FROM trees\G # key_len: 27 # ref: NULL # rows: 3 -# filtered: 100 +# filtered: 100.00 # Extra: Using index