Loading mysql-test/r/join.result +4 −0 Original line number Diff line number Diff line Loading @@ -37,3 +37,7 @@ COUNT(t1.Title) t1_id t2_id type cost_unit min_value max_value t3_id item_id id name 22 1 Percent Cost 100 -1 6 291 1 s1 23 1 Percent Cost 100 -1 21 291 1 s1 rate_code base_rate cust 20 rate_code base_rate cust 20 mysql-test/t/join.test +24 −0 Original line number Diff line number Diff line Loading @@ -219,3 +219,27 @@ CREATE TABLE t2 ( INSERT INTO t2 VALUES (1,'s1'),(2,'s2'),(3,'s3'),(4,'s4'),(5,'s5'); select t1.*, t2.* from t1, t2 where t2.id=t1.t2_id limit 2; drop table t1,t2; # # Bug in range optimiser with MAYBE_KEY # CREATE TABLE t1 ( siteid varchar(25) NOT NULL default '', emp_id varchar(30) NOT NULL default '', rate_code varchar(10) default NULL, UNIQUE KEY site_emp (siteid,emp_id), KEY siteid (siteid) ) TYPE=MyISAM; INSERT INTO t1 VALUES ('rivercats','psmith','cust'), ('rivercats','KWalker','cust'); CREATE TABLE t2 ( siteid varchar(25) NOT NULL default '', rate_code varchar(10) NOT NULL default '', base_rate float NOT NULL default '0', PRIMARY KEY (siteid,rate_code), FULLTEXT KEY rate_code (rate_code) ) TYPE=MyISAM; INSERT INTO t2 VALUES ('rivercats','cust',20); SELECT emp.rate_code, lr.base_rate FROM t1 AS emp LEFT JOIN t2 AS lr USING (siteid, rate_code) WHERE emp.emp_id = 'psmith' AND lr.siteid = 'rivercats'; SELECT emp.rate_code, lr.base_rate FROM t1 AS emp LEFT JOIN t2 AS lr USING (siteid, rate_code) WHERE lr.siteid = 'rivercats' AND emp.emp_id = 'psmith'; drop table t1,t2; sql/opt_range.cc +8 −4 Original line number Diff line number Diff line Loading @@ -1341,7 +1341,8 @@ key_and(SEL_ARG *key1,SEL_ARG *key2,uint clone_flag) } if (((clone_flag & CLONE_KEY2_MAYBE) && !(clone_flag & CLONE_KEY1_MAYBE)) || !(clone_flag & CLONE_KEY1_MAYBE) && key2->type != SEL_ARG::MAYBE_KEY) || key1->type == SEL_ARG::MAYBE_KEY) { // Put simple key in key2 swap(SEL_ARG *,key1,key2); Loading Loading @@ -1369,7 +1370,10 @@ key_and(SEL_ARG *key1,SEL_ARG *key2,uint clone_flag) { key1->maybe_smaller(); if (key2->next_key_part) { key1->use_count--; // Incremented in and_all_keys return and_all_keys(key1,key2,clone_flag); } key2->use_count--; // Key2 doesn't have a tree } return key1; Loading Loading @@ -2068,7 +2072,7 @@ void SEL_ARG::test_use_count(SEL_ARG *root) { if (this == root && use_count != 1) { sql_print_error("Use_count: Wrong count %lu for root",use_count); sql_print_error("Note: Use_count: Wrong count %lu for root",use_count); return; } if (this->type != SEL_ARG::KEY_RANGE) Loading @@ -2082,7 +2086,7 @@ void SEL_ARG::test_use_count(SEL_ARG *root) ulong count=count_key_part_usage(root,pos->next_key_part); if (count > pos->next_key_part->use_count) { sql_print_error("Use_count: Wrong count for key at %lx, %lu should be %lu", sql_print_error("Note: Use_count: Wrong count for key at %lx, %lu should be %lu", pos,pos->next_key_part->use_count,count); return; } Loading @@ -2090,7 +2094,7 @@ void SEL_ARG::test_use_count(SEL_ARG *root) } } if (e_count != elements) sql_print_error("Wrong use count: %u for tree at %lx", e_count, sql_print_error("Warning: Wrong use count: %u for tree at %lx", e_count, (gptr) this); } Loading sql/sql_rename.cc +2 −2 Original line number Diff line number Diff line Loading @@ -122,7 +122,7 @@ rename_tables(THD *thd, TABLE_LIST *table_list, bool skip_error) if (!access(name,F_OK)) { my_error(ER_TABLE_EXISTS_ERROR,MYF(0),name); return ren_table; // This can't be skipped DBUG_RETURN(ren_table); // This can't be skipped } sprintf(name,"%s/%s/%s%s",mysql_data_home, ren_table->db,ren_table->real_name, Loading @@ -131,7 +131,7 @@ rename_tables(THD *thd, TABLE_LIST *table_list, bool skip_error) { my_error(ER_FILE_NOT_FOUND, MYF(0), name, my_errno); if (!skip_error) return ren_table; DBUG_RETURN(ren_table); } else if (mysql_rename_table(table_type, ren_table->db, ren_table->real_name, Loading Loading
mysql-test/r/join.result +4 −0 Original line number Diff line number Diff line Loading @@ -37,3 +37,7 @@ COUNT(t1.Title) t1_id t2_id type cost_unit min_value max_value t3_id item_id id name 22 1 Percent Cost 100 -1 6 291 1 s1 23 1 Percent Cost 100 -1 21 291 1 s1 rate_code base_rate cust 20 rate_code base_rate cust 20
mysql-test/t/join.test +24 −0 Original line number Diff line number Diff line Loading @@ -219,3 +219,27 @@ CREATE TABLE t2 ( INSERT INTO t2 VALUES (1,'s1'),(2,'s2'),(3,'s3'),(4,'s4'),(5,'s5'); select t1.*, t2.* from t1, t2 where t2.id=t1.t2_id limit 2; drop table t1,t2; # # Bug in range optimiser with MAYBE_KEY # CREATE TABLE t1 ( siteid varchar(25) NOT NULL default '', emp_id varchar(30) NOT NULL default '', rate_code varchar(10) default NULL, UNIQUE KEY site_emp (siteid,emp_id), KEY siteid (siteid) ) TYPE=MyISAM; INSERT INTO t1 VALUES ('rivercats','psmith','cust'), ('rivercats','KWalker','cust'); CREATE TABLE t2 ( siteid varchar(25) NOT NULL default '', rate_code varchar(10) NOT NULL default '', base_rate float NOT NULL default '0', PRIMARY KEY (siteid,rate_code), FULLTEXT KEY rate_code (rate_code) ) TYPE=MyISAM; INSERT INTO t2 VALUES ('rivercats','cust',20); SELECT emp.rate_code, lr.base_rate FROM t1 AS emp LEFT JOIN t2 AS lr USING (siteid, rate_code) WHERE emp.emp_id = 'psmith' AND lr.siteid = 'rivercats'; SELECT emp.rate_code, lr.base_rate FROM t1 AS emp LEFT JOIN t2 AS lr USING (siteid, rate_code) WHERE lr.siteid = 'rivercats' AND emp.emp_id = 'psmith'; drop table t1,t2;
sql/opt_range.cc +8 −4 Original line number Diff line number Diff line Loading @@ -1341,7 +1341,8 @@ key_and(SEL_ARG *key1,SEL_ARG *key2,uint clone_flag) } if (((clone_flag & CLONE_KEY2_MAYBE) && !(clone_flag & CLONE_KEY1_MAYBE)) || !(clone_flag & CLONE_KEY1_MAYBE) && key2->type != SEL_ARG::MAYBE_KEY) || key1->type == SEL_ARG::MAYBE_KEY) { // Put simple key in key2 swap(SEL_ARG *,key1,key2); Loading Loading @@ -1369,7 +1370,10 @@ key_and(SEL_ARG *key1,SEL_ARG *key2,uint clone_flag) { key1->maybe_smaller(); if (key2->next_key_part) { key1->use_count--; // Incremented in and_all_keys return and_all_keys(key1,key2,clone_flag); } key2->use_count--; // Key2 doesn't have a tree } return key1; Loading Loading @@ -2068,7 +2072,7 @@ void SEL_ARG::test_use_count(SEL_ARG *root) { if (this == root && use_count != 1) { sql_print_error("Use_count: Wrong count %lu for root",use_count); sql_print_error("Note: Use_count: Wrong count %lu for root",use_count); return; } if (this->type != SEL_ARG::KEY_RANGE) Loading @@ -2082,7 +2086,7 @@ void SEL_ARG::test_use_count(SEL_ARG *root) ulong count=count_key_part_usage(root,pos->next_key_part); if (count > pos->next_key_part->use_count) { sql_print_error("Use_count: Wrong count for key at %lx, %lu should be %lu", sql_print_error("Note: Use_count: Wrong count for key at %lx, %lu should be %lu", pos,pos->next_key_part->use_count,count); return; } Loading @@ -2090,7 +2094,7 @@ void SEL_ARG::test_use_count(SEL_ARG *root) } } if (e_count != elements) sql_print_error("Wrong use count: %u for tree at %lx", e_count, sql_print_error("Warning: Wrong use count: %u for tree at %lx", e_count, (gptr) this); } Loading
sql/sql_rename.cc +2 −2 Original line number Diff line number Diff line Loading @@ -122,7 +122,7 @@ rename_tables(THD *thd, TABLE_LIST *table_list, bool skip_error) if (!access(name,F_OK)) { my_error(ER_TABLE_EXISTS_ERROR,MYF(0),name); return ren_table; // This can't be skipped DBUG_RETURN(ren_table); // This can't be skipped } sprintf(name,"%s/%s/%s%s",mysql_data_home, ren_table->db,ren_table->real_name, Loading @@ -131,7 +131,7 @@ rename_tables(THD *thd, TABLE_LIST *table_list, bool skip_error) { my_error(ER_FILE_NOT_FOUND, MYF(0), name, my_errno); if (!skip_error) return ren_table; DBUG_RETURN(ren_table); } else if (mysql_rename_table(table_type, ren_table->db, ren_table->real_name, Loading