From db895ce72047bbdcfb41639521db3c9169e0d2a0 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 22 Feb 2005 18:00:01 +0300 Subject: [PATCH 1/3] Fix for BUG#8578 "Test case 'index_merge_ror' fails on SGI irix" Take into account that bitmap_is_set() may return any non-zero zero value when the bit is set. --- sql/opt_range.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sql/opt_range.cc b/sql/opt_range.cc index ceb9f97bbbc..449aecb29f5 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -2562,7 +2562,7 @@ static double ror_scan_selectivity(const ROR_INTERSECT_INFO *info, char *key_ptr= (char*) key_val; SEL_ARG *sel_arg, *tuple_arg= NULL; bool cur_covered; - bool prev_covered= bitmap_is_set(&info->covered_fields, key_part->fieldnr); + bool prev_covered= (bitmap_is_set(&info->covered_fields, key_part->fieldnr))? 1:0; key_range min_range; key_range max_range; min_range.key= (byte*) key_val; @@ -2575,7 +2575,8 @@ static double ror_scan_selectivity(const ROR_INTERSECT_INFO *info, for(i= 0, sel_arg= scan->sel_arg; sel_arg; i++, sel_arg= sel_arg->next_key_part) { - cur_covered= bitmap_is_set(&info->covered_fields, (key_part + i)->fieldnr); + DBUG_PRINT("info",("sel_arg step")); + cur_covered= (bitmap_is_set(&info->covered_fields, (key_part + i)->fieldnr))? 1:0; if (cur_covered != prev_covered) { /* create (part1val, ..., part{n-1}val) tuple. */ From fa1ee8986d3be42a8a214201900bf0af398b4089 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 22 Feb 2005 18:30:44 +0300 Subject: [PATCH 2/3] Fix for BUG#8579 (failing test case): Allow small differences in #rows estimate in test results --- mysql-test/r/index_merge_ror_cpk.result | 2 +- mysql-test/t/index_merge_ror_cpk.test | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/index_merge_ror_cpk.result b/mysql-test/r/index_merge_ror_cpk.result index 6cfeb20b2de..79bb1297abf 100644 --- a/mysql-test/r/index_merge_ror_cpk.result +++ b/mysql-test/r/index_merge_ror_cpk.result @@ -59,7 +59,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ref key1 key1 4 const 100 Using where explain select * from t1 where pk1 < 7500 and key1 = 10; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 index_merge PRIMARY,key1 key1,PRIMARY 4,4 NULL 38 Using intersect(key1,PRIMARY); Using where +1 SIMPLE t1 index_merge PRIMARY,key1 key1,PRIMARY 4,4 NULL ROWS Using intersect(key1,PRIMARY); Using where explain select * from t1 where pktail1ok=1 and key1=10; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 index_merge key1,pktail1ok key1,pktail1ok 4,4 NULL 1 Using intersect(key1,pktail1ok); Using where diff --git a/mysql-test/t/index_merge_ror_cpk.test b/mysql-test/t/index_merge_ror_cpk.test index 867b0b3a036..94abf395d0a 100644 --- a/mysql-test/t/index_merge_ror_cpk.test +++ b/mysql-test/t/index_merge_ror_cpk.test @@ -63,6 +63,7 @@ select pk1,pk2 from t1 where key1 = 10 and key2=10 and 2*pk1+1 < 2*96+1; # Verify that CPK is always used for index intersection scans # (this is because it is used as a filter, not for retrieval) explain select * from t1 where badkey=1 and key1=10; +--replace_result 38 ROWS 37 ROWS explain select * from t1 where pk1 < 7500 and key1 = 10; # Verify that keys with 'tails' of PK members are ok. From 965f2b4d6aff1aa10672e99abead31e8617af4e3 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 22 Feb 2005 18:34:14 +0300 Subject: [PATCH 3/3] Post review coding style fixes. --- sql/opt_range.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 449aecb29f5..2f93da28395 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -2562,7 +2562,8 @@ static double ror_scan_selectivity(const ROR_INTERSECT_INFO *info, char *key_ptr= (char*) key_val; SEL_ARG *sel_arg, *tuple_arg= NULL; bool cur_covered; - bool prev_covered= (bitmap_is_set(&info->covered_fields, key_part->fieldnr))? 1:0; + bool prev_covered= (bitmap_is_set(&info->covered_fields, + key_part->fieldnr))? 1 : 0; key_range min_range; key_range max_range; min_range.key= (byte*) key_val; @@ -2576,7 +2577,8 @@ static double ror_scan_selectivity(const ROR_INTERSECT_INFO *info, i++, sel_arg= sel_arg->next_key_part) { DBUG_PRINT("info",("sel_arg step")); - cur_covered= (bitmap_is_set(&info->covered_fields, (key_part + i)->fieldnr))? 1:0; + cur_covered= (bitmap_is_set(&info->covered_fields, + (key_part + i)->fieldnr))? 1 : 0; if (cur_covered != prev_covered) { /* create (part1val, ..., part{n-1}val) tuple. */