Commit baffd9ad authored by marko@hundin.mysql.fi's avatar marko@hundin.mysql.fi

After review fixes (Bug #5682)

parent 612e0661
...@@ -354,6 +354,7 @@ dtype_get_fixed_size( ...@@ -354,6 +354,7 @@ dtype_get_fixed_size(
case DATA_INT: case DATA_INT:
case DATA_FLOAT: case DATA_FLOAT:
case DATA_DOUBLE: case DATA_DOUBLE:
return(dtype_get_len(type));
case DATA_MYSQL: case DATA_MYSQL:
if (type->prtype & DATA_BINARY_TYPE) { if (type->prtype & DATA_BINARY_TYPE) {
return(dtype_get_len(type)); return(dtype_get_len(type));
...@@ -438,6 +439,7 @@ dtype_get_min_size( ...@@ -438,6 +439,7 @@ dtype_get_min_size(
case DATA_INT: case DATA_INT:
case DATA_FLOAT: case DATA_FLOAT:
case DATA_DOUBLE: case DATA_DOUBLE:
return(type->len);
case DATA_MYSQL: case DATA_MYSQL:
if ((type->prtype & DATA_BINARY_TYPE) if ((type->prtype & DATA_BINARY_TYPE)
|| type->mbminlen == type->mbmaxlen) { || type->mbminlen == type->mbmaxlen) {
...@@ -446,6 +448,7 @@ dtype_get_min_size( ...@@ -446,6 +448,7 @@ dtype_get_min_size(
/* this is a variable-length character set */ /* this is a variable-length character set */
ut_a(type->mbminlen > 0); ut_a(type->mbminlen > 0);
ut_a(type->mbmaxlen > type->mbminlen); ut_a(type->mbmaxlen > type->mbminlen);
ut_a(type->len % type->mbmaxlen == 0);
return(type->len * type->mbminlen / type->mbmaxlen); return(type->len * type->mbminlen / type->mbmaxlen);
case DATA_VARCHAR: case DATA_VARCHAR:
case DATA_BINARY: case DATA_BINARY:
......
...@@ -2233,7 +2233,9 @@ row_sel_field_store_in_mysql_format( ...@@ -2233,7 +2233,9 @@ row_sel_field_store_in_mysql_format(
are not in themselves stored here: the caller must are not in themselves stored here: the caller must
allocate and copy the BLOB into buffer before, and pass allocate and copy the BLOB into buffer before, and pass
the pointer to the BLOB in 'data' */ the pointer to the BLOB in 'data' */
const mysql_row_templ_t* templ, /* in: MySQL column template */ const mysql_row_templ_t* templ, /* in: MySQL column template.
Its following fields are referenced:
type, is_unsigned, mysql_col_len, mbminlen, mbmaxlen */
byte* data, /* in: data to store */ byte* data, /* in: data to store */
ulint len) /* in: length of the data */ ulint len) /* in: length of the data */
{ {
...@@ -2280,16 +2282,17 @@ row_sel_field_store_in_mysql_format( ...@@ -2280,16 +2282,17 @@ row_sel_field_store_in_mysql_format(
row_mysql_store_blob_ref(dest, templ->mysql_col_len, row_mysql_store_blob_ref(dest, templ->mysql_col_len,
data, len); data, len);
} else { } else if (templ->type == DATA_MYSQL) {
memcpy(dest, data, len); memcpy(dest, data, len);
ut_ad(templ->mysql_col_len >= len); ut_a(templ->mysql_col_len >= len);
ut_ad(templ->mbmaxlen >= templ->mbminlen); ut_a(templ->mbmaxlen >= templ->mbminlen);
ut_ad(templ->mbmaxlen > templ->mbminlen ut_a(templ->mbmaxlen > templ->mbminlen
|| templ->mysql_col_len == len); || templ->mysql_col_len == len);
ut_ad(!templ->mbmaxlen ut_a(!templ->mbmaxlen
|| !(templ->mysql_col_len % templ->mbmaxlen)); || !(templ->mysql_col_len % templ->mbmaxlen));
ut_a(len * templ->mbmaxlen >= templ->mysql_col_len);
if (templ->mbminlen != templ->mbmaxlen) { if (templ->mbminlen != templ->mbmaxlen) {
/* Pad with spaces. This undoes the stripping /* Pad with spaces. This undoes the stripping
...@@ -2297,6 +2300,16 @@ row_sel_field_store_in_mysql_format( ...@@ -2297,6 +2300,16 @@ row_sel_field_store_in_mysql_format(
row_mysql_store_col_in_innobase_format(). */ row_mysql_store_col_in_innobase_format(). */
memset(dest + len, 0x20, templ->mysql_col_len - len); memset(dest + len, 0x20, templ->mysql_col_len - len);
} }
} else {
ut_a(templ->type == DATA_CHAR
|| templ->type == DATA_FIXBINARY
/*|| templ->type == DATA_SYS_CHILD
|| templ->type == DATA_SYS*/
|| templ->type == DATA_FLOAT
|| templ->type == DATA_DOUBLE
|| templ->type == DATA_DECIMAL);
ut_ad(templ->mysql_col_len == len);
memcpy(dest, data, len);
} }
} }
......
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