Fixed LP bug #725050.
The bug in the function print_keyuse() caused crashes if hash join could be used. It happened because the function ignored the fact that KEYUSE structures could be created for hash joins as well.
This commit is contained in:
parent
1b03a028fc
commit
0f0360e21f
@ -4967,3 +4967,21 @@ SET SESSION join_cache_level = DEFAULT;
|
||||
SET SESSION join_buffer_size = DEFAULT;
|
||||
DROP TABLE t1,t2;
|
||||
set @@optimizer_switch=@save_optimizer_switch;
|
||||
#
|
||||
# Bug #725050: print keyuse info when hash join is used
|
||||
#
|
||||
create table t1 (a int, b int);
|
||||
insert into t1 values (2,2), (1,1);
|
||||
create table t2 (a int);
|
||||
insert into t2 values (2), (3);
|
||||
set session join_cache_level=3;
|
||||
set @@debug = 'd:t:O,/tmp/trace.out';
|
||||
explain select t1.b from t1,t2 where t1.b=t2.a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using where
|
||||
1 SIMPLE t2 hash_ALL NULL #hash#$hj 5 test.t1.b 2 Using where; Using join buffer (flat, BNLH join)
|
||||
select t1.b from t1,t2 where t1.b=t2.a;
|
||||
b
|
||||
2
|
||||
set session join_cache_level=default;
|
||||
drop table t1,t2;
|
||||
|
@ -3100,3 +3100,21 @@ DROP TABLE t1,t2;
|
||||
|
||||
# this must be the last command in the file
|
||||
set @@optimizer_switch=@save_optimizer_switch;
|
||||
|
||||
--echo #
|
||||
--echo # Bug #725050: print keyuse info when hash join is used
|
||||
--echo #
|
||||
|
||||
create table t1 (a int, b int);
|
||||
insert into t1 values (2,2), (1,1);
|
||||
create table t2 (a int);
|
||||
insert into t2 values (2), (3);
|
||||
|
||||
set session join_cache_level=3;
|
||||
set @@debug = 'd:t:O,/tmp/trace.out';
|
||||
|
||||
explain select t1.b from t1,t2 where t1.b=t2.a;
|
||||
select t1.b from t1,t2 where t1.b=t2.a;
|
||||
|
||||
set session join_cache_level=default;
|
||||
drop table t1,t2;
|
||||
|
@ -231,14 +231,18 @@ void print_keyuse(KEYUSE *keyuse)
|
||||
char buff[256];
|
||||
char buf2[64];
|
||||
const char *fieldname;
|
||||
JOIN_TAB *join_tab= keyuse->table->reginfo.join_tab;
|
||||
KEY *key_info= join_tab->get_keyinfo_by_key_no(keyuse->key);
|
||||
String str(buff,(uint32) sizeof(buff), system_charset_info);
|
||||
str.length(0);
|
||||
keyuse->val->print(&str, QT_ORDINARY);
|
||||
str.append('\0');
|
||||
if (keyuse->keypart == FT_KEYPART)
|
||||
if (keyuse->is_for_hash_join())
|
||||
fieldname= keyuse->table->field[keyuse->keypart]->field_name;
|
||||
else if (keyuse->keypart == FT_KEYPART)
|
||||
fieldname= "FT_KEYPART";
|
||||
else
|
||||
fieldname= keyuse->table->key_info[keyuse->key].key_part[keyuse->keypart].field->field_name;
|
||||
fieldname= key_info->key_part[keyuse->keypart].field->field_name;
|
||||
longlong2str(keyuse->used_tables, buf2, 16, 0);
|
||||
DBUG_LOCK_FILE;
|
||||
fprintf(DBUG_FILE, "KEYUSE: %s.%s=%s optimize: %u used_tables: %s "
|
||||
|
Loading…
x
Reference in New Issue
Block a user