diff --git a/myisam/mi_extra.c b/myisam/mi_extra.c index eb7285491ed..f1401aaae3c 100644 --- a/myisam/mi_extra.c +++ b/myisam/mi_extra.c @@ -34,6 +34,7 @@ int mi_extra(MI_INFO *info, enum ha_extra_function function) int error=0; MYISAM_SHARE *share=info->s; DBUG_ENTER("mi_extra"); + DBUG_PRINT("enter",("function: %d",(int) function)); switch (function) { case HA_EXTRA_RESET: diff --git a/mysql-test/r/union.result b/mysql-test/r/union.result index a0836cf1680..0598bfb9ca0 100644 --- a/mysql-test/r/union.result +++ b/mysql-test/r/union.result @@ -62,7 +62,11 @@ t2 ALL NULL NULL NULL NULL 4 pseudo dekad joce +pseudo1 +joce +testtt +tsestset pseudo pseudo1 same -dekad joce 1 -joce testtt 1 joce tsestset 1 +joce testtt 1 +dekad joce 1 diff --git a/mysql-test/t/union.test b/mysql-test/t/union.test index 8325e6c7e77..e780e9ec528 100644 --- a/mysql-test/t/union.test +++ b/mysql-test/t/union.test @@ -60,5 +60,6 @@ CREATE TABLE t1 ( ) TYPE=MyISAM; INSERT INTO t1 (pseudo,pseudo1,same) VALUES ('joce', 'testtt', 1),('joce', 'tsestset', 1),('dekad', 'joce', 1); SELECT pseudo FROM t1 WHERE pseudo1='joce' UNION SELECT pseudo FROM t1 WHERE pseudo='joce'; -SELECT * FROM t1 WHERE pseudo1='joce' UNION SELECT * FROM t1 WHERE pseudo='joce'; +SELECT pseudo1 FROM t1 WHERE pseudo1='joce' UNION SELECT pseudo1 FROM t1 WHERE pseudo='joce'; +SELECT * FROM t1 WHERE pseudo1='joce' UNION SELECT * FROM t1 WHERE pseudo='joce' order by pseudo desc; drop table t1; diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 83be3c1ade1..41093452984 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1590,7 +1590,8 @@ Field *find_field_in_table(THD *thd,TABLE *table,const char *name,uint length, else thd->dupp_field=field; } - if (check_grants && !thd->master_access && check_grant_column(thd,table,name,length)) + if (check_grants && !thd->master_access && + check_grant_column(thd,table,name,length)) return WRONG_GRANT; return field; } @@ -1808,6 +1809,12 @@ bool setup_tables(TABLE_LIST *tables) DBUG_RETURN(1); table->keys_in_use_for_query &= ~map; } + if (table_list->shared) + { + /* Clear query_id that may have been set by previous select */ + for (Field **ptr=table->field ; *ptr ; ptr++) + (*ptr)->query_id=0; + } } if (tablenr > MAX_TABLES) { diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index e1131a9ac40..8501bd57b6e 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -2921,8 +2921,10 @@ static bool create_total_list(THD *thd, LEX *lex, TABLE_LIST **result) } *new_table_list= cursor; new_table_list= &cursor->next; - *new_table_list=0; // end result list + *new_table_list=0; // end result list } + else + aux->shared=1; // Mark that it's used twice aux->table=(TABLE *) cursor; } } diff --git a/sql/sql_union.cc b/sql/sql_union.cc index 86ecaba6d3b..5dd897ee826 100644 --- a/sql/sql_union.cc +++ b/sql/sql_union.cc @@ -37,7 +37,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result) int res; DBUG_ENTER("mysql_union"); - /* Fix tables--to-be-unioned-from list to point at opened tables */ + /* Fix tables 'to-be-unioned-from' list to point at opened tables */ for (sl=&lex->select_lex; sl; sl=sl->next) { for (TABLE_LIST *cursor= (TABLE_LIST *)sl->table_list.first; diff --git a/sql/table.h b/sql/table.h index b25e2d82132..5d50851259d 100644 --- a/sql/table.h +++ b/sql/table.h @@ -145,6 +145,7 @@ typedef struct st_table_list { uint outer_join; /* Which join type */ bool straight; /* optimize with prev table */ bool updating; /* for replicate-do/ignore table */ + bool shared; /* Used twice in union */ } TABLE_LIST; typedef struct st_open_table_list diff --git a/tools/Makefile.am b/tools/Makefile.am index 4e9fc3ac6f8..3c786dc9281 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -1,7 +1,6 @@ INCLUDES = @MT_INCLUDES@ -I$(srcdir)/../include \ $(openssl_includes) -I../include -LIBS= @openssl_libs@ -LDADD= @CLIENT_EXTRA_LDFLAGS@ ../libmysql_r/libmysqlclient_r.la +LDADD= @CLIENT_EXTRA_LDFLAGS@ ../libmysql_r/libmysqlclient_r.la @openssl_libs@ bin_PROGRAMS= mysqlmanager mysqlmanager_SOURCES= mysqlmanager.c mysqlmanager_DEPENDENCIES= $(LIBRARIES) $(pkglib_LTLIBRARIES)