Commit graph

938 commits

Author SHA1 Message Date
marko
37309546e0 branches/zip: Cast void* pointers to byte* when doing pointer arithmetics. 2007-10-25 07:03:02 +00:00
marko
c661970d75 branches/zip: Merge 1937:2015 from trunk. 2007-10-24 10:59:54 +00:00
marko
ddcf4f8d9c branches/zip: Remove some unnecessary memory references in the master thread.
srv_print_thread_releases, srv_print_lock_waits, srv_print_buf_io,
srv_print_log_io, srv_print_latch_waits: Define these variables as
constants (FALSE), unless UNIV_DEBUG is defined.  These variables
are never assigned to, and they are initialized to FALSE.  It could
be useful to set them when debugging InnoDB.

srv_slot_t: Fuse the fields type, in_use, suspended to a single machine word.

srv_meter[], srv_meter_low_water[], srv_meter_high_water[],
srv_meter_high_water2[], srv_meter_foreground[]: Enclose these arrays
inside #if 0.  The arrays are essentially constants that do not affect
the control flow.

enum srv_thread_type: New enum, to replace the #defines SRV_COM, ...
Enclose the unused values SRV_BUFFER, SRV_RECOVERY, SRV_INSERT
inside #if 0, so that some arrays and loops can be reduced.
2007-10-24 07:12:11 +00:00
marko
bd76717558 branches/zip: row_build_index_entry(): Correct a typo made in r2012. 2007-10-24 06:59:01 +00:00
marko
8bed4c4c3f branches/zip: Do not access the fields of dfield_t directly.
dfield_dup(): New function for duplicating the data pointed to by dfield_t.

dfield_set_len(), dfield_set_data(): Add Valgrind instrumentation.
2007-10-23 06:46:12 +00:00
marko
e101c352c2 branches/zip: row_rec_to_index_entry_low(): Remove a bogus assertion. 2007-10-22 10:23:13 +00:00
marko
8c57916af9 branches/zip: Fix bugs that were introduced in r1591.
row_upd_rec_in_place(): Correct a debug assertion.

row_upd_index_parse(): Initialize new_val with dfield_set_data() or
dfield_set_null().  This ensures that new_val->ext is initialized.
2007-10-22 09:57:43 +00:00
marko
9ebc9481e4 branches/zip: When seeking to a different B-tree page, update the cached
value of the block that the cursor points to.

row_ins_check_foreign_constraint(): Call btr_pcur_get_block() after
row_ins_foreign_check_on_constraint(), as it may reposition the cursor
on a different page.

row_ins_scan_sec_index_for_duplicate(): Call btr_pcur_get_block() on
every iteration of the loop.  Use do ... while instead of for (;;).
2007-10-22 08:34:12 +00:00
marko
8ab05ab1d2 branches/zip: Minor cleanup of B-tree cursor operations.
btr_pcur_get_rel_pos(): Add a const qualifier.

btr_pcur_get_btr_cur(), btr_pcur_get_page_cur(): btr_cur_get_page_cur():
Define as const-preserving macros.

btr_pcur_is_on_user_rec(), btr_pcur_is_after_last_on_page(),
btr_pcur_is_before_first_on_page(): Remove the unused parameter mtr.
Add a const qualifier.

btr_pcur_move_to_next_on_page(), btr_pcur_move_to_prev_on_page():
Remove the unused parameter mtr.

page_cur_search(): Add const qualifiers.

page_cur_get_page(), page_cur_is_before_first(), page_cur_is_after_last():
Add debug assertions.
2007-10-22 08:16:35 +00:00
marko
a2aac2f67c branches/zip: trx_set_dict_operation(): Allow a transition from
TRX_DICT_OP_TABLE to TRX_DICT_OP_TABLE.
2007-10-22 08:10:13 +00:00
marko
cd247197cd branches/zip: lock_sec_rec_read_check_and_lock(): Correct a typo in comment. 2007-10-22 07:49:54 +00:00
marko
d2f07538d1 branches/zip: trx_create(): Set trx->dict_operation directly, because
the assertion in trx_set_dict_operation() would read uninitialized data.
This mistake was made in r1998.
2007-10-22 07:02:02 +00:00
marko
db36183759 branches/zip: dict_truncate_index_tree(): When the index is not found in
the data dictionary cache, do not create the index tree.
2007-10-19 13:38:49 +00:00
marko
1561b414e1 branches/zip: Introduce two new dictionary operation modes for transactions.
enum trx_dict_op: dictionary operation modes

