Commit cf8026c2 authored by Igor Babaev's avatar Igor Babaev

Fixed vargrind problems in check_join_cache_usage().

Merged the patch for bug 697557. Adjusted the results.
parents eaf00bba 8291d34a
...@@ -6952,4 +6952,24 @@ a a b ...@@ -6952,4 +6952,24 @@ a a b
2 NULL 42 2 NULL 42
SET SESSION join_cache_level = DEFAULT; SET SESSION join_cache_level = DEFAULT;
DROP TABLE t1,t2; DROP TABLE t1,t2;
#
# Bug #697557: hash join on a varchar field
#
CREATE TABLE t1 ( f1 varchar(10) , f2 int(11) , KEY (f1));
INSERT INTO t1 VALUES ('r',1), ('m',2);
CREATE TABLE t2 ( f1 varchar(10) , f2 int(11) , KEY (f1));
INSERT INTO t2 VALUES
('hgtofubn',1), ('GDOXZ',91), ('n',2), ('fggxgalh',88),
('hgtofu',1), ('GDO',101), ('n',3), ('fggxga',55),
('hgtofu',3), ('GDO',33), ('nn',3), ('fggxgarrr',77);
SET SESSION join_cache_level=3;
EXPLAIN
SELECT * FROM t1,t2 WHERE t2.f1 = t1.f1;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL f1 NULL NULL NULL 2 Using where
1 SIMPLE t2 hash f1 f1 13 test.t1.f1 12 Using join buffer (flat, BNLH join)
SELECT * FROM t1,t2 WHERE t2.f1 = t1.f1;
f1 f2 f1 f2
SET SESSION join_cache_level = DEFAULT;
DROP TABLE t1,t2;
set @@optimizer_switch=@save_optimizer_switch; set @@optimizer_switch=@save_optimizer_switch;
...@@ -2931,6 +2931,28 @@ SET SESSION join_cache_level = DEFAULT; ...@@ -2931,6 +2931,28 @@ SET SESSION join_cache_level = DEFAULT;
DROP TABLE t1,t2; DROP TABLE t1,t2;
--echo #
--echo # Bug #697557: hash join on a varchar field
--echo #
CREATE TABLE t1 ( f1 varchar(10) , f2 int(11) , KEY (f1));
INSERT INTO t1 VALUES ('r',1), ('m',2);
CREATE TABLE t2 ( f1 varchar(10) , f2 int(11) , KEY (f1));
INSERT INTO t2 VALUES
('hgtofubn',1), ('GDOXZ',91), ('n',2), ('fggxgalh',88),
('hgtofu',1), ('GDO',101), ('n',3), ('fggxga',55),
('hgtofu',3), ('GDO',33), ('nn',3), ('fggxgarrr',77);
SET SESSION join_cache_level=3;
EXPLAIN
SELECT * FROM t1,t2 WHERE t2.f1 = t1.f1;
SELECT * FROM t1,t2 WHERE t2.f1 = t1.f1;
SET SESSION join_cache_level = DEFAULT;
DROP TABLE t1,t2;
# this must be the last command in the file # this must be the last command in the file
set @@optimizer_switch=@save_optimizer_switch; set @@optimizer_switch=@save_optimizer_switch;
...@@ -689,20 +689,12 @@ ulong key_hashnr(KEY *key_info, uint used_key_parts, const uchar *key) ...@@ -689,20 +689,12 @@ ulong key_hashnr(KEY *key_info, uint used_key_parts, const uchar *key)
pack_length= 0; pack_length= 0;
break; break;
case HA_KEYTYPE_VARTEXT1: case HA_KEYTYPE_VARTEXT1:
cs= key_part->field->charset();
length= (uint)(pos[0]);
pack_length= 1;
break;
case HA_KEYTYPE_VARBINARY1:
cs= &my_charset_bin;
length= (uint)(pos[0]);
pack_length= 1;
break;
case HA_KEYTYPE_VARTEXT2: case HA_KEYTYPE_VARTEXT2:
cs= key_part->field->charset(); cs= key_part->field->charset();
length= uint2korr(pos); length= uint2korr(pos);
pack_length= 2; pack_length= 2;
break; break;
case HA_KEYTYPE_VARBINARY1:
case HA_KEYTYPE_VARBINARY2: case HA_KEYTYPE_VARBINARY2:
cs= &my_charset_bin; cs= &my_charset_bin;
length= uint2korr(pos); length= uint2korr(pos);
...@@ -806,23 +798,13 @@ bool key_buf_cmp(KEY *key_info, uint used_key_parts, ...@@ -806,23 +798,13 @@ bool key_buf_cmp(KEY *key_info, uint used_key_parts,
pack_length= 0; pack_length= 0;
break; break;
case HA_KEYTYPE_VARTEXT1: case HA_KEYTYPE_VARTEXT1:
cs= key_part->field->charset();
length1= (uint)(pos1[0]);
length2= (uint)(pos2[0]);
pack_length= 1;
break;
case HA_KEYTYPE_VARBINARY1:
cs= &my_charset_bin;
length1= (uint)(pos1[0]);
length2= (uint)(pos2[0]);
pack_length= 1;
break;
case HA_KEYTYPE_VARTEXT2: case HA_KEYTYPE_VARTEXT2:
cs= key_part->field->charset(); cs= key_part->field->charset();
length1= uint2korr(pos1); length1= uint2korr(pos1);
length2= uint2korr(pos2); length2= uint2korr(pos2);
pack_length= 2; pack_length= 2;
break; break;
case HA_KEYTYPE_VARBINARY1:
case HA_KEYTYPE_VARBINARY2: case HA_KEYTYPE_VARBINARY2:
cs= &my_charset_bin; cs= &my_charset_bin;
length1= uint2korr(pos1); length1= uint2korr(pos1);
......
...@@ -7877,8 +7877,8 @@ uint check_join_cache_usage(JOIN_TAB *tab, ...@@ -7877,8 +7877,8 @@ uint check_join_cache_usage(JOIN_TAB *tab,
bool *icp_other_tables_ok, bool *icp_other_tables_ok,
bool *idx_cond_fact_out) bool *idx_cond_fact_out)
{ {
uint flags;
COST_VECT cost; COST_VECT cost;
uint flags= 0;
ha_rows rows= 0; ha_rows rows= 0;
uint bufsz= 4096; uint bufsz= 4096;
JOIN_CACHE *prev_cache=0; JOIN_CACHE *prev_cache=0;
...@@ -7996,8 +7996,8 @@ uint check_join_cache_usage(JOIN_TAB *tab, ...@@ -7996,8 +7996,8 @@ uint check_join_cache_usage(JOIN_TAB *tab,
} }
if ((cache_level <=4 && !no_hashed_cache) || no_bka_cache || if ((cache_level <=4 && !no_hashed_cache) || no_bka_cache ||
((flags & HA_MRR_NO_ASSOCIATION) && cache_level <=6) || tab->is_ref_for_hash_join() ||
tab->is_ref_for_hash_join()) ((flags & HA_MRR_NO_ASSOCIATION) && cache_level <=6))
{ {
if (!tab->hash_join_is_possible() || if (!tab->hash_join_is_possible() ||
tab->make_scan_filter()) tab->make_scan_filter())
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment