Commit graph

19885 commits

Author SHA1 Message Date
Sergey Petrunya
9faf5452a1 BUG#693747: Assertion multi_range_read.cc:908: int DsMrr_impl::dsmrr_init
- Make DsMrr_impl::dsmrr_init() handle the case of 
   1. 1st MRR scan using DS-MRR strategy (i.e. doing key sorting and rowid sorting)
   2. 2nd MRR scan getting a buffer that's too small to fit one key element 
      and one rowid element, and so falling back to default MRR implementation
  In this case, dsmrr_init() is invoked with {primary_handler, secondary_handler}
  initialized for DS-MRR scan and have to reset them to be initialized for the
  default MRR scan.
(attempt 2, with simplified testcase)
2011-03-02 23:08:13 +03:00
unknown
71e9d94895 MWL#89
Merge 5.3 into 5.3-mwl89.
2011-03-01 15:54:21 +02:00
Alexander Barkov
fd1e3b03ff Bug#11766725 (Bug#59901) EXTRACTVALUE STILL BROKEN AFTER FIX FOR BUG #44332
Problem: a byte behind the end of input string was read
in case of a broken XML not having a quote or doublequote
character closing a string value.

Fix: changing condition not to read behind the end of input string

  @ mysql-test/r/xml.result
  @ mysql-test/t/xml.test
  Adding tests

  @ strings/xml.c
  When checking if the closing quote/doublequote was found,
  using p->cur[0] us unsafe, as p->cur can point to the byte after the value.
  Comparing p->cur to p->beg instead.
2011-03-01 15:30:18 +03:00
Sergei Golubchik
a8a757c6bb wl#173 - temporal types with sub-second resolution
and collateral changes.

* introduce my_hrtime_t, my_timediff_t, and conversion macros
* inroduce TIME_RESULT, but it can only be returned from Item::cmp_type(),
  never from Item::result_type()
* pack_time/unpack_time function for "packed" representation of
  MYSQL_TIME in a longlong that can be compared
* ADDTIME()/SUBTIME()/+- INTERVAL now work with TIME values
* numbers aren't quoted in EXPLAIN EXTENDED
* new column I_S.COLUMNS.DATETIME_PRECISION
* date/time values are compares to anything as date/time, not as strings or numbers.
* old timestamp(X) is no longer supported
* MYSQL_TIME to string conversion functions take precision as an argument
* unified the warnings from Field_timestamp/datetime/time/date/newdate store methods
* Field_timestamp_hires, Field_datetime_hires, Field_time_hires
* Field_temporal
* Lazy_string class to pass a value (string, number, time) polymorphically down the stack
* make_truncated_value_warning and Field::set_datetime_warning use Lazy_string as an argument, removed char*/int/double variants
* removed Field::can_be_compared_as_longlong(). Use Field::cmp_type() == INT_RESULT instead
* introduced Item::cmp_result() instead of Item::is_datetime() and Item::result_as_longlong()
* in many cases date/time types are treated like other types, not as special cases
* greatly simplified Arg_comparator (regarding date/time/year code)
* SEC_TO_TIME is real function, not integer.
* microsecond precision in NOW, CURTIME, etc
* Item_temporal. All items derived from it only provide get_date, but no val* methods
* replication of NOW(6)
* Protocol::store(time) now takes the precision as an argument
* @@TIMESTAMP is a double

client/mysqlbinlog.cc:
  remove unneded casts
include/my_sys.h:
  introduce my_hrtime_t, my_timediff_t, and conversion macros
include/my_time.h:
  pack_time/unpack_time, etc.
  convenience functions to work with MYSQL_TIME::second_part
libmysql/libmysql.c:
  str_to_time() is gone. str_to_datetime() does it now.
  my_TIME_to_str() takes the precision as an argument
mysql-test/include/ps_conv.inc:
  time is not equal to datetime anymore
mysql-test/r/distinct.result:
  a test for an old MySQL bug
mysql-test/r/explain.result:
  numbers aren't quoted in EXPLAIN EXTENDED
mysql-test/r/func_default.result:
  numbers aren't quoted in EXPLAIN EXTENDED
mysql-test/r/func_sapdb.result:
  when decimals=NOT_FIXED_DEC it means "not fixed" indeed
mysql-test/r/func_test.result:
  numbers aren't quoted in EXPLAIN EXTENDED
mysql-test/r/func_time.result:
  ADDTIME()/SUBTIME()/+- INTERVAL now work with TIME values
mysql-test/r/having.result:
  numbers aren't quoted in EXPLAIN EXTENDED
mysql-test/r/information_schema.result:
  new column I_S.COLUMNS.DATETIME_PRECISION
mysql-test/r/join_outer.result:
  numbers aren't quoted in EXPLAIN EXTENDED
mysql-test/r/metadata.result:
  TIMESTAMP no longer has zerofill flag
mysql-test/r/range.result:
  invalid datetime is not compared with as a string
mysql-test/r/select.result:
  NO_ZERO_IN_DATE, etc only affect storage - according to the manual
  numbers aren't quoted in EXPLAIN EXTENDED
mysql-test/r/subselect.result:
  numbers aren't quoted in EXPLAIN EXTENDED
mysql-test/r/sysdate_is_now.result:
  when decimals=NOT_FIXED_DEC it means "not fixed" indeed
mysql-test/r/type_blob.result:
  TIMESTAMP(N) is not deprecated
mysql-test/r/type_timestamp.result:
  old TIMESTAMP(X) semantics is not supported anymore
mysql-test/r/union.result:
  numbers aren't quoted in EXPLAIN EXTENDED
mysql-test/r/varbinary.result:
  numbers aren't quoted in EXPLAIN EXTENDED
mysql-test/t/distinct.test:
  test for an old MySQL bug
mysql-test/t/func_time.test:
  +- INTERVAL now works with TIME values
mysql-test/t/select.test:
  typo
mysql-test/t/subselect.test:
  only one error per statement, please
mysql-test/t/system_mysql_db_fix40123.test:
  old timestamp(X) is no longer supported
mysql-test/t/system_mysql_db_fix50030.test:
  old timestamp(X) is no longer supported
mysql-test/t/system_mysql_db_fix50117.test:
  old timestamp(X) is no longer supported
mysql-test/t/type_blob.test:
  old timestamp(X) is no longer supported
mysql-test/t/type_timestamp.test:
  old timestamp(X) is no longer supported
mysys/my_getsystime.c:
  functions to get the time with microsecond precision
mysys/my_init.c:
  move the my_getsystime.c initialization code to my_getsystime.c
mysys/my_static.c:
  no need to make these variables extern
mysys/my_static.h:
  no need to make these variables extern
scripts/mysql_system_tables.sql:
  old timestamp(X) is no longer supported
scripts/mysql_system_tables_fix.sql:
  old timestamp(X) is no longer supported
scripts/mysqlhotcopy.sh:
  old timestamp(X) is no longer supported
sql-common/my_time.c:
  * call str_to_time from str_to_datetime, as appropriate
  * date/time to string conversions take precision as an argument
  * number_to_time()
  * TIME_to_double()
  * pack_time() and unpack_time()
sql/event_data_objects.cc:
  cast is not needed
  my_datetime_to_str() takes precision as an argument
sql/event_db_repository.cc:
  avoid dangerous downcast (because the pointer is
  not always Field_timestamp, see events_1.test)
sql/event_queue.cc:
  avoid silly double-work for cond_wait
  (having an endpoint of wait, subtract the current time to get the timeout,
  and use set_timespec() macro to fill in struct timespec, by adding the current
  time to the timeout)
sql/field.cc:
  * remove virtual Field::get_time(), everyone should use only Field::get_date()
  * remove lots of #ifdef WORDS_BIGENDIAN
  * unified the warnings from Field_timestamp/datetime/time/date/newdate store methods
  * Field_timestamp_hires, Field_datetime_hires, Field_time_hires
  * Field_temporal
  * make_truncated_value_warning and Field::set_datetime_warning use Lazy_string as an argument, removed char*/int/double variants
sql/field.h:
  * remove virtual Field::get_time(), everyone should use only Field::get_date()
  * remove lots of #ifdef WORDS_BIGENDIAN
  * unified the warnings from Field_timestamp/datetime/time/date/newdate store methods
  * Field_timestamp_hires, Field_datetime_hires, Field_time_hires
  * Field_temporal
  * make_truncated_value_warning and Field::set_datetime_warning use Lazy_string as an argument, removed char*/int/double variants
  * removed Field::can_be_compared_as_longlong(). Use Field::cmp_type() == INT_RESULT instead
sql/filesort.cc:
  TIME_RESULT, cmp_time()
sql/item.cc:
  * numbers aren't quoted in EXPLAIN EXTENDED
  * Item::cmp_result() instead of Item::is_datetime() and Item::result_as_longlong()
  * virtual Item::get_time() is gone
  * Item_param::field_type() is set correctly
  * Item_datetime, for a datetime constant
  * time to anything is compared as a time
  * Item_cache::print() prints the value is available
  * bug fixed in Item_cache_int::val_str()
sql/item.h:
  * Item::print_value(), to be used from Item_xxx::print() when needed
  * Item::cmp_result() instead of Item::is_datetime() and Item::result_as_longlong()
  * virtual Item::get_time() is gone
  * Item_datetime, for a datetime constant
  * better default for cast_to_int_type()
  * Item_cache objects now *always* have the field_type() set
sql/item_cmpfunc.cc:
  * get_year_value, get_time_value are gone. get_datetime_value does it all
  * get_value_a_func, get_value_b_func are gone
  * can_compare_as_dates() is gone too, TIME_RESULT is used instead
  * cmp_type() instead or result_type() when doing a comparison
  * compare_datetime and compate_e_datetime in the comparator_matrix, is_nulls_eq is gone
  * Item::cmp_result() instead of Item::is_datetime() and Item::result_as_longlong()
sql/item_cmpfunc.h:
  greatly simplified Arg_comparator
sql/item_create.cc:
  * fix a bug in error messages in CAST
sql/item_func.cc:
  Item::cmp_result() instead of Item::is_datetime() and Item::result_as_longlong()
  mention all possibitiles in switch over Item_result values, or use default:
sql/item_row.h:
  overwrite the default cmp_type() for Item_row,
  as no MYSQL_TYPE_xxx value corresponds to ROW_RESULT
sql/item_timefunc.cc:
  rewrite make_datetime to support precision argument
  SEC_TO_TIME is real function, not integer.
  many functions that returned temporal values had duplicate code in val_* methods,
  some of them did not have get_date() which resulted in unnecessary date->str->date conversions. 
  Now they all are derived from Item_temporal_func and *only* provide get_date, not val* methods.
  many fixes to set decimals (datetime precision) correctly.
sql/item_timefunc.h:
  SEC_TO_TIME is real function, not integer.
  many functions that returned temporal values had duplicate code in val_* methods,
  some of them did not have get_date() which resulted in unnecessary date->str->date conversions. 
  Now they all are derived from Item_temporal_func and *only* provide get_date, not val* methods.
  many fixes to set decimals (datetime precision) correctly.
sql/log_event.cc:
  replication of NOW(6)
sql/log_event.h:
  replication of NOW(6)
sql/mysql_priv.h:
  Lazy_string class to pass a value (string, number, time) polymorphically down the stack.
  make_truncated_value_warning() that uses it.
sql/mysqld.cc:
  datetime in Arg_comparator::comparator_matrix
sql/opt_range.cc:
  cleanup: don't disable warnings before calling save_in_field_no_warnings()
sql/protocol.cc:
  Protocol::store(time) now takes the precision as an argument
sql/protocol.h:
  Protocol::store(time) now takes the precision as an argument
sql/rpl_rli.cc:
  small cleanup
sql/set_var.cc:
  SET TIMESTAMP=double
sql/set_var.h:
  @@TIMESTAMP is a double
sql/share/errmsg.txt:
  precision and scale are unsigned
sql/slave.cc:
  replication of NOW(6)
sql/sp_head.cc:
  cleanup
sql/sql_class.cc:
  support for NOW(6)
sql/sql_class.h:
  support for NOW(6)
sql/sql_insert.cc:
  support for NOW(6)
sql/sql_select.cc:
  use item->cmp_type().
  move a comment where it belongs
sql/sql_show.cc:
  new column I_S.COLUMNS.DATETIME_PRECISION
sql/sql_yacc.yy:
  TIME(X), DATETIME(X), cast, NOW(X), CURTIME(X), etc
sql/time.cc:
  fix date_add_interval() to support MYSQL_TIMESTAMP_TIME argument
storage/myisam/ha_myisam.cc:
  TIMESTAMP no longer carries ZEROFIELD flag, still we keep MYI file compatible.
strings/my_vsnprintf.c:
  warnings
tests/mysql_client_test.c:
  old timestamp(X) does not work anymore
  datetime is no longer equal to time
2011-03-01 13:24:36 +01:00
unknown
7895c35874 MWL#89
Merge MWL#89 with 5.3.
2011-03-01 14:16:28 +02:00
Sergey Petrunya
cb147b3965 Merge 5.3 -> 5.3-subqueries-mwl90 2011-03-01 13:21:48 +03:00
Sergey Petrunya
b8f00542e2 BUG#724228: Wrong result with materialization=on and three aggregates in maria-5.3-mwl90
- In join buffering code, call join_tab_execution_startup() (#1) before we call join_tab_scan->open() (#2).
  This is important with SJ-Materialization because #1 fills the materialized table, while
  #2 will actually try to read the first row. Attempt to read the first row before we have
  populated the materialized table would cause zero rows to be returned when actually there were matches.
2011-03-01 12:01:10 +03:00
Sergey Petrunya
c6ba959802 Merge fix for BUG#725275 2011-03-01 10:22:22 +03:00
Igor Babaev
6cd1ec3b6b Moved the test case for LP bug 725050 into a new test file. 2011-02-28 17:27:41 -08:00
Sergey Petrunya
10b8119ad3 BUG#724275: Crash in JOIN::optimize in maria-5.3
- Make equality-substitution-for-ref-access code in JOIN::optimize() treat join_tab->ref.key_copy correctly
  (in the way create_ref_for_key() has filled it).
2011-03-01 00:29:59 +03:00
Michael Widenius
3358cdd504 Merge with 5.1 to get in changes from MySQL 5.1.55 2011-02-28 19:39:30 +02:00
Igor Babaev
0f0360e21f Fixed LP bug #725050.
The bug in the function print_keyuse() caused crashes if
hash join could be used. It happened because the function
ignored the fact that KEYUSE structures could be created
for hash joins as well.
2011-02-27 22:37:46 -08:00
Igor Babaev
d57b1be961 Merge 2011-02-27 00:21:45 -08:00
Vladislav Vaintroub
f83e594218 Disable variables-big with debug binaries.
When compiled with SAFEMALLOC or with Windows
Debug CRT, it allocates and initializes 5GB of memory.
The effect is 20 minutes of paging and swapping on
a 4GB VM.

Still allow the test to run with optimized binaries.
Memory is not initialized in this case,  malloc() 
of 5GB  size will not bring the whole buffer into 
physical memory.
2011-02-27 01:25:56 +01:00
Sergey Petrunya
0f265b8251 BUG#723822: Crash in get_constant_key_infix with EXISTS ( SELECT .. DISTINCT )
- Make get_constant_key_infix() take into account that there may be SEL_TREEs with
  type=SEL_ARG::MAYBE_KEY, which it cannot process, because they are not real ranges
  but rather indications that we might have been able to construct a range if we had
  values for some other tables' fields. 
  (check_quick_select() already has such check)
2011-02-25 21:43:57 +03:00
Igor Babaev
8f4bcdace0 Made a newly added EXPLAIN platform independent. 2011-02-24 10:36:32 -08:00
Igor Babaev
272e5e6212 BNLH algorithm always used a full table scan over the joined table
even in the cases when there existed range/index-merge scans that
were cheaper than the full table scan.
This was a defect/bug of the implementation of mwl #128. 
Now hash join can work not only with full table scan of the joined
table, but also with full index scan, range and index-merge scans.
Accordingly, in the cases when hash join is used the column 'type'
in the EXPLAINs can contain now 'hash_ALL', 'hash_index', 'hash_range'
and 'hash_index_merge'. If hash join is coupled with a range/index_merge
scan then the columns 'key' and 'key_len' contain info not only on
the used hash index, but also on the indexes used for the scan.
2011-02-23 22:23:12 -08:00
Michael Widenius
6c610ed979 Fixed build issues
- Linking now with g++ instead of gcc with 'compile-dist' to solve problems with handlersocket/client
- Fixed bug in heap tables when doing handler read next-prev over last row


BUILD/compile-dist:
  - Linking now with g++ instead of gcc with 'compile-dist' to solve problems with handlersocket/client
cmd-line-utils/libedit/vi.c:
  Fixed compiler warning about not checking return value for write
mysql-test/r/index_intersect.result:
  Updated results (missed this file in my last push)
mysql-test/suite/handler/aria.result:
  Updated test results
mysql-test/suite/handler/handler.inc:
  Changed test to use read next/read prev on key where there are duplicates that can come in different order depending on system
  Added testing of read next-prev over last row and read prev-next around first row
mysql-test/suite/handler/heap.result:
  Updated test results
mysql-test/suite/handler/init.inc:
  More rows to test
mysql-test/suite/handler/innodb.result:
  Updated test results
mysql-test/suite/handler/interface.result:
  Updated test results
mysql-test/suite/handler/myisam.result:
  Updated test results
mysql-test/t/variables-big.test:
  Fixed test to not fail on windows
mysql-test/valgrind.supp:
  Removed not matching fun: to get rid of valgrind warning
storage/heap/hp_rfirst.c:
  Added state so that we know if we have an active position in the index.
storage/heap/hp_rkey.c:
  Added state so that we know if we have an active position in the index.
storage/heap/hp_rnext.c:
  Handle reading several next after finding the last row (this caused a crash before)
storage/heap/hp_rprev.c:
  Handle reading several prev after finding the first row (this caused a crash before)
storage/xtradb/buf/buf0buf.c:
  Fixed compiler warning about uninitialized value
2011-02-23 14:46:16 +02:00
Michael Widenius
39616eb9ef Fixed compiler warnings and some test failures found by buildbot
dbug/dbug.c:
  Fixed compiler warnings on windows
mysql-test/r/index_intersect_innodb.result:
  Don't print number of rows as this varies
mysql-test/suite/funcs_1/r/processlist_val_no_prot.result:
  Update to use new State
mysql-test/suite/handler/heap.result:
  Update results
mysql-test/suite/handler/heap.test:
  Changed key used in test as the key 'b' will not guarantee order of the two last elements (as the key value is the same)
mysql-test/suite/pbxt/r/lock_multi.result:
  Update to use new State
mysql-test/t/index_intersect.test:
  Don't print number of rows as this varies
mysql-test/valgrind.supp:
  Added suppression for linux
mysys/hash.c:
  Fixed compiler warnings on windows
plugin/handler_socket/handlersocket/database.cpp:
  Fixed compiler warnings
sql-common/client_plugin.c:
  Changed variable to define to avoid compiler warnings when variable is not used
sql-common/my_time.c:
  Initialize all my_time elements to avoid compiler warnings
storage/oqgraph/ha_oqgraph.cc:
  Use right function (to avoid compiler warning)
storage/pbxt/src/table_xt.cc:
  Initialize variables (to avoid compiler warnings)
2011-02-23 02:06:58 +02:00
Michael Widenius
1392eba62a Merged InnoDB plugin from MySQL 5.1.54 -> MySQL 5.1.55 into xtradb
mysql-test/r/innodb-zip.result:
  File has been moved to suite/innodb_plugin
mysql-test/t/innodb-zip.test:
  File has been moved to suite/innodb_plugin
2011-02-22 19:24:24 +02:00
unknown
759d71eba1 MWL#89
Split the tests for MWL#89 into two parts - one for bugs
(currently active), and one for functionality tets
(currently in progress, and thus disabled).

Disable the test for LP BUG#718593.
2011-02-22 12:44:58 +02:00
Michael Widenius
4ad6d6b6c9 Merge in new handler and handlersocket code into 5.3 main 2011-02-22 11:15:47 +02:00
Nirbhay Choubey
876502d743 Bug#11766310 : 59398: MYSQLDUMP 5.1 CAN'T HANDLE A DASH
("-") IN DATABASE NAMES IN ALTER DATABASE.

mysqldump did not quote database name in 'ALTER DATABASE'
statements in its output. This can further cause a failure
while loading if database name contains a hyphen '-'.

This happened as, while printing the 'ALTER DATABASE'
statements, the database name was not quoted.

Fixed by quoting the database name.


client/mysqldump.c:
  Bug#11766310 : 59398: MYSQLDUMP 5.1 CAN'T HANDLE A DASH
                 ("-") IN DATABASE NAMES IN ALTER DATABASE.
  
  Modified the print statement in order to print the quoted
  database name for 'ALTER DATABASE' statements.
mysql-test/r/mysqldump.result:
  Added a test case for bug#11766310.
mysql-test/t/mysqldump.test:
  Added a test case for bug#11766310.
2011-02-21 12:37:24 +05:30
Michael Widenius
58bb0769bd Merge with MySQL 5.1.55
- Fixed some issues with partitions and connection_string, which also fixed lp:716890 "Pre- and post-recovery crash in Aria"
- Fixed wrong assert in Aria

Now need to merge with latest xtradb before pushing 

sql/ha_partition.cc:
  Ensure that m_ordered_rec_buffer is not freed before close.
sql/mysqld.cc:
  Changed to use opt_stack_trace instead of opt_pstack.
  Removed references to pstack
sql/partition_element.h:
  Ensure that connect_string is initialized
storage/maria/ma_key_recover.c:
  Fixed wrong assert
2011-02-20 18:51:43 +02:00
Michael Widenius
2813f568b7 Merge with bugfix
sql/multi_range_read.cc:
  Added printing of error if something goes wrong in get_next()
  (Not critical for this bug fix, but this was something that I noticed while testing and found missing)
storage/myisam/mi_rkey.c:
  Fixed wrong error number in mi_yield_and_check_if_killed()
2011-02-18 21:45:32 +02:00
Michael Widenius
b12e3796dc Fix for lp:711565 "Index Condition Pushdown can make a thread hold MyISAM locks as well as be unKILLable for long time"
- In Maria/MyISAM: Release/re-acquire locks to give queries that wait on them a chance to make progress
- In Maria/MyISAM: Change from numeric constants to ICP_RES values.
- In Maria: Do check index condition in maria_rprev() (was lost in the merge/backport?)
- In Maria/MyISAM/XtraDB: Check if the query was killed, and return immediately if it was.

Added new storage engine error: HA_ERR_ABORTED_BY_USER, for handler to signal that it detected a kill of the query and aborted

Authors: Sergey Petrunia & Monty

include/my_base.h:
  Added HA_ERR_ABORTED_BY_USER, for handler to signal that it detected a kill of the query and aborted
include/my_handler.h:
  Added comment
mysql-test/r/myisam_icp.result:
  Updated test
mysql-test/t/myisam_icp.test:
  Drop used tables at start of test
  Added test case that can help with manual testing of killing index condition pushdown query.
mysys/my_handler_errors.h:
  Text for new storage engine error
sql/handler.cc:
  If engine got HA_ERR_ABORTED_BY_USER, send kill message.
sql/multi_range_read.cc:
  Return error code
storage/maria/ha_maria.cc:
  Added ma_killed_in_mariadb() to detect kill.
  Ensure that file->external_ref points to TABLE object.
storage/maria/ma_extra.c:
  Dummy test-if-killed for standalone
storage/maria/ma_key.c:
  If ma_check_index_cond() fails, set my_errno and info->cur_row.lastpos
storage/maria/ma_rkey.c:
  Release/re-acquire locks to give queries that wait on them a chance to make progress
  Check if the query was killed, and return immediately if it was
storage/maria/ma_rnext.c:
  Check if the query was killed, and return immediately if it was
  Added missing fast_ma_writeinfo(info)
storage/maria/ma_rnext_same.c:
  Check if the query was killed, and return immediately if it was
  Added missing fast_ma_writeinfo(info)
storage/maria/ma_rprev.c:
  Check if the query was killed, and return immediately if it was
  Added missing fast_ma_writeinfo(info) and ma_check_index_cond()
storage/maria/ma_search.c:
  Give error message if we find a wrong key
storage/maria/ma_static.c:
  Added pointer to test-if-killed function
storage/maria/maria_def.h:
  New prototypes
storage/myisam/ha_myisam.cc:
  Added mi_killed_in_mariadb()
  Ensure that file->external_ref points to TABLE object.
storage/myisam/mi_extra.c:
  Dummy test-if-killed for standalone
storage/myisam/mi_key.c:
  If ma_check_index_cond() fails, set my_errno and info->lastpos
storage/myisam/mi_rkey.c:
  Ensure that info->lastpos= HA_OFFSET_ERROR in case of error
  Release/re-acquire locks to give queries that wait on them a chance to make progress
  Check if the query was killed, and return immediately if it was
  Reorder code to do less things in case of error.
  Added missing fast_mi_writeinfo()
storage/myisam/mi_rnext.c:
  Check if the query was killed, and return immediately if it was
  Simplify old ICP code
  Added missing fast_ma_writeinfo(info)
storage/myisam/mi_rnext_same.c:
  Check if the query was killed, and return immediately if it was
  Added missing fast_mi_writeinfo(info)
storage/myisam/mi_rprev.c:
  Check if the query was killed, and return immediately if it was
  Simplify error handling of ICP
  Added missing fast_mi_writeinfo(info)
storage/myisam/mi_search.c:
  Give error message if we find a wrong key
storage/myisam/mi_static.c:
  Added pointer to test-if-killed function
storage/myisam/myisamdef.h:
  New prototypes
storage/xtradb/handler/ha_innodb.cc:
  Added DB_SEARCH_ABORTED_BY_USER and ha_innobase::is_thd_killed()
  Check if the query was killed, and return immediately if it was
storage/xtradb/handler/ha_innodb.h:
  Added prototype
storage/xtradb/include/db0err.h:
  Added DB_SEARCH_ABORTED_BY_USER
storage/xtradb/include/row0mysql.h:
  Added possible ICP errors
storage/xtradb/row/row0sel.c:
  Use ICP errors instead of constants.
  Detect if killed and return B_SEARCH_ABORTED_BY_USER
2011-02-18 17:43:59 +02:00
Martin Hansson
61b256177b Bug#11766675 - 59839: Aggregation followed by subquery yields wrong result
The loop that was looping over subqueries' references to outer field used a
local boolean variable to tell whether the field was grouped or not. But the
implementor failed to reset the variable after each iteration. Thus a field
that was not directly aggregated appeared to be.

Fixed by resetting the variable upon each new iteration.
2011-02-18 11:50:06 +01:00
Magne Mahre
6503226743 Bug#48053 String::c_ptr has a race and/or does an invalid
memory reference

There are two issues present here.
  1) There is a possibility that we test a byte beyond the
     allocated buffer

  2) We compare a byte that might never have been
     initalized to see if it's 0.

The first issue is not triggered by existing code, but an
ASSERT has been added to safe-guard against introducing
new code that triggers it.

The second issue is what triggers the Valgrind warnings
reported in the bug report. A buffer is allocated in
class String to hold the value. This buffer is populated
by the character data constituting the string, but is not
zero-terminated in most cases.  Testing if it is indeed
zero-terminated means that we check a byte that has never
been explicitly set, thus causing Valgrind to trigger.

Note that issue 2 is not a serious problem.  The variable
is read, and if it's not zero, we will set it to zero.
There are no further consequences.

Note that this patch does not fix the underlying problems
with issue 1, as it is deemed too risky to fix at this
point (as noted in the bug report).  As discussed in
the report, the c_ptr() method should probably be
replaced, but this requires a thorough analysis of the
~200 calls to the method.


sql/set_var.cc:
  These two cases have been reported to fail
  with Valgrind.
2011-02-17 12:43:53 +01:00
Bjorn Munch
ee2f9d868c Simple fix of suppress pattern in test insert_select 2011-02-16 21:43:12 +01:00
unknown
96efe1cab3 Fix for LP BUG#714808 and LP BUG#719280.
The patch also adjusts several instable test results
to order the result.

Analysis:

The function prev_record_reads() may skip (jump over)
some query plan nodes where record_count < 1. At the
same time, even though get_partial_join_cost() uses
all first N plan nodes after the last constant table,
it may produce a smaller record_count than
prev_record_reads(), because the record count for
some plan nodes may be < 1, and these nodes may not
participate in prev_record_reads.

Solution:
The current solution is to treat the result of
get_partial_join_cost() as the upper bound for the
total number of unique lookup keys.
2011-02-15 22:17:18 +02:00
Sergey Petrunya
cdccdea951 MWL#90: Merge (4) 2011-02-15 22:25:10 +03:00
Sergey Petrunya
e4325ff60b MWL#90: Subqueries: Inside-out execution for materialized non-sj subqueries
- Merge with 5.3 (3)
2011-02-15 20:29:57 +03:00
Dmitry Lenev
9c89cca5e3 Fix for bug#11766714 (former bug @59888) "debug assertion when
attempt to create spatial index on char > 31 bytes".

Attempt to create spatial index on char field with length
greater than 31 byte led to assertion failure on server
compiled with safemutex support.

The problem occurred in mi_create() function which was called
to create a new version of table being altered. This function
failed since it detected an attempt to create a spatial key
on non-binary column and tried to return an error.
On its error path it tried to unlock THR_LOCK_myisam mutex
which has not been not locked at this point. Indeed such an
incorrect behavior was caught by safemutex wrapper and caused
assertion failure.

This patch fixes the problem by ensuring that mi_create()
doesn't releases THR_LOCK_myisam mutex on error path if it was
not acquired.

mysql-test/r/gis.result:
  Added test for bug @59888 "debug assertion when attempt to
  create spatial index on char > 31 bytes".
mysql-test/t/gis.test:
  Added test for bug @59888 "debug assertion when attempt to
  create spatial index on char > 31 bytes".
storage/myisam/mi_create.c:
  Changed mi_create() not to release THR_LOCK_myisam mutex on
  error path if it was not acquired.
2011-02-15 14:03:05 +03:00
unknown
6c45d903f0 Fix LP BUG#718578
This bug extends the fix for LP BUG#715027 to cover one
more case of an Item being transformed, and its property
Item::with_subselect not being updated because
quick_fix_fields doesn't recalculate any properties.
2011-02-14 16:50:10 +02:00
unknown
2aeb4170a0 Fix LP BUG#715027
Analysis:
Before calling:
  write_record= (select->skip_record(thd) > 0);
the function find_all_keys needs to restore the original read/write
sets of the table that is sorted if the condition select->cond
contains a subquery.

This didn't happen in this test case because the flag "with_subselect"
was not set properly for select->cond.

The reason for the flag not being set properly, was that this condition
was rewritten by add_cond_and_fix() inside make_join_select() by:

      /* Add conditions added by add_not_null_conds(). */
      if (tab->select_cond)
        add_cond_and_fix(thd, &tmp, tab->select_cond);

However, the function add_cond_and_fix() called the shortcut method
Item::quick_fix_field() that didn't update the "with_subselect"
property.

Solution:
Call the complete Item::fix_fields() to update all Item properties,
including "with_subselect".
2011-02-14 00:11:46 +02:00
unknown
cd34946657 Fix LP BUG#715034
Analysis:
The failed assert is a result of calling Item_sum_distinct::clear()
on an incomplete object for which Item_sum_distinct::setup() was
not yet called.

The reason is that JOIN::exec for the outer query calls JOIN::reinit()
for all its subqueries, which in turn calls clear() for all aggregate
functions of the subqueries. The call stack is:
mysql_explain_union -> mysql_select -> JOIN::exec -> select_desribe ->
mysql_explain_union -> mysql_select -> JOIN::reinit

This assert doesn't fail in the main 5.3 because constant subqueries
are being executed during the optimize phase of the outer query,
thus the Unique object is created before calling JOIN::exec for the
outer query, and Item_sum_distinct::clear() actually cleans the
Unique object.

Solution:
The best solution is the obvious one - substitute the assert with
a test whether Item_sum_distinct::tree is NULL.
2011-02-11 18:46:31 +02:00
Sergey Petrunya
21fdc91091 Merge: BUG#716293: "Range checked for each record" is not used if condition refers to outside of subquery 2011-02-11 13:27:35 +03:00
unknown
ac6653aacc Fix LP BUG#714999
Analysis:
The crash in EXPLAIN resulted from an attempt to print the
name of the internal temporary table created to compute
distinct for the innermost subquery of the test case.
Such tables do not have a corresponding TABLE_LIST (table
reference), hence the crash. The reason for this was that
the subquery was executed as part of constant condition
evaluation before EXPLAIN attempts to print the table name.
During the subquery execution, the subquery JOIN_TAB and
its table are substituted by a temporary table in
make_simple_join.

Solution:
Similar to the analogous case for other Items than the
IS NULL function, do not evaluate expensive constant
conditions.
2011-02-10 22:53:30 +02:00
Michael Widenius
f2ca9c8784 Applied patch for lp:585688 "maridb crashes in federatedx code" from lp:~atcurtis/maria/federatedx:
- Fixed Partition engine to store CONNECTION string for partitions.
  Removed HA_NO_PARTITION flag from FederatedX.
  Added test 'federated_partition' to suite.
- lp:#585688 - maridb crashes in federatedx code
  FederatedX handler instances, created on one thread and used on
  another thread (via table cache) when "show table status" is executed
  crashed because txn member was not initialized for current thread.
  Added test 'federated_bug_585688' to suite.

Author for the patch is Antony Curtis

mysql-test/suite/federated/federated_bug_585688.result:
  Test for lp:585688
mysql-test/suite/federated/federated_bug_585688.test:
  Test for lp:585688
mysql-test/suite/federated/federated_partition-slave.opt:
  Test for partition support in federatedx
mysql-test/suite/federated/federated_partition.result:
  Test for partition support in federatedx
mysql-test/suite/federated/federated_partition.test:
  Test for partition support in federatedx
mysql-test/t/partition_federated.test:
  Updated error message
sql/ha_partition.cc:
  Added support for connection strings to partitions for federatedx
sql/ha_partition.h:
  Added support for connection strings to partitions for federatedx
sql/partition_element.h:
  Added support for connection strings to partitions for federatedx
sql/sql_yacc.yy:
  Added support for connection strings to partitions for federatedx
storage/federatedx/ha_federatedx.cc:
  Added support for partitions.
  FederatedX handler instances, created on one thread and used on another thread (via table cache) when "show table status"
  is executed crashed because txn member was not initialized for current thread.
2011-02-10 22:40:59 +02:00
unknown
6a66bf3182 MWL#89
Fixed LP BUG#714808 Assertion `outer_lookup_keys <= outer_record_count'

Analysis:

The function best_access_path() computes the number or records as
follows:

...
      if (rec < MATCHING_ROWS_IN_OTHER_TABLE)
        rec= MATCHING_ROWS_IN_OTHER_TABLE; // Fix for small tables
...
              if (table->quick_keys.is_set(key))
                records= (double) table->quick_rows[key];
              else
              {
                /* quick_range couldn't use key! */
                records= (double) s->records/rec;
              }

Above MATCHING_ROWS_IN_OTHER_TABLE == 10, and s->records == 1,
thus we get an estimated 0.1 records. As a result JOIN::get_partial_join_cost()
for the outer query computes outer_record_count == 0.1 records, which is
meaningless in this context.

Solution:
Round row count estimates that are < 1 to 1.
2011-02-10 16:23:59 +02:00
Sergey Petrunya
e431f106b9 BUG#716293: "Range checked for each record" is not used if condition refers to outside of subquery
- Assume that outside subquery references are known when doing "Range-checked-for-each-record" check.
2011-02-10 11:36:43 +03:00
Georgi Kodinov
6b1b898ef6 weave merge mysql-5.1->mysql-5.1-security 2011-02-09 10:30:44 +02:00
unknown
17fe23e46c Merge from mysql-5.1.55-release 2011-02-08 12:52:33 +01:00
Igor Babaev
6c7360b540 Merge 2011-02-07 15:19:03 -08:00
Dmitry Lenev
f74fd118cf Merged fix for bug #36544 "DROP USER does not remove stored
function privileges" into 5.5 tree. Did after-merge fixes.
2011-02-07 15:06:22 +03:00
Dmitry Lenev
b169b8d853 Fix for bug#36544 "DROP USER does not remove stored function
privileges".

The first problem was that DROP USER didn't properly remove privileges 
on stored functions from in-memory structures. So the dropped user
could have called stored functions on which he had privileges before
being dropped while his connection was still around.
Even worse if a new user with the same name was created he would
inherit privileges on stored functions from the dropped user.
Similar thing happened with old user name and function privileges
during RENAME USER.

This problem stemmed from the fact that the handle_grant_data() function
which handled DROP/RENAME USER didn't take any measures to update
in-memory hash with information about function privileges after
updating them on disk.

This patch solves this problem by adding code doing just that.

The second problem was that RENAME USER didn't properly update in-memory
structures describing table-level privileges and privileges on stored 
procedures. As result such privileges could have been lost after a rename
(i.e. not associated with the new name of user) and inherited by a new
user with the same name as the old name of the original user.

This problem was caused by code handling RENAME USER in
handle_grant_struct() which [sic!]:
a) tried to update wrong (tables) hash when updating stored procedure
   privileges for new user name.
b) passed wrong arguments to function performing the hash update and
   didn't take into account the way in which such update could have
   changed the order of the hash elements.

This patch solves this problem by ensuring that a) the correct hash
is updated, b) correct arguments are used for the hash_update()
function and c) we take into account possible changes in the order
of hash elements.

mysql-test/r/grant.result:
  Added test coverage for bug#36544 "DROP USER does not remove stored
  function privileges".
mysql-test/suite/funcs_1/r/innodb_storedproc_06.result:
  Since after fixing bug#36544 "DROP USER does not remove stored function
  privileges" in-memory structures are correctly updated by DROP USER,
  DROP FUNCTION performed after DROP USER for its definer no longer
  produces unwarranted warning/error messages.
mysql-test/suite/funcs_1/r/memory_storedproc_06.result:
  Since after fixing bug#36544 "DROP USER does not remove stored function
  privileges" in-memory structures are correctly updated by DROP USER,
  DROP FUNCTION performed after DROP USER for its definer no longer
  produces unwarranted warning/error messages.
mysql-test/suite/funcs_1/r/myisam_storedproc_06.result:
  Since after fixing bug#36544 "DROP USER does not remove stored function
  privileges" in-memory structures are correctly updated by DROP USER,
  DROP FUNCTION performed after DROP USER for its definer no longer
  produces unwarranted warning/error messages.
mysql-test/t/grant.test:
  Added test coverage for bug#36544 "DROP USER does not remove stored
  function privileges".
sql/sql_acl.cc:
  Changed handle_grant_data() to also update hash with function 
  privileges. This allows DROP/RENAME USER correctly keep this 
  in-memory structure up-to-date.
  
  To do this extended handle_grant_struct() to support updating of this
  hash. In addition fixed code in this function which is responsible for 
  handling of column and routine hashes during RENAME USER, ensured that
  we correctly update these hashes after changing user name and that we
  don't skip elements while iterating through the hash and doing updates.
2011-02-07 14:01:19 +03:00
Ole John Aske
221ce9223d Fix for bug#59308: Incorrect result for SELECT DISTINCT <col>... ORDER BY <col> DESC.
Also fix bug#59110: Memory leak of QUICK_SELECT_I allocated memory.
Includes Jørgen Lølands review comments.
      
Root cause of these bugs are that test_if_skip_sort_order() decided to
revert the 'skip_sort_order' descision (and use filesort) after the
query plan has been updated to reflect a 'skip' of the sort order.
      
This might happen in 'check_reverse_order:' if we have a 
select->quick which could not be made descending by appending 
a QUICK_SELECT_DESC. ().
      
The original 'save_quick' was then restored after the QEP has been modified,
which caused:
      
  - An incorrect 'precomputed_group_by= TRUE' may have been set, 
    and not reverted, as part of the already modifified QEP (Bug#59308)
  - A 'select->quick' might have been created which we fail to delete (bug#59110).
      
This fix is a refactorication of test_if_skip_sort_order() where all logic
related to modification of QEP (controlled by argument 'bool no_changes'), is
moved to the end of test_if_skip_sort_order(), and done after *all* 'test_if_skip'
checks has been performed - including the 'check_reverse_order:' checks.
      
The refactorication above contains now intentional changes to the logic which 
has been moved to the end of the function.
      
Furthermore, a smaller part of the fix address the handling of the 
select->quick objects which may already exists when we call 
'test_if_skip_sort_order()' (save_quick) -and
new select->quick's created during test_if_skip_sort_order():
      
  - Before new select->quick may be created by calling ::test_quick_select(), we
    set 'select->quick= 0' to avoid that ::test_quick_select() prematurely
    delete the save_quick's. (After this call we may have both a 'save_quick' 
    and 'select->quick')
      
  - All returns from ::test_if_skip_sort_order() where we may have both a
    'save_quick' and a 'select->quick' has been changed to goto's to the
    exit points 'skiped_sort_order:' or 'need_filesort:' where we
    decide which of the QUICK_SELECT's to keep, and delete the other.
2011-02-07 10:36:21 +01:00
Igor Babaev
cbeab25085 Fixed LP bug #702403 that caused a crash on the tree for mwl#128
with the test case added by this patch.
The bug cannot be reproduced with the same test case for the main
5.3 tree because the backported fix for bug 59696 masks the 
problem that causes the crash in the mentioned test case. It's not
clear weather this fix masks this problem in all possible cases. 

Anyway the patch for bug 698882 introduced some inconsistent data
structures that could contain indirect references to deleted object.
It happened when two Item_equal objects were merged and the Item_field
list of the second object was joined to such list of the first object.
This operation required adjustment of the backward pointers in 
Item fields from the joined list. However the adjustment was missing 
and this caused crashes in the tree for mwl#128.

Now the backward pointers are set only when Item_equal items are
completely built and are not changed anymore.
2011-02-05 20:57:03 -08:00
Dmitry Shulga
980868eb4e Fixed bug#57450 - mysql client enter in an infinite loop
if the standard input is a directory.

The problem is that mysql monitor try to read from stdin without
checking input source type.

The solution is to stop reading data from standard input if a call
to read(2) failed.

A new test case was added into mysql.test.

client/my_readline.h:
  Data members error and truncated was added to LINE_BUFFER structure.
  These data members used instead of out parameters in functions
  batch_readline, intern_read_line.
client/mysql.cc:
  read_and_execute() was modified: set status.exit_status to 1
  when the error occured while reading the next command line in
  non-interactive mode. Also the value of the truncated attribute
  of structure LINE_BUFF is taken into account only for non-iteractive mode.
client/readline.cc:
  intern_read_line() was modified: cancel reading from input if
  fill_buffer() returns -1, e.g. if call to read failed.
  batch_readline was modified: set the error data member of LINE_BUFFER
  structure to value of my_errno when system error happened during call
  to my_read/my_realloc.
mysql-test/t/mysql.test:
  Test for bug#57450 was added.
2011-02-05 11:02:00 +06:00
Dmitry Shulga
378091e434 Fixed bug#58026 - massive recursion and crash in regular expression
handling.

The problem was that parsing of nested regular expression involved
recursive calls. Such recursion didn't take into account the amount of
available stack space, which ended up leading to stack overflow crashes.

mysql-test/t/not_embedded_server.test:
  Added test for bug#58026.
regex/my_regex.h:
  added pointer to function as last argument of my_regex_init() for check
  enough memory in stack.
regex/regcomp.c:
  p_ere() was modified: added call to function for check enough memory
  in stack. Function for check available stack space specified by
  global variable my_regex_enough_mem_in_stack. This variable set to
  NULL for embedded mysqld and to a pointer to function
  check_enough_stack_size otherwise.
regex/reginit.c:
  my_regex_init was modified: pass a pointer to a function for check
  enough memory in stack space. Reset this pointer to NULL in my_regex_end.
sql/mysqld.cc:
  Added function check_enough_stack_size() for check enough memory in stack.
  Passed this function as second argument to my_regex_init. For embedded 
  mysqld passed NULL as second argument.
2011-02-04 10:47:46 +06:00
unknown
648e604615 MWL#89
Adjusted test cases in accordance with the implementation.
2011-02-03 17:00:28 +02:00
Georgi Kodinov
a265fde655 merge 2011-02-02 20:13:11 +02:00
Georgi Kodinov
0a8419dfdd Bug #52315 part 2 addendum : reset back the timestamp 2011-02-02 20:10:57 +02:00
Georgi Kodinov
72ae1d65dd merge to 5.1. 2011-02-02 19:05:28 +02:00
Georgi Kodinov
a70c34bf0f Fixes for Bug #55755 and Bug #52315 part 2
Bug #55755 : Date STD variable signness breaks server on FreeBSD and OpenBSD

* Added a check to configure on the size of time_t
* Created a macro to check for a valid time_t that is safe to use with datetime 
  functions and store in TIMESTAMP columns.
* Used the macro consistently instead of the ad-hoc checks introduced by 52315
* Fixed compliation warnings on platforms where the size of time_t is smaller than
  the size of a long (e.g. OpenBSD 4.8 64 amd64).

Bug #52315: utc_date() crashes when system time > year 2037

* Added a correct check for the timestamp range instead of just variable size check to
SET TIMESTAMP.
* Added overflow checking before converting to time_t. 
* Using a correct localized error message in this case instead of the generic error.
* Added a test suite.
* fixed the checks so that they check for unsigned time_t as well. Used the checks 
  consistently across the source code.
* fixed the original test case to expect the new error code.
2011-02-02 18:51:35 +02:00
Ole John Aske
59269b1da1 Fix for bug#57030: ('BETWEEN' evaluation is incorrect')
Root cause for this bug is that the optimizer try to detect&
optimize the special case:
      
'<field>  BETWEEN c1 AND c1' and handle this as the condition '<field>  = c1'
            
This was implemented inside add_key_field(.. *field, *value[]...)
which assumed field to refer key Field, and value[] to refer a [low...high]
constant pair. value[0] and value[1] was then compared for equality.
            
In a 'normal' BETWEEN condition of the form '<field>  BETWEEN val1 and val2' the
BETWEEN operation is represented with an argementlist containing the
values [<field>, val1, val2] - add_key_field() is then called with
parameters field=<field>, *value=val1.
            
However, if the BETWEEN predicate specified:
            
 1)  '<const1>  BETWEEN<const2>  AND<field>
            
the 'field' and 'value' arguments to add_key_field() had to be swapped.
This was implemented by trying to cheat add_key_field() to handle it like:
            
 2) '<const1>  GE<const2>  AND<const1>  LE<field>'
            
As we didn't really replace the BETWEEN operation with 'ge' and 'le',
add_key_field() still handled it as a 'BETWEEN' and compared the (swapped)
arguments<const1>  and<const2>  for equality. If they was equal, the
condition 1) was incorrectly 'optimized' to:
            
 3) '<field>  EQ <const1>'
            
This fix moves this optimization of '<field>  BETWEEN c1 AND c1' into
add_key_fields() which then calls add_key_equal_fields() to collect 
key equality / comparison for the key fields in the BETWEEN condition.
2011-02-01 13:20:16 +01:00
Igor Babaev
8041013fb1 Back-ported the patch for bug #59696 from mysql-5.6 code line.
The patch fixed the following optimizer defect: when performing
substitution for best equal fields into where conditions to be
able to do their evaluations as soon as possible the optimizer 
skipped conditions over views. That could lead to suboptimal 
execution of queries that used views.  
Slightly changed the test case to demonstrate the performance
improvements if this fix.
2011-01-31 19:33:32 -08:00
Sandeep Doddaballapur
f6258063c6 automerge 2011-01-31 11:21:30 +05:30
Vladislav Vaintroub
b19e99865c MWL#55 : cherrypick MySQL 5.5 CMake/build improvements in order
to be able to build MSI based installer
2011-01-29 18:51:12 +01:00
John H. Embretsen
26528be711 Fix for Bug#56817 - mysqlhotcopy tests fail when DBI and DBD-mysql perl modules are not found
Third updated patch - this version also includes copyright notice in added Perl script.
This patch implements a check for such modules at runtime. If modules are not found or unable to load, the test is skipped with 
the following message:
            
            [ skipped ]  Test needs Perl modules DBI and DBD::mysql
            
Checks are done via a helper Perl script which looks for the module in a runtime environment that is as similar to that of the 
mysqlhotcopy script as possible (thus not intended for Windows environments at this time).
The helper script tells mysql-test about the result by writing information to a temporary file that is later read by mysql-test.
See comments in added files (have_dbi_dbd-mysql.inc and checkDBI_DBD-mysql.pl) for details.
The patch also removes the mysqlhotcopy tests from the list of disabled tests.
2011-01-29 12:38:36 +01:00
Igor Babaev
9ea80ac481 Merge 2011-01-28 18:54:30 -08:00
Sergey Vojtovich
7a3d113d9d Merge. 2011-01-28 14:51:28 +03:00
Sergey Vojtovich
e8ffaf4ae7 Merge. 2011-01-28 14:46:10 +03:00
Igor Babaev
d492903502 Fixed LP bug #707827.
This bug could manifest itself when hash join over a varchar column
with NULL values in some rows was used. It happened because the
function key_buf_cmp erroneously returned FALSE when one of the joined
key fields was null while the second was not.
Also fixed two other bugs in the functions key_hashnr and key_buf_cmp 
that could possibly lead to wrong results for some queries that
used hash join over several columns with nulls.
Also reverted the latest addition of the test case for bug #45092. It
had been already backported earlier.
2011-01-27 21:23:02 -08:00
unknown
bd8942070b After-merge fixes for MWL#47 (which causes changes in binlog positions in .result files).
Also fix one incorrect printf() format.
2011-01-27 15:56:44 +01:00
Sandeep Doddaballapur
ec807c5fba 2011-01-27 11:37:55 +05:30
Igor Babaev
3e868cd3cb Fixed LP bug #707848.
This was another bug in the patch for bug 698882. The new
code from this patch did not ensured that substitutions
of fields for best equal fields were performed on all
AND-OR levels. As a result substitutions for best fields
in some predicates that had been used by the range optimizer
were not actually performed while range plans could employ
these substitutions. This could lead to inconsistent data
structures and ultimately to a crash.
2011-01-26 20:45:23 -08:00
Igor Babaev
a624f99e98 Fixed LP bug #707555.
The bug was in the code of the patch fixing bug 698882.
With improper casting the method store_key_field::change_source_field
was called for the elements of the array TABLE_REF::key_copy that
were either of a different type or not allocated at all. This caused
crashes in some queries.
2011-01-26 11:30:29 -08:00
Mattias Jonsson
ec5e43da33 merge 2011-01-26 16:50:21 +01:00
unknown
6dbd796074 Merge three Percona patches into mariadb-5.2-rpl:
- MWL#47, allowing to annotate row-based binlog events with the SQL test of
   the originating query (eg. in mysqlbinlog output).

 - row_based_replication_without_primary_key.patch, providing more intelligent
   selection of index to use on slave when applying row-based binlog events
   for tables with no primary key.

 - Make mysqlbinlog omit redundant `use` around BEGIN/SAVEPOINT/COMMIT/
   ROLLBACK in 5.0 binlogs.
2011-01-26 15:35:03 +01:00
Sandeep Doddaballapur
a9d18719f6 2011-01-25 12:14:28 +05:30
Igor Babaev
edeeb023bc Post-second-review fixes for the patch that added the code allowing to use
hash join over equi-join conditions without supporting indexes.
2011-01-24 14:54:50 -08:00
Mattias Jonsson
e24398ee42 Bug#59297: Can't find record in 'tablename' on update inner join
Regression introduced in bug#52455. Problem was that the
fixed function did not set the last used partition variable, resulting
in wrong partition used when storing the position of the newly
retrieved row.

Fixed by setting the last used partition in ha_partition::index_read_idx_map.
2011-01-24 13:41:44 +01:00
Igor Babaev
ec368ab9fa Merge 2011-01-21 22:48:28 -08:00
Michael Widenius
7057545699 Fixed some mysql-test-run failures and compile warnings/errors
Added logging of all possible fatal table errors if --log-warnings set to > 1


mysql-test/extra/rpl_tests/rpl_EE_err.test:
  Safety fix
mysql-test/extra/rpl_tests/rpl_row_basic.test:
  Added suppression of possible error message (so that one can run test with --log-warnings=2)
mysql-test/r/archive.result:
  Added suppression of possible error message (so that one can run test with --log-warnings=2)
mysql-test/r/csv.result:
  Added suppression of possible error message (so that one can run test with --log-warnings=2)
mysql-test/suite/maria/r/maria-autozerofill.result:
  Added suppression of possible error message (so that one can run test with --log-warnings=2)
mysql-test/suite/maria/t/maria-autozerofill.test:
  Added suppression of possible error message (so that one can run test with --log-warnings=2)
mysql-test/suite/maria/t/maria-recover.test:
  Added suppression of possible error message (so that one can run test with --log-warnings=2)
mysql-test/suite/parts/t/partition_recover_myisam.test:
  Added suppression of possible error message (so that one can run test with --log-warnings=2)
mysql-test/suite/rpl/r/rpl_bug38694.result:
  Added suppression of possible error message (so that one can run test with --log-warnings=2)
mysql-test/suite/rpl/r/rpl_idempotency.result:
  Added suppression of possible error message (so that one can run test with --log-warnings=2)
mysql-test/suite/rpl/r/rpl_ignore_table.result:
  Added suppression of possible error message (so that one can run test with --log-warnings=2)
mysql-test/suite/rpl/r/rpl_row_basic_11bugs.result:
  Added suppression of possible error message (so that one can run test with --log-warnings=2)
mysql-test/suite/rpl/r/rpl_row_conflicts.result:
  Added suppression of possible error message (so that one can run test with --log-warnings=2)
mysql-test/suite/rpl/r/rpl_temporary_errors.result:
  Added suppression of possible error message (so that one can run test with --log-warnings=2)
mysql-test/suite/rpl/t/rpl_bug38694.test:
  Added suppression of possible error message (so that one can run test with --log-warnings=2)
mysql-test/suite/rpl/t/rpl_idempotency.test:
  Added suppression of possible error message (so that one can run test with --log-warnings=2)
mysql-test/suite/rpl/t/rpl_ignore_table.test:
  Added suppression of possible error message (so that one can run test with --log-warnings=2)
mysql-test/suite/rpl/t/rpl_row_basic_11bugs.test:
  Added suppression of possible error message (so that one can run test with --log-warnings=2)
mysql-test/suite/rpl/t/rpl_row_conflicts.test:
  Added suppression of possible error message (so that one can run test with --log-warnings=2)
mysql-test/suite/rpl/t/rpl_temporary_errors.test:
  Added suppression of possible error message (so that one can run test with --log-warnings=2)
mysql-test/t/archive.test:
  Added suppression of possible error message (so that one can run test with --log-warnings=2)
mysql-test/t/csv.test:
  Added suppression of possible error message (so that one can run test with --log-warnings=2)
sql/handler.cc:
  If running with --assert-of-crashed-table or --log-warnings > 1 then print engine error to log
sql/sql_select.cc:
  Disable not initialized warning from gcc
strings/Makefile.am:
  Fixed compiler error on Solaris 10 (duplicate strmov() function)
2011-01-20 19:08:12 +02:00
Martin Hansson
03db0de64f Bug#59173: Failure to handle DATE(TIME) values where Year, Month or Day is
ZERO
      
When dates are represented internally as strings, i.e. when a string constant
is compared to a date value, both values are converted to long integers,
ostensibly for fast comparisons. DATE typed integer values are converted to
DATETIME by multiplying by 1,000,000 (each digit pair representing hour,
minute and second, respectively). But the mechanism did not distuinguish
cached INTEGER values, already in correct format, from newly converted
strings.

Fixed by marking the INTEGER cache as being of DATETIME format.
2011-01-19 15:09:32 +01:00
Alexander Barkov
5574a2cd91 Bug#44332 my_xml_scan reads behind the end of buffer
Problem: the scanner function tested for strings "<![CDATA[" and
"-->" without checking input string boundaries, which led to valgrind's
"Conditional jump or move depends on uninitialised value(s)" error.