trx_get_dict_operation(), trx_set_dict_operation(): Accessors for
trx->dict_operation.

lock_table_enqueue_waiting(), lock_rec_enqueue_waiting(): Do not complain
about lock waits if the dictionary mode is TRX_DICT_OP_INDEX_MAY_WAIT.

row_merge_lock_table(): Remove the work-around for avoiding the warning
in lock_table_enqueue_waiting().

trx_undo_mark_as_dict_operation(): Do not write trx->table_id to the
undo log unless the dict_operation is TRX_DICT_OP_TABLE.

ha_innobase::add_index(): Set the dict_operation mode initially to
TRX_DICT_OP_INDEX_MAY_WAIT, then lock the table exclusively, and set the
mode to TRX_DICT_OP_INDEX, and optionally to TRX_DICT_OP_TABLE when
creating a temporary table.
2007-10-19 10:52:25 +00:00
marko
e6f452c7cd branches/zip: srv_suspend_mysql_thread(): Allow the transaction to
hold an X-latch to the data dictionary, to avoid an assertion failure
when a lock wait occurs in row_merge_lock_table().
2007-10-19 10:30:34 +00:00
marko
99f97f8c1d branches/zip: ha_innobase::add_index(): Lock the table before creating
any indexes.  Before this fix, other transactions could see the empty indexes
before we acquired the table lock.
2007-10-18 12:46:14 +00:00
marko
582c74c5f8 branches/zip: row_merge_lock_table(): Clear the trx->dict_operation flag
for the duration of the lock_table() call in order to avoid a bogus warning.
2007-10-18 09:18:18 +00:00
marko
d967aaa65b branches/zip: Remove const warnings reported by GCC 4.2.1.
page_cur_set_before_first(), page_cur_set_after_last(),
page_cur_position(): Add const qualifiers to buf_block_t and rec.
A better solution would be to define a const_page_cur_t and a
set of accessors, but it would lead to severe code duplication.

page_rec_get_n_recs_before(): Add const qualifiers.

page_dir_get_nth_slot(): Define as a const-preserving macro.

page_dir_slot_get_rec(), page_dir_slot_get_n_owned(),
page_dir_find_owner_slot(), page_check_dir(): Add const qualifiers.

page_rec_get_next_low(): Add const qualifiers.

page_rec_get_next_const(), page_rec_get_prev_const(): New functions,
based on the const-less page_rec_get_next() and page_rec_get_prev().

page_cur_get_page(), page_cur_get_block(), page_cur_get_page_zip(),
page_cur_get_rec(): Define as const-preserving macros.

page_cur_try_search_shortcut(), page_cur_search_with_match():
Add const qualifiers.

buf_page_get_mutex(): Add a const qualifier to buf_page_t*.

rec_get_next_ptr_const(): Const variant of rec_get_next_ptr().
2007-10-18 07:12:05 +00:00
marko
00b1b124f8 innodb-test: Allow Innodb_buffer_pool_pages_total to be 511 or 512.
The size of the buffer pool can be one page smaller than the requested
size when os_mem_alloc_large() returns something that is not
aligned by UNIV_PAGE_SIZE.  This test may still fail on systems with
a big os_large_page_size.
2007-10-18 06:58:39 +00:00
vasil
12729aea3c branches/zip:
Fix typo in comment.
2007-10-17 12:30:22 +00:00
marko
f372ed678c branches/zip: row_scan_and_check_index(): Remove the compiler warning
that tmp_heap is possibly uninitialized.  This was introduced in r1990.
2007-10-17 12:19:35 +00:00
marko
df4c733df7 branches/zip: Initialize dfield_t::ext as soon as possible. This should
fix the bugs introduced in r1591.

row_rec_to_index_entry_low(): Clear "n_ext".  Do not allow it to be NULL.
Add const qualifier to dict_index_t*.

row_rec_to_index_entry(): Add the parameters "offsets" and "n_ext".

btr_cur_optimistic_update(): Add an assertion that there are no externally
stored columns.  Remove the unreachable call to btr_cur_unmark_extern_fields()
and the preceding unnecessary call to rec_get_offsets().

btr_push_update_extern_fields(): Remove the parameters index, offsets.
Only report the additional externally stored columns of the update vector.

row_build(), trx_undo_rec_get_partial_row(): Flag externally stored columns
also with dfield_set_ext().

rec_copy_prefix_to_dtuple(): Assert that there are no externally stored
columns in the prefix.

