summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@mashka.mysql.fi>2003-01-20 18:17:14 +0200
committerunknown <monty@mashka.mysql.fi>2003-01-20 18:17:14 +0200
commitf6cbace93e27301bda14d833763b805bf64f0da2 (patch)
treeee83f54a5857c95a2c506f7ab404fb491e94d0bf
parent09b1e7d6076748b198f54008495cf4e60e156b86 (diff)
downloadmariadb-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.result3
-rw-r--r--mysql-test/t/explain.test7
-rw-r--r--sql/sql_select.cc55
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))