Loading client/mysqltest.c +86 −58 Original line number Diff line number Diff line Loading @@ -43,7 +43,7 @@ **********************************************************************/ #define MTEST_VERSION "1.12" #define MTEST_VERSION "1.13" #include <my_global.h> #include <mysql_embed.h> Loading Loading @@ -243,7 +243,8 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname); void reject_dump(const char *record_file, char *buf, int size); int close_connection(struct st_query* q); VAR* var_get(const char *var_name, const char** var_name_end, int raw); VAR* var_get(const char *var_name, const char** var_name_end, my_bool raw, my_bool ignore_not_existing); int eval_expr(VAR* v, const char *p, const char** p_end); static int read_server_arguments(const char *name); Loading @@ -261,6 +262,7 @@ struct st_replace *init_replace(my_string *from, my_string *to, uint count, my_string word_end_chars); uint replace_strings(struct st_replace *rep, my_string *start, uint *max_length, my_string from); void free_replace(); static int insert_pointer_name(reg1 POINTER_ARRAY *pa,my_string name); void free_pointer_array(POINTER_ARRAY *pa); static int initialize_replace_buffer(void); Loading Loading @@ -314,7 +316,7 @@ static void do_eval(DYNAMIC_STRING* query_eval, const char* query) } else { if(!(v = var_get(p, &p, 0))) if(!(v = var_get(p, &p, 0, 0))) die("Bad variable in eval"); dynstr_append_mem(query_eval, v->str_val, v->str_val_len); } Loading Loading @@ -545,37 +547,40 @@ static int check_result(DYNAMIC_STRING* ds, const char* fname, return error; } VAR* var_get(const char* var_name, const char** var_name_end, int raw) VAR* var_get(const char* var_name, const char** var_name_end, my_bool raw, my_bool ignore_not_existing) { int digit; VAR* v; if (*var_name++ != '$') { --var_name; DBUG_ENTER("var_get"); DBUG_PRINT("enter",("var_name: %s",var_name)); if (*var_name != '$') goto err; } digit = *var_name - '0'; digit = *++var_name - '0'; if (!(digit < 10 && digit >= 0)) { const char* save_var_name = var_name, *end; end = (var_name_end) ? *var_name_end : 0; while (isvar(*var_name)) { if(end && var_name == end) break; while (isvar(*var_name) && var_name != end) ++var_name; } if (var_name == save_var_name) { if (ignore_not_existing) DBUG_RETURN(0); die("Empty variable"); } if (!(v = (VAR*) hash_search(&var_hash, save_var_name, var_name - save_var_name))) { if (ignore_not_existing) DBUG_RETURN(0); if (end) *(char*) end = 0; die("Variable '%s' used uninitialized", save_var_name); } --var_name; --var_name; /* Point at last character */ } else v = var_reg + digit; Loading @@ -588,12 +593,12 @@ VAR* var_get(const char* var_name, const char** var_name_end, int raw) } if (var_name_end) *var_name_end = var_name ; return v; DBUG_RETURN(v); err: if (var_name_end) *var_name_end = 0; die("Unsupported variable name: %s", var_name); return 0; DBUG_RETURN(0); } static VAR* var_obtain(char* name, int len) Loading Loading @@ -747,11 +752,11 @@ void var_copy(VAR* dest, VAR* src) dest->int_val=src->int_val; dest->int_dirty=src->int_dirty; if (dest->alloced_len < src->alloced_len && !(dest->str_val=my_realloc(dest->str_val,src->alloced_len, !(dest->str_val=my_realloc(dest->str_val,src->alloced_len+1, MYF(MY_WME)))) die("Out of memory"); dest->str_val_len=src->str_val_len; memcpy(dest->str_val,src->str_val,src->str_val_len); memcpy(dest->str_val,src->str_val,src->str_val_len+1); } int eval_expr(VAR* v, const char* p, const char** p_end) Loading @@ -759,7 +764,7 @@ int eval_expr(VAR* v, const char* p, const char** p_end) VAR* vp; if (*p == '$') { if ((vp = var_get(p,p_end,0))) if ((vp = var_get(p,p_end,0,0))) { var_copy(v, vp); return 0; Loading @@ -778,9 +783,9 @@ int eval_expr(VAR* v, const char* p, const char** p_end) v->alloced_len = (new_val_len < MIN_VAR_ALLOC - 1) ? MIN_VAR_ALLOC : new_val_len + 1; if (!(v->str_val = v->str_val ? my_realloc(v->str_val, v->alloced_len, v->str_val ? my_realloc(v->str_val, v->alloced_len+1, MYF(MY_WME)) : my_malloc(v->alloced_len, MYF(MY_WME)))) my_malloc(v->alloced_len+1, MYF(MY_WME)))) die("Out of memory"); } v->str_val_len = new_val_len; Loading @@ -801,7 +806,7 @@ int do_inc(struct st_query* q) { char* p=q->first_argument; VAR* v; v = var_get(p, 0, 1); v = var_get(p, 0, 1, 0); v->int_val++; v->int_dirty = 1; return 0; Loading @@ -811,7 +816,7 @@ int do_dec(struct st_query* q) { char* p=q->first_argument; VAR* v; v = var_get(p, 0, 1); v = var_get(p, 0, 1, 0); v->int_val--; v->int_dirty = 1; return 0; Loading Loading @@ -1042,14 +1047,16 @@ static uint get_ints(uint *to,struct st_query* q) /* Get a string; Return ptr to end of string Strings may be surrounded by " or ' If string is a '$variable', return the value of the variable. */ static void get_string(char **to_ptr, char **from_ptr, static char *get_string(char **to_ptr, char **from_ptr, struct st_query* q) { reg1 char c,sep; char *to= *to_ptr, *from= *from_ptr; char *to= *to_ptr, *from= *from_ptr, *start=to; DBUG_ENTER("get_string"); /* Find separator */ Loading Loading @@ -1099,9 +1106,22 @@ static void get_string(char **to_ptr, char **from_ptr, while (isspace(*from)) /* Point to next string */ from++; *to++ =0; /* End of string marker */ *to_ptr= to; *to =0; /* End of string marker */ *to_ptr= to+1; /* Store pointer to end */ *from_ptr= from; /* Check if this was a variable */ if (*start == '$') { const char *end= to; VAR *var=var_get(start, &end, 0, 1); if (var && to == (char*) end+1) { DBUG_PRINT("info",("var: %s -> %s", start, var->str_val)); DBUG_RETURN(var->str_val); /* return found variable value */ } } DBUG_RETURN(start); } Loading @@ -1109,6 +1129,8 @@ static void get_string(char **to_ptr, char **from_ptr, Get arguments for replace. The syntax is: replace from to [from to ...] Where each argument may be quoted with ' or " A argument may also be a variable, in which case the value of the variable is replaced. */ static void get_replace(struct st_query *q) Loading @@ -1120,6 +1142,9 @@ static void get_replace(struct st_query *q) POINTER_ARRAY to_array,from_array; DBUG_ENTER("get_replace"); if (glob_replace) free_replace(); bzero((char*) &to_array,sizeof(to_array)); bzero((char*) &from_array,sizeof(from_array)); if (!*from) Loading @@ -1128,12 +1153,11 @@ static void get_replace(struct st_query *q) while (*from) { char *to=buff; get_string(&buff, &from, q); to=get_string(&buff, &from, q); if (!*from) die("Wrong number of arguments to replace in %s\n", q->query); insert_pointer_name(&from_array,to); to=buff; get_string(&buff, &from, q); to=get_string(&buff, &from, q); insert_pointer_name(&to_array,to); } for (i=1,pos=word_end_chars ; i < 256 ; i++) Loading @@ -1149,6 +1173,7 @@ static void get_replace(struct st_query *q) free_pointer_array(&from_array); free_pointer_array(&to_array); my_free(start, MYF(0)); DBUG_VOID_RETURN; } void free_replace() Loading Loading @@ -1310,7 +1335,7 @@ int do_connect(struct st_query* q) p = safe_get_param(p, &con_port_str, "missing connection port"); if (*con_port_str == '$') { if (!(var_port = var_get(con_port_str, 0, 0))) if (!(var_port = var_get(con_port_str, 0, 0, 0))) die("Unknown variable '%s'", con_port_str+1); con_port = var_port->int_val; } Loading @@ -1319,7 +1344,7 @@ int do_connect(struct st_query* q) p = safe_get_param(p, &con_sock, "missing connection socket"); if (*con_sock == '$') { if (!(var_sock = var_get(con_sock, 0, 0))) if (!(var_sock = var_get(con_sock, 0, 0, 0))) die("Unknown variable '%s'", con_sock+1); if (!(con_sock = (char*)my_malloc(var_sock->str_val_len+1, MYF(0)))) die("Out of memory"); Loading Loading @@ -1993,7 +2018,7 @@ int run_query(MYSQL* mysql, struct st_query* q, int flags) mysql_errno(mysql), errno); if ((flags & QUERY_SEND) && !disable_query_log) { dynstr_append_mem(ds,query,query_len); replace_dynstr_append_mem(ds,query, query_len); dynstr_append_mem(ds,";\n",2); } if (!(flags & QUERY_REAP)) Loading Loading @@ -2175,12 +2200,15 @@ static VAR* var_init(VAR* v, const char* name, int name_len, const char* val, tmp_var->name = (name) ? (char*) tmp_var + sizeof(*tmp_var) : 0; tmp_var->alloced = (v == 0); if(!(tmp_var->str_val = my_malloc(val_alloc_len, MYF(MY_WME)))) if (!(tmp_var->str_val = my_malloc(val_alloc_len+1, MYF(MY_WME)))) die("Out of memory"); memcpy(tmp_var->name, name, name_len); if (val) memcpy(tmp_var->str_val, val, val_len + 1); { memcpy(tmp_var->str_val, val, val_len); tmp_var->str_val[val_len]=0; } tmp_var->name_len = name_len; tmp_var->str_val_len = val_len; tmp_var->alloced_len = val_alloc_len; Loading mysql-test/r/rpl000014.result +4 −4 Original line number Diff line number Diff line Loading @@ -8,21 +8,21 @@ File Position Binlog_do_db Binlog_ignore_db master-bin.001 79 show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root $MASTER_MYPORT 1 master-bin.001 79 Yes 0 0 1 127.0.0.1 root MASTER_PORT 1 master-bin.001 79 Yes 0 0 1 change master to master_log_pos=73; slave stop; change master to master_log_pos=73; show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root $MASTER_MYPORT 1 master-bin.001 73 No 0 0 1 127.0.0.1 root MASTER_PORT 1 master-bin.001 73 No 0 0 1 slave start; show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root $MASTER_MYPORT 1 master-bin.001 73 Yes 0 0 1 127.0.0.1 root MASTER_PORT 1 master-bin.001 73 Yes 0 0 1 change master to master_log_pos=173; show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root $MASTER_MYPORT 1 master-bin.001 173 Yes 0 0 1 127.0.0.1 root MASTER_PORT 1 master-bin.001 173 Yes 0 0 1 show master status; File Position Binlog_do_db Binlog_ignore_db master-bin.001 79 Loading mysql-test/r/rpl000015.result +4 −4 Original line number Diff line number Diff line Loading @@ -9,16 +9,16 @@ Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Rep change master to master_host='127.0.0.1'; show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 test 3306 60 4 No 0 0 0 127.0.0.1 test MASTER_PORT 60 4 No 0 0 0 change master to master_host='127.0.0.1',master_user='root', master_password='',master_port=9306; master_password='',master_port=MASTER_PORT; show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root 9306 60 4 No 0 0 0 127.0.0.1 root MASTER_PORT 60 4 No 0 0 0 slave start; show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root 9306 60 master-bin.001 79 Yes 0 0 1 127.0.0.1 root MASTER_PORT 60 master-bin.001 79 Yes 0 0 1 drop table if exists t1; create table t1 (n int); insert into t1 values (10),(45),(90); Loading mysql-test/r/rpl000016.result +5 −5 Original line number Diff line number Diff line Loading @@ -2,11 +2,11 @@ slave start; Could not initialize master info structure, check permisions on master.info slave start; Could not initialize master info structure, check permisions on master.info change master to master_host='127.0.0.1',master_port=9306, change master to master_host='127.0.0.1',master_port=MASTER_PORT, master_user='root'; Could not initialize master info reset slave; change master to master_host='127.0.0.1',master_port=9306, change master to master_host='127.0.0.1',master_port=MASTER_PORT, master_user='root'; reset master; slave start; Loading @@ -15,7 +15,7 @@ create table t1 (s text); insert into t1 values('Could not break slave'),('Tried hard'); show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root 9306 60 master-bin.001 234 Yes 0 0 3 127.0.0.1 root MASTER_PORT 60 master-bin.001 234 Yes 0 0 3 select * from t1; s Could not break slave Loading Loading @@ -43,7 +43,7 @@ master-bin.003 insert into t2 values (65); show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root 9306 60 master-bin.003 155 Yes 0 0 3 127.0.0.1 root MASTER_PORT 60 master-bin.003 155 Yes 0 0 3 select * from t2; m 34 Loading @@ -66,7 +66,7 @@ slave stop; slave start; show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root 9306 60 master-bin.006 445 Yes 0 0 7 127.0.0.1 root MASTER_PORT 60 master-bin.006 445 Yes 0 0 7 lock tables t3 read; select count(*) from t3 where n >= 4; count(*) Loading mysql-test/r/rpl_log.result +6 −6 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ load data infile '../../std_data/words.dat' into table t1; drop table t1; show binlog events; Log_name Pos Event_type Server_id Log_seq Info master-bin.001 4 Start 1 1 Server ver: $VERSION, Binlog ver: 2 master-bin.001 4 Start 1 1 Server ver: VERSION, Binlog ver: 2 master-bin.001 79 Query 1 2 use test; create table t1(n int not null auto_increment primary key) master-bin.001 172 Intvar 1 3 INSERT_ID=1 master-bin.001 200 Query 1 4 use test; insert into t1 values (NULL) Loading @@ -41,7 +41,7 @@ insert into t1 values (1); drop table t1; show binlog events; Log_name Pos Event_type Server_id Log_seq Info master-bin.001 4 Start 1 1 Server ver: $VERSION, Binlog ver: 2 master-bin.001 4 Start 1 1 Server ver: VERSION, Binlog ver: 2 master-bin.001 79 Query 1 2 use test; create table t1(n int not null auto_increment primary key) master-bin.001 172 Intvar 1 3 INSERT_ID=1 master-bin.001 200 Query 1 4 use test; insert into t1 values (NULL) Loading @@ -68,8 +68,8 @@ slave-bin.001 slave-bin.002 show binlog events in 'slave-bin.001' from 4; Log_name Pos Event_type Server_id Log_seq Info slave-bin.001 4 Start 2 1 Server ver: $VERSION, Binlog ver: 2 slave-bin.001 79 Slave 2 3 host=127.0.0.1,port=$MASTER_MYPORT,log=master-bin.001,pos=4 slave-bin.001 4 Start 2 1 Server ver: VERSION, Binlog ver: 2 slave-bin.001 79 Slave 2 3 host=127.0.0.1,port=MASTER_PORT,log=master-bin.001,pos=4 slave-bin.001 132 Query 1 2 use test; create table t1(n int not null auto_increment primary key) slave-bin.001 225 Intvar 1 3 INSERT_ID=1 slave-bin.001 253 Query 1 4 use test; insert into t1 values (NULL) Loading @@ -82,13 +82,13 @@ slave-bin.001 689 Rotate 1 4 slave-bin.002;pos=4; forced by master slave-bin.001 729 Stop 2 5 show binlog events in 'slave-bin.002' from 4; Log_name Pos Event_type Server_id Log_seq Info slave-bin.002 4 Slave 2 10 host=127.0.0.1,port=$MASTER_MYPORT,log=master-bin.002,pos=4 slave-bin.002 4 Slave 2 10 host=127.0.0.1,port=MASTER_PORT,log=master-bin.002,pos=4 slave-bin.002 57 Query 1 1 use test; create table t1 (n int) slave-bin.002 115 Query 1 2 use test; insert into t1 values (1) slave-bin.002 175 Query 1 3 use test; drop table t1 show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root $MASTER_MYPORT 1 master-bin.002 170 Yes 0 0 3 127.0.0.1 root MASTER_PORT 1 master-bin.002 170 Yes 0 0 3 show new master for slave with master_log_file='master-bin.001' and master_log_pos=4 and master_log_seq=1 and master_server_id=1; Log_name Log_pos Loading Loading
client/mysqltest.c +86 −58 Original line number Diff line number Diff line Loading @@ -43,7 +43,7 @@ **********************************************************************/ #define MTEST_VERSION "1.12" #define MTEST_VERSION "1.13" #include <my_global.h> #include <mysql_embed.h> Loading Loading @@ -243,7 +243,8 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname); void reject_dump(const char *record_file, char *buf, int size); int close_connection(struct st_query* q); VAR* var_get(const char *var_name, const char** var_name_end, int raw); VAR* var_get(const char *var_name, const char** var_name_end, my_bool raw, my_bool ignore_not_existing); int eval_expr(VAR* v, const char *p, const char** p_end); static int read_server_arguments(const char *name); Loading @@ -261,6 +262,7 @@ struct st_replace *init_replace(my_string *from, my_string *to, uint count, my_string word_end_chars); uint replace_strings(struct st_replace *rep, my_string *start, uint *max_length, my_string from); void free_replace(); static int insert_pointer_name(reg1 POINTER_ARRAY *pa,my_string name); void free_pointer_array(POINTER_ARRAY *pa); static int initialize_replace_buffer(void); Loading Loading @@ -314,7 +316,7 @@ static void do_eval(DYNAMIC_STRING* query_eval, const char* query) } else { if(!(v = var_get(p, &p, 0))) if(!(v = var_get(p, &p, 0, 0))) die("Bad variable in eval"); dynstr_append_mem(query_eval, v->str_val, v->str_val_len); } Loading Loading @@ -545,37 +547,40 @@ static int check_result(DYNAMIC_STRING* ds, const char* fname, return error; } VAR* var_get(const char* var_name, const char** var_name_end, int raw) VAR* var_get(const char* var_name, const char** var_name_end, my_bool raw, my_bool ignore_not_existing) { int digit; VAR* v; if (*var_name++ != '$') { --var_name; DBUG_ENTER("var_get"); DBUG_PRINT("enter",("var_name: %s",var_name)); if (*var_name != '$') goto err; } digit = *var_name - '0'; digit = *++var_name - '0'; if (!(digit < 10 && digit >= 0)) { const char* save_var_name = var_name, *end; end = (var_name_end) ? *var_name_end : 0; while (isvar(*var_name)) { if(end && var_name == end) break; while (isvar(*var_name) && var_name != end) ++var_name; } if (var_name == save_var_name) { if (ignore_not_existing) DBUG_RETURN(0); die("Empty variable"); } if (!(v = (VAR*) hash_search(&var_hash, save_var_name, var_name - save_var_name))) { if (ignore_not_existing) DBUG_RETURN(0); if (end) *(char*) end = 0; die("Variable '%s' used uninitialized", save_var_name); } --var_name; --var_name; /* Point at last character */ } else v = var_reg + digit; Loading @@ -588,12 +593,12 @@ VAR* var_get(const char* var_name, const char** var_name_end, int raw) } if (var_name_end) *var_name_end = var_name ; return v; DBUG_RETURN(v); err: if (var_name_end) *var_name_end = 0; die("Unsupported variable name: %s", var_name); return 0; DBUG_RETURN(0); } static VAR* var_obtain(char* name, int len) Loading Loading @@ -747,11 +752,11 @@ void var_copy(VAR* dest, VAR* src) dest->int_val=src->int_val; dest->int_dirty=src->int_dirty; if (dest->alloced_len < src->alloced_len && !(dest->str_val=my_realloc(dest->str_val,src->alloced_len, !(dest->str_val=my_realloc(dest->str_val,src->alloced_len+1, MYF(MY_WME)))) die("Out of memory"); dest->str_val_len=src->str_val_len; memcpy(dest->str_val,src->str_val,src->str_val_len); memcpy(dest->str_val,src->str_val,src->str_val_len+1); } int eval_expr(VAR* v, const char* p, const char** p_end) Loading @@ -759,7 +764,7 @@ int eval_expr(VAR* v, const char* p, const char** p_end) VAR* vp; if (*p == '$') { if ((vp = var_get(p,p_end,0))) if ((vp = var_get(p,p_end,0,0))) { var_copy(v, vp); return 0; Loading @@ -778,9 +783,9 @@ int eval_expr(VAR* v, const char* p, const char** p_end) v->alloced_len = (new_val_len < MIN_VAR_ALLOC - 1) ? MIN_VAR_ALLOC : new_val_len + 1; if (!(v->str_val = v->str_val ? my_realloc(v->str_val, v->alloced_len, v->str_val ? my_realloc(v->str_val, v->alloced_len+1, MYF(MY_WME)) : my_malloc(v->alloced_len, MYF(MY_WME)))) my_malloc(v->alloced_len+1, MYF(MY_WME)))) die("Out of memory"); } v->str_val_len = new_val_len; Loading @@ -801,7 +806,7 @@ int do_inc(struct st_query* q) { char* p=q->first_argument; VAR* v; v = var_get(p, 0, 1); v = var_get(p, 0, 1, 0); v->int_val++; v->int_dirty = 1; return 0; Loading @@ -811,7 +816,7 @@ int do_dec(struct st_query* q) { char* p=q->first_argument; VAR* v; v = var_get(p, 0, 1); v = var_get(p, 0, 1, 0); v->int_val--; v->int_dirty = 1; return 0; Loading Loading @@ -1042,14 +1047,16 @@ static uint get_ints(uint *to,struct st_query* q) /* Get a string; Return ptr to end of string Strings may be surrounded by " or ' If string is a '$variable', return the value of the variable. */ static void get_string(char **to_ptr, char **from_ptr, static char *get_string(char **to_ptr, char **from_ptr, struct st_query* q) { reg1 char c,sep; char *to= *to_ptr, *from= *from_ptr; char *to= *to_ptr, *from= *from_ptr, *start=to; DBUG_ENTER("get_string"); /* Find separator */ Loading Loading @@ -1099,9 +1106,22 @@ static void get_string(char **to_ptr, char **from_ptr, while (isspace(*from)) /* Point to next string */ from++; *to++ =0; /* End of string marker */ *to_ptr= to; *to =0; /* End of string marker */ *to_ptr= to+1; /* Store pointer to end */ *from_ptr= from; /* Check if this was a variable */ if (*start == '$') { const char *end= to; VAR *var=var_get(start, &end, 0, 1); if (var && to == (char*) end+1) { DBUG_PRINT("info",("var: %s -> %s", start, var->str_val)); DBUG_RETURN(var->str_val); /* return found variable value */ } } DBUG_RETURN(start); } Loading @@ -1109,6 +1129,8 @@ static void get_string(char **to_ptr, char **from_ptr, Get arguments for replace. The syntax is: replace from to [from to ...] Where each argument may be quoted with ' or " A argument may also be a variable, in which case the value of the variable is replaced. */ static void get_replace(struct st_query *q) Loading @@ -1120,6 +1142,9 @@ static void get_replace(struct st_query *q) POINTER_ARRAY to_array,from_array; DBUG_ENTER("get_replace"); if (glob_replace) free_replace(); bzero((char*) &to_array,sizeof(to_array)); bzero((char*) &from_array,sizeof(from_array)); if (!*from) Loading @@ -1128,12 +1153,11 @@ static void get_replace(struct st_query *q) while (*from) { char *to=buff; get_string(&buff, &from, q); to=get_string(&buff, &from, q); if (!*from) die("Wrong number of arguments to replace in %s\n", q->query); insert_pointer_name(&from_array,to); to=buff; get_string(&buff, &from, q); to=get_string(&buff, &from, q); insert_pointer_name(&to_array,to); } for (i=1,pos=word_end_chars ; i < 256 ; i++) Loading @@ -1149,6 +1173,7 @@ static void get_replace(struct st_query *q) free_pointer_array(&from_array); free_pointer_array(&to_array); my_free(start, MYF(0)); DBUG_VOID_RETURN; } void free_replace() Loading Loading @@ -1310,7 +1335,7 @@ int do_connect(struct st_query* q) p = safe_get_param(p, &con_port_str, "missing connection port"); if (*con_port_str == '$') { if (!(var_port = var_get(con_port_str, 0, 0))) if (!(var_port = var_get(con_port_str, 0, 0, 0))) die("Unknown variable '%s'", con_port_str+1); con_port = var_port->int_val; } Loading @@ -1319,7 +1344,7 @@ int do_connect(struct st_query* q) p = safe_get_param(p, &con_sock, "missing connection socket"); if (*con_sock == '$') { if (!(var_sock = var_get(con_sock, 0, 0))) if (!(var_sock = var_get(con_sock, 0, 0, 0))) die("Unknown variable '%s'", con_sock+1); if (!(con_sock = (char*)my_malloc(var_sock->str_val_len+1, MYF(0)))) die("Out of memory"); Loading Loading @@ -1993,7 +2018,7 @@ int run_query(MYSQL* mysql, struct st_query* q, int flags) mysql_errno(mysql), errno); if ((flags & QUERY_SEND) && !disable_query_log) { dynstr_append_mem(ds,query,query_len); replace_dynstr_append_mem(ds,query, query_len); dynstr_append_mem(ds,";\n",2); } if (!(flags & QUERY_REAP)) Loading Loading @@ -2175,12 +2200,15 @@ static VAR* var_init(VAR* v, const char* name, int name_len, const char* val, tmp_var->name = (name) ? (char*) tmp_var + sizeof(*tmp_var) : 0; tmp_var->alloced = (v == 0); if(!(tmp_var->str_val = my_malloc(val_alloc_len, MYF(MY_WME)))) if (!(tmp_var->str_val = my_malloc(val_alloc_len+1, MYF(MY_WME)))) die("Out of memory"); memcpy(tmp_var->name, name, name_len); if (val) memcpy(tmp_var->str_val, val, val_len + 1); { memcpy(tmp_var->str_val, val, val_len); tmp_var->str_val[val_len]=0; } tmp_var->name_len = name_len; tmp_var->str_val_len = val_len; tmp_var->alloced_len = val_alloc_len; Loading
mysql-test/r/rpl000014.result +4 −4 Original line number Diff line number Diff line Loading @@ -8,21 +8,21 @@ File Position Binlog_do_db Binlog_ignore_db master-bin.001 79 show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root $MASTER_MYPORT 1 master-bin.001 79 Yes 0 0 1 127.0.0.1 root MASTER_PORT 1 master-bin.001 79 Yes 0 0 1 change master to master_log_pos=73; slave stop; change master to master_log_pos=73; show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root $MASTER_MYPORT 1 master-bin.001 73 No 0 0 1 127.0.0.1 root MASTER_PORT 1 master-bin.001 73 No 0 0 1 slave start; show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root $MASTER_MYPORT 1 master-bin.001 73 Yes 0 0 1 127.0.0.1 root MASTER_PORT 1 master-bin.001 73 Yes 0 0 1 change master to master_log_pos=173; show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root $MASTER_MYPORT 1 master-bin.001 173 Yes 0 0 1 127.0.0.1 root MASTER_PORT 1 master-bin.001 173 Yes 0 0 1 show master status; File Position Binlog_do_db Binlog_ignore_db master-bin.001 79 Loading
mysql-test/r/rpl000015.result +4 −4 Original line number Diff line number Diff line Loading @@ -9,16 +9,16 @@ Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Rep change master to master_host='127.0.0.1'; show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 test 3306 60 4 No 0 0 0 127.0.0.1 test MASTER_PORT 60 4 No 0 0 0 change master to master_host='127.0.0.1',master_user='root', master_password='',master_port=9306; master_password='',master_port=MASTER_PORT; show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root 9306 60 4 No 0 0 0 127.0.0.1 root MASTER_PORT 60 4 No 0 0 0 slave start; show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root 9306 60 master-bin.001 79 Yes 0 0 1 127.0.0.1 root MASTER_PORT 60 master-bin.001 79 Yes 0 0 1 drop table if exists t1; create table t1 (n int); insert into t1 values (10),(45),(90); Loading
mysql-test/r/rpl000016.result +5 −5 Original line number Diff line number Diff line Loading @@ -2,11 +2,11 @@ slave start; Could not initialize master info structure, check permisions on master.info slave start; Could not initialize master info structure, check permisions on master.info change master to master_host='127.0.0.1',master_port=9306, change master to master_host='127.0.0.1',master_port=MASTER_PORT, master_user='root'; Could not initialize master info reset slave; change master to master_host='127.0.0.1',master_port=9306, change master to master_host='127.0.0.1',master_port=MASTER_PORT, master_user='root'; reset master; slave start; Loading @@ -15,7 +15,7 @@ create table t1 (s text); insert into t1 values('Could not break slave'),('Tried hard'); show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root 9306 60 master-bin.001 234 Yes 0 0 3 127.0.0.1 root MASTER_PORT 60 master-bin.001 234 Yes 0 0 3 select * from t1; s Could not break slave Loading Loading @@ -43,7 +43,7 @@ master-bin.003 insert into t2 values (65); show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root 9306 60 master-bin.003 155 Yes 0 0 3 127.0.0.1 root MASTER_PORT 60 master-bin.003 155 Yes 0 0 3 select * from t2; m 34 Loading @@ -66,7 +66,7 @@ slave stop; slave start; show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root 9306 60 master-bin.006 445 Yes 0 0 7 127.0.0.1 root MASTER_PORT 60 master-bin.006 445 Yes 0 0 7 lock tables t3 read; select count(*) from t3 where n >= 4; count(*) Loading
mysql-test/r/rpl_log.result +6 −6 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ load data infile '../../std_data/words.dat' into table t1; drop table t1; show binlog events; Log_name Pos Event_type Server_id Log_seq Info master-bin.001 4 Start 1 1 Server ver: $VERSION, Binlog ver: 2 master-bin.001 4 Start 1 1 Server ver: VERSION, Binlog ver: 2 master-bin.001 79 Query 1 2 use test; create table t1(n int not null auto_increment primary key) master-bin.001 172 Intvar 1 3 INSERT_ID=1 master-bin.001 200 Query 1 4 use test; insert into t1 values (NULL) Loading @@ -41,7 +41,7 @@ insert into t1 values (1); drop table t1; show binlog events; Log_name Pos Event_type Server_id Log_seq Info master-bin.001 4 Start 1 1 Server ver: $VERSION, Binlog ver: 2 master-bin.001 4 Start 1 1 Server ver: VERSION, Binlog ver: 2 master-bin.001 79 Query 1 2 use test; create table t1(n int not null auto_increment primary key) master-bin.001 172 Intvar 1 3 INSERT_ID=1 master-bin.001 200 Query 1 4 use test; insert into t1 values (NULL) Loading @@ -68,8 +68,8 @@ slave-bin.001 slave-bin.002 show binlog events in 'slave-bin.001' from 4; Log_name Pos Event_type Server_id Log_seq Info slave-bin.001 4 Start 2 1 Server ver: $VERSION, Binlog ver: 2 slave-bin.001 79 Slave 2 3 host=127.0.0.1,port=$MASTER_MYPORT,log=master-bin.001,pos=4 slave-bin.001 4 Start 2 1 Server ver: VERSION, Binlog ver: 2 slave-bin.001 79 Slave 2 3 host=127.0.0.1,port=MASTER_PORT,log=master-bin.001,pos=4 slave-bin.001 132 Query 1 2 use test; create table t1(n int not null auto_increment primary key) slave-bin.001 225 Intvar 1 3 INSERT_ID=1 slave-bin.001 253 Query 1 4 use test; insert into t1 values (NULL) Loading @@ -82,13 +82,13 @@ slave-bin.001 689 Rotate 1 4 slave-bin.002;pos=4; forced by master slave-bin.001 729 Stop 2 5 show binlog events in 'slave-bin.002' from 4; Log_name Pos Event_type Server_id Log_seq Info slave-bin.002 4 Slave 2 10 host=127.0.0.1,port=$MASTER_MYPORT,log=master-bin.002,pos=4 slave-bin.002 4 Slave 2 10 host=127.0.0.1,port=MASTER_PORT,log=master-bin.002,pos=4 slave-bin.002 57 Query 1 1 use test; create table t1 (n int) slave-bin.002 115 Query 1 2 use test; insert into t1 values (1) slave-bin.002 175 Query 1 3 use test; drop table t1 show slave status; Master_Host Master_User Master_Port Connect_retry Log_File Pos Slave_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Last_log_seq 127.0.0.1 root $MASTER_MYPORT 1 master-bin.002 170 Yes 0 0 3 127.0.0.1 root MASTER_PORT 1 master-bin.002 170 Yes 0 0 3 show new master for slave with master_log_file='master-bin.001' and master_log_pos=4 and master_log_seq=1 and master_server_id=1; Log_name Log_pos Loading