comparing uninitialized values.
dict_mem_table_create(): Initialize table->version_number.
ins_node_create(): Initialize node->table_version_number.
row_create_prebuilt(): Initialize all fields. Initialize most fields
by memset(), so that any fields that are added will be initialized
automatically.
row_merge_buf_add(): Correctly calculate buf->total_size.
row_merge_buf_write(): Add an assertion about buf->total_size.
row_merge_heap_create(), row_merge_read_rec(), row_merge_insert_index_tuples():
offsets needs to be 1 + REC_OFFS_HEADER_SIZE + n_fields. Previously, we
allocated one element too little.
row_merge_blocks(): Use goto instead of break in the AT_END argument
of ROW_MERGE_WRITE_GET_NEXT.
single os_mem_alloc_large() call. The function mem_alloc() that was
used previously allocates unaligned memory.
row_merge_blocks(): Replace block1, block2, block3 with a single array.
Replace buf1, buf2, buf3 with buf[3]. Replace b1..b3 with b0..b2.
Replace mrec1,2 with mrec0,1. Replace offsets1,2 with offsets0,1.
row_merge(), row_merge_sort(): Replace block1, block2, block3 with a
single array.
The creation of the primary key does not work. We will have to flag
externally stored columns and copy the externally stored part from
the old table.
row_build_index_for_mysql(): Rename to row_merge_build_indexes().
Move from row0mysql.c to row0merge.c.
Remove private declarations from row0merge.h. Make many functions static
in row0merge.c.
cmp_rec_rec_simple(): A new comparison function.
dict_index_get_min_size(): New function.
OS_FILE_FROM_FD(fd): A macro for converting from int to os_file_t.
rec_convert_dtuple_to_rec_comp(): Make the interface lower-level.
rec_get_converted_size_comp(): Return also extra_size.
UT_SORT_FUNCTION_BODY(): Remove reference to an obsolete test program.
row_rec_to_index_entry_low(): New function.
row0merge.c: Implement merge sort based on file streams instead of
fixed-size blocks. Sort the small blocks as arrays of dfield_t*,
because it is faster than invoking rec_get_offsets() for every
comparison.
row_merge_mark_prebuilt_obsolete(): Rename to row_prebuilt_table_obsolete()
and move from row0merge.c to row0mysql.c. Remove the parameter trx.
row_merge_print_table(): Remove.
row_remove_indexes_for_mysql(): Rename to row_merge_drop_indexes(),
move from row0mysql.c to row0merge.c and make the return type void.
row_merge_remove_index(): Rename to row_merge_drop_index() and make
the return type void.
Replace row0merge.h with row0mysql.h.
Remove redundant test trx->dict_operation_lock_mode == 0.
Fix typos in comments.
row_undo_ins(): Make the function more similar to the one in trunk.
the insert buffer bitmap.
ibuf_set_free_bits_func(): Never disable redo logging.
ibuf_update_free_bits_zip(): Remove.
btr_page_reorganize_low(), page_zip_reorganize(): Do not update the insert
buffer bitmap. Instead, document that callers will have to take care of it,
and adapt the callers.
btr_compress(): On error, reset the insert buffer free bits.
btr_cur_insert_if_possible(): Do not modify the insert buffer bitmap.
btr_compress(), btr_cur_optimistic_insert(): On compressed pages,
reset the insert buffer bitmap. Document why.
btr_cur_update_alloc_zip(): Document why it is necessary and sufficient
to reset the insert buffer free bits.
btr_cur_update_in_place(), btr_cur_optimistic_update(),
btr_cur_pessimistic_update(): Update the free bits in the same
mini-transaction. Document that the mini-transaction must be
committed before latching any further pages. Verify that this
is the case in all execution paths.
row_ins_sec_index_entry_by_modify(), row_ins_clust_index_entry_by_modify(),
row_undo_mod_clust_low(): Because these functions call
btr_cur_update_in_place(), btr_cur_optimistic_update(), or
btr_cur_pessimistic_update(), document that the mini-transaction must be
committed before latching any further pages. Verify that this is the case
in all execution paths.
was broken in one of the earlier cleanups.
row_merge_block_merge(): Remove the variable "selected". Clear the record
count of new_block1 and new_block2. Anticipate the right return values
from row_merge_cmp().
in r1445. They are needed after all, but apparently the tests do not
actually verify that the records are sorted. (Also, a buffer overflow
will occur in index_merge_innodb.test if MERGE_BLOCK_SIZE is made smaller.)
dict_index_is_unique(): New function.
row_merge_rec_fits_to_block(), row_merge_store_rec_to_block():
Add const qualifiers to rec, offsets.
row_merge_select(): Rename to row_merge_cmp(), simplify the interface.
row_merge_sort_linked_list(): Change the return type to ibool.
Replace sec_offs1,sec_offs2 with offsets1,offsets2. Replace offset_heap
with heap. Define a func_exit label.
row_merge_block_merge(): Reduce the scope of rec_offsets.
and os_file_write(), and return DB_CORRUPTION when they fail. Minor cleanup.
row_mege_insert_index_tuples(): Use a shared heap for dtuple and rec.
Use fewer gotos.
row_merge_sort_linked_list_in_disk(): Free the merge blocks at error exit.
row_merge_read(), row_merge_write(): Add UNIV_LIKELY hints.
row_merge_sort_linked_list_in_disk(): Reduce the scope of many variables.
Eliminate the variable "selected".
Replace byte offsets of type dulint with block offsets of type ulint.
Avoid references to MERGE_BLOCK_SIZE.
Improve the language of some comments.
row_merge_insert_index_tuples(), row_merge_sort_linked_list_in_disk():
Make the offset a ulint.
row_merge_read(), row_merge_write(): Helper functions. Return the
status of os_file_read() and os_file_write(). TO DO: check the status
in the callers.
innobase_create_temporary_tablename(): Add static qualifier. Allocate
the memory from heap. Return a fixed identifier.
ha_innobase::add_index(): Allocate all memory from a single heap.
Simplify error handling. Use a fixed prefix for temporary table names,
because only one add_index() can be active for a given table.
mem_heap_empty_noninline(): New function, to be called from ha_innodb.cc.
row_build_index_for_mysql(): Remove the parameter new_primary.
Move more definitions from row0mysql.h to row0mysql.c. Remove the
unused definition of merge_thread.
merge_index_def_t: Replace merge_index_field_t** with merge_index_field_t*.
Use mem_heap_strdup() when copying strings.
ha_innobase::add_index(): Avoid excessive use of current_thd.
assignments. A memory leak remains at "goto error_handling": the memory
allocated with row_merge_block_create() in the beginning of this function
will not be freed.
Define the merge_rec_ structures in row0merge.c instead of
row0merge.h. They are not used in the interface defined in row0merge.h.
row_merge_create_file_structure(): Rename to row_merge_file_create().
Input a pointer to a pre-allocated block of memory.
row_merge_read_clustered_index(): Replace merge_file_t** with merge_file_t*.
row_merge_sort_and_insert_thread(): Remove the declaration.
This function was never defined or called.
row_merge_is_index_usable(): Correct the formatting.
row_build_index_for_mysql(): Allocate an array of merge_file_t instead
of an array of pointers to merge_file_t.
innodb.test: The error code 1540 has been renumbered to 1542.
innodb.result: Adjust the expected value of Innodb_buffer_pool_pages_total.
Something may have changed in the BLOB handling in branches/zip.
ha_innodb.cc: Add ha_innobase:: prefix to some DBUG_ENTER macros.
row_merge_create_temporary_table(): Free the heap only after invoking
row_create_table_for_mysql(). The table->col_names points to the heap
until the system columns are added by row_create_table_for_mysql().
TODO: use the filename-safe encoding in temporary table names. Test
extensively under Valgrind and fix all errors found. Eliminate
merge_rec_t and rewrite row0merge.c to write the records directly to
the merge blocks.
dict_truncate_index_tree(): Add the parameter space for specifying the
new tablespace identifier of a single-table tablespace that has been
recreated. When SYS_INDEXES.PAGE_NO == FIL_NULL, do not abort but
create the index tree.
fil_discard_tablespace(): Pass the return code from fil_delete_tablespace().
row_truncate_table_for_mysql(): Attempt to discard and recreate
single-table tablespaces. Reassign the tablespace identifier both in
the data dictionary (SYS_TABLES and SYS_INDEXES) and in the data
dictionary cache.
Previously, when big_rec was returned, the fields would point to
freed memory. The memory heap was allocated locally, and the data tuple
was allocated from the heap, and the big_rec would point to some fields
in the data tuple.
row_ins_clust_index_entry_by_modify(): Add parameter heap,
for the same reason.
buf_page_get_gen(). This saves one mutex operation per block request.
buf_page_get_gen(), various macros and functions: Add parameter zip_size.
btr_node_ptr_get_child(): Add parameter index.
fil_space_get_latch(): Add optional output parameter zip_size.
fil_space_get_zip_size(): Return 0 for space id==0, because the
system tablespace is never compressed.
fsp_header_init(): Remove the parameter zip_size.
ibuf_free_excess_pages(): Remove the parameter zip_size.
trx_rseg_t, trx_undo_t: Add field zip_size.
xdes_lst_get_next(): Remove, unused.
introduced ib_longlong and %ll length specifier are not C89.)
row_ext_t: Change char* buf to byte* buf to avoid signedness warnings.
Change the type of all bit fields to unsigned.
rec_get_next_ptr(): Add (byte*) casts to avoid arithmetics on void*.
page_zip_decompress_clust(): Do not mix declarations and code.
Do not break the latching order in TRUNCATE TABLE.
dict_truncate_index_tree(): Replace parameter rec_t* rec with
btr_pcur_t* pcur. Reposition pcur before calling btr_create().
sync_thread_add_level(): Remove the relaxation of the assertion added in r968.