Fix: Adding boundary checking.

  @ mysql-test/r/xml.result
  @ mysql-test/t/xml.test
  Adding test

  @ strings/xml.c
  Adding a helper function my_xml_parser_prefix_cmp(),
  with input string boundary check.
2011-01-18 09:38:41 +03:00
unknown
5c4e64a574 MWL#89
Fixed query plans with loose index scan degraded into index scan.

Analysis:
With MWL#89 subqueries are no longer executed and substituted during
the optimization of the outer query. As a result subquery predicates
that were previously executed and substituted by a constant before
the range optimizer were present as regular subquery predicates during
range optimization. The procedure check_group_min_max_predicates()
had a naive test that ruled out all queries with subqueries in the
WHERE clause. This resulted in worse plans with MWL#89.

Solution:
The solution is to refine the test in check_group_min_max_predicates()
to check if each MIN/MAX argument is referred to by a subquery predicate.
2011-01-18 00:53:41 +02:00
Alexander Barkov
6665ca25af Bug#58371 Assertion failed: !s.uses_buffer_owned_by(this) with format string function
Introduced by the fix for bug#44766.

Problem: it's not correct to use args[0]->str_value as a buffer,
because args[0] may need this buffer for its own purposes.

Fix: adding a new class member tmp_value to use as return value.

  @ mysql-test/r/ctype_many.result
  @ mysql-test/t/ctype_many.test
  Adding tests

  @ sql/item_strfunc.cc
  Changing code into traditional style:
  use "str" as a buffer for the argument and tmp_value for the result value.

  @ sql/item_strfunc.h
  Adding tmp_value
2011-01-17 15:11:33 +03:00
Alexander Barkov
a2850a2f53 Bug#59149 valgrind warnings with "like .. escape .." function
Problem: when processing a query like:
  SELECT '' LIKE '1' ESCAPE COUNT(1);
escape_item->val_str() was never executed and the "escape" class member
stayed initialized, which led to valgrind uninitialized memory error.
      
Note, a query with some tables in "FROM" clause
returns ER_WRONG_ARGUMENTS in the same situation:

   SELECT '' LIKE '1' ESCAPE COUNT(1) FROM t1;
   ERROR 1210 (HY000): Incorrect arguments to ESCAPE

Fix: disallowing using aggregate functions in ESCAPE clause,
even if there are no tables used. There is no much use of that anyway.
2011-01-17 12:30:22 +03:00
Nirbhay Choubey
208b677637 Bug#58221 : mysqladmin --sleep=x --count=x keeps looping
When mysqldadmin is run with sleep and count options,
it goes into an infinite loop and keeps executing the
specified command.

This happened because the statement, responsible for
decrementing the count value, was missing.

Fixed by adding a statement which will decrement the
count value for each iteration.


client/mysqladmin.cc:
  Bug#58221 : mysqladmin --sleep=x --count=x keeps looping
  
  Added a condition to check and decrement the count
  value stored in nr_iterations per iteration.
mysql-test/r/mysqladmin.result:
  Added a testcase for Bug#58221.
mysql-test/t/mysqladmin.test:
  Added a testcase for Bug#58221.
2011-01-16 02:04:08 +05:30
unknown
12c6d1f355 BUG#49124 Security issue with /*!-versioned */ SQL statements on Slave
Backport to 5.0.

/*![:version:] Query Code */, where [:version:] is a sequence of 5 
digits representing the mysql server version(e.g /*!50200 ... */),
is a special comment that the query in it can be executed on those 
servers whose versions are larger than the version appearing in the 
comment. It leads to a security issue when slave's version is larger 
than master's. A malicious user can improve his privileges on slaves. 
Because slave SQL thread is running with SUPER privileges, so it can
execute queries that he/she does not have privileges on master.
      
This bug is fixed with the logic below: 
- To replace '!' with ' ' in the magic comments which are not applied on
  master. So they become common comments and will not be applied on slave.
      
- Example:
  'INSERT INTO t1 VALUES (1) /*!10000, (2)*/ /*!99999 ,(3)*/
   will be binlogged as
  'INSERT INTO t1 VALUES (1) /*!10000, (2)*/ /* 99999 ,(3)*/
2011-01-15 13:48:16 +08:00
Alexey Botchkov
335fcd91b3 Bug#52208 gis fails on some platforms (Solaris, HP-UX, Linux)
IA64 and some other arcitectures use different float rounding mode and
        i find no decent way to make it consistent.
        So the test changed to be insensitive to this.

per-file messages:
  mysql-test/t/gis.test
Bug#52208      gis fails on some platforms (Solaris, HP-UX, Linux)
        --replace_result added
2011-01-15 00:56:09 +04:00
Nirbhay Choubey
ab2d29ec6b Bug#13618 : mysqldump --xml omits comment on table field
When mysqldump tries to dump information in xml format,
the result does not contain field level comments.

In order to retrieve various informations for a field/column,
mysqldump currently uses 'show fields from <tab>' statement.
The attributes returned by the statement lacks the information
regarding field comments.

Fixed by changing the query to one that probes I_S to retrieve
required field informations, including the field comment.


client/mysqldump.c:
  Bug#13618 : mysqldump --xml omits comment on table field.
  
  Replaced the 'show fields' command by a statement that
  queries I_S, in order to retrieve information on all the
  attributes that 'show fields' returns along-with an additional
  column_comment information.
mysql-test/r/client_xml.result:
  Result modifications for bug#13618.
mysql-test/r/mysqldump.result:
  Result modifications for bug#13618.
mysql-test/t/mysqldump.test:
  Added a testcase for bug#13618.
2011-01-14 19:50:34 +05:30
Sergey Petrunya
ff7f5879b5 Merge 5.3-subquery-bugfixing -> 5.3 2011-01-18 00:26:04 +03:00
Igor Babaev
c0d6079d1a Corrected test case for bug 698882 to make it platform independent 2011-01-15 23:39:51 -08:00
Igor Babaev
e32efc013a Merge 2011-01-15 12:42:32 -08:00
Igor Babaev
84a0c9b2a2 Fixed LP bug #698882.
Made sure that the optimal fields are used by TABLE_REF objects
when building index access keys to joined tables.
Fixed a bug in the template function that sorts the elements of
a list using the bubble sort algorithm. The bug caused poor
performance of the function. Also added an optimization that
skips comparison with the most heavy elements that has been 
already properly placed in the list.
Made the comparison of the fields belonging to the same Item_equal
more granular: fields belonging to the same table are also ordered
according to some rules.
2011-01-15 11:14:36 -08:00
Igor Babaev
92f2392eb5 Merge 2011-01-14 23:53:27 -08:00
Igor Babaev
0aebdc115f Ported the fix for LP bug #702310 / bug #59493.
An assertion failure was triggered for a 6-way join query that used two
join buffers.
The failure happened because every call of JOIN_CACHE::join_matching_records
saved and restored status of all tables that were accessed before the table
join_tab. It must do it only for those of them that follow the last table 
using a join buffer.
2011-01-14 22:55:56 -08:00
Sergey Petrunya
770548442f Bug#46692 Crash occurring on queries with nested FROM subqueries using materialization
- Backport testcases
- We have a different fix because we've fixed part of the problem as part of fix for LPBUG#602574.
2011-01-15 02:07:04 +03:00
Sergey Petrunya
9dc14aa76e Backport testcase: BUG#45863 "Assertion failed: (fixed == 0), function fix_fields(), file item.cc, line 4448"
(The fix was backported with subquery code backport)
2011-01-14 20:40:16 +03:00
Sergey Petrunya
d0535d80a1 Test case backport for: Bug#42580 - Innodb's ORDER BY ..LIMIT returns no rows for null-safe operator <=> NULL 2011-01-14 16:38:41 +03:00
Sergey Petrunya
71be71da15 Testcase backport: Bug#43249 2011-01-14 14:13:11 +03:00
Sergey Petrunya
b1e0e22e6d Testcase backport: BUG#46548 IN-subqueries return 0 rows with materialization=on
(the bug itself was fixed during the subquery code backport)
2011-01-14 13:51:30 +03:00
Sergey Petrunya
7fd3c9e2ff Merge backported subquery bugfixes/testcases into MariaDB 5.3 2011-01-14 13:07:50 +03:00
Igor Babaev
c8e56e3713 Fixed LP bug #702310 / bug #59493.
An assertion failure was triggered for a 6-way join query that uses two
join buffers.
The failure happened because every call of the function flush_cached_records()
saved and restored status of all tables before the table join_tab. It
must do it only for those of them that follow the last table that uses
a join buffer.
2011-01-14 02:05:10 -08:00
Sergey Petrunya
b266e5b972 Backport testcase for: Bug#43360 - Server crash with a simple multi-table update 2011-01-14 00:47:03 +03:00
Sergey Petrunya
e43c7a2ff5 Testcase Backport: BUG#48093: 6.0 Server not processing equivalent IN clauses properly 2011-01-14 00:15:44 +03:00
Sergey Petrunya
26599d9260 Backport testcase for:
Bug #45092: join buffer contains two blob columns one of which is used in the key employed to access the joined table
2011-01-13 23:47:15 +03:00
Sergey Petrunya
d2cbb10443 Backport of (see below) + temporary measures to make SJ-Materialization work with join buffering.
Date: Mon, 01 Nov 2010 15:15:25 -0000
3272 Roy Lyseng        2010-11-01
Bug#52068: Optimizer generates invalid semijoin materialization plan

When MaterializeScan semijoin strategy was used and there were one
or more outer dependent tables before the semijoin tables, the scan
over the materialized table was not properly reset for each row of
the prefix outer tables.

Example: suppose we have a join order:

  ot1 SJ-Mat-Scan(it2 it3)  ot4

Notice that this is called a MaterializeScan, even though there is an
outer table ahead of the materialized tables. Usually a MaterializeScan
has the outer tables after the materialized table, but this is
a special (but legal) case with outer dependent tables both before and
after the materialized table.

For each qualifying row from ot1, a new scan over the materialized
table must be set up. The code failed to do that, so all scans after
the first one returned zero rows from the materialized table.
2011-01-13 19:25:31 +03:00
Luis Soares
06e21d5cd9 Automerge from bug branch into latest mysql-5.1. 2011-01-13 11:41:00 +00:00
Martin Hansson
716b64cdb0 Bug#58165: "my_empty_string" gets modified and causes LOAD DATA to fail and
other crashes

Some string manipulating SQL functions use a shared string object intended to
contain an immutable empty string. This object was used by the SQL function
SUBSTRING_INDEX() to return an empty string when one argument was of the wrong
datatype. If the string object was then modified by the sql function INSERT(),
undefined behavior ensued.

Fixed by instead modifying the string object representing the function's
result value whenever string manipulating SQL functions return an empty
string.

Relevant code has also been documented.
2011-01-13 08:57:15 +01:00
Bjorn Munch
a581444c05 merge from 5.1-mtr 2011-01-12 23:29:53 +01:00
Luis Soares
5e9cb07b66 BUG#59177: mysqlbinlog_row_big fails on Windows with out of memory
The test case fails with out of memory while updating a table
with several multi-megabytes sized rows. This can probably be too
exhausting for PB2 env.
      
The quick fix here is to reduce the size of the biggest
row (256MB) so that it becomes a little smaller (64MB).
2011-01-12 19:32:45 +00:00
Michael Widenius
1fbcaf2e61 Merge with 5.2 2011-01-12 17:50:29 +02:00
Michael Widenius
4c576fd492 Merge with 5.1 2011-01-12 17:38:13 +02:00
Georgi Kodinov
7f9ce73d49 merge 2011-01-12 17:08:52 +02:00
Bjorn Munch
251869175e merge from 5.1 2011-01-12 15:20:40 +01:00
Dmitry Lenev
599457ae2c Fix for bug #58499 "DEFINER-security view selecting from
INVOKER-security view access check wrong".

When privilege checks were done for tables used from an 
INVOKER-security view which in its turn was used from 
a DEFINER-security view connection's active security
context was incorrectly used instead of security context
with privileges of the second view's creator.

This meant that users which had enough rights to access
the DEFINER-security view and as result were supposed to 
be able successfully access it were unable to do so in 
cases when they didn't have privileges on underlying tables 
of the INVOKER-security view.

This problem was caused by the fact that for INVOKER-security
views TABLE_LIST::security_ctx member for underlying tables
were set to 0 even in cases when particular view was used from 
another DEFINER-security view. This meant that when checks of
privileges on these underlying tables was done in
setup_tables_and_check_access() active connection security 
context was used instead of context corresponding to the 
creator of caller view.

This fix addresses the problem by ensuring that underlying
tables of an INVOKER-security view inherit security context
from the view and thus correct security context is used for
privilege checks on underlying tables in cases when such view 
is used from another view with DEFINER-security.

mysql-test/r/view_grant.result:
  Added coverage for various combinations of DEFINER and
  INVOKER-security views, including test for bug #58499
  "DEFINER-security view selecting from INVOKER-security
  view access check wrong".
mysql-test/t/view_grant.test:
  Added coverage for various combinations of DEFINER and
  INVOKER-security views, including test for bug #58499
  "DEFINER-security view selecting from INVOKER-security
  view access check wrong".
sql/sql_view.cc:
  When opening a non-suid view ensure that its underlying 
  tables will get the same security context as use for
  checking privileges on the view, i.e. security context
  of view invoker. This context can be different from the
  security context which is currently active for connection 
  in cases when this non-suid view is used from a view with
  suid security. Inheriting security context in such situation
  allows correctly apply privileges of creator of suid view
  in checks for tables of non-suid view (since in this 
  situation creator/definer of suid view serves as invoker
  for non-suid view).
2011-01-12 16:08:30 +03:00
Alexey Botchkov
33c78e328f Bug #57321 crashes and valgrind errors from spatial types
Item_func_spatial_collection::fix_length_and_dec didn't call parent's method, so
        the maybe_null was set to '0' after it. But in this case the result was
        just NULL, that caused wrong behaviour.

per-file comments:
  mysql-test/r/gis.result
Bug #57321 crashes and valgrind errors from spatial types 
        test result updated.

  mysql-test/t/gis.test
Bug #57321 crashes and valgrind errors from spatial types 
        test case added.
  sql/item_geofunc.h
Bug #57321 crashes and valgrind errors from spatial types 
        Item_func_geometry::fix_length_and_dec() called in
        Item_func_spatial_collection::fix_length_and_dec().
2011-01-12 17:02:41 +04:00
Sergey Petrunya
ad78c24a20 BUG#665669: Result differences on query re-execution
- Cause: handler::in_range_check_pushed_down was not reset when a 
  command would call handler->idx_cond_push() without later calling
  handler->index_end().
- Fix: reset the variable in handler->reset(), too (like we do with other
  Index Condition Pushdown members).
2011-01-12 15:00:10 +03:00
unknown
108e9ee84e MBug#702303: Spurious use statements in output from mysqlbinlog --rewrite-db="a->b" 2011-01-13 13:28:36 +01:00
Oystein Grovlen
651313bf91 Bug#59211: Select Returns Different Value for min(year) Function
get_year_value() contains code to convert 2-digits year to
4-digits.  The fix for Bug#49910 added a check on the size of
the underlying field so that this conversion is not done for
YEAR(4) values. (Since otherwise one would convert invalid
YEAR(4) values to valid ones.)

The existing check does not work when Item_cache is used, since
it is not detected when the cache is based on a Field.  The
reported change in behavior is due to Bug#58030 which added
extra cached items in min/max computations.

The elegant solution would be to implement
Item_cache::real_item() to return the underlying Item.
However, some side effects are observed (change in explain
output) that indicates that such a change is not straight-
forward, and definitely not appropriate for an MRU.

Instead, a Item_cache::field() method has been added in order
to get access to the underlying field.  (This field() method
eliminates the need for Item_cache::eq_def() used in
test_if_ref(), but in order to limit the scope of this fix,
that code has been left as is.)


mysql-test/r/type_year.result:
  Added test case for Bug#59211.
mysql-test/t/type_year.test:
  Added test case for Bug#59211.
sql/item.h:
  Added function Item_cache::field() to get access to the
  underlying Field of a cached field Value.
sql/item_cmpfunc.cc:
  Also check underlying fields of Item_cache, not just Item_Field,
  when checking whether the value is of type YEAR(4) or not.
2011-01-12 10:37:15 +01:00
Martin Hansson
3c5662c195 Bug#58207: invalid memory reads when using default column value and
tmptable needed

The function DEFAULT() works by modifying the the data buffer pointers (often
referred to as 'record' or 'table record') of its argument. This modification
is done during name resolution (fix_fields().) Unfortunately, the same
modification is done when creating a temporary table, because default values
need to propagate to the new table.

Fixed by skipping the pointer modification for fields that are arguments to
the DEFAULT function.
2011-01-12 09:55:31 +01:00
Sergey Petrunya
6bc209c235 Merge BUG#675118 into maria-5.1 2011-01-12 11:30:18 +03:00
Michael Widenius
050c004f5e Merge with 5.1
Fixes to get Aria handler tests to work.
Fixes LP#697597 "HANDLER + Aria asserts in maria-5.3-handler"
2011-01-11 15:36:41 +02:00
unknown
b0be3e2c68 Merge MWL#89 into 5.3 main. 2011-01-11 14:04:08 +02:00
Sergey Petrunya
ef62320957 BUG#675118: Elimination of a table results in an invalid execution plan
- Fix for MySQL BUG#52357 added NESTED_JOIN::is_fully_covered() which would 
  not take into account that MariaDB's table elimination could eliminate tables
  from join plan (and so, from join nest).
  Fixed the check in the function to compare post-table-elimination numbers.
2011-01-11 12:42:16 +02:00
Bjorn Munch
5376a76dea Bug #58900 query_get_value crashes when result begins with dollar sign
Generalized fix for recursive backtick
Optional arg to eval_expr telling it not to interpret
2011-01-11 10:54:42 +01:00
Michael Widenius
2eaa76b844 Automatic merge with 5.1 2011-01-10 23:42:47 +02:00
Michael Widenius
505c663a1e - Fixed that Aria works with HANDLER commands
- Added test case for Aria
- Tested HANDLER with HEAP (changes to HEAP code will be pushed in 5.3)
- Moved all HANDLER test to suite/handler.


mysql-test/Makefile.am:
  Added suite/handler
mysql-test/mysql-test-run.pl:
  Added suite/handler
mysql-test/r/lock_multi.result:
  Remove test that is already in handler test suite
mysql-test/suite/handler/aria.result:
  Test for HANDLER with Aria storage engine
mysql-test/suite/handler/aria.test:
  Test for HANDLER with Aria storage engine
mysql-test/suite/handler/handler.inc:
  Extended the general handler test
  Moved interface testing to 'interface.test'
mysql-test/suite/handler/init.inc:
  Common init for handler tests.
mysql-test/suite/handler/innodb.result:
  New results
mysql-test/suite/handler/innodb.test:
  Update to use new include files
mysql-test/suite/handler/interface.result:
  Test of HANDLER interface (not storage engine dependent parts)
mysql-test/suite/handler/interface.test:
  Test of HANDLER interface (not storage engine dependent parts)
mysql-test/suite/handler/myisam.result:
  New results
mysql-test/suite/handler/myisam.test:
  Update to use new include files
mysql-test/t/lock_multi.test:
  Remove test that is already in handler test suite
mysys/tree.c:
  Added missing handling of read previous (showed up in HEAP testing)
sql/handler.cc:
  Don't marka 'HA_ERR_RECORD_CHANGED' as fatal (can be used with HANDLER READ, especially with MEMORY ENGINE)
sql/handler.h:
  Added prototype for can_continue_handler_scan()
sql/sql_handler.cc:
  Re-initialize search if we switch from key to table search.
  Check if handler can continue searching between calls (via can_continue_handler_scan())
  Don't write common not fatal errors to log
storage/maria/ma_extra.c:
  Don't set index 0 as default. This forces call to ma_check_index() to set up index variables.
storage/maria/ma_ft_boolean_search.c:
  Ensure that info->last_key.keyinfo is set
storage/maria/ma_open.c:
  Don't set index 0 as default. This forces call to ma_check_index() to set up index variables.
storage/maria/ma_rkey.c:
  Trivial optimization
storage/maria/ma_rnext.c:
  Added missing code from mi_rnext.c to ensure that handler next/prev works.
storage/maria/ma_rsame.c:
  Simple optimizations
storage/maria/ma_search.c:
  Initialize info->last_key once and for all when we change keys.
storage/maria/ma_unique.c:
  Ensure that info->last_key.keyinfo is up to date.
2011-01-10 23:22:40 +02:00
Mattias Jonsson
c574a9c414 Bug#57924: crash when creating partitioned table with
multiple columns in the partition key

ndb crash if duplicate columns in the partitioning key.

Backport from mysql-5.1-telco-7.0, see bug#53354.

Changed from case sensitive field name comparision
to non case sensitive too.

mysql-test/r/partition_error.result:
  updated result
mysql-test/t/partition_error.test:
  Added test for the error in non-ndb partitioned table.
sql/sql_partition.cc:
  Added check for duplicated field names in the
  partitioning key.
2011-01-10 16:20:28 +01:00
unknown
32379aeba9 Merge Percona patch MWL#47 into mariadb 5.2-percona.
This patch adds options to annotate the binlog (and the mysqlbinlog
output) with the original SQL query for queries that are logged
using row-based replication.
2011-01-10 14:53:09 +01:00
Mattias Jonsson
2f47416678 merge 2011-01-10 12:56:27 +01:00
Georgi Kodinov
1ec2fccd6d automerge 2011-01-07 15:30:42 +02:00
Igor Babaev
ed2405788f Fixed vargrind problems in check_join_cache_usage().
Merged the patch for bug 697557. Adjusted the results.
2011-01-06 11:40:01 -08:00
Igor Babaev
cb4fa7f401 Fixed LP bug #697557.
When stored in a key buffer any varchar field has a length prefix
that always takes 2 bytes.
2011-01-05 15:03:30 -08:00
Michael Widenius
215043b7c2 Merge with 5.1 2011-01-05 16:03:58 +02:00
Igor Babaev
af800fd92f The patch adds the code that allows to use equi-join conditions
for hash join in the cases when there are no suitable indexes
for these conditions.
2011-01-04 21:59:41 -08:00
Jon Olav Hauglid
405ac384f5 Bug #50619 assert in handler::update_auto_increment
This assert could be triggered if -1 was inserted into
an auto increment column by a statement writing more than
one row.

Unless explicitly given, an interval of auto increment values
is generated when a statement first needs an auto increment
value. The triggered assert checks that the auto increment
counter is equal to or higher than the lower bound of this
interval.

Generally, the auto increment counter starts at 1 and is
incremented by 1 each time it is used. However, inserting an
explicit value into the auto increment column, sets the auto
increment counter to this value + 1 if this value is higher
than the current value of the auto increment counter.

This bug was triggered if the explicit value was -1. Since the
value was converted to unsigned before any comparisons were made,
it was found to be higher than the current vale of the auto
increment counter and the counter was set to -1 + 1. This value
was below the reserved interval and caused the assert to be
triggered the next time the statement tried to write a row.

With the patch for Bug#39828, this bug is no longer repeatable.
Now, -1 + 1 is detected as an "overflow" which causes the auto
increment counter to be set to ULONGLONG_MAX. This avoids hitting
the assert for the next insert and causes a new interval of
auto increment values to be generated. This resolves the issue.

This patch therefore only contains a regression test and no code
changes. Test case added to auto_increment.test.
2011-01-04 14:36:37 +01:00
Mattias Jonsson
544451bbd8 merge 2011-01-04 14:13:20 +01:00
Michael Widenius
e63b5546c5 Implementation of MWL#172: Add support for prepared statements to HANDLER READ
It includes speed optimizations for HANDLER READ by caching as much as possible in HANDLER OPEN
Other things:
- Added mysqld option --disable-thr-alarm to be able to benchmark things without thr_alarm
- Changed 'Locked' state to 'System lock' and 'Table lock' (these where used in the code but never shown to end user)
- Better error message if mysql_install_db.sh fails
- Moved handler function prototypes to sql_handler.h
- Remove not anymore used 'thd->locked' member


include/thr_alarm.h:
  Added my_disable_thr_alarm
include/thr_lock.h:
  Add new member to THR_LOCK_DATA to remember original lock type state. This is needed as thr_unlock() resets type to TL_UNLOCK.
mysql-test/include/check_no_concurrent_insert.inc:
  Locked -> Table lock
mysql-test/include/handler.inc:
  Locked -> Table lock
mysql-test/r/handler_innodb.result:
  Updated results for new tests
mysql-test/r/handler_myisam.result:
  Updated results for new tests
mysql-test/r/sp-threads.result:
  Locked -> Table lock
mysql-test/suite/binlog/t/binlog_stm_row.test:
  Locked -> Table lock
mysql-test/suite/funcs_1/datadict/processlist_val.inc:
  Locked -> Table lock
mysql-test/suite/pbxt/t/lock_multi.test:
  Locked -> Table lock
mysql-test/suite/sys_vars/r/concurrent_insert_func.result:
  Locked -> Table lock
mysql-test/suite/sys_vars/t/concurrent_insert_func.test:
  Locked -> Table lock
mysql-test/suite/sys_vars/t/delayed_insert_limit_func.test:
  Locked -> Table lock
mysql-test/suite/sys_vars/t/query_cache_wlock_invalidate_func.test:
  Locked -> Table lock
mysql-test/suite/sys_vars/t/sql_low_priority_updates_func.test:
  Locked -> Table lock
mysql-test/t/insert_notembedded.test:
  Locked -> Table lock
mysql-test/t/lock_multi.test:
  Locked -> Table lock
mysql-test/t/merge-big.test:
  Locked -> Table lock
mysql-test/t/multi_update.test:
  Locked -> Table lock
mysql-test/t/query_cache_28249.test:
  Locked -> Table lock
mysql-test/t/sp_notembedded.test:
  Locked -> Table lock
mysql-test/t/sp_sync.test:
  Locked -> Table lock
mysql-test/t/status.test:
  Locked -> Table lock
mysql-test/t/trigger_notembedded.test:
  Locked -> Table lock
mysys/thr_alarm.c:
  Added option to disable thr_alarm
mysys/thr_lock.c:
  Detect loops
scripts/mysql_install_db.sh:
  Give better error message if something goes wrong
sql/Makefile.am:
  Added sql_handler.h
sql/lock.cc:
  Split functions to allow one to cache value if store_lock() (for HANDLER functions).
  - Split mysql_lock_tables() into two functions, where first one allocates MYSQL_LOCK and other other one uses it.
  - Made get_lock_data() an external function.
  - Added argument to mysql_unlock_tables() to not free sql_lock.
  - Added argument to reset_lock_data() to reset lock structure to initial state (as after get_lock_data())
sql/mysql_priv.h:
  Moved handler function prototypes to sql_handler.h
  Added new lock functions.
sql/mysqld.cc:
  Added --thread-alarm startup option
sql/net_serv.cc:
  Don't call vio_blocking() if not needed
sql/sql_base.cc:
  include sql_handler.h
sql/sql_class.cc:
  include sql_handler.h
  Remove not anymore used 'thd->locked' member
sql/sql_class.h:
  Remove not anymore used 'thd->locked' member
sql/sql_db.cc:
  include sql_handler.h
sql/sql_delete.cc:
  include sql_handler.h
sql/sql_handler.cc:
  Rewrote all code to use SQL_HANDLER instead of TABLE_LIST (original interface)
  Rewrote mysql_ha_open() to cache all things from TABLE_LIST and items for field list, where etc.
  In mysql_ha_open() also cache MYSQL_LOCK structure from get_lock_data().
  Split functions into smaller sub functions (needed to be able to implement mysql_ha_read_prepare())
  Added mysql_ha_read_prepare() to allow one to prepare HANDLER READ.
sql/sql_handler.h:
  Interface to sql_handler.cc
sql/sql_parse.cc:
  include sql_handler.h
sql/sql_prepare.cc:
  Added mysql_test_handler_read(), prepare for HANDLER READ
sql/sql_rename.cc:
  include sql_handler.h
sql/sql_show.cc:
  Removed usage of thd->locked
