log for r1850:
Implement this feature request:
http://bugs.mysql.com/30706
* Add a function that returns the number of microseconds since
epoch - ut_time_us().
* Add (innodb|innobase|srv)_replication_delay MySQL config parameter.
* Add UT_WAIT_FOR() macro that waits for a specified condition to occur
until a timeout elapses.
* Using all of the above, handle the replication thread specially in
srv_conc_enter_innodb().
using auxiliary functions because there is no snprintf-variant on
Windows that behaves exactly as specified in the standard:
* Always return the number of characters that would have been printed
if the size were unlimited (not including the final `\0').
* Always '\0'-terminate the result
* Do not touch the buffer if size=0, only return the number of characters
that would have been printed. Can be used to estimate the size needed
and to allocate it dynamically.
See http://www.freebsd.org/cgi/query-pr.cgi?pr=87260 for the reason why
2 ap variables are used.
Approved by: Heikki
http://bugs.mysql.com/30706
* Add a function that returns the number of microseconds since
epoch - ut_time_us().
* Add (innodb|innobase|srv)_replication_delay MySQL config parameter.
* Add UT_WAIT_FOR() macro that waits for a specified condition to occur
until a timeout elapses.
* Using all of the above, handle the replication thread specially in
srv_conc_enter_innodb().
Approved by: Heikki
mem_heap_validate(): Compile this function also if UNIV_MEM_DEBUG is
defined. Previously, this function was only compiled with UNIV_DEBUG.
mem_heap_free_heap_top(): Flag the memory allocated, not freed, for
Valgrind. Otherwise, Valgrind would complain on the second call of
mem_heap_empty().
UNIV_MEM_ASSERT_RW(), UNIV_MEM_ASSERT_W(): Display additional diagnostics
for failed Valgrind checks.
retry of autoinc read semantics. We always reread the table's autoinc counter
after attempting to initialize it i.e., we want to guarantee that a read of
autoinc valus that is returned to the caller is always covered by the
AUTOINC locking mechanism.
Bug# 30907: We don't rely on *first_value to be 0 when checking whether
get_auto_increment() has been invoked for the first time in a multi-row
INSERT. We instead use trx_t::n_autoinc_rows. Initialize trx::n_autoinc_rows
inside ha_innobase::start_stmt() too.
Bug# 30888: While adding code for the low level read of the AUTOINC value
from the index, the case for MEDIUM ints which are 3 bytes was missed
triggering an assertion.
ChangeSet@1.2536.50.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.
innodb.result: Adjusted results for test cases affected fy the fix for
bug #28404.
when building a previous version of the row. This bug is triggered when
running queries via InnoDB's internal SQL parser; when InnoDB's optimizer
selects a secondary index for the plan.
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(): Check that the memory is writable, and declare it undefined.
mem_erase_buf(): Check that the memory is writable, and declare it freed.
trx->n_mysql_tables_in_use only after row_lock_table_for_mysql()
returns DB_SUCCESS. A timeout on LOCK TABLES would lead to an
inconsistent state, which would cause trx_free() to print a warning.
This was later reported as Bug #31444.
dict_table_remove_from_cache(table) and thus freeing the memory
allocated for the table, copy the table name. This avoids reading
freed memory when name == table->name.
Approved by Sunny.
ChangeSet@1.2536.10.2 2007-07-25 10:44:45+02:00 jperkin@mysql.com
Fix for bug#29641 - $CC on Open Server is set to contain arguments
for enabling threads. However, duplicate AC_PROG_* macros in the
innobase plug.in file were resetting $CC and causing link errors.
As AC_PROG_* macros are already used in the main configure.in file
there should be no need for them to be duplicated here too.
plug.in:
Remove AC_PROG_* macros
pending and/or granted on a table. We peek at this value to determine whether
a transaction doing a simple INSERT in innodb_autoinc_lock_mode = 1, needs to
acquire the AUTOINC lock or not. This change is related to Bug# 16979.
mem_heap_free_heap_top(): Declare the memory freed with UNIV_MEM_FREE().
Before this change, the memory freed by mem_heap_empty() was not completely
flagged free in UNIV_DEBUG_VALGRIND builds. After this change, Valgrind
will hopefully catch all errors caught by UNIV_MEM_DEBUG.
AUTOINC locking. There are three modes, 0 for backward compatibility, 1 for the
new style locking (default, safe for statement-based replication) and
2 for no AUTOINC locking (unsafe for statement-based replication).
adding column definitions to tables.
dict_mem_table_add_col(): Add the parameter "heap" for temporary memory
allocation. Allow it and "name" to be NULL. These parameters are NULL
when creating dummy indexes.
dict_add_col_name(): Remove calls to ut_malloc() and ut_free().
dict_table_get_col_name(): Allow table->col_names to be NULL.
dict_table_add_system_columns(), dict_table_add_to_cache():
Add the parameter "heap".
---
Additional changes that had to be merged from branches/zip:
dict_table_add_system_columns(): New function, factored out from
dict_table_add_to_cache().
mlog_parse_index(): Add some consistency checks, and make use of
dict_table_add_system_columns().
ha_innodb.cc. This cleanup was made possible as of r1550:
Merge changes from MySQL AB:
ChangeSet@2007-05-10 12:59:39+03:00, monty@mysql.com
WL#3817: Simplify string / memory area types and make things more consistent
(first part)
The following type conversions was done:
- Changed byte to uchar
...
ChangeSet@1.1810.3176.1 2007-07-20 14:17:15+03:00 gkodinov@magare.gmz
Bug #29644: alter table hangs if records locked in share mode
by long running transaction
On Windows opened files can't be deleted. There was a special
upgraded lock mode (TL_WRITE instead of TL_WRITE_ALLOW_READ)
in ALTER TABLE to make sure nobody has the table opened
when deleting the old table in ALTER TABLE. This special mode
was causing ALTER TABLE to hang waiting on a lock inside InnoDB.
This special lock is no longer necessary as the server is
closing the tables it needs to delete in ALTER TABLE.
Fixed by removing the special lock.
Note that this also reverses the fix for bug 17264 that deals with
another consequence of this special lock mode being used.
ha_innodb.cc@1.202.46.1 2007-07-20 14:17:14+03:00 gkodinov@magare.gmz
Bug #29644: reverse the (now excessive) fix
for bug 17264 (but leave the test case).
ChangeSet@1.2567, 2007-07-27 14:44:31+05:00, svoj@june.mysql.com +3 -0
Merge mysql.com:/home/svoj/devel/mysql/BUG29957/mysql-5.0-engines
into mysql.com:/home/svoj/devel/mysql/BUG29957/mysql-5.1-engines
MERGE: 1.1810.2871.44
One test case in innodb.test fails because of auto-increment
changes in r1562:1653:
$diff innodb.result innodb.reject
504c504
< 3 test2 this will work
---
> 4 test2 this will work
is one test that fails as of this commit. The updated test case should be
part of the snapshot from MySQL shortly.
Fix for bug# 27950 - Init AUTOINC from delete_row().
Fix for bug# 28781 - Use value specified by MySQL, in update_row().
Summary of structural changes:
==============================
InnoDB needs to hold a table level lock for AUTOINC allocations to overcome
the non-determinism inherent in MySQL SBR for INSERT ... SELECT. In this fix
for simple INSERT statements (including multi-value inserts), we try and avoid
acquiring the special AUTOINC table level lock unless another transaction has
already reserved the AUTOINC table level lock, in which case we fall back
to the old behavior of acquiring the AUTOINC table level lock.
The max AUTOINC value is now read directly using the low level interface
of InnoDB.
queues. Supports table and record lock queues via the same interface.
There is only "get previous" method because currently there is no need
for "get next" - it would be unused. Feel free to add one if needed.
Approved by: Heikki