Loading Build-tools/Do-compile +9 −2 Original line number Diff line number Diff line Loading @@ -215,7 +215,14 @@ if ($opt_stage <= 1) # Only enable InnoDB when requested (required to be able to # build the "Classic" packages that do not include InnoDB) $opt_config_options.= " --without-innodb" if (!$opt_innodb); if ($opt_innodb) { $opt_config_options.= " --with-innodb"; } else { $opt_config_options.= " --without-innodb"; } if ($opt_with_other_libc) { Loading Loading @@ -314,7 +321,7 @@ if (!$opt_no_test) } if ($opt_innodb) { $extra.=" --innodb_data_file_path=ibdata1:100M"; $extra.=" --innodb_data_file_path=ibdata1:100M:autoextend"; } safe_system("./bin/mysqld --no-defaults --basedir . --datadir ./data --skip-locking $extra >> $log 2>&1 &"); sleep(2); Loading sql/item_func.cc +16 −2 Original line number Diff line number Diff line Loading @@ -698,17 +698,31 @@ double Item_func_round::val() double Item_func_rand::val() { THD* thd = current_thd; if (arg_count) { // Only use argument once in query uint32 tmp= (uint32) (args[0]->val_int()); randominit(¤t_thd->rand,(uint32) (tmp*0x10001L+55555555L), randominit(&thd->rand,(uint32) (tmp*0x10001L+55555555L), (uint32) (tmp*0x10000001L)); #ifdef DELETE_ITEMS delete args[0]; #endif arg_count=0; } return rnd(¤t_thd->rand); else if (0)//!thd->rand_used) { // no need to send a Rand log event if seed was given eg: RAND(seed), // as it will be replicated in the query as such. // save the seed only the first time RAND() is used in the query // once events are forwarded rather than recreated, // the following can be skipped if inside the slave thread thd->rand_used=1; thd->rand_saved_seed1=thd->rand.seed1; thd->rand_saved_seed2=thd->rand.seed2; } return rnd(&thd->rand); } longlong Item_func_sign::val_int() Loading sql/log.cc +7 −0 Original line number Diff line number Diff line Loading @@ -1066,6 +1066,13 @@ bool MYSQL_LOG::write(Log_event* event_info) if (e.write(file)) goto err; } if (thd && thd->rand_used) { Rand_log_event e(thd,thd->rand_saved_seed1,thd->rand_saved_seed2); e.set_log_pos(this); if (e.write(file)) goto err; } if (thd && thd->variables.convert_set) { char buf[1024] = "SET CHARACTER SET "; Loading sql/log_event.cc +61 −0 Original line number Diff line number Diff line Loading @@ -348,6 +348,18 @@ void Intvar_log_event::pack_info(String* packet) net_store_data(packet, tmp.ptr(), tmp.length()); } void Rand_log_event::pack_info(String* packet) { char buf1[256], buf[22]; String tmp(buf1, sizeof(buf1)); tmp.length(0); tmp.append("randseed1="); tmp.append(llstr(seed1, buf)); tmp.append(",randseed2="); tmp.append(llstr(seed2, buf)); net_store_data(packet, tmp.ptr(), tmp.length()); } void Slave_log_event::pack_info(String* packet) { char buf1[256], buf[22], *end; Loading Loading @@ -376,6 +388,9 @@ void Log_event::init_show_field_list(List<Item>* field_list) field_list->push_back(new Item_empty_string("Info", 20)); } /* * only called by SHOW BINLOG EVENTS */ int Log_event::net_send(THD* thd, const char* log_name, my_off_t pos) { String* packet = &thd->packet; Loading Loading @@ -610,6 +625,9 @@ Log_event* Log_event::read_log_event(const char* buf, int event_len, case INTVAR_EVENT: ev = new Intvar_log_event(buf, old_format); break; case RAND_EVENT: ev = new Rand_log_event(buf, old_format); break; default: break; } Loading Loading @@ -915,6 +933,41 @@ void Intvar_log_event::print(FILE* file, bool short_form, char* last_db) } #endif /***************************************************************************** * * Rand log event * ****************************************************************************/ Rand_log_event::Rand_log_event(const char* buf, bool old_format) :Log_event(buf, old_format) { buf += (old_format) ? OLD_HEADER_LEN : LOG_EVENT_HEADER_LEN; seed1 = uint8korr(buf+RAND_SEED1_OFFSET); seed2 = uint8korr(buf+RAND_SEED2_OFFSET); } int Rand_log_event::write_data(IO_CACHE* file) { char buf[16]; int8store(buf + RAND_SEED1_OFFSET, seed1); int8store(buf + RAND_SEED2_OFFSET, seed2); return my_b_safe_write(file, (byte*) buf, sizeof(buf)); } #ifdef MYSQL_CLIENT void Rand_log_event::print(FILE* file, bool short_form, char* last_db) { char llbuff[22]; if (!short_form) { print_header(file); fprintf(file, "\tRand\n"); } fprintf(file, "SET RAND SEED1=%s;\n", llstr(seed1, llbuff)); fprintf(file, "SET RAND SEED2=%s;\n", llstr(seed2, llbuff)); fflush(file); } #endif int Load_log_event::write_data_header(IO_CACHE* file) { Loading Loading @@ -1910,6 +1963,14 @@ int Intvar_log_event::exec_event(struct st_relay_log_info* rli) return 0; } int Rand_log_event::exec_event(struct st_relay_log_info* rli) { thd->rand.seed1 = seed1; thd->rand.seed2 = seed2; rli->inc_pending(get_event_len()); return 0; } int Slave_log_event::exec_event(struct st_relay_log_info* rli) { if (mysql_bin_log.is_open()) Loading sql/log_event.h +35 −1 Original line number Diff line number Diff line Loading @@ -152,6 +152,11 @@ struct sql_ex_info #define I_TYPE_OFFSET 0 #define I_VAL_OFFSET 1 /* Rand event post-header */ #define RAND_SEED1_OFFSET 0 #define RAND_SEED2_OFFSET 8 /* Load event post-header */ #define L_THREAD_ID_OFFSET 0 Loading Loading @@ -199,7 +204,7 @@ enum Log_event_type START_EVENT = 1, QUERY_EVENT =2, STOP_EVENT=3, ROTATE_EVENT = 4, INTVAR_EVENT=5, LOAD_EVENT=6, SLAVE_EVENT=7, CREATE_FILE_EVENT=8, APPEND_BLOCK_EVENT=9, EXEC_LOAD_EVENT=10, DELETE_FILE_EVENT=11, NEW_LOAD_EVENT=12 NEW_LOAD_EVENT=12, RAND_EVENT=13 }; enum Int_event_type Loading Loading @@ -497,6 +502,35 @@ class Intvar_log_event: public Log_event bool is_valid() { return 1; } }; /***************************************************************************** * * Rand log event class * ****************************************************************************/ class Rand_log_event: public Log_event { public: ulonglong seed1; ulonglong seed2; #ifndef MYSQL_CLIENT Rand_log_event(THD* thd_arg, ulonglong seed1_arg, ulonglong seed2_arg) :Log_event(thd_arg),seed1(seed1_arg),seed2(seed2_arg) {} void pack_info(String* packet); int exec_event(struct st_relay_log_info* rli); #else void print(FILE* file, bool short_form = 0, char* last_db = 0); #endif Rand_log_event(const char* buf, bool old_format); ~Rand_log_event() {} Log_event_type get_type_code() { return RAND_EVENT;} int get_data_size() { return sizeof(ulonglong) * 2; } int write_data(IO_CACHE* file); bool is_valid() { return 1; } }; class Stop_log_event: public Log_event { Loading Loading
Build-tools/Do-compile +9 −2 Original line number Diff line number Diff line Loading @@ -215,7 +215,14 @@ if ($opt_stage <= 1) # Only enable InnoDB when requested (required to be able to # build the "Classic" packages that do not include InnoDB) $opt_config_options.= " --without-innodb" if (!$opt_innodb); if ($opt_innodb) { $opt_config_options.= " --with-innodb"; } else { $opt_config_options.= " --without-innodb"; } if ($opt_with_other_libc) { Loading Loading @@ -314,7 +321,7 @@ if (!$opt_no_test) } if ($opt_innodb) { $extra.=" --innodb_data_file_path=ibdata1:100M"; $extra.=" --innodb_data_file_path=ibdata1:100M:autoextend"; } safe_system("./bin/mysqld --no-defaults --basedir . --datadir ./data --skip-locking $extra >> $log 2>&1 &"); sleep(2); Loading
sql/item_func.cc +16 −2 Original line number Diff line number Diff line Loading @@ -698,17 +698,31 @@ double Item_func_round::val() double Item_func_rand::val() { THD* thd = current_thd; if (arg_count) { // Only use argument once in query uint32 tmp= (uint32) (args[0]->val_int()); randominit(¤t_thd->rand,(uint32) (tmp*0x10001L+55555555L), randominit(&thd->rand,(uint32) (tmp*0x10001L+55555555L), (uint32) (tmp*0x10000001L)); #ifdef DELETE_ITEMS delete args[0]; #endif arg_count=0; } return rnd(¤t_thd->rand); else if (0)//!thd->rand_used) { // no need to send a Rand log event if seed was given eg: RAND(seed), // as it will be replicated in the query as such. // save the seed only the first time RAND() is used in the query // once events are forwarded rather than recreated, // the following can be skipped if inside the slave thread thd->rand_used=1; thd->rand_saved_seed1=thd->rand.seed1; thd->rand_saved_seed2=thd->rand.seed2; } return rnd(&thd->rand); } longlong Item_func_sign::val_int() Loading
sql/log.cc +7 −0 Original line number Diff line number Diff line Loading @@ -1066,6 +1066,13 @@ bool MYSQL_LOG::write(Log_event* event_info) if (e.write(file)) goto err; } if (thd && thd->rand_used) { Rand_log_event e(thd,thd->rand_saved_seed1,thd->rand_saved_seed2); e.set_log_pos(this); if (e.write(file)) goto err; } if (thd && thd->variables.convert_set) { char buf[1024] = "SET CHARACTER SET "; Loading
sql/log_event.cc +61 −0 Original line number Diff line number Diff line Loading @@ -348,6 +348,18 @@ void Intvar_log_event::pack_info(String* packet) net_store_data(packet, tmp.ptr(), tmp.length()); } void Rand_log_event::pack_info(String* packet) { char buf1[256], buf[22]; String tmp(buf1, sizeof(buf1)); tmp.length(0); tmp.append("randseed1="); tmp.append(llstr(seed1, buf)); tmp.append(",randseed2="); tmp.append(llstr(seed2, buf)); net_store_data(packet, tmp.ptr(), tmp.length()); } void Slave_log_event::pack_info(String* packet) { char buf1[256], buf[22], *end; Loading Loading @@ -376,6 +388,9 @@ void Log_event::init_show_field_list(List<Item>* field_list) field_list->push_back(new Item_empty_string("Info", 20)); } /* * only called by SHOW BINLOG EVENTS */ int Log_event::net_send(THD* thd, const char* log_name, my_off_t pos) { String* packet = &thd->packet; Loading Loading @@ -610,6 +625,9 @@ Log_event* Log_event::read_log_event(const char* buf, int event_len, case INTVAR_EVENT: ev = new Intvar_log_event(buf, old_format); break; case RAND_EVENT: ev = new Rand_log_event(buf, old_format); break; default: break; } Loading Loading @@ -915,6 +933,41 @@ void Intvar_log_event::print(FILE* file, bool short_form, char* last_db) } #endif /***************************************************************************** * * Rand log event * ****************************************************************************/ Rand_log_event::Rand_log_event(const char* buf, bool old_format) :Log_event(buf, old_format) { buf += (old_format) ? OLD_HEADER_LEN : LOG_EVENT_HEADER_LEN; seed1 = uint8korr(buf+RAND_SEED1_OFFSET); seed2 = uint8korr(buf+RAND_SEED2_OFFSET); } int Rand_log_event::write_data(IO_CACHE* file) { char buf[16]; int8store(buf + RAND_SEED1_OFFSET, seed1); int8store(buf + RAND_SEED2_OFFSET, seed2); return my_b_safe_write(file, (byte*) buf, sizeof(buf)); } #ifdef MYSQL_CLIENT void Rand_log_event::print(FILE* file, bool short_form, char* last_db) { char llbuff[22]; if (!short_form) { print_header(file); fprintf(file, "\tRand\n"); } fprintf(file, "SET RAND SEED1=%s;\n", llstr(seed1, llbuff)); fprintf(file, "SET RAND SEED2=%s;\n", llstr(seed2, llbuff)); fflush(file); } #endif int Load_log_event::write_data_header(IO_CACHE* file) { Loading Loading @@ -1910,6 +1963,14 @@ int Intvar_log_event::exec_event(struct st_relay_log_info* rli) return 0; } int Rand_log_event::exec_event(struct st_relay_log_info* rli) { thd->rand.seed1 = seed1; thd->rand.seed2 = seed2; rli->inc_pending(get_event_len()); return 0; } int Slave_log_event::exec_event(struct st_relay_log_info* rli) { if (mysql_bin_log.is_open()) Loading
sql/log_event.h +35 −1 Original line number Diff line number Diff line Loading @@ -152,6 +152,11 @@ struct sql_ex_info #define I_TYPE_OFFSET 0 #define I_VAL_OFFSET 1 /* Rand event post-header */ #define RAND_SEED1_OFFSET 0 #define RAND_SEED2_OFFSET 8 /* Load event post-header */ #define L_THREAD_ID_OFFSET 0 Loading Loading @@ -199,7 +204,7 @@ enum Log_event_type START_EVENT = 1, QUERY_EVENT =2, STOP_EVENT=3, ROTATE_EVENT = 4, INTVAR_EVENT=5, LOAD_EVENT=6, SLAVE_EVENT=7, CREATE_FILE_EVENT=8, APPEND_BLOCK_EVENT=9, EXEC_LOAD_EVENT=10, DELETE_FILE_EVENT=11, NEW_LOAD_EVENT=12 NEW_LOAD_EVENT=12, RAND_EVENT=13 }; enum Int_event_type Loading Loading @@ -497,6 +502,35 @@ class Intvar_log_event: public Log_event bool is_valid() { return 1; } }; /***************************************************************************** * * Rand log event class * ****************************************************************************/ class Rand_log_event: public Log_event { public: ulonglong seed1; ulonglong seed2; #ifndef MYSQL_CLIENT Rand_log_event(THD* thd_arg, ulonglong seed1_arg, ulonglong seed2_arg) :Log_event(thd_arg),seed1(seed1_arg),seed2(seed2_arg) {} void pack_info(String* packet); int exec_event(struct st_relay_log_info* rli); #else void print(FILE* file, bool short_form = 0, char* last_db = 0); #endif Rand_log_event(const char* buf, bool old_format); ~Rand_log_event() {} Log_event_type get_type_code() { return RAND_EVENT;} int get_data_size() { return sizeof(ulonglong) * 2; } int write_data(IO_CACHE* file); bool is_valid() { return 1; } }; class Stop_log_event: public Log_event { Loading