sql/sql_table.cc:
  include sql_handler.h
sql/sql_trigger.cc:
  include sql_handler.h
2011-01-04 00:55:41 +02:00
unknown
92fc426386 Speed up mtr --parallel=<lots> by scheduling some slow tests earlier.
The patch also fixes a race in rpl_stop_slave.test.

On machines with lots of CPU and memory, something like `mtr --parallel=10`
can speed up the test suite enormously. However, we have a few test cases
that run for long (several minutes), and if we are unlucky and happen to
schedule those towards the end of the test suite, we end up with most
workers idle while waiting for the last slow test to end, significantly
delaying the finish of the entire suite.

Improve this by marking the offending tests as taking "long", and trying
to schedule those tests early. This reduces the time towards the end of
the test suite run where some workers are waiting with nothing to do for
the remaining workers each to finish their last test.

Also, the rpl_stop_slave test had a race which could cause it to take
a 300 seconds debug_sync timeout; this is fixed.

Testing on a 4-core 8GB machine, this patch speeds up the test suite with
around 30% for --parallel=10 (debug build), allowing to run the entire
suite in 5 minutes.
2011-01-03 15:33:39 +01:00
Igor Babaev
77cbad4b31 Corrected the test case for bug 695304.
Added a test case for bug #695442 - a duplicate of bug 694092.
2010-12-29 18:14:03 -08:00
Igor Babaev
a2a09f06bf Merge. 2010-12-29 13:45:38 -08:00
Igor Babaev
f844a7bae7 Fixed LP bug#695304.
The bug was the result of a bad merge maria-5.2-wl21 -> 5.3.
2010-12-29 11:00:22 -08:00
unknown
22639a066c Bug #50914 mysqlbinlog not handling drop of current default database
mysqlbinlog only prints "use $database" statements to its output stream
when the active default database changes between events. This will cause
"No Database Selected" error when dropping and recreating that database.

To fix the problem, we clear print_event_info->db when printing an event
of CREATE/DROP/ALTER database statements, so that the Query_log_event
after such statements will be printed with the use 'db' anyway except
transaction keywords.

mysql-test/r/mysqlbinlog.result:
  Test result for Bug#50914.
mysql-test/t/mysqlbinlog.test:
  Added test to verify if the approach of the mysqlbinlog prints
  "use $database" statements to its output stream will cause
  "No Database Selected" error when dropping and recreating
  that database.
sql/log_event.cc:
  Updated code to clear print_event_info->db when printing an event
  of CREATE/DROP/ALTER database statements, so that the Query_log_event
  after such statements will be printed with the use 'db' anyway except
  transaction keywords.
2010-12-29 11:52:57 +08:00
Igor Babaev
0dc5ef87d4 Merge 2010-12-27 14:22:05 -08:00
Igor Babaev
18dc64eca2 Fixed LP bug #694443.
One of the hash functions employed by the BNLH join algorithm
calculates the the value of hash index for key value utilizing
every byte of the key buffer. To make this calculation valid
one has to ensure that for any key value unused bytes of the 
buffer are filled with with a certain filler. We choose 0 as
a filler for these bytes.

Added an optional boolean parameter with_zerofill to the function
key_copy. If the value of the parameter is TRUE all unused bytes
of the key buffer is filled with 0.
2010-12-26 16:31:03 -08:00
Igor Babaev
1eb21dc4be Merge 2010-12-25 18:54:14 -08:00
unknown
4c800623c5 Merge MWL#163 into mariadb-5.2-rpl 2010-12-25 18:28:24 +01:00
unknown
31ed214a00 Merge MWL#136 into mariadb-5.2-rpl 2010-12-25 16:14:50 +01:00
unknown
34a48dd4a0 Merge MWL#116 into mariadb-5.2-rpl. 2010-12-25 15:42:33 +01:00
Sergey Petrunya
959bf3c1ee Bug #46680: Assertion failed in file item_subselect.cc, line 305 crashing on HAVING subquery
- Backport the testcase (the fix itself was included with the subquery optimizations backport)
2010-12-25 16:23:16 +03:00
Igor Babaev
1eb5e0e603 Merge 2010-12-24 16:24:20 -08:00
Igor Babaev
efbb3c6c90 Fixed LP bug #639935 (bug #58727).
When the optimizer creates items out of other items it does
not have to call the fix_fields method. Usually in these
cases it calls quick_fix_field() that just marks the 
created item as fixed. If the created item is an Item_func
object then calling quick_fix_field() works fine if the
arguments of the created functional item are already fixed.
Otherwise some unfixed nodes remain in the item tree and
it triggers an assertion failure whenever the item is 
evaluated.

Fixed the problem by making the method quick_fix_field
virtual and providing an implementation for the class
Item_func objects that recursively calls the method
for unfixed arguments of any functional item.
2010-12-24 15:30:23 -08:00
Igor Babaev
d9a81475c7 Fixed LP bug#694092.
In some cases the function make_cond_for_index() was mistaken
when detecting index only pushdown conditions for a table: 
a pushdown condition that was not index only could be marked
as such.
It happened because the procedure erroneously used the markers
for index only conditions that remained from the calls of
this function that extracted the index conditions for other 
tables.
Fixed by erasing index only markers as soon as they are need
anymore.
2010-12-24 14:36:35 -08:00
Igor Babaev
7d68e1ead7 Merge: mwl#24+mwl#21 5.1->5.2 2010-12-24 08:17:43 -08:00
Sergey Glukhov
bc56dcea9d Bug#57810 case/when/then : Assertion failed: length || !scale
ASSERT happens due to improper calculation of the max_length
in Item_func_div object, if dividend has max_length == 0 then
Item_func_div::max_length is set to 0 under some circumstances.
The fix:
If decimals == NOT_FIXED_DEC then set
Item_func_div::max_length to max possible
DOUBLE length value.


mysql-test/r/func_math.result:
  test case
mysql-test/t/func_math.test:
  test case
sql/item_func.cc:
  The fix:
  If decimals == NOT_FIXED_DEC then set
  Item_func_div::max_length to max possible
  DOUBLE length value.
2010-12-24 14:05:04 +03:00
Georgi Kodinov
28a06e5660 merge 2010-12-23 12:49:08 +02:00
Igor Babaev
6f2db629a0 Post-review fixes. 2010-12-22 18:45:44 -08:00
Mattias Jonsson
1615419d72 Bug#54483: valgrind errors when making warnings for multiline inserts into partition
Bug#57071: EXTRACT(WEEK from date_col) cannot be allowed as partitioning function

There were functions allowed as partitioning functions
that implicit allowed cast. That could result in unacceptable
behaviour.

Solution was to check that the arguments of date and time functions
have allowed types (field and date/datetime/time depending on function).

mysql-test/r/partition.result:
  Updated result
mysql-test/r/partition_error.result:
  Updated result
mysql-test/suite/parts/inc/part_supported_sql_funcs_main.inc:
  disabled test with not allowed arguments.
mysql-test/suite/parts/r/part_supported_sql_func_innodb.result:
  Updated result
mysql-test/suite/parts/r/part_supported_sql_func_myisam.result:
  Updated result
mysql-test/t/partition.test:
  Fixed typo in bug number and removed non allowed function (bad argument)
mysql-test/t/partition_error.test:
  Added tests to verify correct type of argument.
sql/item.h:
  Renamed processor since it is no longer only for timezone
sql/item_func.h:
  Added help functions for checking date/time/datetime arguments.
sql/item_timefunc.h:
  Added processors for argument correctness
sql/sql_partition.cc:
  renamed the processor for checking arguments.
2010-12-22 10:50:36 +01:00
Igor Babaev
a095346a9d Fixed LP bug #670380.
Lifted the limitation that hash join could not be used over 
varchar fields with non-binary collation.
2010-12-22 00:37:35 -08:00
Sergey Glukhov
9870e24482 test case fix 2010-12-21 15:30:07 +03:00
Sergey Glukhov
e2db8e6ccb Bug#58030 crash in Item_func_geometry_from_text::val_str
Item_sum_max/Item_sum_min incorrectly set null_value flag and
attempt to get result in parent functions leads to crash.
This happens due to double evaluation of the function argumet.
First evaluation happens in the comparator and second one
happens in Item_cache::cache_value().
The fix is to introduce new Item_cache object which
holds result of the argument and use this cached value
as an argument of the comparator.

mysql-test/r/func_group.result:
  test case
mysql-test/t/func_group.test:
  test case
sql/item.cc:
  added assertion that ether we have some result or result is NULL.
sql/item_sum.cc:
  introduce new Item_cache object which
  holds result of the argument and use this cached value
  as an argument of the comparator.
sql/item_sum.h:
  introduce new Item_cache object which
  holds result of the argument and use this cached value
  as an argument of the comparator.
2010-12-21 14:34:11 +03:00
Sergei Golubchik
6c958d6e80 bug#683112 Maria 5.2 incorrectly reports "(using password: NO)" even when password is specified
set thd->password appropriately also for cases when a user was not found.
2010-12-20 19:19:24 +01:00
Sven Sandberg
8b27f9a05e BUG#49978: Replication tests don't clean up replication state at the end
Major replication test framework cleanup. This does the following:
 - Ensure that all tests clean up the replication state when they
   finish, by making check-testcase check the output of SHOW SLAVE STATUS.
   This implies:
    - Slave must not be running after test finished. This is good
      because it removes the risk for sporadic errors in subsequent
      tests when a test forgets to sync correctly.
    - Slave SQL and IO errors must be cleared when test ends. This is
      good because we will notice if a test gets an unexpected error in
      the slave threads near the end.
    - We no longer have to clean up before a test starts.
 - Ensure that all tests that wait for an error in one of the slave
   threads waits for a specific error. It is no longer possible to
   source wait_for_slave_[sql|io]_to_stop.inc when there is an error
   in one of the slave threads. This is good because:
    - If a test expects an error but there is a bug that causes
      another error to happen, or if it stops the slave thread without
      an error, then we will notice.
    - When developing tests, wait_for_*_to_[start|stop].inc will fail
      immediately if there is an error in the relevant slave thread.
      Before this patch, we had to wait for the timeout.
 - Remove duplicated and repeated code for setting up unusual replication
   topologies. Now, there is a single file that is capable of setting
   up arbitrary topologies (include/rpl_init.inc, but
   include/master-slave.inc is still available for the most common
   topology). Tests can now end with include/rpl_end.inc, which will clean
   up correctly no matter what topology is used. The topology can be
   changed with include/rpl_change_topology.inc.
 - Improved debug information when tests fail. This includes:
    - debug info is printed on all servers configured by include/rpl_init.inc
    - User can set $rpl_debug=1, which makes auxiliary replication files
      print relevant debug info.
 - Improved documentation for all auxiliary replication files. Now they
   describe purpose, usage, parameters, and side effects.
 - Many small code cleanups:
    - Made have_innodb.inc output a sensible error message.
    - Moved contents of rpl000017-slave.sh into rpl000017.test
    - Added mysqltest variables that expose the current state of
      disable_warnings/enable_warnings and friends.
    - Too many to list here: see per-file comments for details.


client/mysqltest.cc:
  Added the following variables:
   $ENABLED_WARNINGS
   $ENABLED_QUERY_LOG
   $ENABLED_RESULT_LOG
   $ENABLED_ABORT_ON_ERROR
   $ENABLED_INFO
   $ENABLED_METADATA
  Each variable is 0 or 1, depending on if the corresponding
  mysqltest feature is on or off.
mysql-test/extra/rpl_tests/rpl_EE_err.test:
  Made test clean up after itself and removed outdated comments.
mysql-test/extra/rpl_tests/rpl_auto_increment.test:
  - Use rpl_reset.inc instead of master-slave-reset.inc
  - diff_tables.inc now takes only one parameter.
  Made test clean up after itself and removed outdated comments.
mysql-test/extra/rpl_tests/rpl_auto_increment_insert_view.test:
  diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_auto_increment_invoke_trigger.test:
  diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_autoinc_func_invokes_trigger.test:
  diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_charset.test:
  Made test clean up after itself and removed unnecessary cleanup in beginning.
mysql-test/extra/rpl_tests/rpl_commit_after_flush.test:
  cosmetic fixes
mysql-test/extra/rpl_tests/rpl_conflicts.test:
  cosmetic fixes
mysql-test/extra/rpl_tests/rpl_ddl.test:
  Don't clean up replication here since this file does not setup
  replication. The main test now has to both setup and clean up
  replication.
  cosmetic fixes
mysql-test/extra/rpl_tests/rpl_deadlock.test:
  make test clean up after itself
mysql-test/extra/rpl_tests/rpl_extra_col_master.test:
  cosmetic fixes
mysql-test/extra/rpl_tests/rpl_extra_col_slave.test:
  made test clean up after itself
  cosmetic fixes
mysql-test/extra/rpl_tests/rpl_failed_optimize.test:
  made test clean up after itself
mysql-test/extra/rpl_tests/rpl_flsh_tbls.test:
  made test clean up after itself
mysql-test/extra/rpl_tests/rpl_foreign_key.test:
  made test clean up after itself
mysql-test/extra/rpl_tests/rpl_get_master_version_and_clock.test:
   - Replace 'start slave; wait_for_slave_to_start.inc' by
     include/start_slave.inc.
   - Use new file rpl_connect.inc to reconnect on all connections, since the
     connections are used by rpl_end.inc.
   - Use wait_for_slave_param.inc instead of wait_for_slave_io_to_start.inc,
     since wait_for_slave_io_to_start.inc now fails if the IO thread has
     an error. In this particular test case, it is normal that the IO thread
     has an error.
   - Changed wait_for_slave_io_error.inc so that it waits
     for the IO thread to stop. However, in this test case,
     the IO thread only gets a non-fatal error, so it does
     not stop. So we set $slave_io_error_is_nonfatal=1 to
     prevent wait_for_slave_io_error.inc from waiting.
mysql-test/extra/rpl_tests/rpl_insert_id.test:
  made test clean up after itself
  cosmetic fixes
mysql-test/extra/rpl_tests/rpl_insert_id_pk.test:
  made test clean up after itself
  cosmetic fixes
mysql-test/extra/rpl_tests/rpl_loaddata.test:
   - Use wait_for_slave_sql_error.inc to wait for errors
     instead of wait_for_slave_sql_to_stop.inc
   - Use check_slave_no_error.inc instead of print errors
     to the log.
   - Use rpl_reset.inc instead of master-slave-reset.inc
     This means we have to clear the error from the slave
     threads by calling RESET SLAVE explicitly.
   - diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_log.test:
  replace master-slave-reset.inc by rpl_reset.inc
mysql-test/extra/rpl_tests/rpl_max_relay_size.test:
  made test clean up after itself
  cosmetic fix
mysql-test/extra/rpl_tests/rpl_multi_query.test:
  made test clean up after itself
  cosmetic fixes
mysql-test/extra/rpl_tests/rpl_multi_update.test:
  made test clean up after itself
  cosmetic fixes
mysql-test/extra/rpl_tests/rpl_ndb_apply_status.test:
  replace master-slave-reset.inc by rpl_reset.inc
mysql-test/extra/rpl_tests/rpl_not_null.test:
  - replace master-slave-reset.inc by rpl_reset.inc
  - diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_record_compare.test:
  - replace master-slave-reset.inc by rpl_reset.inc
  - diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_reset_slave.test:
  - replace wait_for_slave_io_error.inc+stop_slave.inc by
    wait_for_slave_io_error_and_stop.inc+stop_slave_sql.inc
    since stop_slave.inc now fails when the io thread has an
    error.
  - replace stop_slave.inc by STOP SLAVE +
    wait_for_slave_sql_to_stop.inc +
    wait_for_slave_param. stop_slave.inc would fail since
    the IO thread has an error.
  - add include/rpl_end.inc to clean up replication state
mysql-test/extra/rpl_tests/rpl_row_UUID.test:
  Don't clean up replication here since this file does not setup
  replication. The main test now has to both setup and clean up
  replication.
mysql-test/extra/rpl_tests/rpl_row_basic.test:
  - replaced reset_master_and_slave.inc by rpl_reset.inc
  - replaced sequence of reset master+reset slave by rpl_reset.inc
  - diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_row_delayed_ins.test:
  made test clean up after itself
  cosmetic fixes
mysql-test/extra/rpl_tests/rpl_row_sp002.test:
  made test clean up after itself
  cosmetic fixes
mysql-test/extra/rpl_tests/rpl_row_sp007.test:
  made test clean up after itself
  cosmetic fixes
mysql-test/extra/rpl_tests/rpl_set_null.test:
  - replaced master-slave-reset.inc by rpl_reset.inc
  - diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_stm_EE_err2.test:
  - Made test clean up replication state.
mysql-test/extra/rpl_tests/rpl_stm_create_if_not_exists.test:
  replaced rpl_diff_tables.inc by diff_tables.inc
mysql-test/extra/rpl_tests/rpl_stop_slave.test:
  changed protocol for diff_tables.inc
mysql-test/extra/rpl_tests/rpl_sv_relay_space.test:
  made test clean up after itself
  cosmetic fixes
mysql-test/extra/rpl_tests/rpl_test_framework.inc:
  Auxiliary file used by rpl_test_framework.test.
  This checks that rpl_change_topology.inc works correctly.
mysql-test/extra/rpl_tests/rpl_truncate.test:
  made test clean up after itself
  cosmetic fixes
mysql-test/extra/rpl_tests/rpl_truncate_helper.test:
  - replace reset_master_and_slave.inc by rpl_reset.inc
  - diff_tables.inc now takes only one parameter.
mysql-test/include/analyze-sync_with_master.test:
  - improved debug output printed when sync_slave_with_master or
    sync_with_master fails
  - Added documentation
mysql-test/include/assert.inc:
  Added file to facilitate assertions.
mysql-test/include/begin_include_file.inc:
  New auxiliary file to be used by replication helper files like
  rpl_init.inc, stop_slave.inc, wait_for_slave_*.inc, etc. Such
  helper files should source rpl_begin_include_file.inc at the
  beginning and rpl_end_include_file.inc at the end. That adds the
  following features:
   - When a test sources the file, the file name is printed to the
     result file. This is good because it makes result files easier to
     follow.
   - When a helper file sources a second helper file recursively, then
     the name of the second file is not printed. This is good because
     it would make the result file harder to follow if all the internal
     calls of all helper files were printed.
   - When $rpl_debug is set, all internal calls are printed to the
     result file. This is good because it helps when debugging test
     cases. (With $rpl_debug=1, many of the helper files now print other
     relevant debug info too.)
   - When a file needs to turn off the query log or the warning log
     (disable_query_log/disable_warnings), then the file can tell
     rpl_begin_include_file.inc about it. Then rpl_begin_include_file.inc
     will turn off the log correctly, and rpl_end_include_file.inc
     will turn on the log correctly. Note that if rpl_a.inc sources
     rpl_b.inc and both files need to turn off the log, then the
     log is not turned on when rpl_b.inc ends (because rpl_a.inc
     still needs the log off). This makes it easier to program
     replication helper files.
mysql-test/include/check-testcase.test:
  Made check-testcase ensure that the slave status is reset
  after the test has finished.
mysql-test/include/check_slave_is_running.inc:
  - Use existing framework (check_slave_param.inc) instead of ad-hoc code
    to check value of slave parameters.
  - Use rpl_begin_include_file.inc to improve debug capabilities.
  - improve documentation.
mysql-test/include/check_slave_no_error.inc:
  - Use rpl_begin_include_file.inc to improve debug capabilities.
  - improve documentation.
mysql-test/include/check_slave_param.inc:
  - Use rpl_begin_include_file.inc to improve debug capabilities.
  - improve documentation.
mysql-test/include/cleanup_fake_relay_log.inc:
  - Use RESET SLAVE instead of manual file removal. This also
    resets other replication state.
  - verify that RESET SLAVE correctly removed files.
mysql-test/include/diff_tables.inc:
   - Use rpl_begin_include_file.inc to improve debug capabilities.
   - Improved documentation.
   - file now supports an arbitrary number of tables
     (not just two). The tables are now given as a comma-separated
     list instead of as two variables.
   - You no longer have to specify database name for each table.
     If no database is specified, it defaults to the current
     database.
   - File now restores the connection at the end.
mysql-test/include/end_include_file.inc:
  New file to be sourced at the end of auxiliary replication include
  files. See include/rpl_begin_include_file.inc for details.
mysql-test/include/file_does_not_exist.inc:
  Added .inc file to check that a given file is removed.
mysql-test/include/force_restart.inc:
  Added file to force server restart after test
mysql-test/include/force_restart_if_skipped.inc:
  Added file to force server restart after test, if the test is skipped
mysql-test/include/have_innodb.inc:
  Made have_innodb.inc print sensible message when innodb is
  not supported.
mysql-test/include/io_thd_fault_injection.inc:
  Use rpl_server_restart.inc instead of restart_mysqld.inc in rpl tests
mysql-test/include/kill_query_and_diff_master_slave.inc:
  Renamed diff_master_slave.inc to rpl_diff.inc
mysql-test/include/master-slave.inc:
  - Use new rpl_init.inc file
  - Now, we don't do 'drop table' in master-slave.inc any more. That's good
    because drop table has nothing to do with configuring replication servers.
  - master-slave.inc now supports the additional parameter
    $rpl_server_count. By default, master-slave.inc only
    configures two servers; if $rpl_server_count is set, it
    configures that many servers. Only the second server is
    a slave; the rest are not part of the replication topology.
mysql-test/include/mtr_check.sql:
  Removed unneeded SP (use include/force_restart.inc instead)
mysql-test/include/mysqldump.inc:
  diff_tables.inc now takes only one parameter.
mysql-test/include/ndb_master-slave.inc:
  use master-slave.inc instead of ad-hoc calls to 'connect'
mysql-test/include/ndb_master-slave_2ch.inc:
  use rpl_init.inc instead of ad-hoc setup
mysql-test/include/ndb_not_readonly.inc:
  turn off query log while executing this script.
  this was previously done by the caller. now it's done in the script.
mysql-test/include/report-features.test:
  add newline at end of file
mysql-test/include/reset_master_and_slave.inc:
  rpl_reset.inc replaces this file
mysql-test/include/restart_mysqld.inc:
  force caller to use rpl_restart_server.inc instead if replication is configured
mysql-test/include/rpl_change_topology.inc:
  New file to change replication topology on the fly. This is used
  by rpl_init.inc internally, but is also used by test cases
  that need to change topology (e.g., rpl.rpl_circular_for_4_hosts, which
  reconfigures the topology to make a failover).
mysql-test/include/rpl_connect.inc:
  New file to create a named connection. This file knows about a number
  of "standard" connections (master, slave, server_1, etc), and knows how
  each of them should normally be created. This is mostly used internally
  (e.g., by rpl_init.inc, master-slave.inc, ndb_master-slave_2ch.inc etc),
  but can also be used by tests that need to bring a connection up after
  disconnecting.
mysql-test/include/rpl_connection.inc:
  New file to change connection. This prints the name of the connection.
  However, for files that source rpl_begin_include_file.inc, it does not
  print the name of the connection unless $rpl_debug=1. This is good
  because printing something every time the .inc file changed connection
  would make the result log harder to read.
mysql-test/include/rpl_diff.inc:
   - Made file capable to compare many servers
   - Hence renamed it to rpl_diff.inc
   - If no server list is specified, use all servers from
     server_1 to server_$rpl_server_count
   - It now writes the statement to file before executing it.
     That means it will be subject to SQL string interpolation,
     but not shell string interpolation (which may be
     platform-dependent)
mysql-test/include/rpl_diff_tables.inc:
  Removed this file, since its functionality has been merged into
  diff_tables.inc.
mysql-test/include/rpl_end.inc:
  Renamed master-slave-end.inc to rpl_end.inc, and made it
  work with arbitrary replication topologies (as configured
  with rpl_init.inc and possibly rpl_change_topology.inc). Also
  made it assert that no slave thread has an error. Made it
  assert that no slave thread is stopped, unless
  $rpl_only_running_threads=1.
mysql-test/include/rpl_for_each_slave.inc:
  New test script that executes a command once for each slave.
  This is used by include/rpl_start_slaves.inc and
  include/rpl_stop_slaves.inc and could possibly be useful for other
  custom scripts too.
mysql-test/include/rpl_generate_sync_chain.inc:
  New file that computes the variable $rpl_sync_chain. This variable
  determines in what order slaves are synced by include/rpl_sync.inc.
  The variable is recomputed the first time that include/rpl_sync.inc
  is called after rpl_change_topology.inc.
mysql-test/include/rpl_init.inc:
  Made file work for arbitrary topologies instead of just 4-server
  circle. This file is used by master-slave.inc, rpl_master-slave_2ch.inc
  etc, and also by tests that need other specific replication topologies.
mysql-test/include/rpl_reconnect.inc:
  New auxiliary file that will reconnect many clients to a given
  server. All clients configured by rpl_init.inc will reconnect.
mysql-test/include/rpl_reset.inc:
  Made file work for arbitrary replication topologies,
  check for errors, and sync all threads. Also removed
  'drop table' because that has nothing to do with replication.
mysql-test/include/rpl_restart_server.inc:
  New auxiliary file that restarts a server.
mysql-test/include/rpl_start_server.inc:
  New auxiliary file that starts a server that has been shut down.
mysql-test/include/rpl_start_slaves.inc:
  New auxiliary file to start all slaves configured by rpl_init.inc
  This is used internally by rpl_init.inc but may also be used by tests
  that want to bring all slaves up.
mysql-test/include/rpl_stop_server.inc:
  New auxiliary file that shuts down a server.
mysql-test/include/rpl_stop_slaves.inc:
  New auxiliary file to stop all slaves configured rpl_init.inc. This
  is used internally by rpl_end.inc, but may also be used by tests that
  want to stop all slaves.
mysql-test/include/rpl_sync.inc:
  Made file work for arbitrary replication topologies (as configured
  by rpl_init.inc and possibly rpl_change_topology.inc) instead of
  just 4-server circle.
mysql-test/include/save_master_pos.inc:
  Auxiliary file to save the master position.
mysql-test/include/setup_fake_relay_log.inc:
  - Moved complicated logic to write to file into
    write_var_to_file.inc, so that it can be re-used by
    other tests.
  - Added call to show_rpl_debug_info and die in error case.
mysql-test/include/show_rpl_debug_info.inc:
  - Made file print NOW()
  - Made file print both SHOW MASTER STATUS, SHOW SLAVE HOSTS,
    and SHOW SLAVE STATUS.
  - Made file print debug info for all servers configured by
    rpl_init.inc
mysql-test/include/show_slave_status.inc:
  - Made file use echo instead of SELECT to print variables.
  - Improved comments.
  - Use variable names that are less likely to be used by other tests.
mysql-test/include/start_slave.inc:
  - Made test use rpl_begin_include_file.inc to improve debug
    capabilities.
  - improved documentation
mysql-test/include/stop_slave.inc:
  - Made script capable to detect which threads are running
    and stop only those.
  - Improved documentation
mysql-test/include/stop_slave_io.inc:
  Added file to stop the slave IO thread.
mysql-test/include/stop_slave_sql.inc:
  Added file to stop the slave SQL thread.
mysql-test/include/sync_io_with_master.inc:
  Added file to sync the IO thread of the current connection, up to
  a previously saved position.
mysql-test/include/sync_slave_io_with_master.inc:
  - Made file work with arbitrarily-named connections.
  - Made file use rpl_begin_include_file.inc to improve debug
    capabilities.
mysql-test/include/sync_slave_sql_with_io.inc:
  Added file to sync only the SQL thread, up to the position copied
  in the IO thread.
mysql-test/include/wait_for_query_to_fail.inc:
  Added file to wait for a query to fail.
mysql-test/include/wait_for_slave_io_error.inc:
  - Use rpl_begin_include_file.inc to improve debug capabilities.
  - Use existing atom include/show_slave_status.inc to print error
    message.
  - Improve comments.
  
  ******
   - This file now waits until the slave IO thread has completely
     stopped (to avoid races in tests).
   - Some IO thread errors are non-fatal and don't cause the slave
     IO thread to stop. To allow tests to wait for such errors, we
     add the parameters $slave_io_error_is_nonfatal. If
     $slave_io_error_is_nonfatal is set, this script does not wait
     for the IO thread to stop.
