diff options
author | serg@serg.mylan <> | 2003-09-08 16:55:30 +0200 |
---|---|---|
committer | serg@serg.mylan <> | 2003-09-08 16:55:30 +0200 |
commit | 503e7c930cfdd2e9cd79b2c21bdc17f1135095a8 (patch) | |
tree | 7505855418e76d1aade96342ced8e44b15fce9bf /innobase | |
parent | 32635549fcd7da44e14dee0aed0c74687cf8d459 (diff) | |
parent | 3d3f11f83254b3be969f13778587b7d0d8881ed3 (diff) | |
download | mariadb-git-503e7c930cfdd2e9cd79b2c21bdc17f1135095a8.tar.gz |
Merge
Diffstat (limited to 'innobase')
-rw-r--r-- | innobase/row/row0sel.c | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/innobase/row/row0sel.c b/innobase/row/row0sel.c index 81bbf5053c0..d0f6965f94e 100644 --- a/innobase/row/row0sel.c +++ b/innobase/row/row0sel.c @@ -2170,7 +2170,7 @@ row_sel_store_mysql_rec( ulint len; byte* blob_buf; ulint i; - + ut_ad(prebuilt->mysql_template); if (prebuilt->blob_heap != NULL) { @@ -2178,9 +2178,9 @@ row_sel_store_mysql_rec( 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++) { @@ -2235,16 +2235,21 @@ row_sel_store_mysql_rec( data = blob_buf; } - + row_sel_field_store_in_mysql_format( mysql_rec + templ->mysql_col_offset, templ->mysql_col_len, data, len, templ->type, templ->is_unsigned); if (extern_field_heap) { - mem_heap_free(extern_field_heap); + mem_heap_free(extern_field_heap); extern_field_heap = NULL; - } + } + + if (templ->mysql_null_bit_mask) { + mysql_rec[templ->mysql_null_byte_offset] &= + ~(byte) (templ->mysql_null_bit_mask); + } } else { /* MySQL seems to assume the field for an SQL NULL value is set to zero. Not taking this into account @@ -2252,19 +2257,13 @@ row_sel_store_mysql_rec( bug number 154 in the MySQL bug database: GROUP BY 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); - - 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); } |