Loading mysql-test/r/auto_increment.result +11 −7 Original line number Diff line number Diff line Loading @@ -206,18 +206,25 @@ select * from t1 order by b; a b 1 1 200 2 205 3 0 3 201 4 202 5 203 6 204 7 create table t2 (a int); insert t2 values (1),(2); alter table t2 add b int auto_increment primary key; select * from t2; a b 1 1 2 2 drop table t2; delete from t1 where a=0; update t1 set a=0 where b=5; select * from t1 order by b; a b 1 1 200 2 205 3 201 4 0 5 203 6 Loading @@ -225,7 +232,7 @@ a b delete from t1 where a=0; update t1 set a=NULL where b=6; Warnings: Warning 1263 Data truncated; NULL supplied to NOT NULL column 'a' at row 5 Warning 1263 Data truncated; NULL supplied to NOT NULL column 'a' at row 4 update t1 set a=300 where b=7; SET SQL_MODE=''; insert into t1(a,b)values(NULL,8); Loading @@ -239,7 +246,6 @@ select * from t1 order by b; a b 1 1 200 2 205 3 201 4 0 6 300 7 Loading @@ -256,7 +262,6 @@ select * from t1 order by b; a b 1 1 200 2 205 3 201 4 300 7 301 8 Loading @@ -269,13 +274,12 @@ a b delete from t1 where a=0; update t1 set a=NULL where b=13; Warnings: Warning 1263 Data truncated; NULL supplied to NOT NULL column 'a' at row 10 Warning 1263 Data truncated; NULL supplied to NOT NULL column 'a' at row 9 update t1 set a=500 where b=14; select * from t1 order by b; a b 1 1 200 2 205 3 201 4 300 7 301 8 Loading mysql-test/t/auto_increment.test +5 −0 Original line number Diff line number Diff line Loading @@ -140,6 +140,11 @@ insert into t1(b)values(7); select * from t1 order by b; alter table t1 modify b mediumint; select * from t1 order by b; create table t2 (a int); insert t2 values (1),(2); alter table t2 add b int auto_increment primary key; select * from t2; drop table t2; delete from t1 where a=0; update t1 set a=0 where b=5; select * from t1 order by b; Loading sql/sql_table.cc +13 −6 Original line number Diff line number Diff line Loading @@ -3271,13 +3271,12 @@ copy_data_between_tables(TABLE *from,TABLE *to, ha_rows *deleted) { int error; Copy_field *copy,*copy_end; Copy_field *copy,*copy_end, *next_field; ulong found_count,delete_count; THD *thd= current_thd; uint length; SORT_FIELD *sortorder; READ_RECORD info; Field *next_field; TABLE_LIST tables; List<Item> fields; List<Item> all_fields; Loading @@ -3298,9 +3297,14 @@ copy_data_between_tables(TABLE *from,TABLE *to, { def=it++; if (def->field) { if (*ptr == to->next_number_field) next_field= copy_end; (copy_end++)->set(*ptr,def->field,0); } } found_count=delete_count=0; if (order) Loading Loading @@ -3343,7 +3347,6 @@ copy_data_between_tables(TABLE *from,TABLE *to, if (handle_duplicates == DUP_IGNORE || handle_duplicates == DUP_REPLACE) to->file->extra(HA_EXTRA_IGNORE_DUP_KEY); next_field=to->next_number_field; thd->row_count= 0; while (!(error=info.read_record(&info))) { Loading @@ -3354,10 +3357,14 @@ copy_data_between_tables(TABLE *from,TABLE *to, break; } thd->row_count++; if (next_field) next_field->reset(); if (to->next_number_field) to->next_number_field->reset(); for (Copy_field *copy_ptr=copy ; copy_ptr != copy_end ; copy_ptr++) { if (copy_ptr == next_field) to->auto_increment_field_not_null= TRUE; copy_ptr->do_copy(copy_ptr); } if ((error=to->file->write_row((byte*) to->record[0]))) { if ((handle_duplicates != DUP_IGNORE && Loading Loading
mysql-test/r/auto_increment.result +11 −7 Original line number Diff line number Diff line Loading @@ -206,18 +206,25 @@ select * from t1 order by b; a b 1 1 200 2 205 3 0 3 201 4 202 5 203 6 204 7 create table t2 (a int); insert t2 values (1),(2); alter table t2 add b int auto_increment primary key; select * from t2; a b 1 1 2 2 drop table t2; delete from t1 where a=0; update t1 set a=0 where b=5; select * from t1 order by b; a b 1 1 200 2 205 3 201 4 0 5 203 6 Loading @@ -225,7 +232,7 @@ a b delete from t1 where a=0; update t1 set a=NULL where b=6; Warnings: Warning 1263 Data truncated; NULL supplied to NOT NULL column 'a' at row 5 Warning 1263 Data truncated; NULL supplied to NOT NULL column 'a' at row 4 update t1 set a=300 where b=7; SET SQL_MODE=''; insert into t1(a,b)values(NULL,8); Loading @@ -239,7 +246,6 @@ select * from t1 order by b; a b 1 1 200 2 205 3 201 4 0 6 300 7 Loading @@ -256,7 +262,6 @@ select * from t1 order by b; a b 1 1 200 2 205 3 201 4 300 7 301 8 Loading @@ -269,13 +274,12 @@ a b delete from t1 where a=0; update t1 set a=NULL where b=13; Warnings: Warning 1263 Data truncated; NULL supplied to NOT NULL column 'a' at row 10 Warning 1263 Data truncated; NULL supplied to NOT NULL column 'a' at row 9 update t1 set a=500 where b=14; select * from t1 order by b; a b 1 1 200 2 205 3 201 4 300 7 301 8 Loading
mysql-test/t/auto_increment.test +5 −0 Original line number Diff line number Diff line Loading @@ -140,6 +140,11 @@ insert into t1(b)values(7); select * from t1 order by b; alter table t1 modify b mediumint; select * from t1 order by b; create table t2 (a int); insert t2 values (1),(2); alter table t2 add b int auto_increment primary key; select * from t2; drop table t2; delete from t1 where a=0; update t1 set a=0 where b=5; select * from t1 order by b; Loading
sql/sql_table.cc +13 −6 Original line number Diff line number Diff line Loading @@ -3271,13 +3271,12 @@ copy_data_between_tables(TABLE *from,TABLE *to, ha_rows *deleted) { int error; Copy_field *copy,*copy_end; Copy_field *copy,*copy_end, *next_field; ulong found_count,delete_count; THD *thd= current_thd; uint length; SORT_FIELD *sortorder; READ_RECORD info; Field *next_field; TABLE_LIST tables; List<Item> fields; List<Item> all_fields; Loading @@ -3298,9 +3297,14 @@ copy_data_between_tables(TABLE *from,TABLE *to, { def=it++; if (def->field) { if (*ptr == to->next_number_field) next_field= copy_end; (copy_end++)->set(*ptr,def->field,0); } } found_count=delete_count=0; if (order) Loading Loading @@ -3343,7 +3347,6 @@ copy_data_between_tables(TABLE *from,TABLE *to, if (handle_duplicates == DUP_IGNORE || handle_duplicates == DUP_REPLACE) to->file->extra(HA_EXTRA_IGNORE_DUP_KEY); next_field=to->next_number_field; thd->row_count= 0; while (!(error=info.read_record(&info))) { Loading @@ -3354,10 +3357,14 @@ copy_data_between_tables(TABLE *from,TABLE *to, break; } thd->row_count++; if (next_field) next_field->reset(); if (to->next_number_field) to->next_number_field->reset(); for (Copy_field *copy_ptr=copy ; copy_ptr != copy_end ; copy_ptr++) { if (copy_ptr == next_field) to->auto_increment_field_not_null= TRUE; copy_ptr->do_copy(copy_ptr); } if ((error=to->file->write_row((byte*) to->record[0]))) { if ((handle_duplicates != DUP_IGNORE && Loading