row_build_row_ref(): Note and assert that the index is a secondary index,
and assert that there are no externally stored columns.

row_build_row_ref_fast(): Assert that there are no externally stored columns.

rec_offs_get_n_alloc(): Expose the function.

row_build_row_ref_in_tuple(): Assert that there are no externally stored
columns in a record of a secondary index.

row_build_row_ref_from_row(): Assert that there are no externally stored
columns.

row_upd_check_references_constraints(): Add the parameter offsets, to
avoid a redundant call to rec_get_offsets().

row_upd_del_mark_clust_rec(): Add the parameter offsets.  Remove
duplicated code.

row_ins_index_entry_set_vals(): Copy the external storage flag.

sel_pop_prefetched_row(): Assert that there are no externally stored
columns.

row_scan_and_check_index(): Copy offsets to a temporary heap across
the invocation of row_rec_to_index_entry().
2007-10-17 12:13:29 +00:00
marko
d49217dd23 branches/zip: btr_push_update_extern_fields(): Add parameter "index"
and use it for flagging externally stored columns in the data tuple.
The data tuple contains the same columns as the clustered index record,
but in a different order.  This error was introduced in r1591.

TODO: the assertion ut_ad(!dfield_is_ext()) may fail in
btr_cur_pessimistic_update().
2007-10-16 07:25:58 +00:00
marko
f7bf6fec47 branches/zip: btr_cur_mark_dtuple_inherited_extern(): Fix the loop condition
that was broken in r1591.  Spotted by Heikki and Vasil.
2007-10-16 06:05:09 +00:00
marko
278334e07e branches/zip: plug.in: Remove the check for aio.h and -lrt, which were
never used.  Combine the three AC_CHECK_FUNCS tests.
2007-10-15 11:30:38 +00:00
marko
0349b9d235 branches/zip: buf_chunk_init(): Note that the function does not always
return the requested amount of memory.
2007-10-15 11:26:58 +00:00
marko
7c68ba2e9d branches/zip: Allow a dynamically loaded InnoDB storage engine plugin
to replace a built-in instance of InnoDB in mysqld.  This is work in
progress, with several limitations:

* Other plugins defined in the builtin InnoDB are not disabled.
  However, InnoDB in MySQL 5.1 only defines the storage engine plugin,
  no INFORMATION_SCHEMA plugins.

* The global C symbols in ha_innodb.so except innodb_hton_ptr and
  builtin_innobase_plugin will have to be redefined, e.g., by objcopy.

* The storage engine cannot be called "InnoDB" to avoid a conflict with
  the builtin name.  Here we call it InnoDBzip.

innobase_hton_name[]: Rename to "InnoDBzip" when building a dynamic plugin.

innodb_plugin_init(): New function for the dynamic plugin, to copy
and redirect configuration parameters from the builtin InnoDB.

innodb_dynamic: New configuration parameter.  This has to be added
to the builtin InnoDB in MySQL 5.1.  Also, innodb_hton_ptr must be made
global there.

innobase_init(): Interpret the parameter innodb_dynamic.

Makefile.am: Redefine class ha_innobase to ha_innodb by a preprocessor
define.  Apparently, C++ classes cannot be easily renamed by objcopy.
2007-10-15 11:05:40 +00:00
marko
81761f5f7c branches/zip: innodb-index.test: Add FORCE INDEX directives and remove
those SELECTs whose ORDER BY cannot possibly make use of an index.
2007-10-15 08:42:35 +00:00
marko
edb7de5fee branches/zip: On compressed pages, always update the insert buffer bitmap.
Do not assume anything about the contents of the bitmap.

ibuf_update_free_bits_low(): Use this function only for uncompressed pages.
Remove the parameter zip_size.  This function avoids latching the bitmap page
and updating the bitmap when the bits do not change.

ibuf_update_free_bits_zip(): New function based on ibuf_update_free_bits_low(),
for use on compressed pages.  Remove the parameter max_insert_size that
was used for computing the before image of the free bits.  Always update the
bitmap.

ibuf_index_page_calc_free_zip(): New function, factored out from
ibuf_index_page_calc_free().

ibuf_update_free_bits_if_full(): Document that this function must only be
invoked on uncompressed pages.  Add a debug assertion about this.
2007-10-12 13:25:12 +00:00
vasil
468df81b8f branches/zip:
Add the proper macros for checking the correct latching order in trx
information_schema code.

