[Commits] Rev 2877: Fixed vargrind problems in check_join_cache_usage(). in file:///home/igor/maria/maria-5.3-mwl128-hjkey/

Igor Babaev igor at askmonty.org
Thu Jan 6 21:40:03 EET 2011


At file:///home/igor/maria/maria-5.3-mwl128-hjkey/

------------------------------------------------------------
revno: 2877 [merge]
revision-id: igor at askmonty.org-20110106194001-drtnhij39g7mird9
parent: igor at askmonty.org-20110105080641-pb16rm5p47htuvw9
parent: igor at askmonty.org-20110105230330-2nzlm8641wcrwzio
committer: Igor Babaev <igor at askmonty.org>
branch nick: maria-5.3-mwl128-hjkey
timestamp: Thu 2011-01-06 11:40:01 -0800
message:
  Fixed vargrind problems in check_join_cache_usage().
  Merged the patch for bug 697557. Adjusted the results.
modified:
  mysql-test/r/join_cache.result join_cache.result-20091221012827-jfu65h0x5bmixhh3-1
  mysql-test/t/join_cache.test   join_cache.test-20091221012705-n3szmbc9blgmmu84-1
  sql/key.cc                     sp1f-key.cc-19700101030959-are4n4gcbltuapzes3nqirfwlls4w3p3
  sql/sql_select.cc              sp1f-sql_select.cc-19700101030959-egb7whpkh76zzvikycs5nsnuviu4fdlb
-------------- next part --------------
=== modified file 'mysql-test/r/join_cache.result'
--- a/mysql-test/r/join_cache.result	2011-01-05 05:59:41 +0000
+++ b/mysql-test/r/join_cache.result	2011-01-06 19:40:01 +0000
@@ -6952,4 +6952,24 @@
 2	NULL	42
 SET SESSION join_cache_level = DEFAULT;
 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;

=== modified file 'mysql-test/t/join_cache.test'
--- a/mysql-test/t/join_cache.test	2011-01-05 05:59:41 +0000
+++ b/mysql-test/t/join_cache.test	2011-01-06 19:40:01 +0000
@@ -2931,6 +2931,28 @@
 
 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
 set @@optimizer_switch=@save_optimizer_switch;

=== modified file 'sql/key.cc'
--- a/sql/key.cc	2010-12-27 00:31:03 +0000
+++ b/sql/key.cc	2011-01-05 23:03:30 +0000
@@ -689,20 +689,12 @@
       pack_length= 0;
       break;
     case HA_KEYTYPE_VARTEXT1:
+    case HA_KEYTYPE_VARTEXT2:
       cs= key_part->field->charset();
-      length= (uint)(pos[0]);
-      pack_length= 1;
+      length= uint2korr(pos);
+      pack_length= 2;
       break;
     case HA_KEYTYPE_VARBINARY1:
-      cs= &my_charset_bin;
-      length= (uint)(pos[0]);
-      pack_length= 1;
-      break;
-    case HA_KEYTYPE_VARTEXT2:
-      cs= key_part->field->charset();
-      length= uint2korr(pos);
-      pack_length= 2;
-      break;
     case HA_KEYTYPE_VARBINARY2:
       cs= &my_charset_bin;
       length= uint2korr(pos);
@@ -806,23 +798,13 @@
       pack_length= 0;
       break;
     case HA_KEYTYPE_VARTEXT1:
+    case HA_KEYTYPE_VARTEXT2:
       cs= key_part->field->charset();
-      length1= (uint)(pos1[0]);
-      length2= (uint)(pos2[0]);
-      pack_length= 1;
+      length1= uint2korr(pos1);
+      length2= uint2korr(pos2);
+      pack_length= 2;
       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:
-      cs= key_part->field->charset();
-      length1= uint2korr(pos1);
-      length2= uint2korr(pos2);
-      pack_length= 2;
-      break;
     case HA_KEYTYPE_VARBINARY2:
       cs= &my_charset_bin;
       length1= uint2korr(pos1);

=== modified file 'sql/sql_select.cc'
--- a/sql/sql_select.cc	2011-01-05 08:06:41 +0000
+++ b/sql/sql_select.cc	2011-01-06 19:40:01 +0000
@@ -7877,8 +7877,8 @@
                             bool *icp_other_tables_ok,
                             bool *idx_cond_fact_out)
 {
-  uint flags;
   COST_VECT cost;
+  uint flags= 0;
   ha_rows rows= 0;
   uint bufsz= 4096;
   JOIN_CACHE *prev_cache=0;
@@ -7996,8 +7996,8 @@
     }
 
     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() ||
           tab->make_scan_filter())



More information about the commits mailing list