rec_print_comp(): New function, sliced from rec_print_new().
rec_print_old(), rec_print_comp(): Print the untruncated length of the column.
row_merge_print_read, row_merge_print_write, row_merge_print_cmp:
New flags, to enable debug printout in UNIV_DEBUG builds.
row_merge_tuple_print(): New function for UNIV_DEBUG builds.
row_merge_read_rec(): Obey row_merge_print_read.
row_merge_buf_write(), row_merge_write_rec_low(),
row_merge_write_eof(): Obey row_merge_print_write.
row_merge_cmp(): Obey row_merge_print_cmp.
in fast index creation.
row_merge_write_eof(), row_merge_buf_write(): When UNIV_DEBUG_VALGRIND
is defined, fill the rest of the block (after the end-of-block marker)
with 0xff.
innodb_lock_waits. See
https://svn.innodb.com/innobase/InformationSchema/TransactionsAndLocks
for design notes.
Things that need to be resolved before this goes live:
* MySQL must add thd_get_thread_id() function to their code
http://bugs.mysql.com/30930
* Allocate memory from mem_heap instead of using mem_alloc()
* Copy table name and index name into the cache because they may be
freed later which will result in referencing freed memory
Approved by: Marko
row_merge_read_rec(): Correct a typo in a comment. Fix error in
arithmetics when the record spans two blocks.
row_merge_write_rec_low(): Add a "size" parameter. Add debug assertions
about extra_size and size.
row_merge_write_rec(): After writing a record, properly advance the
buffer pointer.
that row_merge_blocks() will have some work to do when
row_merge_block_t is shrunk to 8192 bytes.
Currently, this will cause a debug assertion failure, because
row_merge_cmp() is considering all columns, not just the unique ones.
existed before the fast-index-creation code was merged, in r1414.
Do not call row_prebuilt_table_obsolete(innodb_table) until after
the table has been renamed to a temporary name. Otherwise, the
following could happen when creating a clustered index on table T:
(a1) copy T to T#1
(a2) mark T obsolete
(b1) add the name of T to the background drop list
(a3) rename T to T#2 and T#1 to T
(b2) drop the table on the background
These steps are executed by two threads, a and b.
If b1 is executed after a3, all is fine: the name T#2 will be added
to the background drop list. If b1 is executed before a3, the name
T will be added, and T#2 will survive.
row_add_table_to_background_drop_list(): Replace the dict_table_t*
parameter with const char* (the table name).
row_check_table_for_mysql(): Replace prebuilt->table with table.
fast index creation.
innobase_convert_tablename(): New function, to remove the filename
encoding of a database and table name.
ha_innobase::add_index(): Invoke innobase_convert_tablename() before
calling my_error().
innodb-index.result: Update the error messages.
UNIV_MEM_ASSERT_RW(): New macro, to check that the contents of a memory
area is defined.
UNIV_MEM_ASSERT_W(): New macro, to check that a memory area is writable.
UNIV_MEM_ASSERT_AND_FREE(): New macro, to check that the memory is
writable before declaring it free (unwritable). This replaces UNIV_MEM_FREE()
in many places.
mem_init_buf(): Declare the memory undefined.
mem_erase_buf(): Declare the memory freed.
trx_t: Remove dict_undo_list and dict_redo_list.
innobase_create_temporary_tablename(): Replace TEMP_TABLE_PREFIX with
a table name suffix "#1" or "#2". In this way, the user can restore
precious data, should anything go wrong. It is possible to reach an
inconsistent state, because the creation, deletion and renaming of
single-table tablespaces are not transactional.
ut_print_namel(), fil_make_ibd_name(), innobase_rename_table(): Remove
the special treatment of TEMP_TABLE_PREFIX.
Introduce TEMP_INDEX_PREFIX == 0xff for temporary indexes. This byte
cannot occur in index names since MySQL 4.1. However, it might have
been possible to use this byte in MySQL 4.0.
recv_recovery_from_checkpoint_finish(): Call the new function
row_merge_drop_temp_indexes(), to drop all indexes whose name starts
with the byte 0xff.
row_merge_rename_indexes(): Renamed from row_merge_rename_index().
Remove the parameter "index".
row_drop_table_for_mysql(): Unconditionally call trx_commit_for_mysql().
row_drop_table_for_mysql_no_commit(): Correct the function commit,
based on the corrected comment of row_drop_table_for_mysql(). Rely on
table->to_be_dropped instead of TEMP_TABLE_PREFIX.
ha_innobase::add_index(): Simplify the control flow.
is inline and accesses lock_t members.
As advised by Marko rename lock_get_type() to lock_get_type_low() and
create a public non-inline function lock_get_type() which calls
lock_get_type_low().
Approved by: Marko
row_drop_table_for_mysql() call with a call to
row_drop_table_for_mysql_no_commit(). The last parameter of
the function is ibool drop_db, not ibool do_commit. Also,
since r1790 of trunk it is not necessary to copy table->name.
Move lock_rec_find_set_bit() from lock0priv.h to lock0lock.h. This
function is needed in the INFORMATION_SCHEMA implementation which
currently resides in trx/
Approved by: Marko
#ifdef ROW_MERGE_IS_INDEX_USABLE, to avoid growing the memory
footprint until MySQL implements and calls the virtual method
handler::is_index_available() or something equivalent.
in fast index creation. The prefix was previously TEMP_TABLE_PREFIX == '/',
which may occur in index names.
ut_print_namel(): Do not assume that all '/' are separators between
database and table names.
of the InnoDB SQL parser.
pars_is_string_type(): New function. Returns TRUE iff mtype equals
DATA_VARCHAR, DATA_CHAR, DATA_FIXBINARY, or DATA_BINARY.
pars_resolve_func_data_type(): Replace checks for DATA_VARCHAR with
pars_is_string_type(). For example, the NAME column of SYS_INDEXES,
SYS_TABLES, and SYS_COLUMNS is of DATA_BINARY type, although it
contains a UTF-8 character string. This affects the functions
TO_NUMBER, BINARY_TO_NUMBER, LENGTH, INSTR, and SUBSTR.
created in fast index creation.
dict_load_indexes(): Always complain if the first index is not clustered.
lock_table_enqueue_waiting(): Always complain about lock waits in
a dictionary operation.
row_merge_rename_tables(): Add an assertion that dict_sys->mutex is
being held.
row_undo_mod_del_unmark_sec_and_undo_update(): Make the test about
temporary indexes more readable.
row_create_table_for_mysql(): Do not retry creating a temporary table
in fast index creation. Orphaned temporary tables will have to be dropped
in crash recovery.
row_upd_index_is_referenced(), row_upd_check_references_constraints(),
row_purge_parse_undo_rec(): Remove duplicated code that calls
row_mysql_unfreeze_data_dictionary().
row_undo_ins_remove_clust_rec():
Assert that the data dictionary is X-latched. Do not attempt to re-latch
the data dictionary, because doing so introduces race conditions. This
re-latching was probably made unnecessary already in r1676, which keeps
the data dictionary X-latched in ha_innobase::add_index() for the complete
duration of the data dictionary operations.
row_undo_ins_parse_undo_rec(): Do not attempt to acquire the data dictionary
latch. The data dictionary should be already X-latched when a transaction
that modifies system tables is rolled back. This also holds in the rollback
during crash recovery: trx_rollback_active() will X-latch the data dictionary
when needed.