diff --git a/mysql-test/r/handler.result b/mysql-test/r/handler.result index 5467ea6dec2..1cfc3a9de8b 100644 --- a/mysql-test/r/handler.result +++ b/mysql-test/r/handler.result @@ -173,3 +173,21 @@ Unknown column 'W' in 'field list' handler t1 read a=(a); Wrong arguments to HANDLER ... READ drop table t1; +create table t1 (a char(5)); +insert into t1 values ("Ok"); +handler t1 open as t; +handler t read first; +a +Ok +use mysql; +handler t read first; +a +Ok +handler t close; +handler test.t1 open as t; +handler t read first; +a +Ok +handler t close; +use test; +drop table t1; diff --git a/mysql-test/t/handler.test b/mysql-test/t/handler.test index 736091a52a9..936902fd9bf 100644 --- a/mysql-test/t/handler.test +++ b/mysql-test/t/handler.test @@ -107,3 +107,19 @@ handler t1 read a=(W); handler t1 read a=(a); drop table t1; +# +# BUG#2304 +# +create table t1 (a char(5)); +insert into t1 values ("Ok"); +handler t1 open as t; +handler t read first; +use mysql; +handler t read first; +handler t close; +handler test.t1 open as t; +handler t read first; +handler t close; +use test; +drop table t1; + diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc index 208545a435b..963111015da 100644 --- a/sql/sql_handler.cc +++ b/sql/sql_handler.cc @@ -276,14 +276,13 @@ static TABLE **find_table_ptr_by_name(THD *thd, const char *db, int dblen; TABLE **ptr; - if (!db || ! *db) - db= thd->db ? thd->db : ""; - dblen=strlen(db)+1; + DBUG_ASSERT(db); + dblen=*db ? strlen(db)+1 : 0; ptr=&(thd->handler_tables); for (TABLE *table=*ptr; table ; table=*ptr) { - if (!memcmp(table->table_cache_key, db, dblen) && + if ((!dblen || !memcmp(table->table_cache_key, db, dblen)) && !my_strcasecmp((is_alias ? table->table_name : table->real_name),table_name)) { if (table->version != refresh_version) diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index b5b9a4cdfb7..991a5f500e6 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -501,7 +501,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); opt_table_alias %type