diff options
Diffstat (limited to 'sql/unireg.cc')
-rw-r--r-- | sql/unireg.cc | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/sql/unireg.cc b/sql/unireg.cc index 60674b8390b..f08c64a3182 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -55,10 +55,12 @@ static bool make_empty_rec(THD *thd, int file, enum legacy_db_type table_type, struct Pack_header_error_handler: public Internal_error_handler { - virtual bool handle_error(uint sql_errno, - const char *message, - MYSQL_ERROR::enum_warning_level level, - THD *thd); + virtual bool handle_condition(THD *thd, + uint sql_errno, + const char* sqlstate, + MYSQL_ERROR::enum_warning_level level, + const char* msg, + MYSQL_ERROR ** cond_hdl); bool is_handled; Pack_header_error_handler() :is_handled(FALSE) {} }; @@ -66,11 +68,14 @@ struct Pack_header_error_handler: public Internal_error_handler bool Pack_header_error_handler:: -handle_error(uint sql_errno, - const char * /* message */, - MYSQL_ERROR::enum_warning_level /* level */, - THD * /* thd */) +handle_condition(THD *, + uint sql_errno, + const char*, + MYSQL_ERROR::enum_warning_level, + const char*, + MYSQL_ERROR ** cond_hdl) { + *cond_hdl= NULL; is_handled= (sql_errno == ER_TOO_MANY_FIELDS); return is_handled; } @@ -796,20 +801,27 @@ static bool pack_fields(File file, List<Create_field> &create_fields, recpos= field->offset+1 + (uint) data_offset; int3store(buff+5,recpos); int2store(buff+8,field->pack_flag); - int2store(buff+10,field->unireg_check); + DBUG_ASSERT(field->unireg_check < 256); + buff[10]= (uchar) field->unireg_check; buff[12]= (uchar) field->interval_id; buff[13]= (uchar) field->sql_type; if (field->sql_type == MYSQL_TYPE_GEOMETRY) { + buff[11]= 0; buff[14]= (uchar) field->geom_type; #ifndef HAVE_SPATIAL DBUG_ASSERT(0); // Should newer happen #endif } else if (field->charset) + { + buff[11]= (uchar) (field->charset->number >> 8); buff[14]= (uchar) field->charset->number; + } else - buff[14]= 0; // Numerical + { + buff[11]= buff[14]= 0; // Numerical + } int2store(buff+15, field->comment.length); comment_length+= field->comment.length; set_if_bigger(int_count,field->interval_id); |