diff options
author | Alexander Barkov <bar@mariadb.com> | 2020-05-22 14:22:45 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.com> | 2020-05-22 14:22:45 +0400 |
commit | bdab5b667ea5920e925f61329beb825f8c0829cd (patch) | |
tree | 6b312b5f567527e29aeabd709642cd2e955c1213 /sql/unireg.cc | |
parent | 450a5b33a22efc78dabc0df3f6b7544bddc44662 (diff) | |
parent | cb9c49a9b20dd8d1eee39641176134e207a4d84f (diff) | |
download | mariadb-git-bdab5b667ea5920e925f61329beb825f8c0829cd.tar.gz |
Merge remote-tracking branch 'origin/10.1' into 10.2
Diffstat (limited to 'sql/unireg.cc')
-rw-r--r-- | sql/unireg.cc | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/sql/unireg.cc b/sql/unireg.cc index 7b67a07d9a6..083960523c1 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -594,6 +594,18 @@ static bool pack_vcols(String *buf, List<Create_field> &create_fields, } +static uint typelib_values_packed_length(const TYPELIB *t) +{ + uint length= 0; + for (uint i= 0; t->type_names[i]; i++) + { + length+= t->type_lengths[i]; + length++; /* Separator */ + } + return length; +} + + /* Make formheader */ static bool pack_header(THD *thd, uchar *forminfo, @@ -686,9 +698,8 @@ static bool pack_header(THD *thd, uchar *forminfo, field->interval_id=get_interval_id(&int_count,create_fields,field); if (old_int_count != int_count) { - for (const char **pos=field->interval->type_names ; *pos ; pos++) - int_length+=(uint) strlen(*pos)+1; // field + suffix prefix - int_parts+=field->interval->count+1; + int_length+= typelib_values_packed_length(field->interval); + int_parts+= field->interval->count + 1; } } if (f_maybe_null(field->pack_flag)) @@ -777,11 +788,7 @@ static size_t packed_fields_length(List<Create_field> &create_fields) { int_count= field->interval_id; length++; - for (int i=0; field->interval->type_names[i]; i++) - { - length+= field->interval->type_lengths[i]; - length++; - } + length+= typelib_values_packed_length(field->interval); length++; } |