Commit fab7f39e authored by monty@mashka.mysql.fi's avatar monty@mashka.mysql.fi

Fixed bug with EXPLAIN on empty table

parent a5e30be0
drop table if exists t1; drop table if exists t1;
create table t1 (id int not null, str char(10), unique(str)); create table t1 (id int not null, str char(10), unique(str));
explain select * from t1;
table type possible_keys key key_len ref rows Extra
t1 system NULL NULL NULL NULL 0 const row not found
insert into t1 values (1, null),(2, null),(3, "foo"),(4, "bar"); insert into t1 values (1, null),(2, null),(3, "foo"),(4, "bar");
select * from t1 where str is null; select * from t1 where str is null;
id str id str
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
drop table if exists t1; drop table if exists t1;
create table t1 (id int not null, str char(10), unique(str)); create table t1 (id int not null, str char(10), unique(str));
explain select * from t1;
insert into t1 values (1, null),(2, null),(3, "foo"),(4, "bar"); insert into t1 values (1, null),(2, null),(3, "foo"),(4, "bar");
select * from t1 where str is null; select * from t1 where str is null;
select * from t1 where str="foo"; select * from t1 where str="foo";
...@@ -12,8 +13,10 @@ explain select * from t1 ignore key (str) where str="foo"; ...@@ -12,8 +13,10 @@ explain select * from t1 ignore key (str) where str="foo";
explain select * from t1 use key (str,str) where str="foo"; explain select * from t1 use key (str,str) where str="foo";
#The following should give errors #The following should give errors
!$1072 explain select * from t1 use key (str,str,foo) where str="foo"; --error 1072
!$1072 explain select * from t1 ignore key (str,str,foo) where str="foo"; explain select * from t1 use key (str,str,foo) where str="foo";
--error 1072
explain select * from t1 ignore key (str,str,foo) where str="foo";
drop table t1; drop table t1;
explain select 1; explain select 1;
...@@ -7352,36 +7352,39 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order, ...@@ -7352,36 +7352,39 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
if (tab->info) if (tab->info)
item_list.push_back(new Item_string(tab->info,strlen(tab->info))); item_list.push_back(new Item_string(tab->info,strlen(tab->info)));
else if (tab->select) else
{ {
if (tab->use_quick == 2) if (tab->select)
{ {
sprintf(buff_ptr,"; Range checked for each record (index map: %u)", if (tab->use_quick == 2)
tab->keys); {
buff_ptr=strend(buff_ptr); sprintf(buff_ptr,"; Range checked for each record (index map: %u)",
tab->keys);
buff_ptr=strend(buff_ptr);
}
else
buff_ptr=strmov(buff_ptr,"; Using where");
} }
else if (key_read)
buff_ptr=strmov(buff_ptr,"; Using where"); buff_ptr= strmov(buff_ptr,"; Using index");
} if (table->reginfo.not_exists_optimize)
if (key_read) buff_ptr= strmov(buff_ptr,"; Not exists");
buff_ptr= strmov(buff_ptr,"; Using index"); if (need_tmp_table)
if (table->reginfo.not_exists_optimize) {
buff_ptr= strmov(buff_ptr,"; Not exists"); need_tmp_table=0;
if (need_tmp_table) buff_ptr= strmov(buff_ptr,"; Using temporary");
{ }
need_tmp_table=0; if (need_order)
buff_ptr= strmov(buff_ptr,"; Using temporary"); {
} need_order=0;
if (need_order) buff_ptr= strmov(buff_ptr,"; Using filesort");
{ }
need_order=0; if (distinct && test_all_bits(used_tables,thd->used_tables))
buff_ptr= strmov(buff_ptr,"; Using filesort"); buff_ptr= strmov(buff_ptr,"; Distinct");
if (buff_ptr == buff)
buff_ptr+= 2;
item_list.push_back(new Item_string(buff+2,(uint) (buff_ptr - buff)-2));
} }
if (distinct && test_all_bits(used_tables,thd->used_tables))
buff_ptr= strmov(buff_ptr,"; Distinct");
if (buff_ptr == buff)
buff_ptr+= 2;
item_list.push_back(new Item_string(buff+2,(uint) (buff_ptr - buff)-2));
// For next iteration // For next iteration
used_tables|=table->map; used_tables|=table->map;
if (result->send_data(item_list)) if (result->send_data(item_list))
......
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