mysql-test/include/wait_for_slave_io_to_start.inc:
  - Made script fail if the IO thread has an error.
  - Use rpl_begin_include_file.inc to improve debug capabilities.
  - Improved documentation.
mysql-test/include/wait_for_slave_io_to_stop.inc:
  - Fail if server is not configured as slave. Previously, the
    script accepted servers not configured as slave because there
    was cleanup code called from master-slave.inc that would execute
    STOP SLAVE on both master and slave. Now all tests have to
    clean up after themselves, so we don't have to call stop slave
    at the beginning of tests. Hence, we disallow calling this
    script on servers not configured as slaves.
  - Use rpl_begin_include_file.inc to improve debug capabilities.
  - Improved documentation.
mysql-test/include/wait_for_slave_param.inc:
  - Added $slave_error_param. This variable can be set to
    Slave_IO_Errno or Slave_SQL_Errno, in which case the
    script fails if the corresponding column in the output from
    SHOW SLAVE STATUS is nonzero.
  - Replaced exit by die.
  - Made it print timeout seconds correctly in error message.
  - Removed $slave_error_message. This is not needed.
  - Use rpl_begin_include_file.inc for better debug capabilities.
mysql-test/include/wait_for_slave_sql_error.inc:
  - Use rpl_begin_include_file.inc for better debug capabilities.
  - Improve documentation
  - Use existing atom show_slave_status.inc to print error.
mysql-test/include/wait_for_slave_sql_error_and_skip.inc:
  - Use rpl_begin_include_file.inc and rpl_connection.inc for better
    debug capabilities.
  - Improve documentation
mysql-test/include/wait_for_slave_sql_to_start.inc:
  - Use rpl_begin_include_file.inc for better debug capabilities.
  - Improve documentation
mysql-test/include/wait_for_slave_sql_to_stop.inc:
  - Fail if Last_SQL_Errno is nonzero.
  - Fail if server is not configured as slave. Previously, the
    script accepted servers not configured as slave because there
    was cleanup code called from master-slave.inc that would execute
    STOP SLAVE on both master and slave. Now all tests have to
    clean up after themselves, so we don't have to call stop slave
    at the beginning of tests. Hence, we disallow calling this
    script on servers not configured as slaves.
  - Use rpl_begin_include_file.inc for better debug capabilities.
  - Improve documentation
mysql-test/include/wait_for_slave_to_start.inc:
  - Use rpl_begin_include_file.inc for better debug capabilities.
  - Improve documentation
mysql-test/include/wait_for_slave_to_stop.inc:
  - Use rpl_begin_include_file.inc for better debug capabilities.
  - Improve documentation
mysql-test/include/write_var_to_file.inc:
  Added file to write contents of a mysqltest variable to file.
  (This was previously in setup_fake_relay_log.inc)
mysql-test/mysql-test-run.pl:
  Allow tests to require restart in case the test is skipped.
mysql-test/r/init_file.result:
  updated result file
mysql-test/r/mysqldump_restore.result:
  update result file
mysql-test/suite/binlog/r/binlog_drop_if_exists.result:
  Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/r/binlog_old_versions.result:
  updated result file
mysql-test/suite/binlog/r/binlog_query_filter_rules.result:
  Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/r/binlog_server_id.result:
  Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/r/binlog_sf.result:
  Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/r/binlog_sql_mode.result:
  updated result file
mysql-test/suite/binlog/t/binlog_auto_increment_bug33029-master.opt:
  This test replicates, so it should be in the rpl suite.
  Then we can remove this .opt file too.
mysql-test/suite/binlog/t/binlog_drop_if_exists.test:
  Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/t/binlog_old_versions.test:
  cosmetic fixes
mysql-test/suite/binlog/t/binlog_query_filter_rules-master.opt:
  Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/t/binlog_query_filter_rules.test:
  Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/t/binlog_server_id.test:
  Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/t/binlog_sf.test:
  Moved test that does not use replication to binlog suite.
  Since test sets binlog_format internally, it's useless to
  re-run it. Hence we source have_binlog_format_statement.inc
mysql-test/suite/binlog/t/binlog_sql_mode.test:
  - Test does not use replication, so we remove master-slave.inc.
  - mysqltest magically adds --force-if-open to $MYSQL_BINLOG in test
    files that source master-slave.inc. So now we have to add
    --force-if-open explicitly.
mysql-test/suite/bugs/t/rpl_bug12691.test:
  made test clean up after itself
  cosmetic fixes
mysql-test/suite/bugs/t/rpl_bug23533.test:
  made test clean up after itself
  cosmetic fixes
mysql-test/suite/bugs/t/rpl_bug31582.test:
  made test clean up after itself
mysql-test/suite/bugs/t/rpl_bug31583.test:
  made test clean up after itself
mysql-test/suite/bugs/t/rpl_bug33029.test:
  made test clean up after itself
mysql-test/suite/bugs/t/rpl_bug36391.test:
  made test clean up after itself
  cosmetic fixes
mysql-test/suite/bugs/t/rpl_bug37426.test:
  made test clean up after itself
  cosmetic fixes
mysql-test/suite/bugs/t/rpl_bug38205.test:
  made test clean up after itself
mysql-test/suite/manual/t/rpl_replication_delay.test:
  made test clean up after itself
  cosmetic fixes
mysql-test/suite/ndb_team/t/rpl_ndb_dd_advance.test:
  made test clean up after itself
  cosmetic fixes
mysql-test/suite/ndb_team/t/rpl_ndb_extraColMaster.test:
  made test clean up after itself
mysql-test/suite/ndb_team/t/rpl_ndb_mix_innodb.test:
  made test clean up after itself
  cosmetic fixes
mysql-test/suite/parts/r/rpl_partition.result:
  updated result file
mysql-test/suite/parts/t/rpl_partition.test:
  Make test clean up replication state.
  cosmetic fixes
mysql-test/suite/rpl/include/rpl_mixed_ddl.inc:
  made test clean up after itself
  cosmetic fixes
mysql-test/suite/rpl/include/rpl_mixed_dml.inc:
  made test clean up after itself
  cosmetic fixes
mysql-test/suite/rpl/r/rpl_000010.result:
  update result file
mysql-test/suite/rpl/r/rpl_000011.result:
  update result file
mysql-test/suite/rpl/r/rpl_000013.result:
  update result file
mysql-test/suite/rpl/r/rpl_000017.result:
  update result file
mysql-test/suite/rpl/r/rpl_EE_err.result:
  update result file
mysql-test/suite/rpl/r/rpl_LD_INFILE.result:
  update result file
mysql-test/suite/rpl/r/rpl_alter.result:
  update result file
mysql-test/suite/rpl/r/rpl_alter_db.result:
  update result file
mysql-test/suite/rpl/r/rpl_auto_increment.result:
  update result file
mysql-test/suite/rpl/r/rpl_auto_increment_11932.result:
  update result file
mysql-test/suite/rpl/r/rpl_auto_increment_bug33029.result:
  update result file
mysql-test/suite/rpl/r/rpl_auto_increment_update_failure.result:
  update result file
mysql-test/suite/rpl/r/rpl_begin_commit_rollback.result:
  update result file
mysql-test/suite/rpl/r/rpl_binlog_corruption.result:
  Updated result file
mysql-test/suite/rpl/r/rpl_binlog_errors.result:
  updated result file
mysql-test/suite/rpl/r/rpl_binlog_grant.result:
  update result file
mysql-test/suite/rpl/r/rpl_binlog_max_cache_size.result:
  Updated result file
mysql-test/suite/rpl/r/rpl_bit.result:
  update result file
mysql-test/suite/rpl/r/rpl_bit_npk.result:
  update result file
mysql-test/suite/rpl/r/rpl_blackhole.result:
  update result file
mysql-test/suite/rpl/r/rpl_bug26395.result:
  update result file
mysql-test/suite/rpl/r/rpl_bug31076.result:
  update result file
mysql-test/suite/rpl/r/rpl_bug33931.result:
  updated result file
mysql-test/suite/rpl/r/rpl_bug38694.result:
  update result file
mysql-test/suite/rpl/r/rpl_change_master.result:
  update result file
mysql-test/suite/rpl/r/rpl_charset.result:
  update result file
mysql-test/suite/rpl/r/rpl_charset_sjis.result:
  update result file
mysql-test/suite/rpl/r/rpl_circular_for_4_hosts.result:
  Updated result file
mysql-test/suite/rpl/r/rpl_colSize.result:
  update result file
mysql-test/suite/rpl/r/rpl_commit_after_flush.result:
  update result file
mysql-test/suite/rpl/r/rpl_concurrency_error.result:
  update result file
mysql-test/suite/rpl/r/rpl_conditional_comments.result:
  update result file
mysql-test/suite/rpl/r/rpl_create_database.result:
  update result file
mysql-test/suite/rpl/r/rpl_create_if_not_exists.result:
  update result file
mysql-test/suite/rpl/r/rpl_create_tmp_table_if_not_exists.result:
  update result file
mysql-test/suite/rpl/r/rpl_cross_version.result:
  Updated result file
mysql-test/suite/rpl/r/rpl_current_user.result:
  update result file
mysql-test/suite/rpl/r/rpl_deadlock_innodb.result:
  update result file
mysql-test/suite/rpl/r/rpl_delete_no_where.result:
  update result file
mysql-test/suite/rpl/r/rpl_do_grant.result:
  updated result file
mysql-test/suite/rpl/r/rpl_drop.result:
  update result file
mysql-test/suite/rpl/r/rpl_drop_db.result:
  update result file
mysql-test/suite/rpl/r/rpl_drop_temp.result:
  update result file
mysql-test/suite/rpl/r/rpl_drop_view.result:
  update result file
mysql-test/suite/rpl/r/rpl_dual_pos_advance.result:
  update result file
mysql-test/suite/rpl/r/rpl_empty_master_crash.result:
  update result file
mysql-test/suite/rpl/r/rpl_err_ignoredtable.result:
  update result file
mysql-test/suite/rpl/r/rpl_events.result:
  update result file
mysql-test/suite/rpl/r/rpl_extra_col_master_innodb.result:
  update result file
mysql-test/suite/rpl/r/rpl_extra_col_master_myisam.result:
  update result file
mysql-test/suite/rpl/r/rpl_extra_col_slave_innodb.result:
  update result file
mysql-test/suite/rpl/r/rpl_extra_col_slave_myisam.result:
  update result file
mysql-test/suite/rpl/r/rpl_failed_optimize.result:
  update result file
mysql-test/suite/rpl/r/rpl_filter_tables_not_exist.result:
  update result file
mysql-test/suite/rpl/r/rpl_flushlog_loop.result:
  update result file
mysql-test/suite/rpl/r/rpl_foreign_key_innodb.result:
  update result file
mysql-test/suite/rpl/r/rpl_found_rows.result:
  update result file
mysql-test/suite/rpl/r/rpl_free_items.result:
  update result file
mysql-test/suite/rpl/r/rpl_geometry.result:
  update result file
mysql-test/suite/rpl/r/rpl_get_lock.result:
  update result file
mysql-test/suite/rpl/r/rpl_get_master_version_and_clock.result:
  update result file
mysql-test/suite/rpl/r/rpl_grant.result:
  update result file
mysql-test/suite/rpl/r/rpl_idempotency.result:
  update result file
mysql-test/suite/rpl/r/rpl_ignore_grant.result:
  update result file
mysql-test/suite/rpl/r/rpl_ignore_revoke.result:
  update result file
mysql-test/suite/rpl/r/rpl_ignore_table.result:
  update result file
mysql-test/suite/rpl/r/rpl_ignore_table_update.result:
  update result file
mysql-test/suite/rpl/r/rpl_incident.result:
  update result file
mysql-test/suite/rpl/r/rpl_init_slave.result:
  update result file
mysql-test/suite/rpl/r/rpl_init_slave_errors.result:
  update result file
mysql-test/suite/rpl/r/rpl_innodb.result:
  update result file
mysql-test/suite/rpl/r/rpl_innodb_bug28430.result:
  update result file
mysql-test/suite/rpl/r/rpl_innodb_bug30888.result:
  update result file
mysql-test/suite/rpl/r/rpl_innodb_mixed_ddl.result:
  update result file
mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result:
  update result file
mysql-test/suite/rpl/r/rpl_insert.result:
  update result file
mysql-test/suite/rpl/r/rpl_insert_id.result:
  update result file
mysql-test/suite/rpl/r/rpl_insert_id_pk.result:
  update result file
mysql-test/suite/rpl/r/rpl_insert_ignore.result:
  update result file
mysql-test/suite/rpl/r/rpl_insert_select.result:
  update result file
mysql-test/suite/rpl/r/rpl_invoked_features.result:
  update result file
mysql-test/suite/rpl/r/rpl_killed_ddl.result:
  update result file
mysql-test/suite/rpl/r/rpl_known_bugs_detection.result:
  update result file
mysql-test/suite/rpl/r/rpl_load_from_master.result:
  update result file
mysql-test/suite/rpl/r/rpl_load_table_from_master.result:
  update result file
mysql-test/suite/rpl/r/rpl_loaddata.result:
  update result file
mysql-test/suite/rpl/r/rpl_loaddata_charset.result:
  update result file
mysql-test/suite/rpl/r/rpl_loaddata_concurrent.result:
  update result file
mysql-test/suite/rpl/r/rpl_loaddata_fatal.result:
  update result file
mysql-test/suite/rpl/r/rpl_loaddata_m.result:
  update result file
mysql-test/suite/rpl/r/rpl_loaddata_map.result:
  update result file
mysql-test/suite/rpl/r/rpl_loaddata_s.result:
  update result file
mysql-test/suite/rpl/r/rpl_loaddata_simple.result:
  update result file
mysql-test/suite/rpl/r/rpl_loaddata_symlink.result:
  update result file
mysql-test/suite/rpl/r/rpl_loaddatalocal.result:
  update result file
mysql-test/suite/rpl/r/rpl_loadfile.result:
  update result file
mysql-test/suite/rpl/r/rpl_locale.result:
  update result file
mysql-test/suite/rpl/r/rpl_log_pos.result:
  update result file
mysql-test/suite/rpl/r/rpl_manual_change_index_file.result:
  update result file
mysql-test/suite/rpl/r/rpl_many_optimize.result:
  update result file
mysql-test/suite/rpl/r/rpl_master_pos_wait.result:
  update result file
mysql-test/suite/rpl/r/rpl_misc_functions.result:
  update result file
mysql-test/suite/rpl/r/rpl_mixed_bit_pk.result:
  update result file
mysql-test/suite/rpl/r/rpl_mixed_ddl_dml.result:
  update result file
mysql-test/suite/rpl/r/rpl_multi_delete.result:
  update result file
mysql-test/suite/rpl/r/rpl_multi_delete2.result:
  update result file
mysql-test/suite/rpl/r/rpl_multi_engine.result:
  update result file
mysql-test/suite/rpl/r/rpl_multi_update.result:
  update result file
mysql-test/suite/rpl/r/rpl_multi_update2.result:
  update result file
mysql-test/suite/rpl/r/rpl_multi_update3.result:
  update result file
mysql-test/suite/rpl/r/rpl_multi_update4.result:
  update result file
mysql-test/suite/rpl/r/rpl_mysql_upgrade.result:
  update result file
mysql-test/suite/rpl/r/rpl_name_const.result:
  update result file
mysql-test/suite/rpl/r/rpl_nondeterministic_functions.result:
  update result file
mysql-test/suite/rpl/r/rpl_not_null_innodb.result:
  update result file
mysql-test/suite/rpl/r/rpl_not_null_myisam.result:
  update result file
mysql-test/suite/rpl/r/rpl_optimize.result:
  update result file
mysql-test/suite/rpl/r/rpl_packet.result:
  update result file
mysql-test/suite/rpl/r/rpl_plugin_load.result:
  update result file
mysql-test/suite/rpl/r/rpl_ps.result:
  update result file
mysql-test/suite/rpl/r/rpl_rbr_to_sbr.result:
  update result file
mysql-test/suite/rpl/r/rpl_read_only.result:
  update result file
mysql-test/suite/rpl/r/rpl_relay_space_innodb.result:
  update result file
mysql-test/suite/rpl/r/rpl_relay_space_myisam.result:
  update result file
mysql-test/suite/rpl/r/rpl_relayrotate.result:
  update result file
mysql-test/suite/rpl/r/rpl_relayspace.result:
  update result file
mysql-test/suite/rpl/r/rpl_replicate_do.result:
  update result file
mysql-test/suite/rpl/r/rpl_replicate_ignore_db.result:
  update result file
mysql-test/suite/rpl/r/rpl_report.result:
  update result file
mysql-test/suite/rpl/r/rpl_rewrt_db.result:
  update result file
mysql-test/suite/rpl/r/rpl_rotate_logs.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_001.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_4_bytes.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_NOW.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_USER.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_UUID.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_basic_11bugs.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_basic_8partition.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_blob_innodb.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_blob_myisam.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_colSize.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_conflicts.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_delayed_ins.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_drop.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_find_row.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_flsh_tbls.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_func001.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_func002.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_func003.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_inexist_tbl.result:
  updated result file
mysql-test/suite/rpl/r/rpl_row_insert_delayed.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_log.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_log_innodb.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_max_relay_size.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_mysqlbinlog.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_rec_comp_innodb.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_rec_comp_myisam.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_reset_slave.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_sp001.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_sp002_innodb.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_sp003.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_sp005.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_sp006_InnoDB.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_sp007_innodb.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_sp008.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_sp009.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_sp010.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_sp011.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_sp012.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_stop_middle_update.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_tbl_metadata.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_trig001.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_trig002.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_trig003.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_trig004.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_trunc_temp.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_unsafe_funcs.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_until.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_view01.result:
  update result file
mysql-test/suite/rpl/r/rpl_row_wide_table.result:
  update result file
mysql-test/suite/rpl/r/rpl_server_id1.result:
  update result file
mysql-test/suite/rpl/r/rpl_server_id2.result:
  update result file
mysql-test/suite/rpl/r/rpl_session_var.result:
  update result file
mysql-test/suite/rpl/r/rpl_set_charset.result:
  update result file
mysql-test/suite/rpl/r/rpl_set_null_innodb.result:
  update result file
mysql-test/suite/rpl/r/rpl_set_null_myisam.result:
  update result file
mysql-test/suite/rpl/r/rpl_show_slave_running.result:
  update result file
mysql-test/suite/rpl/r/rpl_skip_error.result:
  update result file
mysql-test/suite/rpl/r/rpl_slave_grp_exec.result:
  update result file
mysql-test/suite/rpl/r/rpl_slave_load_in.result:
  update result file
mysql-test/suite/rpl/r/rpl_slave_load_remove_tmpfile.result:
  Updated result file
mysql-test/suite/rpl/r/rpl_slave_load_tmpdir_not_exist.result:
  updated result file
mysql-test/suite/rpl/r/rpl_slave_skip.result:
  update result file
mysql-test/suite/rpl/r/rpl_slave_status.result:
  update result file
mysql-test/suite/rpl/r/rpl_slow_query_log.result:
  update result file
mysql-test/suite/rpl/r/rpl_sp.result:
  update result file
mysql-test/suite/rpl/r/rpl_sp004.result:
  update result file
mysql-test/suite/rpl/r/rpl_sp_effects.result:
  update result file
mysql-test/suite/rpl/r/rpl_sporadic_master.result:
  update result file
mysql-test/suite/rpl/r/rpl_ssl.result:
  update result file
mysql-test/suite/rpl/r/rpl_ssl1.result:
  update result file
mysql-test/suite/rpl/r/rpl_start_stop_slave.result:
  update result file
mysql-test/suite/rpl/r/rpl_stm_000001.result:
  update result file
mysql-test/suite/rpl/r/rpl_stm_EE_err2.result:
  updated result file
mysql-test/suite/rpl/r/rpl_stm_auto_increment_bug33029.result:
  update result file
mysql-test/suite/rpl/r/rpl_stm_binlog_direct.result:
  update result file
mysql-test/suite/rpl/r/rpl_stm_conflicts.result:
  update result file
mysql-test/suite/rpl/r/rpl_stm_create_if_not_exists.result:
  update result file
mysql-test/suite/rpl/r/rpl_stm_flsh_tbls.result:
  update result file
mysql-test/suite/rpl/r/rpl_stm_insert_delayed.result:
  update result file
mysql-test/suite/rpl/r/rpl_stm_loadfile.result:
  update result file
mysql-test/suite/rpl/r/rpl_stm_log.result:
  update result file
mysql-test/suite/rpl/r/rpl_stm_max_relay_size.result:
  update result file
mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result:
  update result file
mysql-test/suite/rpl/r/rpl_stm_multi_query.result:
  update result file
mysql-test/suite/rpl/r/rpl_stm_no_op.result:
  update result file
mysql-test/suite/rpl/r/rpl_stm_reset_slave.result:
  update result file
mysql-test/suite/rpl/r/rpl_stm_sql_mode.result:
  update result file
mysql-test/suite/rpl/r/rpl_stm_until.result:
  update result file
mysql-test/suite/rpl/r/rpl_stop_slave.result:
  update result file
mysql-test/suite/rpl/r/rpl_switch_stm_row_mixed.result:
  update result file
mysql-test/suite/rpl/r/rpl_temp_table.result:
  update result file
mysql-test/suite/rpl/r/rpl_temp_table_mix_row.result:
  update result file
mysql-test/suite/rpl/r/rpl_temporary.result:
  update result file
mysql-test/suite/rpl/r/rpl_temporary_errors.result:
  update result file
mysql-test/suite/rpl/r/rpl_test_framework.result:
  updated result file
mysql-test/suite/rpl/r/rpl_timezone.result:
  Updated result file
mysql-test/suite/rpl/r/rpl_tmp_table_and_DDL.result:
  update result file
mysql-test/suite/rpl/r/rpl_trigger.result:
  update result file
mysql-test/suite/rpl/r/rpl_trunc_temp.result:
  update result file
mysql-test/suite/rpl/r/rpl_truncate_2myisam.result:
  update result file
mysql-test/suite/rpl/r/rpl_truncate_3innodb.result:
  update result file
mysql-test/suite/rpl/r/rpl_typeconv_innodb.result:
  update result file
mysql-test/suite/rpl/r/rpl_udf.result:
  update result file
mysql-test/suite/rpl/r/rpl_user.result:
  update result file
mysql-test/suite/rpl/r/rpl_user_variables.result:
  update result file
mysql-test/suite/rpl/r/rpl_variables.result:
  update result file
mysql-test/suite/rpl/r/rpl_variables_stm.result:
  update result file
mysql-test/suite/rpl/r/rpl_view.result:
  update result file
mysql-test/suite/rpl/t/rpl000017-slave.sh:
  Moved contents of -slave.sh into test.
mysql-test/suite/rpl/t/rpl_000010-slave.opt:
  make all rpl tests use prefix rpl_
mysql-test/suite/rpl/t/rpl_000010.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_000011.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_000013.test:
  Made test clean up replication state.
  Replaced save_master_pos/connection slave/sync_with_master
  by sync_slave_with_master.
mysql-test/suite/rpl/t/rpl_000017-slave.opt:
  make all rpl tests use prefix rpl_
mysql-test/suite/rpl/t/rpl_000017.test:
  Moved contents of -slave.sh into .test
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_EE_err.test:
  cosmetic fixes
mysql-test/suite/rpl/t/rpl_LD_INFILE.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_alter.test:
  made test clean up after itself
  replaced rpl_diff_tables by diff_tables
  cosmetic fixes
mysql-test/suite/rpl/t/rpl_alter_db.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_auto_increment.test:
  cosmetic fixes
mysql-test/suite/rpl/t/rpl_auto_increment_11932.test:
  Made test clean up replication state.
  don't drop database twice
mysql-test/suite/rpl/t/rpl_auto_increment_bug33029.test:
  - This test replicates, so moved it to rpl suite.
  - This test uses a fake relay log, so use
    include/setup_fake_relay_log.inc and cleanup_fake_relay_log.inc
    instead of ad-hoc code.
  - Made test clean up replication state (rpl_end.inc)
mysql-test/suite/rpl/t/rpl_auto_increment_update_failure.test:
  - Made test clean up replication state.
  - diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_begin_commit_rollback.test:
  renamed rpl_end.inc to master-slave-end.inc
mysql-test/suite/rpl/t/rpl_binlog_corruption-master.opt:
  Got rid of useless -master.opt file.
mysql-test/suite/rpl/t/rpl_binlog_corruption.test:
  Made test clean up replication state.
  Made test execute on slave connection instead of on master connection.
  This allows us to get rid of -master.opt file.
mysql-test/suite/rpl/t/rpl_binlog_errors.test:
  made test use rpl_restart_server.inc instead of restart_mysqld.inc
mysql-test/suite/rpl/t/rpl_binlog_grant.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_binlog_max_cache_size.test:
  - Made test clean up replication state.
  - replaced wait_for_slave_sql_to_stop.inc by
    wait_for_slave_sql_error_and_skip.inc
  - renamed diff_master_slave.inc to rpl_diff.inc and
    renamed $diff_statement to $rpl_diff_statement
mysql-test/suite/rpl/t/rpl_bit.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_bit_npk.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_blackhole.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_bug26395.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_bug31076.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_bug33931.test:
  Made test clean up replication state.
  Made test use source include/master-slave.inc instead of
  ad-hoc setup.
mysql-test/suite/rpl/t/rpl_bug38694.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_change_master.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_charset.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_charset_sjis.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.cnf:
  Use new names of mtr variables (introduced by the changes in
  include/circular_rpl_init.inc).
mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.test:
  - Use rpl_init.inc instead of circular_rpl_for_4_hosts.inc.
    Connections have been renamed (server_[1234] instead of master_[abcd]),
    we use rpl_sync.inc instead of circular_rpl_for_4_hosts_sync.inc,
    we use the new rpl_end.inc to clean up instead of doing it
    manually, and we use rpl_change_topology.inc instead of manual
    reconfiguration.
  - Added comment to make test understandable.
  - the test contained a race condition. server_4 was not sync'ed. This could
    cause sql_slave_skip_counter to have the value 1 when the test ended, so
    check-testcase would complain. Added 'sync_slave_with_master server_4'.
mysql-test/suite/rpl/t/rpl_colSize.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_commit_after_flush.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_concurrency_error.test:
  - Made test clean up replication state.
  - renamed diff_master_slave.inc to rpl_diff.inc and
    renamed $diff_statement to $rpl_diff_statement
mysql-test/suite/rpl/t/rpl_conditional_comments.test:
  made test clean up after itself
  new protocol for diff_tables.inc
mysql-test/suite/rpl/t/rpl_create_database.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_create_if_not_exists.test:
  renamed master-slave-end.inc to rpl_end.inc
mysql-test/suite/rpl/t/rpl_create_tmp_table_if_not_exists.test:
  renamed master-slave-end.inc to rpl_end.inc
mysql-test/suite/rpl/t/rpl_critical_errors.test:
  Made test clean up replication state.
  Fixed syntax error in test.
mysql-test/suite/rpl/t/rpl_cross_version.test:
  Made test clean up replication state.
  Made test execute on slave connection instead of on master connection.
  This allows us to get rid of -master.opt file.
mysql-test/suite/rpl/t/rpl_current_user.cnf:
  use environment variables recognized by rpl_init.inc
mysql-test/suite/rpl/t/rpl_current_user.test:
  - Use rpl_init.inc instead of ad-hoc three-server setup.
    Hence, rename connection slave2 to server_3
  - don't drop lots of things at the beginning of the test
  - rpl_diff_tables.inc does not sync any more, so we have to
    sync here instead
  - renamed $diff_table to $rpl_diff_table and $diff_table_list
    to $rpl_diff_table_list
  - use diff_tables.inc instead of rpl_diff_tables.inc
mysql-test/suite/rpl/t/rpl_ddl.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_deadlock_innodb.test:
  cosmetic fixes
mysql-test/suite/rpl/t/rpl_delete_no_where.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_do_grant.test:
  Made test clean up replication state.
  renamed master-slave-end.inc to rpl_end.inc
  use include/check_slave_no_error.inc instead of ad-hoc construction
mysql-test/suite/rpl/t/rpl_drop.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_drop_db.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_drop_temp.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_drop_view.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_dual_pos_advance.test:
  Made test use the new framework for circular replication,
  instead of ad-hoc setup.
