summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--repl-tests/test-repl-alter/run.test11
-rw-r--r--repl-tests/test-repl-alter/test.master4
-rw-r--r--sql/item_func.cc4
-rw-r--r--sql/sql_table.cc15
4 files changed, 27 insertions, 7 deletions
diff --git a/repl-tests/test-repl-alter/run.test b/repl-tests/test-repl-alter/run.test
new file mode 100644
index 00000000000..dab79a3d8f3
--- /dev/null
+++ b/repl-tests/test-repl-alter/run.test
@@ -0,0 +1,11 @@
+source ../include/master-slave.inc;
+connection master;
+drop table if exists test;
+CREATE TABLE test (name varchar(64), age smallint(3));
+INSERT INTO test SET name='Andy', age=31;
+INSERT test SET name='Jacob', age=2;
+INSERT into test SET name='Caleb', age=1;
+ALTER TABLE test ADD id int(8) ZEROFILL AUTO_INCREMENT PRIMARY KEY;
+@test.master select * from test;
+connection slave;
+@test.master select * from test; \ No newline at end of file
diff --git a/repl-tests/test-repl-alter/test.master b/repl-tests/test-repl-alter/test.master
new file mode 100644
index 00000000000..763154b938e
--- /dev/null
+++ b/repl-tests/test-repl-alter/test.master
@@ -0,0 +1,4 @@
+name age id
+Andy 31 00000001
+Jacob 2 00000002
+Caleb 1 00000003
diff --git a/sql/item_func.cc b/sql/item_func.cc
index b5e9a0c4035..e59221eb0f5 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -1140,7 +1140,9 @@ udf_handler::fix_fields(THD *thd,TABLE_LIST *tables,Item_result_field *func,
break;
}
}
- thd->net.last_error[0]=0;
+
+ if(thd)
+ thd->net.last_error[0]=0;
my_bool (*init)(UDF_INIT *, UDF_ARGS *, char *)=
(my_bool (*)(UDF_INIT *, UDF_ARGS *, char *))
u_d->func_init;
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index ed63b12ceb1..6e39a1a962b 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -32,7 +32,7 @@ static char *make_unique_key_name(const char *field_name,KEY *start,KEY *end);
static int copy_data_between_tables(TABLE *from,TABLE *to,
List<create_field> &create,
enum enum_duplicates handle_duplicates,
- ulong *copied,ulong *deleted);
+ ha_rows *copied,ha_rows *deleted);
/*****************************************************************************
** Remove all possbile tables and give a compact errormessage for all
@@ -992,7 +992,8 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
char tmp_name[80],old_name[32],new_name_buff[FN_REFLEN],
*table_name,*db;
bool use_timestamp=0;
- ulong copied,deleted;
+ ha_rows copied,deleted;
+ ulonglong next_insert_id;
uint save_time_stamp,db_create_options;
enum db_type old_db_type,new_db_type;
DBUG_ENTER("mysql_alter_table");
@@ -1333,11 +1334,13 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
if (use_timestamp)
new_table->time_stamp=0;
new_table->next_number_field=new_table->found_next_number_field;
- thd->count_cuted_fields=1; /* calc cuted fields */
+ thd->count_cuted_fields=1; // calc cuted fields
thd->cuted_fields=0L;
thd->proc_info="copy to tmp table";
+ next_insert_id=thd->next_insert_id; // Remember for loggin
error=copy_data_between_tables(table,new_table,create_list,handle_duplicates,
&copied,&deleted);
+ thd->last_insert_id=next_insert_id; // Needed for correct log
thd->count_cuted_fields=0; /* Don`t calc cuted fields */
new_table->time_stamp=save_time_stamp;
@@ -1474,8 +1477,8 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
VOID(pthread_mutex_unlock(&LOCK_open));
end_temporary:
- sprintf(tmp_name,ER(ER_INSERT_INFO),copied+deleted,deleted,
- thd->cuted_fields);
+ sprintf(tmp_name,ER(ER_INSERT_INFO),(ulong) (copied+deleted),
+ (ulong) deleted, thd->cuted_fields);
send_ok(&thd->net,copied+deleted,0L,tmp_name);
thd->some_tables_deleted=0;
DBUG_RETURN(0);
@@ -1488,7 +1491,7 @@ end_temporary:
static int
copy_data_between_tables(TABLE *from,TABLE *to,List<create_field> &create,
enum enum_duplicates handle_duplicates,
- ulong *copied,ulong *deleted)
+ ha_rows *copied,ha_rows *deleted)
{
int error;
Copy_field *copy,*copy_end;