Loading mysql-test/t/order_by.test +40 −0 Original line number Diff line number Diff line Loading @@ -165,3 +165,43 @@ insert into t3 (ID, DateOfAction) values (87, '1999-07-19'), (89, '1999-07-19 select t3.DateOfAction, t1.TransactionID from t1 join t2 join t3 where t2.ID = t1.TransactionID and t3.ID = t2.GroupID order by t3.DateOfAction, t1.TransactionID; select t3.DateOfAction, t1.TransactionID from t1 join t2 join t3 where t2.ID = t1.TransactionID and t3.ID = t2.GroupID order by t1.TransactionID,t3.DateOfAction; drop table t1,t2,t3; #bug reported by Wouter de Jong drop table if exists members; CREATE TABLE members ( member_id int(11) NOT NULL auto_increment, inschrijf_datum varchar(20) NOT NULL default '', lastchange_datum varchar(20) NOT NULL default '', nickname varchar(20) NOT NULL default '', password varchar(8) NOT NULL default '', voornaam varchar(30) NOT NULL default '', tussenvoegsels varchar(10) NOT NULL default '', achternaam varchar(50) NOT NULL default '', straat varchar(100) NOT NULL default '', postcode varchar(10) NOT NULL default '', wijk varchar(40) NOT NULL default '', plaats varchar(50) NOT NULL default '', telefoon varchar(10) NOT NULL default '', geboortedatum date NOT NULL default '0000-00-00', geslacht varchar(5) NOT NULL default '', email varchar(80) NOT NULL default '', uin varchar(15) NOT NULL default '', homepage varchar(100) NOT NULL default '', internet varchar(15) NOT NULL default '', scherk varchar(30) NOT NULL default '', favo_boek varchar(50) NOT NULL default '', favo_tijdschrift varchar(50) NOT NULL default '', favo_tv varchar(50) NOT NULL default '', favo_eten varchar(50) NOT NULL default '', favo_muziek varchar(30) NOT NULL default '', info text NOT NULL, ipnr varchar(30) NOT NULL default '', PRIMARY KEY (member_id) ) TYPE=MyISAM PACK_KEYS=1; insert into members (member_id) values (1),(2),(3); select member_id, nickname, voornaam FROM members ORDER by lastchange_datum DESC LIMIT 2; drop table members; sql/slave.cc +15 −3 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ bool wild_do_table_inited = 0, wild_ignore_table_inited = 0; bool table_rules_on = 0; uint32 slave_skip_counter = 0; static TABLE* save_temporary_tables = 0; THD* slave_thd = 0; // when slave thread exits, we need to remember the temporary tables so we // can re-use them on slave start Loading Loading @@ -1157,7 +1158,7 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) // needs to call my_thread_init(), otherwise we get a coredump in DBUG_ stuff my_thread_init(); thd = new THD; // note that contructor of THD uses DBUG_ ! slave_thd = thd = new THD; // note that contructor of THD uses DBUG_ ! thd->set_time(); DBUG_ENTER("handle_slave"); Loading Loading @@ -1347,6 +1348,7 @@ position %s", pthread_cond_broadcast(&COND_slave_stopped); // tell the world we are done pthread_mutex_unlock(&LOCK_slave); net_end(&thd->net); // destructor will not free it, because we are weird slave_thd = 0; delete thd; my_thread_end(); #ifndef DBUG_OFF Loading Loading @@ -1376,8 +1378,13 @@ static int safe_connect(THD* thd, MYSQL* mysql, MASTER_INFO* mi) } if(!slave_was_killed) { mysql_log.write(thd, COM_CONNECT_OUT, "%s@%s:%d", mi->user, mi->host, mi->port); #ifdef STOP_IO_WITH_FD_CLOSE thd->set_active_fd(vio_fd(mysql->net.vio)); #endif } return slave_was_killed; } Loading @@ -1404,11 +1411,16 @@ static int safe_reconnect(THD* thd, MYSQL* mysql, MASTER_INFO* mi) } if(!slave_was_killed) { sql_print_error("Slave: reconnected to master '%s@%s:%d',\ replication resumed in log '%s' at position %s", glob_mi.user, glob_mi.host, glob_mi.port, RPL_LOG_NAME, llstr(glob_mi.pos,llbuff)); #ifdef STOP_IO_WITH_FD_CLOSE thd->set_active_fd(vio_fd(mysql->net.vio)); #endif } return slave_was_killed; } Loading sql/slave.h +1 −0 Original line number Diff line number Diff line Loading @@ -99,6 +99,7 @@ extern uint32 slave_skip_counter; // have caused errors, and have been manually applied by DBA already extern pthread_t slave_real_id; extern THD* slave_thd; extern MASTER_INFO glob_mi; extern HASH replicate_do_table, replicate_ignore_table; extern DYNAMIC_ARRAY replicate_wild_do_table, replicate_wild_ignore_table; Loading sql/sql_class.cc +7 −0 Original line number Diff line number Diff line Loading @@ -84,6 +84,10 @@ THD::THD():user_time(0),fatal_error(0),last_insert_id_used(0), query_start_used=0; query_length=col_access=0; query_error=0; #ifdef STOP_IO_WITH_FD_CLOSE active_fd = -1; pthread_mutex_init(&active_fd_lock, NULL); #endif server_id = ::server_id; server_status=SERVER_STATUS_AUTOCOMMIT; next_insert_id=last_insert_id=0; Loading Loading @@ -182,6 +186,9 @@ THD::~THD() safeFree(ip); free_root(&mem_root,MYF(0)); mysys_var=0; // Safety (shouldn't be needed) #ifdef STOP_IO_WITH_FD_CLOSE pthread_mutex_destroy(&active_fd_lock); #endif DBUG_VOID_RETURN; } Loading sql/sql_class.h +51 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ #pragma interface /* gcc class implementation */ #endif #include <thr_alarm.h> class Query_log_event; class Load_log_event; Loading Loading @@ -255,6 +257,10 @@ class THD :public ilink { Field *dupp_field; #ifndef __WIN__ sigset_t signals,block_signals; #endif #ifdef STOP_IO_WITH_FD_CLOSE int active_fd; pthread_mutex_t active_fd_lock; #endif ulonglong next_insert_id,last_insert_id,current_insert_id; ha_rows select_limit,offset_limit,default_select_limit,cuted_fields, Loading Loading @@ -284,6 +290,51 @@ class THD :public ilink { THD(); ~THD(); bool store_globals(); #ifdef STOP_IO_WITH_FD_CLOSE inline void set_active_fd(int fd) { pthread_mutex_lock(&active_fd_lock); active_fd = fd; pthread_mutex_unlock(&active_fd_lock); } inline void clear_active_fd() { pthread_mutex_lock(&active_fd_lock); active_fd = -1; pthread_mutex_unlock(&active_fd_lock); } inline void close_active_fd() { pthread_mutex_lock(&active_fd_lock); if(active_fd >= 0) { my_close(active_fd, MYF(MY_WME)); active_fd = -1; } pthread_mutex_unlock(&active_fd_lock); } #endif inline void prepare_to_die() { thr_alarm_kill(real_id); killed = 1; #ifdef STOP_IO_WITH_FD_CLOSE close_active_fd(); #endif if (mysys_var) { pthread_mutex_lock(&mysys_var->mutex); if (!system_thread) // Don't abort locks mysys_var->abort=1; if (mysys_var->current_mutex) { pthread_mutex_lock(mysys_var->current_mutex); pthread_cond_broadcast(mysys_var->current_cond); pthread_mutex_unlock(mysys_var->current_mutex); } pthread_mutex_unlock(&mysys_var->mutex); } } inline const char* enter_cond(pthread_cond_t *cond, pthread_mutex_t* mutex, const char* msg) { Loading Loading
mysql-test/t/order_by.test +40 −0 Original line number Diff line number Diff line Loading @@ -165,3 +165,43 @@ insert into t3 (ID, DateOfAction) values (87, '1999-07-19'), (89, '1999-07-19 select t3.DateOfAction, t1.TransactionID from t1 join t2 join t3 where t2.ID = t1.TransactionID and t3.ID = t2.GroupID order by t3.DateOfAction, t1.TransactionID; select t3.DateOfAction, t1.TransactionID from t1 join t2 join t3 where t2.ID = t1.TransactionID and t3.ID = t2.GroupID order by t1.TransactionID,t3.DateOfAction; drop table t1,t2,t3; #bug reported by Wouter de Jong drop table if exists members; CREATE TABLE members ( member_id int(11) NOT NULL auto_increment, inschrijf_datum varchar(20) NOT NULL default '', lastchange_datum varchar(20) NOT NULL default '', nickname varchar(20) NOT NULL default '', password varchar(8) NOT NULL default '', voornaam varchar(30) NOT NULL default '', tussenvoegsels varchar(10) NOT NULL default '', achternaam varchar(50) NOT NULL default '', straat varchar(100) NOT NULL default '', postcode varchar(10) NOT NULL default '', wijk varchar(40) NOT NULL default '', plaats varchar(50) NOT NULL default '', telefoon varchar(10) NOT NULL default '', geboortedatum date NOT NULL default '0000-00-00', geslacht varchar(5) NOT NULL default '', email varchar(80) NOT NULL default '', uin varchar(15) NOT NULL default '', homepage varchar(100) NOT NULL default '', internet varchar(15) NOT NULL default '', scherk varchar(30) NOT NULL default '', favo_boek varchar(50) NOT NULL default '', favo_tijdschrift varchar(50) NOT NULL default '', favo_tv varchar(50) NOT NULL default '', favo_eten varchar(50) NOT NULL default '', favo_muziek varchar(30) NOT NULL default '', info text NOT NULL, ipnr varchar(30) NOT NULL default '', PRIMARY KEY (member_id) ) TYPE=MyISAM PACK_KEYS=1; insert into members (member_id) values (1),(2),(3); select member_id, nickname, voornaam FROM members ORDER by lastchange_datum DESC LIMIT 2; drop table members;
sql/slave.cc +15 −3 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ bool wild_do_table_inited = 0, wild_ignore_table_inited = 0; bool table_rules_on = 0; uint32 slave_skip_counter = 0; static TABLE* save_temporary_tables = 0; THD* slave_thd = 0; // when slave thread exits, we need to remember the temporary tables so we // can re-use them on slave start Loading Loading @@ -1157,7 +1158,7 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) // needs to call my_thread_init(), otherwise we get a coredump in DBUG_ stuff my_thread_init(); thd = new THD; // note that contructor of THD uses DBUG_ ! slave_thd = thd = new THD; // note that contructor of THD uses DBUG_ ! thd->set_time(); DBUG_ENTER("handle_slave"); Loading Loading @@ -1347,6 +1348,7 @@ position %s", pthread_cond_broadcast(&COND_slave_stopped); // tell the world we are done pthread_mutex_unlock(&LOCK_slave); net_end(&thd->net); // destructor will not free it, because we are weird slave_thd = 0; delete thd; my_thread_end(); #ifndef DBUG_OFF Loading Loading @@ -1376,8 +1378,13 @@ static int safe_connect(THD* thd, MYSQL* mysql, MASTER_INFO* mi) } if(!slave_was_killed) { mysql_log.write(thd, COM_CONNECT_OUT, "%s@%s:%d", mi->user, mi->host, mi->port); #ifdef STOP_IO_WITH_FD_CLOSE thd->set_active_fd(vio_fd(mysql->net.vio)); #endif } return slave_was_killed; } Loading @@ -1404,11 +1411,16 @@ static int safe_reconnect(THD* thd, MYSQL* mysql, MASTER_INFO* mi) } if(!slave_was_killed) { sql_print_error("Slave: reconnected to master '%s@%s:%d',\ replication resumed in log '%s' at position %s", glob_mi.user, glob_mi.host, glob_mi.port, RPL_LOG_NAME, llstr(glob_mi.pos,llbuff)); #ifdef STOP_IO_WITH_FD_CLOSE thd->set_active_fd(vio_fd(mysql->net.vio)); #endif } return slave_was_killed; } Loading
sql/slave.h +1 −0 Original line number Diff line number Diff line Loading @@ -99,6 +99,7 @@ extern uint32 slave_skip_counter; // have caused errors, and have been manually applied by DBA already extern pthread_t slave_real_id; extern THD* slave_thd; extern MASTER_INFO glob_mi; extern HASH replicate_do_table, replicate_ignore_table; extern DYNAMIC_ARRAY replicate_wild_do_table, replicate_wild_ignore_table; Loading
sql/sql_class.cc +7 −0 Original line number Diff line number Diff line Loading @@ -84,6 +84,10 @@ THD::THD():user_time(0),fatal_error(0),last_insert_id_used(0), query_start_used=0; query_length=col_access=0; query_error=0; #ifdef STOP_IO_WITH_FD_CLOSE active_fd = -1; pthread_mutex_init(&active_fd_lock, NULL); #endif server_id = ::server_id; server_status=SERVER_STATUS_AUTOCOMMIT; next_insert_id=last_insert_id=0; Loading Loading @@ -182,6 +186,9 @@ THD::~THD() safeFree(ip); free_root(&mem_root,MYF(0)); mysys_var=0; // Safety (shouldn't be needed) #ifdef STOP_IO_WITH_FD_CLOSE pthread_mutex_destroy(&active_fd_lock); #endif DBUG_VOID_RETURN; } Loading
sql/sql_class.h +51 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ #pragma interface /* gcc class implementation */ #endif #include <thr_alarm.h> class Query_log_event; class Load_log_event; Loading Loading @@ -255,6 +257,10 @@ class THD :public ilink { Field *dupp_field; #ifndef __WIN__ sigset_t signals,block_signals; #endif #ifdef STOP_IO_WITH_FD_CLOSE int active_fd; pthread_mutex_t active_fd_lock; #endif ulonglong next_insert_id,last_insert_id,current_insert_id; ha_rows select_limit,offset_limit,default_select_limit,cuted_fields, Loading Loading @@ -284,6 +290,51 @@ class THD :public ilink { THD(); ~THD(); bool store_globals(); #ifdef STOP_IO_WITH_FD_CLOSE inline void set_active_fd(int fd) { pthread_mutex_lock(&active_fd_lock); active_fd = fd; pthread_mutex_unlock(&active_fd_lock); } inline void clear_active_fd() { pthread_mutex_lock(&active_fd_lock); active_fd = -1; pthread_mutex_unlock(&active_fd_lock); } inline void close_active_fd() { pthread_mutex_lock(&active_fd_lock); if(active_fd >= 0) { my_close(active_fd, MYF(MY_WME)); active_fd = -1; } pthread_mutex_unlock(&active_fd_lock); } #endif inline void prepare_to_die() { thr_alarm_kill(real_id); killed = 1; #ifdef STOP_IO_WITH_FD_CLOSE close_active_fd(); #endif if (mysys_var) { pthread_mutex_lock(&mysys_var->mutex); if (!system_thread) // Don't abort locks mysys_var->abort=1; if (mysys_var->current_mutex) { pthread_mutex_lock(mysys_var->current_mutex); pthread_cond_broadcast(mysys_var->current_cond); pthread_mutex_unlock(mysys_var->current_mutex); } pthread_mutex_unlock(&mysys_var->mutex); } } inline const char* enter_cond(pthread_cond_t *cond, pthread_mutex_t* mutex, const char* msg) { Loading