mysql-test/suite/rpl/t/rpl_empty_master_crash.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_err_ignoredtable.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_events.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_extra_col_master_innodb.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_extra_col_master_myisam.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_extra_col_slave_innodb.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_extra_col_slave_myisam.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_failed_optimize.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_filter_tables_not_exist.test:
  renamed master-slave-end.inc to rpl_end.inc
mysql-test/suite/rpl/t/rpl_flushlog_loop-master.opt:
  Removed useless options from -master.opt file.
mysql-test/suite/rpl/t/rpl_flushlog_loop-master.sh:
  Removed useless -master.sh file
mysql-test/suite/rpl/t/rpl_flushlog_loop-slave.opt:
  Removed useless options from -slave.opt file
mysql-test/suite/rpl/t/rpl_flushlog_loop-slave.sh:
  Removed useless -slave.sh file
mysql-test/suite/rpl/t/rpl_flushlog_loop.test:
  Made test use new framework for circular replication,
  instead of ad-hoc setup.
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_foreign_key_innodb.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_found_rows.test:
  Made test clean up replication state.
  replaced reset_master_and_slave.inc by rpl_reset.inc
mysql-test/suite/rpl/t/rpl_free_items.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_geometry.test:
  replaced master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_get_lock.test:
  Made test clean up replication state.
  Replaced save_master_pos+connection slave+sync_with_master
  by sync_slave_with_master.
mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test:
  Made test clean up replication state.
  Removed last part of test, because it was verbatim identical to
  rpl_server_id1.test
mysql-test/suite/rpl/t/rpl_grant.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_idempotency.test:
  use check_slave_no_error.inc instead of ad-hoc tests
  use wait_for_slave_sql_error.inc instead of wait_for_slave_to_stop.inc
  replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_ignore_grant.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_ignore_revoke.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_ignore_table.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_ignore_table_update.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_incident.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_init_slave.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_init_slave_errors.test:
  Made test clean up replication state.
  Also replaced call to wait_for_slave_sql_to_stop.inc by
  call to wait_for_slave_sql_error.inc
mysql-test/suite/rpl/t/rpl_innodb.test:
  replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_innodb_bug28430.test:
  replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_innodb_bug30888.test:
  replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_innodb_mixed_ddl.test:
  cosmetic fixes
mysql-test/suite/rpl/t/rpl_innodb_mixed_dml.test:
  cosmetic fixes
mysql-test/suite/rpl/t/rpl_insert.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_insert_id.test:
  cosmetic fixes
mysql-test/suite/rpl/t/rpl_insert_id_pk.test:
  cosmetic fixes
mysql-test/suite/rpl/t/rpl_insert_ignore.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_insert_select.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_invoked_features.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_killed_ddl.test:
  - Made test clean up replication state.
  - renamed diff_master_slave.inc to rpl_diff.inc and
    renamed $diff_statement to $rpl_diff_statement
mysql-test/suite/rpl/t/rpl_known_bugs_detection.test:
  - Made test clean up replication state.
  - removed wait_for_slave_sql_to_stop.inc, because it already does
    wait_for_slave_sql_error.inc
mysql-test/suite/rpl/t/rpl_load_from_master.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_load_table_from_master.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddata.test:
  cosmetic fixes
mysql-test/suite/rpl/t/rpl_loaddata_charset.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddata_fatal.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddata_m.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddata_map.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddata_s.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddata_simple.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddata_symlink.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddatalocal.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loadfile.test:
  - Made test clean up replication state.
  - replace reset_master_and_slave.inc by rpl_reset.inc
  - diff_tables.inc now takes only one parameter.
  - diff_tables.inc also restores the connection to what it was before,
    so in this test we have to manually change connection
    after sourcing diff_tables.inc
mysql-test/suite/rpl/t/rpl_locale.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_log_pos.test:
  Made test clean up replication state.
  replace stop_slave.inc by stop_slave_sql.inc since the io thread
  is already stopped.
mysql-test/suite/rpl/t/rpl_manual_change_index_file.test:
  use wait_for_slave_io_error.inc instead of wait_for_slave_to_stop.inc
  replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_many_optimize.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_master_pos_wait.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_misc_functions.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_mixed_bit_pk.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_mixed_ddl_dml.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_multi_delete.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_multi_delete2.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_multi_engine.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_multi_update.test:
  cosmetic fixes
mysql-test/suite/rpl/t/rpl_multi_update2.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_multi_update3.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_multi_update4.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_mysql_upgrade.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_name_const.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_nondeterministic_functions.test:
  - Made test clean up replication state.
  - diff_tables.inc now takes only one parameter.
  - diff_tables.inc also restores the connection to what it was before,
    so in this test we have to manually change connection
    after sourcing diff_tables.inc
mysql-test/suite/rpl/t/rpl_not_null_innodb.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_not_null_myisam.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_optimize.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_packet.test:
  - Made test clean up replication state.
  - replace wait_for_slave_io_to_stop.inc by wait_for_slave_io_error.inc
  - replace master-slave-reset.inc by rpl_reset.inc + drop table t1.
  - replaced save_master_pos/connection slave/sync_with_master
    by sync_slave_with_master.
  - added comment explaining why we need stop_slave_sql.inc
    (we shouldn't need it, it's a bug)
mysql-test/suite/rpl/t/rpl_plugin_load.test:
  replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_ps.test:
  Made test clean up replication state.
  removed lots os useless junk
mysql-test/suite/rpl/t/rpl_rbr_to_sbr.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_read_only.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_relay_space_innodb.test:
  cosmetic fixes
mysql-test/suite/rpl/t/rpl_relay_space_myisam.test:
  cosmetic fixes
mysql-test/suite/rpl/t/rpl_relayrotate.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_relayspace.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_replicate_do.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_replicate_ignore_db.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_report.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_rewrt_db.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_rotate_logs-slave.opt:
  Got rid of unnecessary -slave.opt file
mysql-test/suite/rpl/t/rpl_rotate_logs-slave.sh:
  Got rid of unnecessary -slave.sh file
mysql-test/suite/rpl/t/rpl_rotate_logs.test:
  - Made test clean up replication state.
  - replaced wait_for_slave_sql_to_stop.inc by
    wait_for_slave_sql_error_and_skip.inc
  - removed useless cleanup at beginning of test
  - did not make test use the standard replication framework
    (master-slave.inc + rpl_end.inc), because it won't work. i don't
    know why.
mysql-test/suite/rpl/t/rpl_row_001.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_4_bytes.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_NOW.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_USER.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_UUID.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_basic_11bugs.test:
  Made test clean up replication state.
  Removed unnecessary 'set binlog_format'.
  replaced master-slave-reset.inc by rpl_reset.inc
mysql-test/suite/rpl/t/rpl_row_basic_2myisam.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_basic_3innodb.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_basic_8partition.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_blob_innodb.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_blob_myisam.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_colSize.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_conflicts.test:
  replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_row_create_table.test:
  replace master-slave-end.inc by rpl_end.inc
  replace master-slave-reset.inc by rpl_reset.inc
  replace long sequence of reset master+reset slave by rpl_reset.inc
mysql-test/suite/rpl/t/rpl_row_delayed_ins.test:
  cosmetic fixes
mysql-test/suite/rpl/t/rpl_row_drop.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_find_row.test:
  - Made test clean up replication state.
  - replace master-slave-reset.inc by rpl_reset.inc
  - diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_row_flsh_tbls.test:
  cosmetic fixes
mysql-test/suite/rpl/t/rpl_row_func001.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_func002.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_func003.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_inexist_tbl.test:
  Made test clean up replication state.
  replace wait_for_slave_sql_to_stop.inc by wait_for_slave_sql_error.inc
mysql-test/suite/rpl/t/rpl_row_insert_delayed.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_log.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_log_innodb.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_rec_comp_innodb.test:
  Made test clean up replication state
mysql-test/suite/rpl/t/rpl_row_rec_comp_myisam.test:
  - replace master-slave-reset.inc by rpl_reset.inc
  - Made test clean up replication state
  - diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_row_sp001.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp002_innodb.test:
  cosmetic fixes
mysql-test/suite/rpl/t/rpl_row_sp003.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp005.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp006_InnoDB.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp007_innodb.test:
  cosmetic fixes
mysql-test/suite/rpl/t/rpl_row_sp008.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp009.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp010.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp011.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp012.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_stop_middle_update.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_tabledefs_2myisam.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_tabledefs_3innodb.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test:
  - replaced master-slave-reset.inc by rpl_reset.inc
  - replaced master-slave-end.inc by rpl_end.inc
  - diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_row_trig001.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_trig002.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_trig003.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_trig004.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_trunc_temp.test:
  replaced master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_row_unsafe_funcs.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_until.test:
  Made test clean up replication state.
  Removed unused mtr variable $VERSION.
mysql-test/suite/rpl/t/rpl_row_view01.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_wide_table.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_server_id1.test:
  - Replaced ad-hoc setup of circular replication by call to rpl_init.inc
  - Made test clean up replication state.
  - Replaced ad-hoc use of wait_for_slave_param.inc by
    wait_for_slave_io_error.inc
mysql-test/suite/rpl/t/rpl_server_id2.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_session_var.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_set_charset.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_set_null_innodb.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_set_null_myisam.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_show_slave_running.test:
  made test clean up replication state
mysql-test/suite/rpl/t/rpl_skip_error.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_slave_grp_exec.test:
  - Made test clean up replication state.
  - replaced wait_for_slave_sql_to_stop.inc by wait_for_slave_sql_error.inc
  - replaced stop_slave.inc by stop_slave_io.inc where the sql thread
    was already stopped.
mysql-test/suite/rpl/t/rpl_slave_load_in.test:
  - Made test clean up replication state.
  - diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_slave_load_tmpdir_not_exist.test:
  - Made test clean up replication state.
  - Replaced call to wait_for_slave_sql_to_stop.inc by call to
    wait_for_slave_sql_error.inc
  - Replaced ad-hoc repliction setup by call to master-slave.inc
mysql-test/suite/rpl/t/rpl_slave_skip.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_slave_status.test:
  Made test clean up replication state.
  replaced check that IO thread has stopped by wait_for_slave_io_error.inc
  simplified cleanup code
mysql-test/suite/rpl/t/rpl_slow_query_log.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_sp.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_sp004.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_sp_effects.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_sporadic_master.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_ssl.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_ssl1.test:
  Made test clean up replication state.
  Replaced save_master_pos+connection slave+sync_slave_with_master
  by sync_slave_with_master
mysql-test/suite/rpl/t/rpl_start_stop_slave.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_stm_000001.test:
  The include file extra/rpl_tests/rpl_stm_000001.test was only
  sourced once, in suite/rpl/t/rpl_stm_000001.test.
  Moved extra/rpl_tests/rpl_stm_000001.test to
  suite/rpl/t/rpl_stm_000001.test and removed the old
  suite/rpl/t/rpl_stm_000001.test.
  Also made test clean up replication state, and replaced
  wait_for_slave_sql_to_stop.inc by wait_for_slave_sql_error_and_skip.inc
mysql-test/suite/rpl/t/rpl_stm_000001.test:
  - The include file extra/rpl_tests/rpl_stm_000001.test was only
    sourced once, in suite/rpl/t/rpl_stm_000001.test.
    Moved extra/rpl_tests/rpl_stm_000001.test to
    suite/rpl/t/rpl_stm_000001.test and removed the old
    suite/rpl/t/rpl_stm_000001.test.
mysql-test/suite/rpl/t/rpl_stm_auto_increment_bug33029.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_stm_binlog_direct.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_stm_conflicts.test:
  replaced master-slave-end.inc by rpl_end.inc
  cosmetic fixes
mysql-test/suite/rpl/t/rpl_stm_create_if_not_exists.test:
  use rpl_end instead of master-slave-end.
mysql-test/suite/rpl/t/rpl_stm_flsh_tbls.test:
  cosmetic fixes
mysql-test/suite/rpl/t/rpl_stm_insert_delayed.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_stm_loadfile.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_stm_log.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_stm_max_relay_size.test:
  cosmetic fixes
mysql-test/suite/rpl/t/rpl_stm_mixing_engines.test:
  - replaced master-slave-end.inc by rpl_end.inc
  - replaced master-slave-reset.inc by rpl_reset.inc
  - diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_stm_multi_query.test:
  cosmetic fixes
mysql-test/suite/rpl/t/rpl_stm_no_op.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_stm_sql_mode.test:
  made test clean up replication state
mysql-test/suite/rpl/t/rpl_stm_until.test:
  - Made test clean up replication state.
  - replaced master-slave-reset.inc by rpl_reset.inc
  - the relay log is now called slave-relay-bin.000003 instead of .000004,
    because master-slave.inc doesn't rotate it as much as before.
mysql-test/suite/rpl/t/rpl_stop_slave.test:
  use rpl_end instead of master-slav-end
mysql-test/suite/rpl/t/rpl_switch_stm_row_mixed.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_temp_table.test:
  Made test clean up replication state.
  Replaced save_master_pos/connection slave/sync_with_master
  by sync_slave_with_master.
mysql-test/suite/rpl/t/rpl_temp_table_mix_row.test:
  Made test clean up replication state.
  replaced ad-hoc call to 'connect' by include/rpl_connect.inc
  replaced master-slave-reset.inc by rpl_reset.inc
mysql-test/suite/rpl/t/rpl_temporary.test:
  - Made test clean up replication state.
  - This test sources include/delete_anonymous_users.inc on master.
    This means it updates the user table in the mysql database manually
    on the master. This causes failure in the slave sql thread when
    binlog_format=row. Hence, we stop the slave first and source
    include/delete_anonymous_users.inc on both master and slave.
mysql-test/suite/rpl/t/rpl_temporary_errors.test:
  Made test clean up replication state.
  cosmetic fixes
mysql-test/suite/rpl/t/rpl_test_framework.cnf:
  new cfg file for new test
mysql-test/suite/rpl/t/rpl_test_framework.test:
  new test case that verifies that include/rpl_change_topology.inc
  works
mysql-test/suite/rpl/t/rpl_timezone.test:
  - Made test clean up replication state.
  - stop slave before last sub-test, because that test does not use
    the slave connection.
mysql-test/suite/rpl/t/rpl_tmp_table_and_DDL.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_trigger.test:
  - Made test clean up replication state.
  - replace master-slave-reset.inc by rpl_reset.inc
  - use new file rpl_reconnect.inc instead of ad-hoc code
  - diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_trunc_temp.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_truncate_2myisam.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_truncate_3innodb.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_typeconv_innodb.test:
  - made test clean up replication state
  - removed unnecessary call to master-slave-reset.inc
  - diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_udf.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_user.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_user_variables.test:
  Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_variables.test:
  - Made test clean up replication state.
  - replaced reset_master_and_slave.inc by rpl_reset.inc
  - diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_variables_stm.test:
  - Made test clean up replication state.
  - diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_view.test:
  Made test clean up replication state.
mysql-test/suite/rpl_ndb/r/rpl_ndb_2other.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_UUID.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_apply_status.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_auto_inc.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_basic.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_blob.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_blob2.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_circular.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_2ch.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_simplex.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_commit_afterflush.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_ctype_ucs2_def.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_dd_basic.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_dd_partitions.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_ddl.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_delete_nowhere.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_do_db.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_do_table.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_func003.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_idempotent.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_innodb2ndb.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_innodb_trans.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_insert_ignore.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_log.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_mixed_engines_transactions.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_mixed_tables.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_multi.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_multi_update2.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_multi_update3.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_myisam2ndb.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_rep_ignore.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_row_001.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_set_null.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_sp003.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_sp006.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_stm_innodb.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_sync.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_trig004.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_row_basic_7ndb.result:
  updated result file
mysql-test/suite/rpl_ndb/r/rpl_truncate_7ndb.result:
  updated result file
mysql-test/suite/rpl_ndb/t/rpl_ndb_2innodb.test:
  made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_2myisam.test:
  made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_2ndb.test:
  made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_2other.test:
  made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_UUID.test:
  made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_apply_status.test:
  made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_auto_inc.test:
  made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_bank.test:
  made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_basic.test:
  - replaced master-slave-end.inc by rpl_end.inc
  - removed wait_for_slave_sql_to_stop since it is followed by
    wait_for_slave_sql_error.inc
mysql-test/suite/rpl_ndb/t/rpl_ndb_blob.test:
  made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_blob2.test:
  made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_circular.test:
  made test use rpl_init.inc to setup circular replication, instead of ad-hoc setup
  made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.cnf:
  removed automatic configuration of server as slave. this is not
  needed because rpl_init.inc does it.
mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.test:
  - made test clean up replication state
  - it seems that sync_slave_with_master does not work deterministically
    here, so instead we wait for 'drop table' to replicate by checking
    when the table disappears on slave.
  - diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_simplex.test:
  make test clean up replication state
  use rpl_change_topology.inc to reconfigure replication topology,
  instead of ad-hoc call to change master
mysql-test/suite/rpl_ndb/t/rpl_ndb_commit_afterflush.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_ctype_ucs2_def.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_dd_basic.test:
  replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl_ndb/t/rpl_ndb_dd_partitions.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_ddl.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_delete_nowhere.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_do_db.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_do_table.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_extraCol.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_func003.test:
  replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl_ndb/t/rpl_ndb_idempotent.test:
  replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb2ndb.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb_trans.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_insert_ignore.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_load.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_log.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_engines_transactions.test:
  - replace master-slave-end.inc by rpl_end.inc
  - diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_tables.test:
  - make test clean up replication state
  - diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl_ndb/t/rpl_ndb_multi.test:
  - make test clean up replication state
  - use rpl_change_topology.inc to change replication topology,
    instead of ad-hoc calls to change master
mysql-test/suite/rpl_ndb/t/rpl_ndb_multi_update2.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_multi_update3.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_myisam2ndb.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_relayrotate.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_rep_ignore.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_row_001.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_set_null.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_sp003.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_sp006.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_stm_innodb.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_sync.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_trig004.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndbapi_multi.test:
  make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_row_basic_7ndb.test:
  replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl_ndb/t/rpl_truncate_7ndb.test:
  replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl_ndb/t/rpl_truncate_7ndb_2.test:
  make test clean up replication state
mysql-test/suite/sys_vars/t/rpl_init_slave_func.test:
  made test clean up after itself
mysql-test/t/init_file.test:
  use new file force_restart.inc instead of SP
2010-12-19 18:07:28 +01:00
Georgi Kodinov
2969956def merge 2010-12-17 15:05:50 +02:00
Georgi Kodinov
1e3a4dc105 merge 2010-12-17 15:02:10 +02:00
Georgi Kodinov
b908a74bc9 merge 2010-12-16 16:40:52 +02:00
Martin Hansson
d74e8c5d8b Merge. 2010-12-16 10:37:05 +01:00
Martin Hansson
ffdeb06272 Bug#54568: create view cause Assertion failed: 0,
file .\item_subselect.cc, line 836
     
IN quantified predicates are never executed directly. They are rather wrapped
inside nodes called IN Optimizers (Item_in_optimizer) which take care of the
execution. However, this is not done during query preparation. Unfortunately
the LIKE predicate pre-evaluates constant right-hand side arguments even
during name resolution. Likely this is meant as an optimization.
      
Fixed by not pre-evaluating LIKE arguments in view prepare mode.

Back-ported to 5.0s
2010-12-16 10:07:48 +01:00
Alexander Nozdrin
0c2ef4a63d Auto-merge from mysql-5.0-security. 2010-12-15 19:08:21 +03:00
Alexander Nozdrin
1bd81f6b81 Patch for Bug#57952 (privilege change is not taken into account by EXECUTE).
The user-visible problem was that changes to column-level privileges,
happened in between of PREPARE and EXECUTE of a prepared statement, were
neglected. I.e. a prepared statement could be executed with the
column-level privileges as of PREPARE-time. The problem existed for
column-level privileges only.

A similar problem existed for stored programs: the changes between
executions didn't have an effect.

Technically the thing is that table references are cached in
Prepared_statement::prepare() call. In subsequent
Prepared_statement::execute() calls those cached values are used.
There are two functions to get a field by name: find_field_in_table() and
find_field_in_table_ref(). On prepare-phase find_field_in_table_ref() is
called, on execute-phase -- find_field_in_table() because the table is
cached. find_field_in_table() does not check column-level privileges and
expects the caller to do that. The problem was that this check was
forgotten.

The fix is to check them there as it happens in find_field_in_table_ref().
2010-12-15 19:00:01 +03:00
Gleb Shchepa
086130e3c0 backport of bug #54476 fix from 5.1-bugteam to 5.0-bugteam.
Original revid: alexey.kopytov@sun.com-20100723115254-jjwmhq97b9wl932l

 > Bug #54476: crash when group_concat and 'with rollup' in
 >                      prepared statements
 >
 > Using GROUP_CONCAT() together with the WITH ROLLUP modifier
 > could crash the server.
 >
 > The reason was a combination of several facts:
 >
 > 1. The Item_func_group_concat class stores pointers to ORDER
 > objects representing the columns in the ORDER BY clause of
 > GROUP_CONCAT().
 >
 > 2. find_order_in_list() called from
 > Item_func_group_concat::setup() modifies the ORDER objects so
 > that their 'item' member points to the arguments list
 > allocated in the Item_func_group_concat constructor.
 >
 > 3. In some cases (e.g. in JOIN::rollup_make_fields) a copy of
 > the original Item_func_group_concat object could be created by
 > using the Item_func_group_concat::Item_func_group_concat(THD
 > *thd, Item_func_group_concat *item) copy constructor. The
 > latter essentially creates a shallow copy of the source
 > object. Memory for the arguments array is allocated on
 > thd->mem_root, but the pointers for arguments and ORDER are
 > copied verbatim.
 >
 > What happens in the test case is that when executing the query
 > for the first time, after a copy of the original
 > Item_func_group_concat object has been created by
 > JOIN::rollup_make_fields(), find_order_in_list() is called for
 > this new object. It then resolves ORDER BY by modifying the
 > ORDER objects so that they point to elements of the arguments
 > array which is local to the cloned object. When thd->mem_root
 > is freed upon completing the execution, pointers in the ORDER
 > objects become invalid. Those ORDER objects, however, are also
 > shared with the original Item_func_group_concat object which is
 > preserved between executions of a prepared statement. So the
 > first call to find_order_in_list() for the original object on
 > the second execution tries to dereference an invalid pointer.
 >
 > The solution is to create copies of the ORDER objects when
 > copying Item_func_group_concat to not leave any stale pointers
 > in other instances with different lifecycles.


mysql-test/r/func_gconcat.result:
  Test case for bug #54476.
mysql-test/t/func_gconcat.test:
  Test case for bug #54476.
sql/item_sum.cc:
  Copy the ORDER objects pointed to by the elements of the
  'order' array in the copy constructor of
  Item_func_group_concat.
sql/table.h:
  Removed the unused 'item_copy' member of the ORDER class.
2010-12-14 23:52:53 +03:00
Sergey Glukhov
76627d5fc3 Bug#57818 string conversion function died
Bug#57913 large negative number to string conversion functions crash
String object which is used as result container of the item
has uninitialized 'str_charset' field. This object
might be used later to preform some internal operations
and str_charset field is involved in these operations.
It leads to crash.
The fix is to intialize str_charset in my_decimal2string() func.


mysql-test/r/func_str.result:
  test case
mysql-test/t/func_str.test:
  test case
sql/my_decimal.cc:
  intialize str_charset field for result string
  in my_decimal2string() func.
2010-12-14 19:08:25 +03:00
Sergey Glukhov
fcb83cbf15 Fixed following problems:
--Bug#52157 various crashes and assertions with multi-table update, stored function
--Bug#54475 improper error handling causes cascading crashing failures in innodb/ndb
--Bug#57703 create view cause Assertion failed: 0, file .\item_subselect.cc, line 846
--Bug#57352 valgrind warnings when creating view
--Recently discovered problem when a nested materialized derived table is used
  before being populated and it leads to incorrect result

We have several modes when we should disable subquery evaluation.
The reasons for disabling are different. It could be
uselessness of the evaluation as in case of 'CREATE VIEW'
or 'PREPARE stmt', or we should disable subquery evaluation
if tables are not locked yet as it happens in bug#54475, or
too early evaluation of subqueries can lead to wrong result
as it happened in Bug#19077.
Main problem is that if subquery items are treated as const
they are evaluated in ::fix_fields(), ::fix_length_and_dec()
of the parental items as a lot of these methods have
Item::val_...() calls inside.
We have to make subqueries non-const to prevent unnecessary
subquery evaluation. At the moment we have different methods
for this. Here is a list of these modes:

1. PREPARE stmt;
We use UNCACHEABLE_PREPARE flag.
It is set during parsing in sql_parse.cc, mysql_new_select() for
each SELECT_LEX object and cleared at the end of PREPARE in
sql_prepare.cc, init_stmt_after_parse(). If this flag is set
subquery becomes non-const and evaluation does not happen.

2. CREATE|ALTER VIEW, SHOW CREATE VIEW, I_S tables which
   process FRM files