Approved by:	Marko
2007-10-12 11:20:13 +00:00
marko
75e12d4898 branches/zip: page_zip_max_ins_size(): Correct the comment of the return value. 2007-10-12 11:16:20 +00:00
marko
edf5b599d1 branches/zip: ibuf_insert_low(): Add the parameter entry_size in order to
avoid repeated invocation of the costly function rec_get_converted_size().
2007-10-12 10:48:35 +00:00
marko
1367c5e5be branches/zip: ibuf_index_page_calc_free(): Add const qualifiers. 2007-10-12 10:45:41 +00:00
vasil
8bafadab91 branches/zip:
Fix off-by-one error in ut_raw_to_hex().
2007-10-12 10:20:01 +00:00
marko
36e3171767 branches/zip: Improve diagnostic output in ibuf_insert_to_index_page()
and add some debug assertions.
2007-10-12 08:38:49 +00:00
marko
4a697d8f60 branches/zip: ut_raw_to_hex(): Fix a compiler warning that was introduced
in r1960.
2007-10-12 08:37:27 +00:00
vasil
31dae76d30 branches/zip:
Non-functional change: add a missed space in the output message.
2007-10-12 07:58:28 +00:00
vasil
abceb43b98 branches/zip:
Non-functional change: fix compiler warning:

buf0buf.ic:637: warning: assignment discards qualifiers from pointer target type
2007-10-11 11:54:51 +00:00
vasil
9dbf703da8 branches/zip:
Non-functional change to improve readability.
2007-10-11 10:45:57 +00:00
vasil
e722cf5a30 branches/zip:
Add ut_raw_to_hex() function to convert a raw binary strings to hex.
This is a monstrous, fine-tuned implementation.

Approved by:	Marko
2007-10-10 16:35:05 +00:00
marko
2966cf744f branches/zip: row_ins_foreign_report_add_err(): Note that the dtuple_print()
call may display uninitialized values of DB_TRX_ID and DB_ROLL_PTR.
2007-10-10 11:39:26 +00:00
marko
a8a47268a4 branches/zip: innodb-index.result: Adapt the results to a patch from MySQL.
Unfortunately, the patch seems to prevent MySQL from utilizing secondary
indexes in the ORDER BY clauses.  Thus, the test no longer checks if newly
created indexes are well-formed.

ChangeSet@1.2528.98.1  2007-08-02 12:45:56-07:00  igor@mysql.com

Fixed bug#28404.
This patch adds cost estimation for the queries with ORDER BY / GROUP BY
and LIMIT. 
If there was a ref/range access to the table whose rows were required
to be ordered in the result set the optimizer always employed this access
though a scan by a different index that was compatible with the required 
order could be cheaper to produce the first L rows of the result set.
Now for such queries the optimizer makes a choice between the cheapest
ref/range accesses not compatible with the given order and index scans
compatible with it.
2007-10-08 12:16:32 +00:00
vasil
fe92e646f7 branches/zip:
Add diagnostic function ha_storage_get_size() to retrieve the amount of
memory used by a ha_storage_t object.

Approved by:	Marko
2007-10-08 10:46:26 +00:00
marko
4cd65bb092 branches/zip: page_mem_alloc_free(): Fix the debug assertion that was
accidentally broken in r1939.  It failed when next_rec == NULL.
2007-10-05 11:33:19 +00:00
marko
3d9183da6a branches/zip: Correct the Valgrind instrumentation that was added in r1947. 2007-10-05 11:22:23 +00:00
marko
8e4c946d11 branches/zip: i_s.cc: Add missing #include "buf0buf.h" that should have
been added in r1943.  This is needed for building a noninlined version.
2007-10-05 10:59:34 +00:00
marko
1080bc105a branches/zip: dtuple_convert_big_rec(): Do not flag the extern field
references uninitialized, because it causes bogus warnings since r1947.
2007-10-05 09:58:24 +00:00
marko
e233731f1b branches/zip: Add some Valgrind instrumentation.
dtuple_validate(): Detect uninitialized data.

page_cur_insert_rec_low(), page_cur_insert_rec_zip(): Assert that the
record being inserted is valid before and after insertion.
2007-10-05 08:53:28 +00:00
marko
5ae0bb6d60 branches/zip: innodb.test: Fix the result, now that fast index creation
reports duplicate key values.  The reported value may depend on the
size of the main-memory merge sort buffer (row_merge_block_t).
2007-10-05 08:39:35 +00:00
marko
9fb9158b6a branches/zip: Use static linkage for row_ins(). 2007-10-05 06:23:37 +00:00