ChangeSet@1.2309.1.12, 2006-09-12 15:42:13+02:00, guilhem@gbichot3.local +14 -0
Fixing problems I identified in my auto_increment work pushed in July
(as part of the auto_increment cleanup of WL #3146; ...
The problem is in that show binlog events in indeterministic, row events can be compressed,
so that 2 seconds original delay does not guard from inconsistency.
We syncronize test's current inserted rows counter with system insert delayed thread
per each query.
From another side there is no requirement for binlog to be event per row and then
to verify if binlog has recorded what was recently inserted is better
via reading from it instead of 'show binlog events'.
mysql-test/extra/binlog_tests/binlog_insert_delayed.test:
removing sleeps, syncronizing with system delayed thread per each statement,
note that an insert statement is performed atomically including writing to binlog,
so that concurrent selects are waiting. That's why the wait macro is safe.
mysql-test/r/binlog_row_binlog.result:
new result
mysql-test/include/wait_until_rows_count.inc:
macro implements waiting until a targeted table has a prescribed rows number.
into mysql.com:/users/lthalmann/bkroot/mysql-5.1
client/mysqldump.c:
Auto merged
mysql-test/t/disabled.def:
Auto merged
sql/ha_ndbcluster.cc:
Auto merged
sql/sql_show.cc:
Auto merged
storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
Auto merged
mysql-test/t/ndb_multi.test:
Manual merge
into mysql.com:/users/lthalmann/bk/MERGE/mysql-5.1-merge
BitKeeper/etc/ignore:
auto-union
mysql-test/t/disabled.def:
Auto merged
sql/CMakeLists.txt:
Auto merged
sql/Makefile.am:
Auto merged
sql/ha_ndbcluster.cc:
Auto merged
sql/mysqld.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
storage/innobase/handler/ha_innodb.cc:
Auto merged
into mysql.com:/users/lthalmann/bk/MERGE/mysql-4.1-merge
BitKeeper/etc/ignore:
auto-union
mysql-test/r/myisam.result:
Auto merged
mysql-test/t/myisam.test:
Auto merged
sql/sql_select.cc:
Auto merged
into mysql.com:/windows/Linux_space/MySQL/mysql-5.1
mysql-test/t/disabled.def:
Auto merged
sql/ha_ndbcluster.cc:
Auto merged
sql/ha_ndbcluster_binlog.cc:
Auto merged
sql/ha_ndbcluster_binlog.h:
Auto merged
sql/sql_show.cc:
Auto merged
include/mysql_com.h:
Fix for Bug#20208 "Blobs greater than 8K are being truncated to 8K"
sql/filesort.cc:
Added a missing break point.
sql/item.cc:
Made a function of a block of code.
sql/item.h:
Added function string_field_type()
into shellback.(none):/home/msvensson/mysql/mysql-5.1-maint
BitKeeper/etc/ignore:
auto-union
mysql-test/t/disabled.def:
Auto merged
sql/sql_yacc.yy:
Auto merged
sql/share/errmsg.txt:
Auto merged
storage/innobase/Makefile.am:
Auto merged
storage/innobase/handler/ha_innodb.cc:
Auto merged
Item_substr's results are improperly stored in a temporary table due to
wrongly calculated max_length value for multi-byte charsets if two
arguments specified.
mysql-test/r/ctype_utf8.result:
Fix for bug #20204: "order by" changes the results returned
- test case.
mysql-test/t/ctype_utf8.test:
Fix for bug #20204: "order by" changes the results returned
- test result.
sql/item_strfunc.cc:
Fix for bug #20204: "order by" changes the results returned
- always take into account current mbmaxlen value calculating max_length.
this key does not stop" (version for 5.0 only).
UPDATE statement which WHERE clause used key and which invoked trigger
that modified field in this key worked indefinetely.
This problem occured because in cases when UPDATE statement was
executed in update-on-the-fly mode (in which row is updated right
during evaluation of select for WHERE clause) the new version of
the row became visible to select representing WHERE clause and was
updated again and again.
We already solve this problem for UPDATE statements which does not
invoke triggers by detecting the fact that we are going to update
field in key used for scanning and performing update in two steps,
during the first step we gather information about the rows to be
updated and then doing actual updates. We also do this for
MULTI-UPDATE and in its case we even detect situation when such
fields are updated in triggers (actually we simply assume that
we always update fields used in key if we have before update
trigger).
The fix simply extends this check which is done in check_if_key_used()/
QUICK_SELECT_I::check_if_keys_used() routine/method in such way that
it also detects cases when field used in key is updated in trigger.
As nice side-effect we have more precise and thus more optimal
perfomance-wise check for the MULTI-UPDATE.
Also check_if_key_used()/QUICK_SELECT_I::check_if_keys_used() were
renamed to is_key_used()/QUICK_SELECT_I::is_keys_used() in order to
better reflect that boolean predicate.
Note that this check is implemented in much more elegant way in 5.1
mysql-test/r/trigger.result:
Added test case for bug#20670 "UPDATE using key and invoking trigger that
modifies this key does not stop".
mysql-test/t/trigger.test:
Added test case for bug#20670 "UPDATE using key and invoking trigger that
modifies this key does not stop".
sql/key.cc:
Renamed check_if_key_used() to is_key_used(). Also this routine checks if
key uses field which can be updated by before update trigger defined on the
table. As result we avoid using update-on-the-fly method in cases when trigger
updates part of key which is used by select which filters rows to be updated
and thus avoid infinite updates. By doing such check here we cover both UPDATE
and MULTI-UPDATE cases.
sql/mysql_priv.h:
Renamed check_if_key_used() to is_key_used().
sql/opt_range.cc:
Renamed check_if_key_used()/QUICK_SELECT_I::check_if_keys_used() to
is_key_used()/QUICK_SELECT_I::is_keys_used().
sql/opt_range.h:
Renamed QUICK_SELECT_I::check_if_keys_used() method to is_keys_used(),
also updated comment describing it to reflect its extended semantics
(this change was caused by change in check_if_key_used()/is_key_used()
routine semantics).
sql/sql_trigger.cc:
Introduced Table_triggers_list::is_updated_in_before_update_triggers()
method which is needed for checking if field of subject table can be
changed in before update trigger.
sql/sql_trigger.h:
Table_triggers_list:
Removed has_before_update_triggers() method which is not used any longer.
Added declaration of is_updated_in_before_update_triggers() which is
needed for checking if field of subject table can be changed by before
update trigger.
sql/sql_update.cc:
safe_update_on_fly():
check_if_key_used() routine and check_if_keys_used() method were
renamed to is_key_used()/is_keys_used().
Now cases when trigger updates fields which are part of key used for
filtering rows for update are caught directly in is_key_used().
This also allows to cover both UPDATE and MULTI-UPDATE cases.
into mysql.com:/usr/home/ram/work/mysql-4.1-maint
mysql-test/r/func_time.result:
Auto merged
mysql-test/t/func_time.test:
Auto merged
sql/item_cmpfunc.cc:
Auto merged
into mysql.com:/users/lthalmann/bk/MERGE/mysql-5.1-merge
mysql-test/r/rpl_view.result:
Auto merged
mysql-test/t/rpl_view.test:
Auto merged
sql/sql_yacc.yy:
Auto merged
mysql-test/r/mysqldump.result:
Manual merge, merge trees 5.0->5.1
mysql-test/r/mysqldump.result:
Fix of result file (adding the echo's)
mysql-test/r/rpl_view.result:
Added end of 5.0 echo
mysql-test/t/rpl_view.test:
Added end of 5.0 echo
into mysql.com:/users/lthalmann/bk/MERGE/mysql-5.1-merge
client/mysqldump.c:
Auto merged
sql/ha_ndbcluster.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
Auto merged
mysql-test/r/mysqldump.result:
Manual merge, merge tree 5.0->5.1
mysql-test/r/rpl_view.result:
Manual merge, merge tree 5.0->5.1
mysql-test/t/mysqldump.test:
Manual merge, merge tree 5.0->5.1
mysql-test/t/rpl_view.test:
Manual merge, merge tree 5.0->5.1
into mysql.com:/users/lthalmann/bk/MERGE/mysql-5.1-merge
BitKeeper/etc/ignore:
auto-union
Makefile.am:
Auto merged
client/mysqldump.c:
Auto merged
mysql-test/r/information_schema.result:
Auto merged
mysql-test/t/disabled.def:
Auto merged
sql/CMakeLists.txt:
Auto merged
sql/Makefile.am:
Auto merged
sql/ha_ndbcluster.cc:
Auto merged
sql/log.cc:
Auto merged
sql/log_event.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/sp_head.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_show.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
sql/table.h:
Auto merged
storage/innobase/handler/ha_innodb.cc:
Auto merged
mysql-test/r/mysqldump.result:
Restoring rpl tree mysqldump test file to main tree test files
mysql-test/r/status.result:
Manual merge
mysql-test/t/mysqldump.test:
Restoring rpl tree mysqldump test file to main tree test files
into mysql.com:/users/lthalmann/bk/MERGE/mysql-5.0-merge
ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
Auto merged
sql/ha_ndbcluster.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
client/mysqldump.c:
Merge main->rpl
mysql-test/r/mysqldump.result:
Restore of main mysqldump test files in rpl tree (only added echo and one test case for bug 13926)
Printouts not yet added to result file
mysql-test/t/mysqldump.test:
Restore of main mysqldump test files in rpl tree (only added echo and one test case for bug 13926)
into rurik.mysql.com:/home/igor/mysql-5.0-opt
mysql-test/r/ctype_ucs.result:
Auto merged
mysql-test/t/ctype_ucs.test:
Auto merged
sql/field.h:
Auto merged
sql/unireg.cc:
Auto merged
Any default value for a enum fields over UCS2 charsets was corrupted
when we put it into the frm file, as it had been overwritten by its
HEX representation.
To fix it now we save a copy of structure that represents the enum
type and when putting the default values we use this copy.
mysql-test/r/ctype_ucs.result:
Added a test case for bug #20108.
mysql-test/t/ctype_ucs.test:
Added a test case for bug #20108.
that returns the results of aggregation by GROUP_CONCAT.
The crash was due to an overflow happened for the field
sortoder->length.
The fix prevents this overflow exploiting the fact that the
value of sortoder->length cannot be greater than the value of
thd->variables.max_sort_length.
mysql-test/r/func_gconcat.result:
Added a test case for bug #22015.
mysql-test/t/func_gconcat.test:
Added a test case for bug #22015.
into chilla.local:/home/mydev/mysql-5.1-tomain
mysql-test/t/disabled.def:
Auto merged
sql/opt_range.cc:
Auto merged
sql/sql_select.cc:
Auto merged
mysql-test/r/innodb_mysql.result:
Manual merge from 5.1-engines.
Bug#20627 - INSERT DELAYED does not honour auto_increment_* variables
INSERT DELAYED ignored an explicitly set INSERT_ID and session
specific auto_increment_* variables.
The problem was that the inserts are done by a system thread,
which does not have access to the session variables of the user
thread.
On a proposal of Guilhem I fixed it so that the variables are
copied to the data structure for every delayed row. The system
thread sets its session variables from these values.
mysql-test/r/delayed.result:
Bug#20830 - INSERT DELAYED does not honour SET INSERT_ID
Bug#20627 - INSERT DELAYED does not honour auto_increment_* variables
Turned some sleeps into FLUSH TABLEs.
Added test cases.
mysql-test/t/delayed.test:
Bug#20830 - INSERT DELAYED does not honour SET INSERT_ID
Bug#20627 - INSERT DELAYED does not honour auto_increment_* variables
Turned some sleeps into FLUSH TABLEs.
Added test cases.
sql/sql_insert.cc:
Bug#20830 - INSERT DELAYED does not honour SET INSERT_ID
Bug#20627 - INSERT DELAYED does not honour auto_increment_* variables
Added auto_increment/insert_id related variables to 'delayed_row'.
The session values are copied to 'delayed_row' by the user thread.
The delayed insert thread copies them to his session variables.
Cleaned up test to no longer need have_
BitKeeper/deleted/.del-have_archive.require:
Delete: mysql-test/r/have_archive.require
BitKeeper/deleted/.del-have_blackhole.require:
Delete: mysql-test/r/have_blackhole.require
BitKeeper/deleted/.del-have_csv.require:
Delete: mysql-test/r/have_csv.require
BitKeeper/deleted/.del-have_exampledb.require:
Delete: mysql-test/r/have_exampledb.require
BitKeeper/deleted/.del-have_federated_db.require:
Delete: mysql-test/r/have_federated_db.require
BitKeeper/deleted/.del-have_innodb.require:
Delete: mysql-test/r/have_innodb.require
BitKeeper/deleted/.del-have_ndb.require:
Delete: mysql-test/r/have_ndb.require
BitKeeper/deleted/.del-have_raid.require:
Delete: mysql-test/r/have_raid.require
mysql-test/include/have_archive.inc:
Rewrite of test to use new syntax
mysql-test/include/have_blackhole.inc:
Test rewritten to use new syntax
mysql-test/include/have_csv.inc:
Test rewrite
mysql-test/include/have_exampledb.inc:
Test rewrite
mysql-test/include/have_federated_db.inc:
Test rewrite
mysql-test/include/have_innodb.inc:
Test rewrite
mysql-test/include/have_multi_ndb.inc:
Test rewrite
mysql-test/include/have_ndb.inc:
Test rewrite
sql/mysql_priv.h:
Removed unneeded ifdef