We use LEX::view_prepare_mode field. We set it before
view preparation and check this flag in
::fix_fields(), ::fix_length_and_dec().
Some bugs are fixed using this approach,
some are not(Bug#57352, Bug#57703). The problem here is
that we have a lot of ::fix_fields(), ::fix_length_and_dec()
where we use Item::val_...() calls for const items.

3. Derived tables with subquery = wrong result(Bug19077)
The reason of this bug is too early subquery evaluation.
It was fixed by adding Item::with_subselect field
The check of this field in appropriate places prevents
const item evaluation if the item have subquery.
The fix for Bug19077 fixes only the problem with
convert_constant_item() function and does not cover
other places(::fix_fields(), ::fix_length_and_dec() again)
where subqueries could be evaluated.

Example:
CREATE TABLE t1 (i INT, j BIGINT);
INSERT INTO t1 VALUES (1, 2), (2, 2), (3, 2);
SELECT * FROM (SELECT MIN(i) FROM t1
WHERE j = SUBSTRING('12', (SELECT * FROM (SELECT MIN(j) FROM t1) t2))) t3;
DROP TABLE t1;

4. Derived tables with subquery where subquery
   is evaluated before table locking(Bug#54475, Bug#52157)

Suggested solution is following:

-Introduce new field LEX::context_analysis_only with the following
 possible flags:
 #define CONTEXT_ANALYSIS_ONLY_PREPARE 1
 #define CONTEXT_ANALYSIS_ONLY_VIEW    2
 #define CONTEXT_ANALYSIS_ONLY_DERIVED 4
-Set/clean these flags when we perform
 context analysis operation
-Item_subselect::const_item() returns
 result depending on LEX::context_analysis_only.
 If context_analysis_only is set then we return
 FALSE that means that subquery is non-const.
 As all subquery types are wrapped by Item_subselect
 it allow as to make subquery non-const when
 it's necessary.


mysql-test/r/derived.result:
  test case
mysql-test/r/multi_update.result:
  test case
mysql-test/r/view.result:
  test case
mysql-test/suite/innodb/r/innodb_multi_update.result:
  test case
mysql-test/suite/innodb/t/innodb_multi_update.test:
  test case
mysql-test/suite/innodb_plugin/r/innodb_multi_update.result:
  test case
mysql-test/suite/innodb_plugin/t/innodb_multi_update.test:
  test case
mysql-test/t/derived.test:
  test case
mysql-test/t/multi_update.test:
  test case
mysql-test/t/view.test:
  test case
sql/item.cc:
  --removed unnecessary code
sql/item_cmpfunc.cc:
  --removed unnecessary checks
  --THD::is_context_analysis_only() is replaced with LEX::is_ps_or_view_context_analysis()
sql/item_func.cc:
  --refactored context analysis checks
sql/item_row.cc:
  --removed unnecessary checks
sql/item_subselect.cc:
  --removed unnecessary code
  --added DBUG_ASSERT into Item_subselect::exec()
    which asserts that subquery execution can not happen
    if LEX::context_analysis_only is set, i.e. at context
    analysis stage.
  --Item_subselect::const_item()
    Return FALSE if LEX::context_analysis_only is set.
    It prevents subquery evaluation in ::fix_fields &
    ::fix_length_and_dec at context analysis stage.
sql/item_subselect.h:
  --removed unnecessary code
sql/mysql_priv.h:
  --Added new set of flags.
sql/sql_class.h:
  --removed unnecessary code
sql/sql_derived.cc:
  --added LEX::context_analysis_only analysis intialization/cleanup
sql/sql_lex.cc:
  --init LEX::context_analysis_only field
sql/sql_lex.h:
  --New LEX::context_analysis_only field
sql/sql_parse.cc:
  --removed unnecessary code
sql/sql_prepare.cc:
  --removed unnecessary code
  --added LEX::context_analysis_only analysis intialization/cleanup
sql/sql_select.cc:
  --refactored context analysis checks
sql/sql_show.cc:
  --added LEX::context_analysis_only analysis intialization/cleanup
sql/sql_view.cc:
  --added LEX::context_analysis_only analysis intialization/cleanup
2010-12-14 12:33:03 +03:00
Michael Widenius
09d2e7f680 merge with 5.1
(Includes patch for overrun detected by valgrind thanks to previous my_alloca() -> my_malloc() patch)
2010-12-13 15:51:47 +02:00
Sergey Glukhov
1faf910eeb Bug#39828 : Autoinc wraps around when offset and increment > 1
Auto increment value wraps when performing a bulk insert with
auto_increment_increment and auto_increment_offset greater than
one.
The fix:
If overflow happened then return MAX_ULONGLONG value as an
indication of overflow and check this before storing the
value into the field in update_auto_increment().



mysql-test/r/auto_increment.result:
  test case
mysql-test/suite/innodb/r/innodb-autoinc.result:
  test case fix
mysql-test/suite/innodb/t/innodb-autoinc.test:
  test case fix
mysql-test/suite/innodb_plugin/r/innodb-autoinc.result:
  test case fix
mysql-test/suite/innodb_plugin/t/innodb-autoinc.test:
  test case fix
mysql-test/t/auto_increment.test:
  test case
sql/handler.cc:
  If overflow happened then return MAX_ULONGLONG value as an
  indication of overflow and check this before storing the
  value into the field in update_auto_increment().
2010-12-13 14:48:12 +03:00
Sergey Petrunya
58b646001a Merge DS-MRR/CPK improvements into 5.3-main 2010-12-13 13:42:40 +03:00
Sergey Glukhov
6330815a0c Bug#58396 group_concat and explain extended are still crashy
Explain fails at fix_fields stage and some items are left unfixed,
particulary Item_group_concat. Item_group_concat::orig_args field
is uninitialized in this case and Item_group_concat::print call 
leads to crash.
The fix:
move the initialization of Item_group_concat::orig_args
into constructor.


mysql-test/r/func_gconcat.result:
  test case
mysql-test/t/func_gconcat.test:
  test case
sql/item_sum.cc:
  move the initialization of Item_group_concat::orig_args
  into constructor.
2010-12-13 13:39:26 +03:00
Igor Babaev
7f52af655a Merge. 2010-12-10 23:23:34 -08:00
Michael Widenius
84edaac4f1 Better warning message if lock test fails
Made archive.test a bit more safe



mysql-test/r/archive.result:
  Added removal of files to make rerun of failed test work
mysql-test/t/archive.test:
  Added removal of files to make rerun of failed test work
mysys/thr_lock.c:
  Better warning message if lock test fails
2010-12-10 17:04:09 +02:00
unknown
fd24b33b57 Merge the fix for LP BUG#682683. 2010-12-10 13:10:11 +02:00
Igor Babaev
212e42263d Merge. 2010-12-10 01:17:09 -08:00
Igor Babaev
c4080280df Merge 2010-12-09 21:55:14 -08:00
Igor Babaev
afcefa97d9 Addemdum for bug #685952.
Also:
Changed the value of TIME_FOR_COMPARE_ROWID to make it the same as for MWL 21.
Changed some queries in range_vs_index_merge.test to make them generate
the same plans as earlier.
2010-12-09 11:06:32 -08:00
Sergey Petrunya
1bf3964fbe MWL#90: Subqueries: Inside-out execution for materialized non-sj subqueries
- Merge into 5.3-main
2010-12-09 18:07:59 +03:00
Sergey Petrunya
a86599e1e4 BUG#671340: Diverging results in with mrr_sort_keys=ON|OFF and join_cache_level=5
- Make Mrr_ordered_index_reader() save the rowid across scan interruptions

Also
- Fix compiler warning for setup_buffer_sizes()
- Add commented key_copy/key_restore for better handling of a similar issue
  with index record being destroyed by scan interruption (which causes 
  incorrect evaluation of pushed index condition later on).
2010-12-09 00:47:33 +03:00
Georgi Kodinov
3190d45423 Backport of the 5.1 fix for bug #55826 to 5.0 2010-12-08 16:05:26 +02:00
unknown
1bbb55a260 MBug#687320: Fix sporadic test failures in innodb_mysql.test and partition_innodb_semi_consistent.test
Problem is that these tests run with --innodb-lock-wait-timeout=2 in .opt
(and this is necessary as built-in innodb does not allow to change this
dynamically). This cases another part of the test to occasionally time
out an UPDATE, which subsequently caused the test case to timeout due to
waiting for a condition (successful UPDATE) that never occurs.

Fixed by re-trying the update in case of timeout.

Tested by inserting a sleep() in the connection that the UPDATE is waiting
for, and checking that the retry loops a couple of times until the other
connection is done and COMMITs.
2010-12-08 14:34:08 +01:00
Igor Babaev
f5a0595209 Corrected the bug number in a test case. 2010-12-07 19:51:48 -08:00
Igor Babaev
f960f2334d Merge. 2010-12-07 17:17:13 -08:00
Igor Babaev
adb9fd9578 Made sure that SELECT from the test case for bug BUG#56862/64041 uses
the same execution plan that is in the output of the corresponding
EXPLAIN.
2010-12-07 14:48:04 -08:00
Igor Babaev
c44c9207f0 Fixed LP bug #685952.
When ORing two AND-OR formulas the range optimizer could miss
a conjunct in one of AND-OR formulas in the result. If the
index merge union plan to access a table is formed by this 
formula that, in general, is not inferred from the original
where/on condition,the query could return an incorrect result set.
2010-12-07 12:14:28 -08:00
Bjorn Munch
50d1f9f368 merge from 5.1-mtr 2010-12-09 20:32:47 +01:00
Gleb Shchepa
e5a88caf08 Bug #57187: more user variable fun with multiple
assignments and comparison in query

A query that compares assignments of the same
user variable caused Valgrind warnings: access
to freed memory region.

In case of a DECIMAL argument the assignment
operator (:=) may return a pointer to a stored
value instead of its copy when evaluated.
The next assignment to the same variable may:
 a) overwrite the stored value with a new one
    and return the same pointer or even
 b) reallocate stored value.

Thus, if we evaluate an assignment and keep
the result pointer and then evaluate another
assignment to the same variable, then the
kept result pointer of the first assignment
will point to unexpectedly changed data or
it may be a dead pointer.

That may cause wrong data or crash.

The user_var_entry::val_decimal method has
been modified to copy user variable data.


mysql-test/r/user_var.result:
  Test case for bug #57187.
mysql-test/t/user_var.test:
  Test case for bug #57187.
sql/item_func.cc:
  Bug #57187: more user variable fun with multiple
              assignments and comparison in query
  
  The user_var_entry::val_decimal method has
  been modified to copy user variable data.
2010-12-06 23:38:31 +03:00
Vladislav Vaintroub
82113c39b2 merge 2010-12-06 13:40:52 +01:00
Vladislav Vaintroub
bfcc62c748 merge 2010-12-06 13:16:49 +01:00
Michael Widenius
ca94028a36 Fixed test case to be repeatable (after discussion with Igor) 2010-12-06 11:25:04 +02:00
Michael Widenius
b7b25dc666 Merge with 5.1-release.
- Fixed problem with oqgraph and 'make dist'

Note that after this merge we have a problem show in join_outer where we examine too many rows in one specific case (related to BUG#57024).
This will be fixed when mwl#128 is merged into 5.3.
2010-12-06 10:25:44 +02:00
Igor Babaev
f7ab607a11 Merge. 2010-12-05 19:30:05 -08:00
Igor Babaev
67180d655a Fixed LP bug #684117.
A crash may happenin the cases when the range optimizer tried to OR
two index merge such that the second one contained less range trees
than the first one.
The bug was introduced by the patch of MWL#24: 
"index_merge: fair choice between index_merge union and range access".
2010-12-05 19:09:37 -08:00
Igor Babaev
1684c3e9a0 Fixed LP bug#684086.
If a primary key was used in the index intersection for
an InnoDB database the size of the memory allocated
for the best index intersection plan was one element less
than it was needed. That could cause a memory overwrite
and a crash as a result of it.
2010-12-05 13:49:04 -08:00
Igor Babaev
bfb7727526 Fixed LP bug #684117.
A crash may happenin the cases when the range optimizer tried to OR
two index merge such that the second one contained less range trees
than the first one.
The bug was introduced by the patch of MWL#24: 
"index_merge: fair choice between index_merge union and range access".
2010-12-04 19:19:55 -08:00
Igor Babaev
25704af0b2 Adjusted results in suite/innodb_plugin/r/innodb_mysql.result.
Made range_vs_index_merge.test platform independent
2010-12-04 10:40:07 -08:00
Igor Babaev
e13406b29b Changed the queries of index_intersect.test to ensure platform
independent execution plans.
Fixed a bug in Unique::unique_add that caused a crash for a query from
index_intersect_innodb on some platforms.
Fixed two bugs in opt_range.cc that led to the choice of not the
cheapest plans for index intersections.
2010-12-03 20:26:15 -08:00
Georgi Kodinov
a4b106c882 Backport of bug #55564 to 5.0-security 2010-12-03 16:56:36 +02:00
unknown
be95cde859 Merge 5.3-mwl89 into 5.3. 2010-12-03 15:37:54 +02:00
unknown
620aea4fde Fix LP BUG#682683
Analysis:
The fix for LP BUG#680846 avoids evaluation of constant expressions
with subqueries in the GROUP/ORDER clauses in the procedure
remove_const(). The purpose of remove_const is to remove constant
expressions in the GROUP/ORDER clauses.
  
In order delay until execution the evaluation of such subqueries,
they were not removed in the GROUP/ORDER clause. As a result temp
table creation during execution attempted to create a column in the
temp table for each constant GROUP/ORDER expression. However, the
logic in create_tmp_table is to not create temp table columns for
constant items. The crash was due to a group Item without a
corresponding column in the temp table for GROUP BY.
  
Solution:
The patch adds back removal of constant expressions with subqueries.
In order for such expressions to be evaluated, so that the server can
ensure that such subquries return 1 row, the evaluation of these
expressions is delayed until execution.
2010-12-02 21:54:40 +02:00
Sergey Petrunya
e2d2cdd7b8 BUG#623315: Query returns less rows when run with join_cache_level=6 on maria-5.3-dsmrr-cpk
- Testcase (but iself is no longer repeatable)
2010-12-02 18:35:12 +03:00
Sergey Petrunya
7c7e4f6d07 BUG#623300: Query with join_cache_level = 6 returns extra rows in maria-5.3-dsmrr-cpk
- Testcase (the bug itself was fixed by development on BKA side)
2010-12-02 18:23:34 +03:00
unknown
1b3336dc30 Fix LP BUG#680943
Analysis:
The problem lies in filesort.cc:find_all_keys().

When find_all_keys() is called for the outer query, it resets all
of the tree sets of fields - [read,write,vcol]_set and recomputes
them with respect to sorting.

However, in the loop for each current record the procedure calls
select->skip_record(thd), which evaluates the where clause, which
in turns evaluates the subquery. The JOIN evaluation of the
subquery eventually calls Field_long::val_int to evaluate the field
alias1.f1. The assertion condition
  "bitmap_is_set(table->read_set, field_index)"
fails, because the outer query changed the read_set of table "alias1".

Solution:
Restore the original read_set of the table before calling
SQL_SELECT::skip_record, then revert back to the read_set used in
find_all_keys.
2010-12-02 14:39:37 +02:00
Sergey Petrunya
44be131cd3 MWL#121-125 DS-MRR improvements
- Address Monty's review feedback, part 5
2010-12-02 14:10:52 +03:00
Mats Kindahl
8888e65229 BUG#58246: INSTALL PLUGIN not secure & crashable
Fixing test case that fails on Windows because .dll is used.
2010-12-02 09:13:31 +01:00
Igor Babaev
80377bbf6d MWL #21: "index_merge: non-ROR intersection".
The second (final) patch.
2010-12-01 23:39:39 -08:00
Mats Kindahl
9c87ae9ba7 Merging patch for BUG#58246 with mysql-5.1-bugteam. 2010-12-01 20:33:31 +01:00
Mats Kindahl
fc9f3efaec BUG#58246: INSTALL PLUGIN not secure & crashable
When installing plugins, there is a missing check
for slash (/) in the path on Windows. Note that on
Windows, both / and \ can be used to separate
directories.

This patch fixes the issue by:
- Adding a FN_DIRSEP symbol for all platforms
  consisting of a string of legal directory
  separators.
- Adding a charset-aware version of strcspn().
- Adding a check_valid_path() function that uses
  my_strcspn() to check if any FN_DIRSEP character
  is in the supplied string.
- Using the check_valid_path() function in
  sql_plugin.cc and sql_udf.cc (which means
  replacing the existing test there).

include/config-netware.h:
  Adding FN_DIRSEP
  ******
  Adding FN_DIRSEP
include/config-win.h:
  Adding FN_DIRSEP
  ******
  Adding FN_DIRSEP
include/m_ctype.h:
  Adding my_strspn() and my_strcspn().
  
  ******
  Adding my_strspn() and my_strcspn().
include/my_global.h:
  Adding FN_DIRSEP
  ******
  Adding FN_DIRSEP
mysql-test/t/plugin_not_embedded.test:
  Adding test that file names containing / is
  disallowed on *all* platforms.
  ******
  Adding test that file names containing / is
  disallowed on *all* platforms.
sql/sql_plugin.cc:
  Introducing check_if_path() function for
  checking if filename is a path to include
  / on Windows.
  ******
  Introducing check_if_path() function for
  checking if filename is a path to include
  / on Windows.
sql/sql_udf.cc:
  Switching to use check_if_path() function.
  ******
  Switching to use check_if_path() function.
strings/my_strchr.c:
  Adding my_strspn() and my_strcspn().
  ******
  Adding my_strspn() and my_strcspn().
2010-12-01 13:54:50 +01:00
Bjorn Munch
cc21483fcf Bug #58092 Test "rpl_cross_version" has "copy_file" failing
I am not fixing the test failure
Adds printing of my_errno when commands fail, could hopefully help
2010-12-01 11:11:16 +01:00
Nirbhay Choubey
2d81ad5be5 Additional fix for bug#54899
Fixing the testcase to use the database name
as connected_db instead of 'test' database.

mysql-test/r/mysql.result:
  Additional fix in the test for bug#54899.
mysql-test/t/mysql.test:
  Additional fix in the test for bug#54899.
2010-12-01 12:25:31 +05:30
Michael Widenius
1e5061fe3b merge with 5.1 2010-11-30 23:11:03 +02:00
Christopher Powers
e199c7cd17 Bug#35333, "If Federated table can't connect to remote host, can't retrieve metadata"
Improved error handling such that queries against Information_Schema.Tables won't
fail if a Federated table is unable to connect to remote host.



sql/sql_show.cc:
  If Handler::Info() fails, save error text in TABLE COMMENTS column, clear error.
2010-11-29 18:51:46 -06:00
Sergey Petrunya
d1afc20e13 Merge maria-5.3-mwl128 -> maria-5.2-mwl128-dsmrr-cpk 2010-11-29 19:00:32 +03:00
unknown
2251320840 Auto-merge fix for LP BUG#611622 2010-11-29 13:50:56 +02:00
Michael Widenius
b0d186e006 Disable warning that comes 'occasionable' depending on if HAVING is executed or not. 2010-11-28 15:02:12 +02:00
unknown
6dfca7d346 Fix LP BUG#680846
Analysis:
JOIN::optimize performs constant optimization of GROUP by clauses
by calling remove_const():
    group_list= remove_const(this, (old_group_list= group_list), conds,
                             rollup.state == ROLLUP::STATE_NONE,
			     &simple_group);
If it turns out that a GROUP clause references a field that is
computed by a single-row subquery, then the said optimization
performs premature execution of the subquery referenced by the
group clause.

Solution:
Block the evaluation of subqueries similarly to the approach
for the WHERE and JOIN..ON clauses.
2010-11-26 17:40:20 +02:00
Georgi Kodinov
d6d0827ec6 merge 2010-11-26 17:27:41 +02:00
Alexander Barkov
a7c09ea9f8 Bug#56639 Character Euro (0x88) not converted from cp1251 to utf8
Problem: MySQL cp1251 did not support 'U+20AC EURO SIGN'
which was assigned a few years ago to 0x88.

Fix: adding mapping: 0x88 <-> U+20AC 

  @ mysql-test/include/ctype_8bit.inc
  New shared file to test 8bit character sets.

  @ mysql-test/r/ctype_cp1251.result
  @ mysql-test/t/ctype_cp1251.test
  Adding tests

  @ sql/share/charsets/cp1251.xml
  Adding mapping

  @ strings/ctype-extra.c
  Regenerating ctype-extra.c using strings/conf_to_src
  according to new cp1251.xml
2010-11-26 16:58:54 +03:00
Nirbhay Choubey
e1b773cb53 Bug #54899 : --one-database option cannot handle DROP/CREATE DATABASE commands
After dropping and recreating the database specified along with --one-database
option at command line, mysql client keeps filtering the statements even after
the execution of a 'USE' command on the same database.

--one-database option enables the filtering of statements when the current
database is not the one specified at the command line. However, when the same
database is dropped and recreated the variable (current_db) that holds the
inital database name gets altered. This bug exploits the fact that current_db
initially gets set to null value (0) when a 'use db_name' follows the recreation
of same database db_name (speficied at the command line) and hence skip_updates
gets set to 1, which inturn triggers the further filtering of statements.

Fixed by making get_current_db() a no-op function when one_database is set,
and hence, under that condition current_db will not get altered.
Note, however the value of current_db can change when we execute 'connect'
command with a differnet database to reconnect to the server, in which case,
the behavior of --one-database will be formulated using this new database.


client/mysql.cc:
  Bug #54899 : --one-database option cannot handle DROP/CREATE DATABASE commands
  
  Added an if statement at the beginnning of get_current_db() , which makes it
  a no-op function if one-database option is specified, and hence current_db
  remains unchanged.
  
  Changed the help message for one-database option to a more appropriate message
  as specified in mysql documentation.
mysql-test/r/mysql.result:
  Added a test case for bug#54899 and some more test cases to
  check other one-database option related behaviors.
mysql-test/t/mysql.test:
  Added a test case for bug#54899 and some more test cases to
  check other one-database option related behaviors.
2010-11-26 19:27:59 +05:30
Georgi Kodinov
db8bd7beb8 merge 2010-11-26 14:51:48 +02:00
Michael Widenius
171260f37c Automatic merge with 5.1 2010-11-25 22:41:38 +02:00
Michael Widenius
babdbbbfd2 Automatic merge with base 2010-11-25 12:10:02 +02:00
unknown
970b46b1dc Fix LP BUG#611622
Fix MySQL BUG#52344 - Subquery materialization: Assertion if subquery in on-clause of outer join

Original fix and comments from Oysten, adjusted for the different
subquery optimization in MariaDB.
"
Problem: If tables of an outer join are constant tables,
the associated on-clause will be evaluated in the optimization
phase. If the on-clause contains a query that is to be
executed with subquery materialization, this will not work
since the infrastructure for such execution is not yet set up.
      
Solution: Do not evaluate on-clause in optimization phase if
is_expensive() returns true for this clause.  This is how the
problem is currently avoided for where-clauses.  This works
because, Item_in_subselect::is_expensive_processor returns true
if query is to be executed with subquery materialization.
"
In addition, after MWL#89, in MariaDB if the IN-EXISTS strategy
is chosen, the in-to-exists predicates are insterted after
join_read_const_table() is called, resulting in evaluation of
the subquery without the in-to-exists predicates.
2010-11-25 11:43:23 +02:00
Tatiana A. Nurnberg
7336ac45b7 Assorted post-merge fixes, clean-up, integration, compat with 5.6.
43233/55794.

mysql-test/r/change_user.result:
  Don't use -1 integer wrap around. It used to work, but now we do what's
  actually in the documentation. In tests, we now use DEFAULT or the
  numeral equivalent (as we do in the 5.6 tests).
mysql-test/r/key_cache.result:
  Can't drop default key case is an error now, not a warning, for compatibility
  with 5.6.
mysql-test/r/variables.result:
  Can't drop default key case is an error now, not a warning, for compatibility
  with 5.6.
mysql-test/t/change_user.test:
  Don't use -1 integer wrap around. It used to work, but now we do what's
  actually in the documentation. In tests, we now use DEFAULT or the
  numeral equivalent (as we do in the 5.6 tests).
mysql-test/t/key_cache.test:
  Can't drop default key case is an error now, not a warning, for compatibility
  with 5.6.
mysql-test/t/variables.test:
  Can't drop default key case is an error now, not a warning, for compatibility
  with 5.6.
sql/mysqld.cc:
  0 is a legal (albeit magic) value: "drop key cache."
sql/set_var.cc:
  bound_unsigned() can go now, it was just a kludge until things are done
  The Right Way, which they are now.
  
  Can't drop default key case is an error now, not a warning, for compatibility
  with 5.6.
tests/mysql_client_test.c:
  Don't use -1 integer wrap around. It used to work, but now we do what's
  actually in the documentation. In tests, we now use DEFAULT or the
  numeral equivalent (as we do in the 5.6 tests).
2010-11-25 03:11:05 +00:00
Michael Widenius
1a6373e8e2 Merge with MySQL 5.1.53
Open issues:
- A better fix for #57688; Igor is working on this
- Test failure in index_merge_innodb.test ; Igor promised to look at this
- Some Innodb tests fails (need to merge with latest xtradb) ; Kristian promised to look at this.
 - Failing tests: innodb_plugin.innodb_bug56143 innodb_plugin.innodb_bug56632 innodb_plugin.innodb_bug56680 innodb_plugin.innodb_bug57255 
- Werror is disabled;  Should be enabled after merge with xtradb.
2010-11-25 00:57:34 +02:00
unknown
0574bc894b Fix LP BUG#680058
Analysis:
The send_data method of the result sink class used to collect
data statistics about materialized subqueries incorrectly assumed
that duplicate rows are removed prior to calling send_data. As
a result the collected statistics was wrong, which resulted in
an incorrect maximal number of keys in the Ordered_key buffer.
  
Solution:
Try to insert each row into the materialized temp table before
collecting statistics, and if the insertion results in a duplicate
row, do not count the current row.
2010-11-25 00:34:50 +02:00
Gleb Shchepa
a30e9dda78 backport of bug #54461 from 5.1-security to 5.0-security
> revision-id: gshchepa@mysql.com-20100801181236-uyuq6ewaq43rw780
 > parent: alexey.kopytov@sun.com-20100723115254-jjwmhq97b9wl932l
 > committer: Gleb Shchepa <gshchepa@mysql.com>
 > branch nick: mysql-5.1-security
 > timestamp: Sun 2010-08-01 22:12:36 +0400
 > Bug #54461: crash with longblob and union or update with subquery
 >
 > Queries may crash, if
 >   1) the GREATEST or the LEAST function has a mixed list of
 >      numeric and LONGBLOB arguments and
 >   2) the result of such a function goes through an intermediate
 >      temporary table.
 >
 > An Item that references a LONGBLOB field has max_length of
 > UINT_MAX32 == (2^32 - 1).
 >
 > The current implementation of GREATEST/LEAST returns REAL
 > result for a mixed list of numeric and string arguments (that
 > contradicts with the current documentation, this contradiction
 > was discussed and it was decided to update the documentation).
 >
 > The max_length of such a function call was calculated as a
 > maximum of argument max_length values (i.e. UINT_MAX32).
 >
 > That max_length value of UINT_MAX32 was used as a length for
 > the intermediate temporary table Field_double to hold
 > GREATEST/LEAST function result.
 >
 > The Field_double::val_str() method call on that field
 > allocates a String value.
 >
 > Since an allocation of String reserves an additional byte
 > for a zero-termination, the size of String buffer was
 > set to (UINT_MAX32 + 1), that caused an integer overflow:
 > actually, an empty buffer of size 0 was allocated.
 >
 > An initialization of the "first" byte of that zero-size
 > buffer with '\0' caused a crash.
 >
 > The Item_func_min_max::fix_length_and_dec() has been
 > modified to calculate max_length for the REAL result like
 > we do it for arithmetical operators.


mysql-test/r/func_misc.result:
  Test case for bug #54461.
mysql-test/t/func_misc.test:
  Test case for bug #54461.
sql/item_func.cc:
  Bug #54461: crash with longblob and union or update with subquery
  
  The Item_func_min_max::fix_length_and_dec() has been
  modified to calculate max_length for the REAL result like
  we do it for arithmetical operators.
2010-11-24 23:03:16 +03:00
unknown
bf5140fb7b Fix test failure when the mysql-test/ directory is not writable. 2010-11-24 18:51:31 +01:00
Tatiana A. Nurnberg
161d4eea58 merge 2010-11-24 10:02:46 +00:00
Tatiana A. Nurnberg
af6ceb2544 merge 2010-11-24 08:50:04 +00:00
Michael Widenius
b52020221e Merge with MySQL 5.1.52 2010-11-23 23:39:59 +02:00
unknown
34c8930c09 Fix of LP BUG#675248.
Registration of pointer change if we assign it to other pointer which should be identical after statement execution (PS/SP).

mysql-test/r/subselect.result:
  Test suite.
mysql-test/t/subselect.test:
  Test suite.
sql/sql_class.cc:
  The procedure of the pointer registration.
sql/sql_class.h:
  The procedure of the pointer registration.
sql/sql_lex.cc:
  Registration of pointer change if we assign it to other pointer which should be identical after statement execution (PS/SP).
2010-11-23 20:43:34 +02:00
Ramil Kalimullin
55114ee20c Auto-merge with mysql-5.1-bugteam. 2010-11-23 16:08:10 +03:00
unknown
ea94906c23 Fix for LP BUG#606013: Adding bit field support for heap tables.
mysql-test/r/heap_btree.result:
  Test of index over bit firld in hash table.
mysql-test/r/heap_hash.result:
  Test of index over bit firld in hash table.
mysql-test/t/heap_btree.test:
  Test of index over bit firld in hash table.
mysql-test/t/heap_hash.test:
  Test of index over bit firld in hash table.
storage/heap/ha_heap.cc:
  Adding bit field support for heap tables.
storage/heap/hp_create.c:
  Adding bit field support for heap tables.
storage/heap/hp_hash.c:
  Adding bit field support for heap tables.
2010-11-23 12:35:37 +02:00
unknown
4829e5a43c Automerge mariadb 5.1 into mariadb 5.2 2010-11-23 07:26:07 +01:00
unknown
7840965db9 Fix test failure with OpenSSL due to different error message than in YaSSL. 2010-11-23 07:24:44 +01:00
unknown
2fa5df5f4e Fix LP BUG#680038
Analysis:
Single-row subqueries are not considered expensive and are
evaluated both during EXPLAIN in to detect errors like
"Subquery returns more than 1 row", and during optimization to
perform constant optimization.

The cause for the failed ASSERT is in JOIN::join_free, where we set
  bool full= (!select_lex->uncacheable && !thd->lex->describe);
Thus for EXPLAIN statements full == FALSE, and as a result the call to
JOIN::cleanup doesn't call JOIN_TAB::cleanup which should have
called table->disable_keyread().

