summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/join_cache.result18
-rw-r--r--mysql-test/t/join_cache.test18
-rw-r--r--sql/sql_test.cc8
3 files changed, 42 insertions, 2 deletions
diff --git a/mysql-test/r/join_cache.result b/mysql-test/r/join_cache.result
index 99e76952cfe..26f1ead2bfe 100644
--- a/mysql-test/r/join_cache.result
+++ b/mysql-test/r/join_cache.result
@@ -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;
diff --git a/mysql-test/t/join_cache.test b/mysql-test/t/join_cache.test
index 4bde588cb7d..654c9f96a24 100644
--- a/mysql-test/t/join_cache.test
+++ b/mysql-test/t/join_cache.test
@@ -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;
diff --git a/sql/sql_test.cc b/sql/sql_test.cc
index 5bf9cd1f77e..af89b3cd525 100644
--- a/sql/sql_test.cc
+++ b/sql/sql_test.cc
@@ -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 "