|
|
|
@ -248,6 +248,25 @@ static void do_outer_field_null(Copy_field *copy) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/*
|
|
|
|
Copy: (not-NULL field in table that can be NULL-complemented) -> (not-NULL |
|
|
|
field) |
|
|
|
*/ |
|
|
|
static void do_copy_nullable_row_to_notnull(Copy_field *copy) |
|
|
|
{ |
|
|
|
if (*copy->null_row || |
|
|
|
(copy->from_null_ptr && (*copy->from_null_ptr & copy->from_bit))) |
|
|
|
{ |
|
|
|
copy->to_field->set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, |
|
|
|
WARN_DATA_TRUNCATED, 1); |
|
|
|
copy->to_field->reset(); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
(copy->do_copy2)(copy); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/* Copy: (NULL-able field) -> (not NULL-able field) */ |
|
|
|
static void do_copy_not_null(Copy_field *copy) |
|
|
|
@ -637,10 +656,18 @@ void Copy_field::set(Field *to,Field *from,bool save) |
|
|
|
do_copy= do_copy_timestamp; // Automatic timestamp
|
|
|
|
else if (to_field == to_field->table->next_number_field) |
|
|
|
do_copy= do_copy_next_number; |
|
|
|
else |
|
|
|
{ |
|
|
|
if (!from_null_ptr) |
|
|
|
{ |
|
|
|
null_row= &from->table->null_row; |
|
|
|
do_copy= do_copy_nullable_row_to_notnull; |
|
|
|
} |
|
|
|
else |
|
|
|
do_copy= do_copy_not_null; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else if (to_field->real_maybe_null()) |
|
|
|
{ |
|
|
|
to_null_ptr= to->null_ptr; |
|
|
|
|