summaryrefslogtreecommitdiff
path: root/sql/unireg.cc
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.com>2020-05-22 14:22:45 +0400
committerAlexander Barkov <bar@mariadb.com>2020-05-22 14:22:45 +0400
commitbdab5b667ea5920e925f61329beb825f8c0829cd (patch)
tree6b312b5f567527e29aeabd709642cd2e955c1213 /sql/unireg.cc
parent450a5b33a22efc78dabc0df3f6b7544bddc44662 (diff)
parentcb9c49a9b20dd8d1eee39641176134e207a4d84f (diff)
downloadmariadb-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.cc23
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++;
}