mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-11 13:40:07 +00:00
PT-2277 - fix pt-visual-explain for 'Impossible ON condition' case
This commit is contained in:
@@ -330,7 +330,7 @@ sub transform {
|
|||||||
# Dispatch to a class method to generate the tree.
|
# Dispatch to a class method to generate the tree.
|
||||||
# ##################################################################
|
# ##################################################################
|
||||||
my $no_matching_row = join('|',
|
my $no_matching_row = join('|',
|
||||||
"Impossible (?:WHERE|HAVING)(?: noticed after reading const tables)?",
|
"Impossible (?:WHERE|HAVING|ON)(?: noticed after reading const tables| condition)?",
|
||||||
'No matching.*row',
|
'No matching.*row',
|
||||||
'(?:unique|const) row not found',
|
'(?:unique|const) row not found',
|
||||||
);
|
);
|
||||||
@@ -499,6 +499,13 @@ sub ref_or_null {
|
|||||||
|
|
||||||
sub const {
|
sub const {
|
||||||
my ( $self, $row ) = @_;
|
my ( $self, $row ) = @_;
|
||||||
|
if ( !$row->{key} ) {
|
||||||
|
return {
|
||||||
|
type => 'Constant table access',
|
||||||
|
rows => $row->{rows},
|
||||||
|
children => [$self->table($row)]
|
||||||
|
}
|
||||||
|
}
|
||||||
return $self->index_access($row, 'Constant index lookup');
|
return $self->index_access($row, 'Constant index lookup');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -9,7 +9,7 @@ BEGIN {
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings FATAL => 'all';
|
use warnings FATAL => 'all';
|
||||||
use English qw(-no_match_vars);
|
use English qw(-no_match_vars);
|
||||||
use Test::More tests => 60;
|
use Test::More tests => 61;
|
||||||
|
|
||||||
use PerconaTest;
|
use PerconaTest;
|
||||||
require "$trunk/bin/pt-visual-explain";
|
require "$trunk/bin/pt-visual-explain";
|
||||||
@@ -72,6 +72,45 @@ is_deeply(
|
|||||||
'Impossible HAVING',
|
'Impossible HAVING',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$t = $e->parse( load_file("t/pt-visual-explain/samples/impossible_on_condition.sql") );
|
||||||
|
is_deeply(
|
||||||
|
$t,
|
||||||
|
{ type => 'JOIN',
|
||||||
|
children => [
|
||||||
|
{ type => 'Constant table access',
|
||||||
|
id => 1,
|
||||||
|
rowid => 0,
|
||||||
|
rows => undef,
|
||||||
|
warning => 'Impossible ON condition',
|
||||||
|
children => [
|
||||||
|
{ type => 'Table',
|
||||||
|
table => 't',
|
||||||
|
possible_keys => 't_id',
|
||||||
|
partitions => undef
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{ type => 'Filter with WHERE',
|
||||||
|
id => 1,
|
||||||
|
rowid => 1,
|
||||||
|
children => [
|
||||||
|
{ type => 'Table scan',
|
||||||
|
rows => 1,
|
||||||
|
children => [
|
||||||
|
{ type => 'Table',
|
||||||
|
table => 't2',
|
||||||
|
possible_keys => undef,
|
||||||
|
partitions => undef
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Impossible ON condition"
|
||||||
|
);
|
||||||
|
|
||||||
$t = $e->parse( load_file("t/pt-visual-explain/samples/const_row_not_found.sql") );
|
$t = $e->parse( load_file("t/pt-visual-explain/samples/const_row_not_found.sql") );
|
||||||
is_deeply(
|
is_deeply(
|
||||||
$t,
|
$t,
|
||||||
|
7
t/pt-visual-explain/samples/impossible_on_condition.sql
Normal file
7
t/pt-visual-explain/samples/impossible_on_condition.sql
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
explain select * from t2 LEFT JOIN t on t2.id = t.id AND 1 = 0 WHERE t2.id = 1;
|
||||||
|
+------+-------------+-------+-------+---------------+------+---------+------+------+-------------------------+
|
||||||
|
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
|
||||||
|
+------+-------------+-------+-------+---------------+------+---------+------+------+-------------------------+
|
||||||
|
| 1 | SIMPLE | t | const | t_id | NULL | NULL | NULL | 0 | Impossible ON condition |
|
||||||
|
| 1 | SIMPLE | t2 | ALL | NULL | NULL | NULL | NULL | 1 | Using where |
|
||||||
|
+------+-------------+-------+-------+---------------+------+---------+------+------+-------------------------+
|
Reference in New Issue
Block a user