Commit 2585b193 authored by unknown's avatar unknown

Merge bk-internal.mysql.com:/home/bk/mysql-4.1/

into serg.mylan:/usr/home/serg/Abk/mysql-4.1
parents 35d7afbe fdc277c6
...@@ -201,6 +201,24 @@ a b ...@@ -201,6 +201,24 @@ a b
202 5 202 5
203 6 203 6
204 7 204 7
alter table t1 modify b mediumint;
select * from t1 order by b;
a b
1 1
200 2
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; delete from t1 where a=0;
update t1 set a=0 where b=5; update t1 set a=0 where b=5;
select * from t1 order by b; select * from t1 order by b;
......
...@@ -138,6 +138,13 @@ insert into t1(b)values(5); ...@@ -138,6 +138,13 @@ insert into t1(b)values(5);
insert into t1(b)values(6); insert into t1(b)values(6);
insert into t1(b)values(7); insert into t1(b)values(7);
select * from t1 order by b; 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; delete from t1 where a=0;
update t1 set a=0 where b=5; update t1 set a=0 where b=5;
select * from t1 order by b; select * from t1 order by b;
......
...@@ -38,7 +38,7 @@ class Field ...@@ -38,7 +38,7 @@ class Field
public: public:
static void *operator new(size_t size) {return (void*) sql_alloc((uint) size); } static void *operator new(size_t size) {return (void*) sql_alloc((uint) size); }
static void operator delete(void *ptr_arg, size_t size) { static void operator delete(void *ptr_arg, size_t size) {
#ifdef PEDANTIC_SAFEMALLOC #ifdef SAFEMALLOC
bfill(ptr_arg, size, 0x8F); bfill(ptr_arg, size, 0x8F);
#endif #endif
} }
......
...@@ -2587,7 +2587,7 @@ fill_record(List<Item> &fields,List<Item> &values, bool ignore_errors) ...@@ -2587,7 +2587,7 @@ fill_record(List<Item> &fields,List<Item> &values, bool ignore_errors)
Field *rfield= field->field; Field *rfield= field->field;
TABLE *table= rfield->table; TABLE *table= rfield->table;
if (rfield == table->next_number_field) if (rfield == table->next_number_field)
table->auto_increment_field_not_null= true; table->auto_increment_field_not_null= TRUE;
if ((value->save_in_field(rfield, 0) < 0) && !ignore_errors) if ((value->save_in_field(rfield, 0) < 0) && !ignore_errors)
DBUG_RETURN(1); DBUG_RETURN(1);
} }
...@@ -2608,7 +2608,7 @@ fill_record(Field **ptr,List<Item> &values, bool ignore_errors) ...@@ -2608,7 +2608,7 @@ fill_record(Field **ptr,List<Item> &values, bool ignore_errors)
value=v++; value=v++;
TABLE *table= field->table; TABLE *table= field->table;
if (field == table->next_number_field) if (field == table->next_number_field)
table->auto_increment_field_not_null= true; table->auto_increment_field_not_null= TRUE;
if ((value->save_in_field(field, 0) < 0) && !ignore_errors) if ((value->save_in_field(field, 0) < 0) && !ignore_errors)
DBUG_RETURN(1); DBUG_RETURN(1);
} }
......
...@@ -19,9 +19,9 @@ ...@@ -19,9 +19,9 @@
#pragma interface /* gcc class implementation */ #pragma interface /* gcc class implementation */
#endif #endif
/* mysql standard class memoryallocator */ /* mysql standard class memory allocator */
#ifdef PEDANTIC_SAFEMALLOC #ifdef SAFEMALLOC
#define TRASH(XX,YY) bfill((XX), (YY), 0x8F) #define TRASH(XX,YY) bfill((XX), (YY), 0x8F)
#else #else
#define TRASH(XX,YY) /* no-op */ #define TRASH(XX,YY) /* no-op */
......
...@@ -3271,13 +3271,12 @@ copy_data_between_tables(TABLE *from,TABLE *to, ...@@ -3271,13 +3271,12 @@ copy_data_between_tables(TABLE *from,TABLE *to,
ha_rows *deleted) ha_rows *deleted)
{ {
int error; int error;
Copy_field *copy,*copy_end; Copy_field *copy,*copy_end, *next_field;
ulong found_count,delete_count; ulong found_count,delete_count;
THD *thd= current_thd; THD *thd= current_thd;
uint length; uint length;
SORT_FIELD *sortorder; SORT_FIELD *sortorder;
READ_RECORD info; READ_RECORD info;
Field *next_field;
TABLE_LIST tables; TABLE_LIST tables;
List<Item> fields; List<Item> fields;
List<Item> all_fields; List<Item> all_fields;
...@@ -3298,7 +3297,12 @@ copy_data_between_tables(TABLE *from,TABLE *to, ...@@ -3298,7 +3297,12 @@ copy_data_between_tables(TABLE *from,TABLE *to,
{ {
def=it++; def=it++;
if (def->field) if (def->field)
{
if (*ptr == to->next_number_field)
next_field= copy_end;
(copy_end++)->set(*ptr,def->field,0); (copy_end++)->set(*ptr,def->field,0);
}
} }
found_count=delete_count=0; found_count=delete_count=0;
...@@ -3334,7 +3338,7 @@ copy_data_between_tables(TABLE *from,TABLE *to, ...@@ -3334,7 +3338,7 @@ copy_data_between_tables(TABLE *from,TABLE *to,
error= 1; error= 1;
goto err; goto err;
} }
/* Handler must be told explicitly to retrieve all columns, because /* Handler must be told explicitly to retrieve all columns, because
this function does not set field->query_id in the columns to the this function does not set field->query_id in the columns to the
current query id */ current query id */
...@@ -3343,7 +3347,6 @@ copy_data_between_tables(TABLE *from,TABLE *to, ...@@ -3343,7 +3347,6 @@ copy_data_between_tables(TABLE *from,TABLE *to,
if (handle_duplicates == DUP_IGNORE || if (handle_duplicates == DUP_IGNORE ||
handle_duplicates == DUP_REPLACE) handle_duplicates == DUP_REPLACE)
to->file->extra(HA_EXTRA_IGNORE_DUP_KEY); to->file->extra(HA_EXTRA_IGNORE_DUP_KEY);
next_field=to->next_number_field;
thd->row_count= 0; thd->row_count= 0;
while (!(error=info.read_record(&info))) while (!(error=info.read_record(&info)))
{ {
...@@ -3354,10 +3357,14 @@ copy_data_between_tables(TABLE *from,TABLE *to, ...@@ -3354,10 +3357,14 @@ copy_data_between_tables(TABLE *from,TABLE *to,
break; break;
} }
thd->row_count++; thd->row_count++;
if (next_field) if (to->next_number_field)
next_field->reset(); to->next_number_field->reset();
for (Copy_field *copy_ptr=copy ; copy_ptr != copy_end ; copy_ptr++) 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); copy_ptr->do_copy(copy_ptr);
}
if ((error=to->file->write_row((byte*) to->record[0]))) if ((error=to->file->write_row((byte*) to->record[0])))
{ {
if ((handle_duplicates != DUP_IGNORE && if ((handle_duplicates != DUP_IGNORE &&
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment