diff options
author | unknown <monty@mashka.mysql.fi> | 2003-01-20 18:17:14 +0200 |
---|---|---|
committer | unknown <monty@mashka.mysql.fi> | 2003-01-20 18:17:14 +0200 |
commit | f6cbace93e27301bda14d833763b805bf64f0da2 (patch) | |
tree | ee83f54a5857c95a2c506f7ab404fb491e94d0bf | |
parent | 09b1e7d6076748b198f54008495cf4e60e156b86 (diff) | |
download | mariadb-git-f6cbace93e27301bda14d833763b805bf64f0da2.tar.gz |
Fixed bug with EXPLAIN on empty table
mysql-test/r/explain.result:
test of bug with EXPLAIN on empty table
mysql-test/t/explain.test:
test of bug with EXPLAIN on empty table
-rw-r--r-- | mysql-test/r/explain.result | 3 | ||||
-rw-r--r-- | mysql-test/t/explain.test | 7 | ||||
-rw-r--r-- | sql/sql_select.cc | 55 |
3 files changed, 37 insertions, 28 deletions
diff --git a/mysql-test/r/explain.result b/mysql-test/r/explain.result index 876846a5236..fa15165722d 100644 --- a/mysql-test/r/explain.result +++ b/mysql-test/r/explain.result @@ -1,5 +1,8 @@ drop table if exists t1; 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"); select * from t1 where str is null; id str diff --git a/mysql-test/t/explain.test b/mysql-test/t/explain.test index 31a01ae1360..8a41ebe5b4f 100644 --- a/mysql-test/t/explain.test +++ b/mysql-test/t/explain.test @@ -3,6 +3,7 @@ drop table if exists t1; 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"); select * from t1 where str is null; select * from t1 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"; #The following should give errors -!$1072 explain select * from t1 use key (str,str,foo) where str="foo"; -!$1072 explain select * from t1 ignore key (str,str,foo) where str="foo"; +--error 1072 +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; explain select 1; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 4bae58d70cd..e811c55ed1b 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -7352,36 +7352,39 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order, if (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)", - tab->keys); - buff_ptr=strend(buff_ptr); + if (tab->use_quick == 2) + { + 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 - buff_ptr=strmov(buff_ptr,"; Using where"); - } - if (key_read) - buff_ptr= strmov(buff_ptr,"; Using index"); - if (table->reginfo.not_exists_optimize) - buff_ptr= strmov(buff_ptr,"; Not exists"); - if (need_tmp_table) - { - need_tmp_table=0; - buff_ptr= strmov(buff_ptr,"; Using temporary"); - } - if (need_order) - { - need_order=0; - buff_ptr= strmov(buff_ptr,"; Using filesort"); + if (key_read) + buff_ptr= strmov(buff_ptr,"; Using index"); + if (table->reginfo.not_exists_optimize) + buff_ptr= strmov(buff_ptr,"; Not exists"); + if (need_tmp_table) + { + need_tmp_table=0; + buff_ptr= strmov(buff_ptr,"; Using temporary"); + } + if (need_order) + { + need_order=0; + buff_ptr= strmov(buff_ptr,"; Using filesort"); + } + 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)); } - 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 used_tables|=table->map; if (result->send_data(item_list)) |