Commit 369ab135 authored by unknown's avatar unknown

making InnoDB to return the row exactly the same (bytewise) as it was written to it

parent 4a21b30e
...@@ -2069,7 +2069,7 @@ row_sel_store_mysql_rec( ...@@ -2069,7 +2069,7 @@ row_sel_store_mysql_rec(
ulint len; ulint len;
byte* blob_buf; byte* blob_buf;
ulint i; ulint i;
ut_ad(prebuilt->mysql_template); ut_ad(prebuilt->mysql_template);
if (prebuilt->blob_heap != NULL) { if (prebuilt->blob_heap != NULL) {
...@@ -2077,9 +2077,9 @@ row_sel_store_mysql_rec( ...@@ -2077,9 +2077,9 @@ row_sel_store_mysql_rec(
prebuilt->blob_heap = NULL; prebuilt->blob_heap = NULL;
} }
/* Mark all columns as not SQL NULL */ /* Mark all columns as SQL NULL */
memset(mysql_rec, '\0', prebuilt->null_bitmap_len); memset(mysql_rec, 255, prebuilt->null_bitmap_len);
for (i = 0; i < prebuilt->n_template; i++) { for (i = 0; i < prebuilt->n_template; i++) {
...@@ -2134,16 +2134,21 @@ row_sel_store_mysql_rec( ...@@ -2134,16 +2134,21 @@ row_sel_store_mysql_rec(
data = blob_buf; data = blob_buf;
} }
row_sel_field_store_in_mysql_format( row_sel_field_store_in_mysql_format(
mysql_rec + templ->mysql_col_offset, mysql_rec + templ->mysql_col_offset,
templ->mysql_col_len, data, len, templ->mysql_col_len, data, len,
templ->type, templ->is_unsigned); templ->type, templ->is_unsigned);
if (extern_field_heap) { if (extern_field_heap) {
mem_heap_free(extern_field_heap); mem_heap_free(extern_field_heap);
extern_field_heap = NULL; extern_field_heap = NULL;
} }
if (templ->mysql_null_bit_mask) {
mysql_rec[templ->mysql_null_byte_offset] &=
~(byte) (templ->mysql_null_bit_mask);
}
} else { } else {
/* MySQL seems to assume the field for an SQL NULL /* MySQL seems to assume the field for an SQL NULL
value is set to zero. Not taking this into account value is set to zero. Not taking this into account
...@@ -2151,19 +2156,13 @@ row_sel_store_mysql_rec( ...@@ -2151,19 +2156,13 @@ row_sel_store_mysql_rec(
bug number 154 in the MySQL bug database: GROUP BY bug number 154 in the MySQL bug database: GROUP BY
and DISTINCT could treat NULL values inequal. */ and DISTINCT could treat NULL values inequal. */
memset(mysql_rec + templ->mysql_col_offset, '\0', memset(mysql_rec + templ->mysql_col_offset,
((templ->type == DATA_VARCHAR ||
templ->type == DATA_VARMYSQL ||
templ->type == DATA_BINARY) ? ' ' : '\0'),
templ->mysql_col_len); templ->mysql_col_len);
if (!templ->mysql_null_bit_mask) {
fprintf(stderr,
"InnoDB: Error: trying to return an SQL NULL field in a non-null\n"
"innoDB: column! Table name %s\n", prebuilt->table->name);
} else {
mysql_rec[templ->mysql_null_byte_offset] |=
(byte) (templ->mysql_null_bit_mask);
}
} }
} }
return(TRUE); return(TRUE);
} }
......
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