Solution:
Consider all kinds of subquery predicates as expensive.
2010-11-23 00:01:24 +02:00
Gleb Shchepa
47bb750c9d backport: Bug #55568 from 5.1-security to 5.0-security
> revision-id: alexey.kopytov@sun.com-20100824103548-ikm79qlfrvggyj9h
> parent: sunny.bains@oracle.com-20100816001222-xqc447tr6jwh8c53
> committer: Alexey Kopytov <Alexey.Kopytov@Sun.com>
> branch nick: 5.1-security
> timestamp: Tue 2010-08-24 14:35:48 +0400
> message:
>   Bug #55568: user variable assignments crash server when used
>               within query
>   
>   The server could crash after materializing a derived table
>   which requires a temporary table for grouping.
>   
>   When destroying the temporary table used to execute a query for
>   a derived table, JOIN::destroy() did not clean up Item_fields
>   pointing to fields in the temporary table. This led to
>   dereferencing a dangling pointer when printing out the items
>   tree later in the outer SELECT.
>   
>   The solution is an addendum to the patch for bug37362: in
>   addition to cleaning up items in tmp_all_fields3, do the same
>   for items in tmp_all_fields1, since now we have an example
>   where this is necessary.


sql/field.cc:
  Make sure field->table_name is not set to NULL in
  Field::make_field() to avoid assertion failure in 
  Item_field::make_field() after cleaning up items
  (the assertion fired in udf.test when running
  the test suite with the patch applied).
sql/sql_select.cc:
  In addition to cleaning up items in tmp_all_fields3, do the
  same for items in tmp_all_fields1.
  Introduce a new helper function to avoid code duplication.
sql/sql_select.h:
  Introduce a new helper function to avoid code duplication in
  JOIN::destroy().
2010-11-23 00:29:47 +03:00
unknown
fb215f76bb Fix LP BUG#680005
Analysis:
This another instance of the problem fixed in LP BUG#675981 -
evaluation of subqueries during EXPLAIN when the subquery plan
is incomplete because JOIN::optimize() generally doesn't create
complete execution plans for EXPLAIN statements.

In this case the call path is:
mysql_explain_union -> outer_join.exec -> outer_join.init_execution ->
create_sort_index -> filesort -> find_all_keys ->
SQL_SELECT::skip_record -> outer_where_clause.val_int -> ...
-> subselect_join.exec -> ... -> sub_select_cache

When calling sub_select_cache JOIN_TAB::cache is NULL because the cache
objects are not created for EXPLAIN statements.

Solution:
Delay the call to init_execution() after all EXPLAIN related processing
is completed. Thus init_execution() is not called at all during EXPLAIN.
2010-11-22 16:32:36 +02:00
Sergey Petrunya
2ec43747f5 Merge MWL#121-125 DS-MRR improvements
- Address Monty's review feedback, part 1
2010-11-22 17:08:22 +03:00
Ramil Kalimullin
65116d3408 Manual-merge from mysql-5.1-bugteam. 2010-11-22 12:21:10 +03:00
unknown
0a31c4ffc3 Fixed LP BUG#675981
Cause:
The optimize() phase for the subquery selected to use join buffering via setting
JOIN_TAB::next_select= sub_select_cache in make_join_readinfo, however, the call
to check_join_cache_usage() from make_join_readinfo didn't create the corresponding
JOIN_CACHE_BNL object because of the condition:
    if ((options & SELECT_DESCRIBE) ||
        (((tab->cache= new JOIN_CACHE_BNL(join, tab, prev_cache))) &&
         !tab->cache->init()))
Since EXPLAIN for subqueries runs regular execution, the constant predicates that
were delayed to be evaluated at the exec() phase, were evaluated during EXPLAIN.
As a result the outer JOIN::exec called JOIN::exec for the subquery, while the
subquery execution plan was no properly created, which resulted in an failed ASSERT.

Fix:
The patch blocks evaluation of constant expensive conditions during EXPLAIN. Notice
that these conditions are "constant" with respect to the outer query, thus in
general they could be arbitrarily expensive, which may result in very slow EXPLAINs.
2010-11-22 11:07:45 +02:00
Guilhem Bichot
96b0404940 Fix for Bug#56138 "valgrind errors about overlapping memory when double-assigning same variable",
and related small fixes.

mysql-test/t/user_var.test:
  test for bug
sql/field_conv.cc:
  From the C standard, memcpy() has undefined behaviour if to->ptr==from->ptr
sql/item_func.cc:
  In the case of BUG#56138, entry->value==ptr in which case memcpy()
  has undefined results per the C standard.
sql/sql_select.cc:
  Work around a bug in old gcc
2010-11-22 09:57:59 +01:00
unknown
95b37a254b Merge MariaDB 5.1->5.2 2010-11-19 22:33:47 +01:00
Igor Babaev
ae4b5a32a6 Fixed LP bug #675922.
The bug happened when BKA join algorithm used an incremental buffer
and some of the fields over which access keys were constructed
- were allocated in the previous join buffers
- were non-nullable
- belonged to inner tables of outer joins.
For such fields an offset to the field value in the record is saved
in the postfix of the record, and a zero offset indicates that the value 
is null. Before the key using the field value is constructed the
value is read into the corresponding field of the record buffer and
the null bit is set for the field if the offset is 0. However if
the field is non-nullable the table->null_row must be set to 1
for null values and to 0 for non-null values  to ensure proper reading
of the value from the record buffer.
2010-11-19 07:38:02 -08:00
unknown
bd5c45dc7a Fix for LP BUG#676411 and MySQL BUG#52317
This is a backport of the fix for
MySQL BUG#52317: Assertion failing in Field_varstring::store () at field.cc:6833

The orginal comment by Oystein is:

In order for EXPLAIN to print const-refs, a Store_key_const_item object
is created. This is different for normal execution of subqueries where
a temporary store_key_item object is used instead. The problem is that
EXPLAIN will execute subqueries.  This leads to a scenario where a
store_key_const_item object it told to write to its underlying field.
This results in a failing assert since the write set of the underlying
table does not reflect this.  

The resolution is to do the same trick as for store_key_item::copy_inner().
That is, temporarily change the write set to allow writes to all columns.
This is only necessary in debug version since non-debug version does not
contain asserts on write_set.

sql/sql_select.h:
  Temporarily change write_set in store_key_const_item::copy_inner() to
  allow initialization of underlying field.  This is necessary since 
  subqueries are executed for EXPLAIN.  (For normal execution, 
  store_key_item::copy_inner is used.)
2010-11-19 17:01:48 +02:00
Igor Babaev
0a3922fca8 Fixed LP #bug 660963.
The condition that was supposed to check whether a join table
is an inner table of a nested outer join or semi-join was not
quite correct in the code of the function check_join_cache_usage.
That's why some queries with nested outer joins triggered 
an assertion failure.
Encapsulated this condition in the new method called
JOIN_TAB::is_nested_inner and provided a proper code for it.

Also corrected a bug in the code of check_join_cache_usage()
that caused a downgrade of not first join buffers of the
level 5 and 7 to level 4 and 6 correspondingly.
2010-11-19 06:20:28 -08:00
unknown
de35f1437a Fixed LP BUG#641203: Query returns rows where no result is expected (impossible WHERE)
The cause for the bug was two-fold:
1. Incorrect detection of whether a table is the first one in a query plan -
  "used_table & 1" actually checks if used_table is table with number "1".
2. Missing logic to delay the evaluation of (expensive) constant conditions
  during the execution phase.

The fix adds/changes:
The patch:
- removes incorrect treatment of expensive predicates from make_cond_for_table,
  and lets the caller decide when to evaluate expensive predicates.
- saves expensive constant conditions in JOIN::exec_const_cond,
  which is evaluated once in the beginning of JOIN::exec.
2010-11-19 12:54:15 +02:00
Bjorn Munch
6580097adc merge from 5.1-mtr 2010-11-19 10:29:08 +01:00
Alexander Barkov
8f4af42145 Bug#57279 updatexml dies with: Assertion failed: str_arg[length] == 0
Problem: crash in Item_float constructor on DBUG_ASSERT due
to not null-terminated string parameter.

Fix: making Item_float::Item_float non-null-termintated parameter safe:
- Using temporary buffer when generating error

modified:
  @ mysql-test/r/xml.result
  @ mysql-test/t/xml.test
  @ sql/item.cc
2010-11-18 16:11:18 +03:00
Ramil Kalimullin
e4d2fd35a7 Auto-merge from mysql-5.1-bugteam. 2010-11-18 13:40:57 +03:00
Sergey Glukhov
1c94d43bbb Bug#58022 ... like ... escape export_set ( ... ) crashes when export_set returns warnings
ESCAPE argument might be empty string. It leads
to server crash under some circumstances.
The fix:
-added check if ESCAPE argument result is not empty string

mysql-test/r/ctype_latin1.result:
  test case
mysql-test/t/ctype_latin1.test:
  test case
sql/item_cmpfunc.cc:
  -added check if ESCAPE argument result is not empty string
2010-11-18 11:53:08 +03:00
Bjorn Munch
32ea070845 Bug #58257 mysqltest: in if(), ! $var with space is always false
Evaluation would start with the space and thus ignore the $
Added while() to skip past white space
2010-11-17 16:05:52 +01:00
Mattias Jonsson
21bc09c26b post-push fix, backported --replace_result patch
for --list_files in mysqltest.

client/mysqltest.cc:
  Backported --replace_result for --list_files.
mysql-test/r/mysqltest.result:
  updated test.
mysql-test/t/mysqltest.test:
  added test for replace_result on list_files.
2010-11-17 10:13:57 +01:00
Igor Babaev
e25ac681c9 Fixed LP bug #675516.
When pushing the condition for a table in the function
JOIN_TAB::make_scan_filter the optimizer must not push
conditions from WHERE if the table is some inner table
of an outer join..
2010-11-15 21:07:32 -08:00
Mattias Jonsson
dd0a6227c7 post-push fix for test to pass on windows 2010-11-15 23:27:37 +01:00
Mattias Jonsson
027d647521 merge 2010-11-15 16:32:21 +01:00
Bjorn Munch
92a1a11203 Bug #58087 mysqltest re-evaluates 'let' expressions infinitely
Results from query is sent for evaluation
Break recursion by asking for ` to be ignored
2010-11-15 14:23:02 +01:00
Igor Babaev
42cd36431b Fixed LP bug #675095.
The condition over outer tables extracted from the on expression
for a outer join must be ANDed to the condition pushed to the
first inner table of this outer join only.
Nested outer joins cannot use flat join buffers. So if join_cache_level
is set to 1 then any join algorithm employing join buffers cannot be used
for nested outer joins.
2010-11-14 23:38:25 -08:00
Sergey Petrunya
c635eb3319 Remove .moved files 2010-11-15 04:59:45 +03:00
Sergey Petrunya
9ab54acbf0 Merge MWL#121-125 DS-MRR improvements into MWL#128 Classic hash join tree 2010-11-15 04:45:49 +03:00
Bjorn Munch
dbbb506f42 merge from 5.1 up to rev 3471 2010-11-14 12:23:51 +01:00
Igor Babaev
9441a9cc28 Fixed LP bug #674423.
The patch that introduced the new enumeration type Match_flag
for the values of match flags in the records put into join buffers
missed the necessary modifications in JOIN_CACHE::set_match_flag_if_none.
This could cause wrong results for outer joins with on expressions
only over outer tables.
2010-11-13 07:47:43 -08:00
Igor Babaev
4e5911733a Fixed LP bug #674431.
A non-incremental join buffer cannot be used for inner tables of nested
outer joins. That's why when join_cache_level is set to 7 it must
be downgraded to level 6 for the inner tables of nested outer joins.
For the same reason with join_cache_level set to 3 no join buffer is
used for the inner tables of outer joins (we could downgrade it to
level 2, but this level does not support ref access).
2010-11-13 06:13:34 -08:00
Alexander Barkov
1b583fa5da Bug#58005 utf8 + get_format causes failed assertion: !str || str != Ptr'
Problem: When GET_FORMAT() is called two times from the upper
level function (e.g. LEAST in the bug report), on the second
call "res= args[0]->val_str(...)" and str point to the same
String object.

1. Fix: changing the order from
- get val_str into tmp_value then convert to str
to
- get val_str into str then convert to tmp_value

The new order is more correct: the purpose of "str" parameter
is exactly to call val_str() for arguments.
The purpose of String class members (like tmp_value) is to do further
actions on the result.
Doing it in the other way around give unexpected surprises.

2. Using str_value instead of str to do padding, for the same reason.
2010-11-12 13:12:15 +03:00
Igor Babaev
46fe431818 Merge 2010-11-11 16:59:08 -08:00
Igor Babaev
d9bbc64016 Fixed LP bug #672551.
Made sure that the function that copy a long varchar field from the record
buffer into a key buffer does not copy bytes after the field value.
2010-11-11 16:41:52 -08:00
Igor Babaev
47b0f36911 Merge 2010-11-11 16:38:55 -08:00
Igor Babaev
92772d6d46 Fixed LP bug#672497.
Miscalculation of the minimum possible buffer size could trigger
an assert in JOIN_CACHE_HASHED::put_record when if join_buffer_size
was set to the values that is less than the length of one record to
stored in the join buffer.
It happened due to the following mistakes:
- underestimation of space needed for a key in the hash table
  (we have to take into account that hash table can have more
  buckets than the expected number of records).
- the value of maximum total length of all records stored in
  the join buffer was not saved in the field max_used_fieldlength
  by the function calc_used_field_length.
2010-11-11 15:35:11 -08:00
Sergey Petrunya
881f52fee7 Merge in LPBUG#602574 2010-11-11 14:35:26 +02:00
Tatiana A. Nurnberg
c4fa6a3862 Bug#43233: Some server variables are clipped during "update," not "check" stage
Bug#55794: ulonglong options of mysqld show wrong values.

Port the few remaining system variables to the correct mechanism --
range-check in check-stage (and throw error or warning at that point
as needed and depending on STRICTness), update in update stage.
Fix some signedness errors when retrieving sysvar values for display.

mysql-test/r/variables.result:
  Show that we throw warnings or errors depending on strictness
  even for "special" variables now.
mysql-test/t/variables.test:
  Show that we throw warnings or errors depending on strictness
  even for "special" variables now.
sql/item_func.cc:
  show sys_var_ulonglong_ptr and SHOW_LONGLONG type variables as unsigned.
sql/set_var.cc:
  move range-checking from update stage to check stage for the remaining
  few sys-vars that broke the pattern
sql/set_var.h:
  add check functions.
2010-11-11 11:35:48 +00:00
Alexander Barkov
aa668865e2 Bug#57257 Replace(ExtractValue(...)) causes MySQL crash
Bug#57820 extractvalue crashes

Problem: ExtractValue and Replace crashed in some cases
due to invalid handling of empty and NULL arguments.

Per file comments:

  @mysql-test/r/ctype_ujis.result
  @mysql-test/r/xml.result
  @mysql-test/t/ctype_ujis.test
  @mysql-test/t/xml.test
  Adding tests

  @sql/item_strfunc.cc
  Make sure Item_func_replace::val_str safely handles empty strings.

  @sql/item_xmlfunc.cc
  set null_value if nodeset_func returned NULL,
  which is possible when the second argument is an
  unset user variable.
2010-11-11 13:25:23 +03:00
Tatiana A. Nurnberg
1c37eaaabf Bug #49752: 2469.126.2 unintentionally breaks authentication against
MySQL 5.1 server

Server used to clip overly long user-names. This was presumably lost
when code was made UTF8-clean.

Now we emulate the behaviour for backward compatibility, but UTF8-ly
correct.


mysql-test/r/connect.result:
  Show that user-names that are too long get clipped now.
mysql-test/t/connect.test:
  Show that user-names that are too long get clipped now.
sql/sql_connect.cc:
  Clip user-name to 16 characters (not bytes).
strings/CHARSET_INFO.txt:
  Clarify in docs.
2010-11-11 07:34:14 +00:00
Igor Babaev
24f6a2ec4b Merge 2010-11-10 14:34:37 -08:00
Mattias Jonsson
47b514ffce Bug#58197: main.variables-big fails on windows
The test result differs on windows, since
it writes out 'localhost:<port>' instead of
only 'localhost', since it uses tcp/ip instead
of unix sockets on windows.

Fixed by replacing that column.

Also requires --big-test from some long running tests
and added a weekly run of all test requiring --big-test.

mysql-test/collections/default.weekly:
  Added a run of big-test (already exists in 5.5).
mysql-test/r/variables-big.result:
  Updated results
mysql-test/suite/parts/t/part_supported_sql_func_innodb.test:
  requiring --big-test since the test takes long time
mysql-test/suite/parts/t/partition_alter1_1_2_innodb.test:
  requiring --big-test since the test takes long time
mysql-test/suite/parts/t/partition_alter1_2_innodb.test:
  requiring --big-test since the test takes long time
mysql-test/suite/parts/t/partition_alter4_innodb.test:
  requiring --big-test since the test takes long time
mysql-test/t/disabled.def:
  Disabled two tests since they fail and was already
  reported as bugs (but was never run since they requires
  --big-test flag).
mysql-test/t/variables-big.test:
  Replacing column 3 in process list since it
  is not the same on windows as in unix.
2010-11-15 16:17:38 +01:00
Dmitry Shulga
871f36357e Fixed bug#54375 - Error in stored procedure leaves connection
in different default schema.

In strict mode, when data truncation or conversion happens,
THD::killed is set to THD::KILL_BAD_DATA.

This is abuse of KILL mechanism to guarantee that execution
of statement is aborted.

The stored procedures execution, on the other hand,
upon detection that a connection was killed, would
terminate immediately, without trying to restore the caller's
context, in particular, restore the caller's current schema.

The fix is, when terminating a stored procedure execution,
to only bypass cleanup if the entire connection was killed,
not in case of other forms of KILL.


mysql-test/r/sp-bugs.result:
  Added result for a test case for bug#54375.
mysql-test/t/sp-bugs.test:
  Added test case for bug#54375.
sql/sp_head.cc:
  sp_head::execute modified: restore saved current db if
  connection is not killed.
2010-11-11 10:52:51 +06:00
Sergey Petrunya
3d698ac616 BUG#671361: virtual int Mrr_ordered_index_reader::refill_buffer(): Assertion `!know_key_tuple_params
- Make sure we have enough space for both rowids and keys.
2010-11-09 18:02:08 +02:00
unknown
7a80bf165b Fix flags for non-debug builds 2010-11-16 14:16:19 +02:00
Michael Widenius
d95cbe369c Fixed bug discovered by testcase for LP#618558 (original bug seams to be fixed):
- Fixed bug in pagecache_delete_internal() when deleting block that was flushed by another thread (fixed bug when block->next_used was unexpectedly null)
Fixed some using uninitialized memory warnings found by valgrind. 

mysql-test/t/information_schema_all_engines-master.opt:
  Added options to make slow test run faster
sql/sp.cc:
  Fixed valgrind warning.
sql/sql_show.cc:
  Fixed valgrind warning.
storage/maria/ma_bitmap.c:
  Fixed wrong call parameter to pagecache_unlock_by_link() that caused assert crash in pagecache
storage/maria/ma_pagecache.c:
  Fixed possible error in pagecache_wait_lock() when hash_link was not set. (We never hit this issue, but could be possible when two threads updates the same page.
  Fixed bug in pagecache_delete_internal() when deleting block that was flushed by another thread (fixed bug when block->next_used was unexpectedly null)
  Cleanup: moved pagecache_pthread_mutex_unlock() over comments and asserts to be just before pagecache_fwrite()
2010-11-15 22:44:41 +02:00
unknown
05f21b21e4 Fixed LP BUG#615378 Incorrect processing of NULL result in Item_cache fixed. 2010-11-09 13:13:56 +02:00
Bjorn Munch
6eaa3c0750 merge from 5.1-mtr 2010-11-09 11:20:50 +01:00
Sergey Petrunya
0fb342ba56 BUG#670417: Diverging results in maria-5.3-mwl128-dsmrr-cpk with join buffer, attempt 4
- Disable identical key handling optimization when
  IndexConditionPushdown is used
2010-11-08 20:37:01 +03:00
Sergey Glukhov
50a3c55ee7 Bug#52711 Segfault when doing EXPLAIN SELECT with union...order by (select... where...)
backport from 5.1


mysql-test/r/subselect.result:
  backport from 5.1
mysql-test/t/subselect.test:
  backport from 5.1
sql/sql_select.cc:
  backport from 5.1
2010-11-08 13:51:39 +03:00
Sergey Glukhov
0a29baba4b Fix for bug #54575: crash when joining tables with unique set column(backport from 5.1)
Problem: a flaw (derefencing a NULL pointer) in the LIKE optimization
code may lead to a server crash in some rare cases.

Fix: check the pointer before its dereferencing.


mysql-test/r/func_like.result:
  Fix for bug #54575: crash when joining tables with unique set column
    - test result.
mysql-test/t/func_like.test:
  Fix for bug #54575: crash when joining tables with unique set column
    - test case.
sql/item_cmpfunc.cc:
  Fix for bug #54575: crash when joining tables with unique set column
  - check res2 buffer pointer before its dereferencing 
    as it may be NULL in some cases.
2010-11-08 13:34:27 +03:00
unknown
0bc31c3ef8 MWL#136: Fix test failures for row-based binlogging by fixing binlog format. 2010-11-08 09:11:44 +01:00
Igor Babaev
74d18e93c6 Fixed LP bug #671901.
Currently BNLH join uses a simplified implementation of hash function
when hash function is calculated over the whole key buffer, not only
the significant bytes of it. It means that both building keys and
probing keys both must fill insignificant bytes with the same filler.
Usually 0 is used as such a filler.
Yet the code before patch filled insignificant bytes only for probing
keys.
2010-11-07 15:19:30 -08:00
unknown
7322e38827 MWL#136: Cross-engine consistency for START TRANSACTION WITH CONSISTENT SNAPSHOT
Make the binlog handlerton participate in START TRANSACTION WITH CONSISTENT
SNAPSHOT, recording the binlog position corresponding to the snapshot taken
in other MVCC storage engines.

Expose this consistent binlog position as the new status variables
binlog_trx_file and binlog_trx_position. This enables to get a fully
non-locking snapshot of the database (including binlog position for
slave provisioning), avoiding the need for FLUSH TABLES WITH READ LOCK.

Modify mysqldump to detect if the server supports this new feature, and
if so, avoid FLUSH TABLES WITH READ LOCK for --single-transaction
--master-data snapshot backups.
2010-11-07 22:37:43 +01:00
Dmitry Shulga
8f237f5874 A fix and a test case for Bug#47924 -main.log_tables times out
sporadically.

The cause of the sporadic time out was a leaking protection
against the global read lock, taken by the RENAME statement,
and not released in case of an error occurred during RENAME.
The leaking protection counter would lead to the value of
protect_against_global_read never dropping to 0.
Consequently FLUSH TABLES in all connections, including the
one that leaked the protection, could not proceed.
 
The fix is to ensure that all branchesin RENAME code properly
release GRL protection.

mysql-test/r/log_tables.result:
  Added results for test for bug#47924.
mysql-test/t/log_tables.test:
  Added test for bug#47924.
sql/sql_rename.cc:
  mysql_rename_tables() modified: replaced return from function
  to goto to clean up code block in case of error.
2010-11-07 23:42:54 +06:00
Igor Babaev
71e48fbf3e Merge 2010-11-05 19:01:47 -07:00
unknown
acd46e32aa Test case for LP BUG#641245
The bug itself got fixed after merging with the main 5.3.
2010-11-05 17:10:48 +02:00
Bjorn Munch
866cec611a Bug #57840 MTR: parallel execution breaks with smart ordering of test cases
There were actually more problems in this area:
  Slaves (if any) were unconditionally restarted, this appears unnecessary.
  Sort criteria were suboptimal, included the test name.
Added logic to "reserve" a sequence of tests with same config for one thread
Got rid of sort_criteria hash, put it into the test case itself
Adds little sanity check that expected worker picks up test
Fixed some tests that may fail if starting on running server
Some of these fail only if *same* test is repeated.
Finally, special sorting of tests that do --force-restart
2010-11-05 15:26:38 +01:00
unknown
bc7369b74b MWL#89: Cost-based choice between Materialization and IN->EXISTS transformation
Merge 5.3-mwl89 into 5.3 main.

There is one remaining test failure in this merge:
innodb_mysql_lock2. All other tests have been checked to
deliver the same results/explains as 5.3-mwl89, including
the few remaining wrong results.
2010-11-05 14:42:58 +02:00
Michael Widenius
c670b9021e Automerge with 5.2 2010-11-05 12:37:51 +02:00
Igor Babaev
615d756721 Fixed LP bug #669382.
When probing into the hash table of a hashed join cache is performed
the key value should not constructed in the buffer used to build keys
in the hash tables. The constant parts of these keys copied only once,
so they should not be ever overwritten. Otherwise wrong results
can be produced by queries that employ hashed join buffers.
2010-11-04 21:00:33 -07:00
Michael Widenius
7647c2744c Automatic merge with MariaDB 5.1 2010-11-04 17:08:28 +02:00
Michael Widenius
3797ca41b3 Automatic merge with 5.1 2010-11-04 16:53:10 +02:00
unknown
e55c4836a1 MBug#643463: slow XtraDB shutdown due to 10 second sleep in purge thread
Implement os_event_wait_time() for POSIX systems.

In the purge thread, use os_event_wait_time() when sleeping rather than sleep,
and signal the event when server shuts down, so we do not need to wait for
upto 10 seconds until the purge thread wakes up.

Also fix bug that warnings that were pushed after we call set_ok_status() were
not included in the waning count sent to the client in the result packet.

Also in mysqltest, in recursive die() invocation at least print the message
before aborting.

client/mysqltest.cc:
  If we detect recursive die(), at least print the message before aborting.
mysql-test/r/warnings_debug.result:
  Test case.
mysql-test/t/warnings_debug.test:
  Test case.
sql/handler.cc:
  Force generation of a warning with specific debug option, for testing.
sql/protocol.cc:
  Fix wrong DBUG_ENTER
sql/sql_class.h:
  Add method to count warnings pushed after set_ok_status() is called.
sql/sql_error.cc:
  Also count warnings pushed after set_ok_status() is called.
storage/xtradb/include/os0sync.h:
  Implement working os_sync_wait_time() for POSIX.
storage/xtradb/include/srv0srv.h:
  Make the purge thread wait for an event when sleeping, so we can signal it to
  wakeup immediately at shutdown.
storage/xtradb/log/log0log.c:
  Make the purge thread wait for an event when sleeping, so we can signal it to
  wakeup immediately at shutdown.
storage/xtradb/os/os0sync.c:
  Implement working os_sync_wait_time() for POSIX.
storage/xtradb/srv/srv0srv.c:
  Make the purge thread wait for an event when sleeping, so we can signal it to
  wakeup immediately at shutdown.
2010-11-03 22:40:53 +01:00
unknown
d4fa9ef0c7 MWL#163: release of row locks in InnoDB during prepare
Port the Facebook patch for releasing InnoDB row locks early to the
MWL#116 framework.

A new --innodb-release-locks-early option (off by default) enables a
prepare_ordered() handlerton method which will release row locks and
commit a transaction to memory immediately after successful prepare.

If the server subsequently tries to rollback (ie. due to binlog error),
crashes the server to prevent corrupting the InnoDB state.

mysql-test/r/innodb_release_row_locks_early.result:
  Test case.
mysql-test/t/innodb_release_row_locks_early-master.opt:
  Test case.
mysql-test/t/innodb_release_row_locks_early.test:
  Test case.
sql/log.cc:
  Add DEBUG_SYNC points for testing.
storage/xtradb/handler/ha_innodb.cc:
  Release locks during prepare phase if --innodb-release-locks-early.
  Crash the server if we are asked to rollback after releasing locks and
  committing the transaction to memory.
storage/xtradb/include/srv0srv.h:
  Add variable for --innodb-release-locks-early option.
storage/xtradb/include/trx0sys.ic:
  If --innodb-release-locks-early, treat a transaction as committed to memory
  as soon as it enters the TRX_PREPARED state.
storage/xtradb/srv/srv0srv.c:
  Add variable for --innodb-release-locks-early option.
2010-11-03 17:07:08 +01:00
unknown
a2d921be36 MWL#116: Add two more test cases:
- Test internal 2-phase commit when binlog is enabled globally, but disabled in the session
 - Test crashing at various points during commit
2010-11-03 16:54:38 +01:00