Commit graph

27065 commits

Author SHA1 Message Date
Alexey Kopytov
b19c880522 Automerge. 2010-05-27 14:08:44 +04:00
Vasil Dimov
96c47c4df1 Merge mysql-trunk-bugfixing -> mysql-trunk-innodb
(skipping the change to storage/innobase/os/os0file.c because
that issue has already been addressed in mysql-trunk-innodb)
2010-05-27 12:47:57 +03:00
Dmitry Lenev
303fe45abf Fix for bug #53238 "mdl_sync fails sporadically".
The problem was that mdl_sync.test was failing sporadically,
due to fact that part of the test didn't take into account
effects of MyISAM's concurrent insert.

This patch solves the problem by making test case robust
against concurrent insert.
2010-05-26 23:58:16 +04:00
a19c5a6608 Manual merge 2010-05-26 22:34:25 +08:00
Dmitry Lenev
c070e5a1ed Fix for bug #51263 "Deadlock between transactional
SELECT and ALTER TABLE ...  REBUILD PARTITION".

ALTER TABLE on InnoDB table (including partitioned tables)
acquired exclusive locks on rows of table being altered.
In cases when there was concurrent transaction which did
locking reads from this table this sometimes led to a
deadlock which was not detected by MDL subsystem nor by
InnoDB engine (and was reported only after exceeding
innodb_lock_wait_timeout).

This problem stemmed from the fact that ALTER TABLE acquired
TL_WRITE_ALLOW_READ lock on table being altered. This lock
was interpreted as a write lock and thus for table being
altered handler::external_lock() method was called with
F_WRLCK as an argument. As result InnoDB engine treated
ALTER TABLE as an operation which is going to change data
and acquired LOCK_X locks on rows being read from old
version of table.

In case when there was a transaction which already acquired
SR metadata lock on table and some LOCK_S locks on its rows
(e.g. by using it in subquery of DML statement) concurrent
ALTER TABLE was blocked at the moment when it tried to
acquire LOCK_X lock before reading one of these rows.
The transaction's attempt to acquire SW metadata lock on
table being altered led to deadlock, since it had to wait
for ALTER TABLE to release SNW lock. This deadlock was not
detected and got resolved only after timeout expiring
because waiting were happening in two different subsystems.

Similar deadlocks could have occured in other situations.
This patch tries to solve the problem by changing ALTER TABLE
implementation to use TL_READ_NO_INSERT lock instead of
TL_WRITE_ALLOW_READ. After this step handler::external_lock()
is called with F_RDLCK as an argument and InnoDB engine
correctly interprets ALTER TABLE as operation which only
reads data from original version of table. Thanks to this
ALTER TABLE acquires only LOCK_S locks on rows it reads.
This, in its turn, causes inter-subsystem deadlocks to go
away, as all potential lock conflicts and thus deadlocks will
be limited to metadata locking subsystem:

- When ALTER TABLE reads rows from table being altered it
  can't encounter any locks which conflict with LOCK_S row
  locks. There should be no concurrent transactions holding
  LOCK_X row locks. Such a transaction should have been
  acquired SW metadata lock on table first which would have
  conflicted with ALTER's SNW lock.
- Vice versa, when DML which runs concurrently with ALTER
  TABLE tries to lock row it should be requesting only LOCK_S
  lock which is compatible with locks acquired by ALTER,
  as otherwise such DML must own an SW metadata lock on table
  which would be incompatible with ALTER's SNW lock.
2010-05-26 16:18:08 +04:00
Mattias Jonsson
b3259e93ea pre push fix of test results 2010-05-26 09:56:55 +02:00
Jimmy Yang
0aed1f061e Fix Bug #53592 in plugin code, "crash replacing duplicates into table
after fast alter table added unique key". Look up MySQL index number should
go through index translation table.

rb://347, approved by Marko
2010-05-25 22:31:27 -07:00
Jimmy Yang
00dfb12b92 Check in the support for Information Schema System Table Views. Users
can now view the content of InnoDB System Tables through following
information schema tables:

information_schema.INNODB_SYS_TABLES
information_schema.INNODB_SYS_INDEXES
information_schema.INNODB_SYS_COUMNS
information_schema.INNODB_SYS_FIELDS
information_schema.INNODB_SYS_FOREIGN
information_schema.INNODB_SYS_FOREIGN_COLS
information_schema.INNODB_SYS_TABLESTATS

rb://330 Approved by Marko
2010-05-25 18:44:33 -07:00
Davi Arnaut
3c279d9a5a Bug#42643: InnoDB does not support replication of TRUNCATE TABLE
The problem was that TRUNCATE TABLE didn't take a exclusive
lock on a table if it resorted to truncating via delete of
all rows in the table. Specifically for InnoDB tables, this
could break proper isolation as InnoDB ends up aborting some
granted locks when truncating a table.

The solution is to take a exclusive metadata lock before
TRUNCATE TABLE can proceed. This guarantees that no other
transaction is using the table.

Incompatible change: Truncate via delete no longer fails
if sql_safe_updates is activated (this was a undocumented
side effect).
2010-05-25 17:01:38 -03:00
Mattias Jonsson
2e1ade56f8 merge 2010-05-25 17:41:11 +02:00
Mattias Jonsson
e596ae0795 merge 2010-05-25 17:26:48 +02:00
Alexey Kopytov
8fabbdd789 Bug #53830: !table || (!table->read_set ||
bitmap_is_set(table->read_set, field_index))

UPDATE on an InnoDB table modifying the same index that is used
to satisfy the WHERE condition could trigger a debug assertion
under some circumstances.

Since for engines with the HA_PRIMARY_KEY_IN_READ_INDEX flag
set results of an index scan on a secondary index are appended
by the primary key value, if a query involves only columns from
the primary key and a secondary index, the latter is considered
to be covering.

That tricks mysql_update() to mark for reading only columns
from the secondary index when it does an index scan to retrieve
rows to update in case a part of that key is also being
updated. However, there may be other columns in WHERE that are
part of the primary key, but not the secondary one.

What we actually want to do in this case is to add index
columns to the existing WHERE columns bitmap rather than
replace it.
2010-05-25 18:43:45 +04:00
Mattias Jonsson
427436d4b8 merge 2010-05-25 15:45:01 +02:00
Mattias Jonsson
ff36f028c3 Bug#49161: Out of memory; restart server and try again (needed 2 bytes)
Problem was reporting wrong error

Fixed by adding a new error which better explain the problem.
2010-05-25 15:41:00 +02:00
Marko Mäkelä
10b06978fe Suppress bogus Valgrind warnings about buf_buddy_relocate()
accessing uninitialized memory in Valgrind-instrumented builds.
2010-05-25 15:37:48 +03:00
Mattias Jonsson
39d9765297 post push fix 2010-05-25 11:34:36 +02:00
Vasil Dimov
7d50be10d2 (second attempt) Disable the tests on embedded windows that fail due to
Bug #53947 InnoDB: Assertion failure in thread 4224 in file
.\sync\sync0sync.c line 324

This changeset should be reverted once the bug is fixed.
2010-05-25 10:36:06 +03:00
Vasil Dimov
c44ff04954 Revert a changeset since it does not disable the tests:
------------------------------------------------------------
  revno: 3116
  revision-id: vasil.dimov@oracle.com-20100524182209-sk114oipf1vhjbv5
  parent: vasil.dimov@oracle.com-20100524175802-twmwb29vvaehe6b8
  committer: Vasil Dimov <vasil.dimov@oracle.com>
  branch nick: mysql-trunk-innodb
  timestamp: Mon 2010-05-24 21:22:09 +0300
  message:
    Disable the tests on embedded windows that fail due to
    
    Bug #53947 InnoDB: Assertion failure in thread 4224 in file
    .\sync\sync0sync.c line 324
    
    This changeset should be reverted once the bug is fixed.
2010-05-25 10:29:36 +03:00
Mattias Jonsson
2b846b39c1 merge 2010-05-25 08:35:48 +02:00
69c9dbabe6 Postfix BUG#49741 2010-05-25 11:39:45 +08:00
Mattias Jonsson
b0ecceb95b merge 2010-05-24 23:21:08 +02:00
Alexander Nozdrin
f54464035a Fix for Bug#53925 (valgrind failures in rpl.rpl_get_master_version_and_clock
in mysql-trunk-merge).

There were two problems:
  - a mistake during merge of a patch for Bug 52629 from 5.1;
  - MTR treated auxilary output of newer valgrind as an error.

The fixes are:
  - Fix merge error;
  - Teach MTR to skip 'HEAP summary' section of valgrind output.
2010-05-24 22:57:25 +04:00
Vasil Dimov
080a0aaba9 Merge a changeset from mysql-5.1-innodb:
------------------------------------------------------------
  revno: 3477
  revision-id: vasil.dimov@oracle.com-20100520132735-a120y85kqmhp7hxi
  parent: vasil.dimov@oracle.com-20100520125403-3u9ydcfu8vz8spls
  committer: Vasil Dimov <vasil.dimov@oracle.com>
  branch nick: mysql-5.1-innodb
  timestamp: Thu 2010-05-20 16:27:35 +0300
  message:
    Disable main.ps_3innodb for valgrind tests since it results in known
    failures, that are described in
    
    Bug#38999 valgrind warnings for update statement in function compare_record()
    
    At the time I am adding this the failures are:
    
    main.ps_3innodb                          [ fail ]  Found warnings/errors in server log file!
            Test ended at 2010-05-20 01:17:34
    line
    ==31559== Thread 11:
    ==31559== Conditional jump or move depends on uninitialised value(s)
    ==31559==    at 0x75C5BD: compare_record(st_table*) (sql_update.cc:35)
    ==31559==    by 0x744732: write_record(THD*, st_table*, st_copy_info*) (sql_insert.cc:1486)
    ==31559==    by 0x74A0D7: mysql_insert(THD*, TABLE_LIST*, List<Item>&, List<List<Item> >&, List<Item>&, List<Item>&, enum_duplicates, bool) (sql_insert.cc:835)
    ==31559==    by 0x6A79B4: mysql_execute_command(THD*) (sql_parse.cc:3198)
    ==31559==    by 0x754998: Prepared_statement::execute(String*, bool) (sql_prepare.cc:3583)
    ==31559==    by 0x754C4F: Prepared_statement::execute_loop(String*, bool, unsigned char*, unsigned char*) (sql_prepare.cc:3258)
    ==31559==    by 0x754F33: mysql_sql_stmt_execute(THD*) (sql_prepare.cc:2529)
    ==31559==    by 0x6A5028: mysql_execute_command(THD*) (sql_parse.cc:2272)
    ==31559==    by 0x6ADAE8: mysql_parse(THD*, char const*, unsigned, char const**) (sql_parse.cc:5986)
    ==31559==    by 0x6AF3A4: dispatch_command(enum_server_command, THD*, char*, unsigned) (sql_parse.cc:1233)
    ==31559==    by 0x6B0800: do_command(THD*) (sql_parse.cc:874)
    ==31559==    by 0x69CB46: handle_one_connection (sql_connect.cc:1134)
    ==31559==    by 0x33EDA062F6: start_thread (in /lib64/libpthread-2.5.so)
    ==31559==    by 0x33ECED1B6C: clone (in /lib64/libc-2.5.so)
    ==31559== Conditional jump or move depends on uninitialised value(s)
    ==31559==    at 0x75C5D0: compare_record(st_table*) (sql_update.cc:35)
    ==31559==    by 0x744732: write_record(THD*, st_table*, st_copy_info*) (sql_insert.cc:1486)
    ==31559==    by 0x74A0D7: mysql_insert(THD*, TABLE_LIST*, List<Item>&, List<List<Item> >&, List<Item>&, List<Item>&, enum_duplicates, bool) (sql_insert.cc:835)
    ==31559==    by 0x6A79B4: mysql_execute_command(THD*) (sql_parse.cc:3198)
    ==31559==    by 0x754998: Prepared_statement::execute(String*, bool) (sql_prepare.cc:3583)
    ==31559==    by 0x754C4F: Prepared_statement::execute_loop(String*, bool, unsigned char*, unsigned char*) (sql_prepare.cc:3258)
    ==31559==    by 0x754F33: mysql_sql_stmt_execute(THD*) (sql_prepare.cc:2529)
    ==31559==    by 0x6A5028: mysql_execute_command(THD*) (sql_parse.cc:2272)
    ==31559==    by 0x6ADAE8: mysql_parse(THD*, char const*, unsigned, char const**) (sql_parse.cc:5986)
    ==31559==    by 0x6AF3A4: dispatch_command(enum_server_command, THD*, char*, unsigned) (sql_parse.cc:1233)
    ==31559==    by 0x6B0800: do_command(THD*) (sql_parse.cc:874)
    ==31559==    by 0x69CB46: handle_one_connection (sql_connect.cc:1134)
    ==31559==    by 0x33EDA062F6: start_thread (in /lib64/libpthread-2.5.so)
    ==31559==    by 0x33ECED1B6C: clone (in /lib64/libc-2.5.so)
    ^ Found warnings in /export/home4/pb2/test/sb_3-1827397-1274300957.87/mysql-5.1.48-linux-x86_64-test/mysql-test/var-n_mix/log/mysqld.1.err
2010-05-24 21:27:25 +03:00
Vasil Dimov
9f42efeb78 Disable the tests on embedded windows that fail due to
Bug #53947 InnoDB: Assertion failure in thread 4224 in file
.\sync\sync0sync.c line 324

This changeset should be reverted once the bug is fixed.
2010-05-24 21:22:09 +03:00
Alexey Kopytov
71929d76d0 Fixed an incorrectly merged .result file. 2010-05-24 18:13:00 +04:00
cc05440836 Bug #49741 test files contain explicit references to bin/relay-log positions
Some of the test cases reference to binlog position and
these position numbers are written into result explicitly.
It is difficult to maintain if log event format changes. 

There are a couple of cases explicit position number appears, 
we handle them in different ways
A. 'CHANGE MASTER ...' with MASTER_LOG_POS or/and RELAY_LOG_POS options
   Use --replace_result to mask them.
B. 'SHOW BINLOG EVENT ...'
   Replaced by show_binlog_events.inc or wait_for_binlog_event.inc. 
   show_binlog_events.inc file's function is enhanced by given
   $binlog_file and $binlog_limit.
C. 'SHOW SLAVE STATUS', 'show_slave_status.inc' and 'show_slave_status2.inc'
   For the test cases just care a few items in the result of 'SHOW SLAVE STATUS',
   only the items related to each test case are showed.
   'show_slave_status.inc' is rebuild, only the given items in $status_items
   will be showed.
   'check_slave_is_running.inc' and 'check_slave_no_error.inc'
   and 'check_slave_param.inc' are auxiliary files helping
   to show running status and error information easily.
2010-05-24 21:54:08 +08:00
Mattias Jonsson
d7e7afd403 Merge of bug#51851.
Also moved HA_DATA_PARTITION from ha_partition.cc to table.h.
2010-05-24 14:51:59 +02:00
Alexey Kopytov
b69a31fad5 Manual merge of mysql-5.1-bugteam to mysql-trunk-merge.
Conflicts:

   conflict      Makefile.am
   conflict      mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result
   conflict      mysql-test/suite/rpl/t/rpl_tmp_table_and_DDL.test
   conflict      sql/opt_sum.cc
   conflict      sql/set_var.cc
   conflict      sql/sql_base.cc
   conflict      sql/sql_priv.h
   conflict      sql/sql_show.cc
2010-05-24 00:41:18 +04:00
Mattias Jonsson
ca0aa95c6d merge 2010-05-23 18:08:33 +02:00
Gleb Shchepa
6e34b8b0ce Bug #53804: serious flaws in the alter database .. upgrade
data directory name command

The check_db_name function has been modified to validate tails of
#mysql50#-prefixed database names for compliance with MySQL 5.0
database name encoding rules (the check_table_name function call
has been reused).
2010-05-21 22:47:32 +04:00
Vasil Dimov
de124ac0fb Merge mysql-trunk-bugfixing -> mysql-trunk-innodb 2010-05-21 17:52:35 +03:00
Jon Olav Hauglid
ac9bae9e04 merge from mysql-trunk-runtime 2010-05-21 15:49:15 +02:00
Alexander Nozdrin
dfec05be05 Backporting a test case for Bug#30036 (SHOW TABLE TYPES causes the debug client
to crash) from mysql-6.0-codebase.
2010-05-21 17:36:59 +04:00
Dmitry Lenev
6ceacd4fb9 Follow-up for the fix for bug #46947 "Embedded SELECT without
FOR UPDATE is causing a lock".
 
This patch tries to address problems which were exposed 
during backporting of original patch to 5.1 tree.
 
- It ensures that we don't change locking behavior of simple
  SELECT statements on InnoDB tables when they are executed
  under LOCK TABLES ... READ and with @@innodb_table_locks=0.
  Also we no longer pass TL_READ_DEFAULT/TL_WRITE_DEFAULT 
  lock types, which are supposed to be parser-only, to 
  handler::start_stmt() method.
- It makes check_/no_concurrent_insert.inc auxiliary scripts 
  more robust against changes in test cases that use them
  and also ensures that they don't unnecessarily change 
  environment of caller.
2010-05-21 16:41:24 +04:00
Mattias Jonsson
ae171f1e40 merge into mysql-5.1-bugteam 2010-05-21 14:18:14 +02:00
Alexey Kopytov
779e2a9686 Bug #42064: low memory crash when importing hex strings, in
Item_hex_string::Item_hex_string

The status of memory allocation in the Lex_input_stream (called
from the Parser_state constructor) was not checked which led to
a parser crash in case of the out-of-memory error.

The solution is to introduce new init() member function in
Parser_state and Lex_input_stream so that status of memory
allocation can be returned to the caller.
2010-05-21 15:23:48 +04:00
Sven Sandberg
836bb54c26 BUG#52987: mysqldump fails if umask=0077
Problem: The test case mysqldump reads a file that must
be world-readable. The test did not force the file to be
world-readable, so if the tree was branched with a umask
of 0077, the test would fail.
Fix: chmod the file.
2010-05-20 17:38:01 +02:00
Vasil Dimov
0f913e0324 Disable main.ps_3innodb for valgrind tests since it results in known
failures, that are described in

Bug#38999 valgrind warnings for update statement in function compare_record()

At the time I am adding this the failures are:

main.ps_3innodb                          [ fail ]  Found warnings/errors in server log file!
        Test ended at 2010-05-20 01:17:34
line
==31559== Thread 11:
==31559== Conditional jump or move depends on uninitialised value(s)
==31559==    at 0x75C5BD: compare_record(st_table*) (sql_update.cc:35)
==31559==    by 0x744732: write_record(THD*, st_table*, st_copy_info*) (sql_insert.cc:1486)
==31559==    by 0x74A0D7: mysql_insert(THD*, TABLE_LIST*, List<Item>&, List<List<Item> >&, List<Item>&, List<Item>&, enum_duplicates, bool) (sql_insert.cc:835)
==31559==    by 0x6A79B4: mysql_execute_command(THD*) (sql_parse.cc:3198)
==31559==    by 0x754998: Prepared_statement::execute(String*, bool) (sql_prepare.cc:3583)
==31559==    by 0x754C4F: Prepared_statement::execute_loop(String*, bool, unsigned char*, unsigned char*) (sql_prepare.cc:3258)
==31559==    by 0x754F33: mysql_sql_stmt_execute(THD*) (sql_prepare.cc:2529)
==31559==    by 0x6A5028: mysql_execute_command(THD*) (sql_parse.cc:2272)
==31559==    by 0x6ADAE8: mysql_parse(THD*, char const*, unsigned, char const**) (sql_parse.cc:5986)
==31559==    by 0x6AF3A4: dispatch_command(enum_server_command, THD*, char*, unsigned) (sql_parse.cc:1233)
==31559==    by 0x6B0800: do_command(THD*) (sql_parse.cc:874)
==31559==    by 0x69CB46: handle_one_connection (sql_connect.cc:1134)
==31559==    by 0x33EDA062F6: start_thread (in /lib64/libpthread-2.5.so)
==31559==    by 0x33ECED1B6C: clone (in /lib64/libc-2.5.so)
==31559== Conditional jump or move depends on uninitialised value(s)
==31559==    at 0x75C5D0: compare_record(st_table*) (sql_update.cc:35)
==31559==    by 0x744732: write_record(THD*, st_table*, st_copy_info*) (sql_insert.cc:1486)
==31559==    by 0x74A0D7: mysql_insert(THD*, TABLE_LIST*, List<Item>&, List<List<Item> >&, List<Item>&, List<Item>&, enum_duplicates, bool) (sql_insert.cc:835)
==31559==    by 0x6A79B4: mysql_execute_command(THD*) (sql_parse.cc:3198)
==31559==    by 0x754998: Prepared_statement::execute(String*, bool) (sql_prepare.cc:3583)
==31559==    by 0x754C4F: Prepared_statement::execute_loop(String*, bool, unsigned char*, unsigned char*) (sql_prepare.cc:3258)
==31559==    by 0x754F33: mysql_sql_stmt_execute(THD*) (sql_prepare.cc:2529)
==31559==    by 0x6A5028: mysql_execute_command(THD*) (sql_parse.cc:2272)
==31559==    by 0x6ADAE8: mysql_parse(THD*, char const*, unsigned, char const**) (sql_parse.cc:5986)
==31559==    by 0x6AF3A4: dispatch_command(enum_server_command, THD*, char*, unsigned) (sql_parse.cc:1233)
==31559==    by 0x6B0800: do_command(THD*) (sql_parse.cc:874)
==31559==    by 0x69CB46: handle_one_connection (sql_connect.cc:1134)
==31559==    by 0x33EDA062F6: start_thread (in /lib64/libpthread-2.5.so)
==31559==    by 0x33ECED1B6C: clone (in /lib64/libc-2.5.so)
^ Found warnings in /export/home4/pb2/test/sb_3-1827397-1274300957.87/mysql-5.1.48-linux-x86_64-test/mysql-test/var-n_mix/log/mysqld.1.err
2010-05-20 16:27:35 +03:00
Alexander Nozdrin
eff442964a Manual merge from mysql-trunk.
Conflicts:
  - mysql-test/r/partition.result
  - mysql-test/r/variables_debug.result
  - mysql-test/t/partition.test
  - mysql-test/t/variables_debug.test
2010-05-20 16:35:28 +04:00
Vasil Dimov
8a03ef7911 Merge from mysql-trunk-innodb into mysql-5.1-innodb/storage/innobase:
------------------------------------------------------------
  revno: 3094
  revision-id: vasil.dimov@oracle.com-20100513074652-0cvlhgkesgbb2bfh
  parent: vasil.dimov@oracle.com-20100512173700-byf8xntxjur1hqov
  committer: Vasil Dimov <vasil.dimov@oracle.com>
  branch nick: mysql-trunk-innodb
  timestamp: Thu 2010-05-13 10:46:52 +0300
  message:
    Followup to Bug#51920, fix binlog.binlog_killed
    
    This is a followup to the fix of
    
    Bug#51920 Innodb connections in row lock wait ignore KILL until lock wait
    timeout
    
    in that fix (rb://279) the behavior was changed to honor when a trx is
    interrupted during lock wait, but the returned error code was still
    "lock wait timeout" when it should be "interrupted".
    
    This change fixes the non-deterministically failing test binlog.binlog_killed,
    that failed like this:
    
    binlog.binlog_killed 'stmt'              [ fail ]
            Test ended at 2010-05-12 11:39:08
    
    CURRENT_TEST: binlog.binlog_killed
    mysqltest: At line 208: query 'reap' failed with wrong errno 1205: 'Lock wait timeout exceeded; try restarting transaction', instead of 0...
    
    Approved by:	Sunny Bains (rb://344)
  ------------------------------------------------------------

This merge is non-trivial since it has to introduce the DB_INTERRUPTED
error code.

Also revert vasil.dimov@oracle.com-20100408165555-9rpjh24o0sa9ad5y
which adjusted the binlog.binlog_killed test to the new (wrong) behavior
2010-05-20 10:39:02 +03:00
Sergey Glukhov
7132ccd7ca Bug#52884 mysql-test-run does not work with --debug option
Server crashes on 64bit linux with 'double free or corruption'
message, on 32bit mysql-test-run silently fails on bootstrap
stage. The problem is that FreeState() is called twice
for init_settings struct in _db_end_ function.
The fix is to remove superfluous FreeState() call.
Additional fix:
fixed discrepancy of result file when
debug & valgrind options are enabled
for MTR.
2010-05-20 10:31:03 +04:00
Luis Soares
ce3194c1c8 BUG 53621: automerged bzr bundle from bug report. 2010-05-20 00:52:03 +01:00
Luis Soares
4ed6fc0457 BUG 52868: automerged bzr bundle from bug report. 2010-05-20 00:50:42 +01:00
Luis Soares
e7eb43a859 BUG 49522: automerged bzr bundle from bug report. 2010-05-20 00:49:18 +01:00
Vasil Dimov
456130f38d Merge mysql-trunk-bugfixing -> mysql-trunk-innodb 2010-05-19 23:48:50 +03:00
Alfranio Correia
89850be0f5 BUG#53560 CREATE TEMP./DROP TEMP. are not binglogged correctly after a failed statement
This patch fixes two problems described as follows:

1 - If there is an on-going transaction and a temporary table is created or
dropped, any failed statement that follows the "create" or "drop commands"
triggers a rollback and by consequence the slave will go out sync because
the binary log will have a wrong sequence of events.

To fix the problem, we changed the expression that evaluates when the
cache should be flushed after either the rollback of a statment or
transaction.

2 - When a "CREATE TEMPORARY TABLE SELECT * FROM" was executed the
OPTION_KEEP_LOG was not set into the thd->options. For that reason, if
the transaction had updated only transactional engines and was rolled
back at the end (.e.g due to a deadlock) the changes were not written
to the binary log, including the creation of the temporary table.
      
To fix the problem, we have set the OPTION_KEEP_LOG into the thd->options
when a "CREATE TEMPORARY TABLE SELECT * FROM" is executed.
2010-05-19 18:01:12 +01:00
Alexander Nozdrin
091bcacc79 Another incarnation of the patch for Bug#30708
(make relies GNU extentions). The patch was partially
backport from 6.0.

Original comment:
bug#30708: make relies GNU extensions.  Now that we no longer use
BitKeeper we can safely remove the SCCS handling with no loss of
functionality.
2010-05-19 17:00:23 +04:00
Alexander Nozdrin
2f7945b8b9 Backporting a patch for Bug#43358 from 6.0 to trunk-bugfixing. 2010-05-19 16:33:51 +04:00
Alexander Nozdrin
796fd24e15 Backport test cases for Bug#46198 and Bug#38054
from 6.0 to trunk-bugfixing.
2010-05-19 16:31:18 +04:00
Jon Olav Hauglid
c09eb2afc3 Bug #53798 OPTIMIZE TABLE breaks repeatable read
The problem was that OPTMIZE TABLE was allowed to run on a table
in use by a transaction in a different connection. This caused
repeatable read to break.

This bug was fixed by the introduction of metadata locking, WL#4284.
OPTIMIZE TABLE will now be blocked until the transaction using the
table, has ended.

This patch contains a regression test added to innodb_mysql_lock.test
and no code changes.
2010-05-19 13:32:21 +02:00
Tor Didriksen
a22c69b233 Backport from next-mr-bugfixing of tor.didriksen@sun.com-20100106140051-3j2iuag63eltsr2e
Bug #50087 Interval arithmetic for Event_queue_element is not portable.

Subtraction of two unsigned months yielded a (very large) positive value.
Conversion of this to a signed value was not necessarily well defined.
              
Solution: do the subtraction on signed values.
2010-05-19 11:18:59 +02:00
Marko Mäkelä
4d61acb187 Work around Bug #53750 in innodb.innodb_bug48024 2010-05-19 10:56:13 +03:00
Andrei Elkin
b530d5660e reverting fixes for Bug@50316 in mysql-trunk 2010-05-18 18:32:44 +03:00
Vasil Dimov
997b5dbcff Merge mysql-trunk-innodb from bk-internal to my local branch 2010-05-18 16:59:50 +03:00
Vasil Dimov
b686ebae67 Silence a valgrind warning caused by zlib:
==31182== Conditional jump or move depends on uninitialised value(s)
==31182==    at 0xA9188B: longest_match (deflate.c:1143)
==31182==    by 0xA92C19: deflate_slow (deflate.c:1595)
==31182==    by 0xA90C6B: deflate (deflate.c:790)
==31182==    by 0x9B447B: page_zip_compress (page0zip.c:1342)
==31182==    by 0x9A8540: page_cur_insert_rec_zip_reorg (page0cur.c:1174)
==31182==    by 0x9A8998: page_cur_insert_rec_zip (page0cur.c:1279)
==31182==    by 0x9214F9: page_cur_tuple_insert (page0cur.ic:264)
==31182==    by 0x9221A2: btr_cur_optimistic_insert (btr0cur.c:1314)
==31182==    by 0x9C99EB: row_ins_index_entry_low (row0ins.c:2087)
==31182==    by 0x9C9DFB: row_ins_index_entry (row0ins.c:2167)
==31182==    by 0x9CA057: row_ins_index_entry_step (row0ins.c:2252)
==31182==    by 0x9CA0FD: row_ins (row0ins.c:2384)
==31182==    by 0x9CA760: row_ins_step (row0ins.c:2494)
==31182==    by 0x8CBF7E: row_insert_for_mysql (row0mysql.c:1138)
==31182==    by 0x8BCF32: ha_innobase::write_row(unsigned char*) (ha_innodb.cc:4929)
==31182==    by 0x736E03: handler::ha_write_row(unsigned char*) (handler.cc:4682)
2010-05-18 16:48:10 +03:00
Vasil Dimov
c1ac191cd0 Silence a valgrind warning caused by zlib:
innodb.innodb-zip                        [ fail ]  Found warnings/errors in server log file!
        Test ended at 2010-05-17 16:41:25
line
==31182== Thread 13:
==31182== Conditional jump or move depends on uninitialised value(s)
==31182==    at 0xA9193F: longest_match (deflate.c:1143)
==31182==    by 0xA92C19: deflate_slow (deflate.c:1595)
==31182==    by 0xA90C6B: deflate (deflate.c:790)
==31182==    by 0x928A07: btr_store_big_rec_extern_fields (btr0cur.c:4092)
==31182==    by 0x9C9B90: row_ins_index_entry_low (row0ins.c:2119)
==31182==    by 0x9C9DFB: row_ins_index_entry (row0ins.c:2167)
==31182==    by 0x9CA057: row_ins_index_entry_step (row0ins.c:2252)
==31182==    by 0x9CA0FD: row_ins (row0ins.c:2384)
==31182==    by 0x9CA760: row_ins_step (row0ins.c:2494)
==31182==    by 0x8CBF7E: row_insert_for_mysql (row0mysql.c:1138)
==31182==    by 0x8BCF32: ha_innobase::write_row(unsigned char*) (ha_innodb.cc:4929)
==31182==    by 0x736E03: handler::ha_write_row(unsigned char*) (handler.cc:4682)
==31182==    by 0x5B0EEE: write_record(THD*, TABLE*, st_copy_info*) (sql_insert.cc:1670)
==31182==    by 0x5B129D: select_insert::send_data(List<Item>&) (sql_insert.cc:3279)
==31182==    by 0x5F31ED: end_send(JOIN*, st_join_table*, bool) (sql_select.cc:12428)
==31182==    by 0x5F9B9B: evaluate_join_record(JOIN*, st_join_table*, int) (sql_select.cc:11632)
2010-05-18 16:25:06 +03:00
Marko Mäkelä
c6c1604350 Merge a change from mysql-5.1-innodb:
------------------------------------------------------------
  revno: 3468
  revision-id: marko.makela@oracle.com-20100518130658-rd00ql7h02ooakh1
  parent: marko.makela@oracle.com-20100514131050-mkhlvlui1u52irob
  committer: Marko Mäkelä <marko.makela@oracle.com>
  branch nick: 5.1-innodb
  timestamp: Tue 2010-05-18 16:06:58 +0300
  message:
    Work around Bug #53750 in innodb_bug48024.test
2010-05-18 16:10:36 +03:00
Marko Mäkelä
45fbbe7c5b Work around Bug #53750 in innodb_bug48024.test 2010-05-18 16:06:58 +03:00
Jon Olav Hauglid
1c02ed3e67 manual merge from mysql-trunk-bugfixing 2010-05-18 14:52:51 +02:00
Andrei Elkin
1579ae040b rpl_ndb tests fixing results files due to Master_Info_File of bug#50316 2010-05-18 11:07:31 +03:00
Andrei Elkin
2c966ddda1 merging bug#50316 fixes 2010-05-18 10:13:37 +03:00
Alexander Nozdrin
5d3833f51b Patch for Bug#52410 (Test "mysqld--help-*": further output differences).
That was a pure test issue -- filter implementation in Perl did not work
on some platform (the bug occurred on Windows Server 2008 with
Cygwin Perl 5.10.0).
2010-05-17 19:28:50 +04:00
Andrei Elkin
f7e999ed77 removing disabled line for rpl_row_create_table due to Bug#45576. Anyway, the test is still there because of Bug#51574 2010-05-16 22:28:20 +03:00
Andrei Elkin
9e3c410ae7 bug#50316 Add Master_info_file to SHOW SLAVE STATUS
pushing to next-mr-bugfixing from working branch
2010-05-16 21:40:56 +03:00
Andrei Elkin
f59684b86e pushing bug#50942 fixes to 5.1-bt 2010-05-16 20:03:32 +03:00
Alfranio Correia
6400d6d54a BUG#50410: rpl_ndb tests should run with binlog_format=row
Post-fix: Updated a test case after the patch for BUG#50410,
because the patch makes ndb to run in the row format and as
such unsafe warning messages are not printed out.
2010-05-16 12:45:21 +01:00
Alexander Nozdrin
5c4333bc85 Patch for Bug#27863 (excessive memory usage for many small queries in a
multiquery packet).

Background:

  - a query can contain multiple SQL statements;

  - the server frees resources allocated to process a query when the
    whole query is handled. In other words, resources allocated to process
    one SQL statement from a multi-statement query are freed when all SQL
    statements are handled.

The problem was that the parser allocated a buffer of size of the whole
query for each SQL statement in a multi-statement query. Thus, if a query
had many SQL-statements (so, the query was long), but each SQL statement
was short, ther parser tried to allocate huge amount of memory (number of
small SQL statements * length of the whole query).

The memory was allocated for a so-called "cpp buffer", which is intended to
store pre-processed SQL statement -- SQL text without version specific
comments.

The fix is to allocate memory for the "cpp buffer" once for all SQL
statements (once for a query).
2010-05-14 22:11:25 +04:00
Marko Mäkelä
2a3db4b9e2 Merge from mysql-5.1-innodb:
Post-merge fixes: Remove the MYSQL_VERSION_ID checks, because they only
apply to the InnoDB Plugin. Fix potential race condition accessing
trx->op_info and trx->detailed_error.
------------------------------------------------------------
revno: 3466
revision-id: marko.makela@oracle.com-20100514130815-ym7j7cfu88ro6km4
parent: marko.makela@oracle.com-20100514130228-n3n42nw7ht78k0wn
committer: Marko Mäkelä <marko.makela@oracle.com>
branch nick: mysql-5.1-innodb2
timestamp: Fri 2010-05-14 16:08:15 +0300
message:
  Make the InnoDB FOREIGN KEY parser understand multi-statements. (Bug #48024)
  Also make InnoDB thinks that /*/ only starts a comment. (Bug #53644).

  This fixes the bugs in the InnoDB Plugin.

  ha_innodb.h: Use trx_query_string() instead of trx_query() when
  available (MySQL 5.1.42 or later).

  innobase_get_stmt(): New function, to retrieve the currently running
  SQL statement.

  struct trx_struct: Remove mysql_query_str. Use innobase_get_stmt() instead.

  dict_strip_comments(): Add and observe the parameter sql_length. Treat
  /*/ as the start of a comment.

  dict_create_foreign_constraints(), row_table_add_foreign_constraints():
  Add the parameter sql_length.
2010-05-14 16:31:44 +03:00
Marko Mäkelä
8b3820e250 Make the InnoDB FOREIGN KEY parser understand multi-statements. (Bug #48024)
Also make InnoDB thinks that /*/ only starts a comment. (Bug #53644).

This fixes the bugs in the InnoDB Plugin.

ha_innodb.h: Use trx_query_string() instead of trx_query() when
available (MySQL 5.1.42 or later).

innobase_get_stmt(): New function, to retrieve the currently running
SQL statement.

struct trx_struct: Remove mysql_query_str. Use innobase_get_stmt() instead.

dict_strip_comments(): Add and observe the parameter sql_length. Treat
/*/ as the start of a comment.

dict_create_foreign_constraints(), row_table_add_foreign_constraints():
Add the parameter sql_length.
2010-05-14 16:08:15 +03:00
Marko Mäkelä
b93e78929a Make the InnoDB FOREIGN KEY parser understand multi-statements. (Bug #48024)
Also make InnoDB thinks that /*/ only starts a comment. (Bug #53644).

struct trx_struct: Add mysql_query_len.

ha_innodb.cc: Use trx_query_string() instead of trx_query() and
initialize trx->mysql_query_len.

INNOBASE_COPY_STMT(thd, trx): New macro, to initialize
trx->mysql_query_str and trx->mysql_query_len.

dict_strip_comments(): Add and observe the parameter sql_length. Treat
/*/ as the start of a comment.

dict_create_foreign_constraints(), row_table_add_foreign_constraints():
Add the parameter sql_length.
2010-05-14 16:02:28 +03:00
Gleb Shchepa
09b6efcc76 Bug #53450: Crash / assertion "virtual int
ha_myisam::index_first(uchar*)") at assert.c:81

Single-table DELETE crash/assertion similar to single-table
UPDATE bug 14272.

Same resolution as for the bug 14272:
Don't run index scan when we should use quick select.
This could cause failures because there are table handlers (like federated)
that support quick select scanning but do not support index scanning.
2010-05-14 15:36:27 +04:00
Alexander Nozdrin
7752ccec48 Patch for Bug#21818 (Return value of ROW_COUNT() is incorrect
for ALTER TABLE, LOAD DATA).

ROW_COUNT is now assigned according to the following rules:

  - In my_ok():
    - for DML statements: to the number of affected rows;
    - for DDL statements: to 0.

  - In my_eof(): to -1 to indicate that there was a result set.

    We derive this semantics from the JDBC specification, where int
    java.sql.Statement.getUpdateCount() is defined to (sic) "return the
    current result as an update count; if the result is a ResultSet
    object or there are no more results, -1 is returned".

  - In my_error(): to -1 to be compatible with the MySQL C API and
    MySQL ODBC driver.

  - For SIGNAL statements: to 0 per WL#2110 specification. Zero is used
    since that's the "default" value of ROW_COUNT in the diagnostics area.
2010-05-14 09:28:51 +04:00
Konstantin Osipov
c40277d8cd Merge trunk -> trunk-runtime. 2010-05-13 19:40:33 +04:00
Luis Soares
a602950080 BUG#53621: check_testcase fails for rpl_do_grant in mysql-5.1-bugteam
MTR sporadically reported that rpl_do_grant does not
clean up after itself.

We fix this by backporting BUG 50984 fix. This deploys
missing synchronization between master and slave.

Additionally, it also fixes the check_testcase for
rpl_tmp_table_and_DDL.
2010-05-13 16:40:31 +01:00
Ramil Kalimullin
a882f7e683 Fix for bug#52051: Aggregate functions incorrectly returns
NULL from outer join query
      
      Problem: optimising MIN/MAX() queries without GROUP BY clause
      by replacing the aggregate expression with a constant, we may set it
      to NULL disregarding the fact that there may be outer joins involved.
      
      Fix: don't replace MIN/MAX() with NULL if there're outer joins.
      
      Note: the fix itself is just
      - if (!count)
      + if (!count && !outer_tables)
          set to NULL
      
      The rest of the patch eliminates repeated code to improve speed
      and for easy maintenance of the code.
2010-05-12 20:10:33 +04:00
Jimmy Yang
bd65e80c84 Check in patch for bug #53336, Improved InnoDB Transaction Reporting.
rb://335, Approved by Sunny Bains
2010-05-12 08:39:45 -07:00
Jonathan Perkin
5b85121ca6 Changes to build using CMake according to existing release packages:
- Update/fix file layouts for each package type, add new types for
   native package formats including deb, rpm and svr4.

 - Build all plugins, including debug versions

 - Update compiler flags to match current release

 - Add missing @VAR@ expansions

 - Install correct mysqclient library symlinks

 - Fix icc/ia64 builds

 - Fix install of libmysqld-debug

 - Don't include mysql_embedded

 - Remove unpackaged manual pages to avoid missing files warnings

 - Don't install mtr's test suite
2010-05-12 12:51:23 +01:00
Marko Mäkelä
9451ee4b2c Merge from mysql-5.1-innodb:
------------------------------------------------------------
  revno: 3462
  revision-id: marko.makela@oracle.com-20100512104212-e2h9n1obxjb8tfg4
  parent: marko.makela@oracle.com-20100512060922-oh716ugpukfakwvh
  committer: Marko Mäkelä <marko.makela@oracle.com>
  branch nick: mysql-5.1-innodb
  timestamp: Wed 2010-05-12 13:42:12 +0300
  message:
    ha_innobase::add_index(): Reset trx->error_state in error handling.
    (Bug #53591)
2010-05-12 14:19:26 +03:00
Staale Smedseng
44fe4c707b Bug #49756 Rows_examined is always 0 in the slow query log for
update statements
      
Only SELECT statements report any examined rows in the slow
log. Slow UPDATE, DELETE and INSERT statements report 0 rows
examined, unless the statement has a condition including a
SELECT substatement.
      
This patch adds counting of examined rows for the UPDATE and
DELETE statements. An INSERT ... VALUES statement will still 
not report any rows as examined.
2010-05-12 13:19:12 +02:00
Alexander Nozdrin
a68a68bf45 A follow-up for Bug#50373: remove a commented-out part of the loaddata.test. 2010-05-12 15:13:47 +04:00
Alexander Nozdrin
6fcceb3d58 Post-fix for Bug#50373: sys_vars.secure_file_priv_basic can not be run
with mysql-test/var as a symlink any longer.
2010-05-12 14:42:39 +04:00
Marko Mäkelä
28b6339790 ha_innobase::add_index(): Reset trx->error_state in error handling.
(Bug #53591)
2010-05-12 13:42:12 +03:00
Sven Sandberg
b0b0000d40 BUG#50410: rpl_ndb tests should run with binlog_format=row
Problem: The rpl_ndb did not set binlog_format explicitly. Since
the default is binlog_format=statement, it means that the suite
ran with that. ndb does not support binlog_format=statement,
and many tests were skipped because they sourced
include/have_binlog_format_row_or_mixed.inc
Fix: set binlog_format=row explicitly in the configuration file
for the rpl_ndb suite.
2010-05-12 12:29:02 +02:00
Vasil Dimov
dcf0caa6d5 Fix the failing innodb.innodb test.
Support returning 512 and 511 pages for the buffer pool size, this
is undeterministic and probably depends on alignment issues.

The default buffer pool size is 8M (512) pages, which is set in
include/default_mysqld.cnf. So the previous "replace_result 8192 8191"
had no effect.
2010-05-12 12:13:50 +03:00
Vasil Dimov
6941bfb6bf Improve the comment in innodb_bug38231.test 2010-05-12 10:44:23 +03:00
Vasil Dimov
8b22035f63 Disable innodb.innodb_bug38231 in embedded mode
The --send command does not seem to work as expected in that mode.
2010-05-12 10:42:28 +03:00
Marko Mäkelä
42974cbfa6 Merge from mysql-5.1-innodb:
------------------------------------------------------------
  revno: 3459
  revision-id: marko.makela@oracle.com-20100511165845-lsw7seixftgzpfqt
  parent: vasil.dimov@oracle.com-20100511110029-18xvuu6r7har8toh
  committer: Marko Mäkelä <marko.makela@oracle.com>
  branch nick: mysql-5.1-innodb2
  timestamp: Tue 2010-05-11 19:58:45 +0300
  message:
    Fix sys_vars.tx_isolation_func.test, which was broken in revno 3432
    when making READ UNCOMMITTED lock as little as READ COMMITTED.
2010-05-11 20:02:49 +03:00
Marko Mäkelä
762c82c16b Fix sys_vars.tx_isolation_func.test, which was broken in revno 3432
when making READ UNCOMMITTED lock as little as READ COMMITTED.
2010-05-11 19:58:45 +03:00
Marko Mäkelä
65c34aaf41 Merge from mysql-5.1-innodb:
------------------------------------------------------------
  revno: 3459
  revision-id: marko.makela@oracle.com-20100511105308-grp2t3prh3tqivw0
  parent: marko.makela@oracle.com-20100511105012-b2t7wvz6mu6bll74
  parent: marko.makela@oracle.com-20100505123901-xjxu93h1xnbkfkq0
  committer: Marko Mäkelä <marko.makela@oracle.com>
  branch nick: mysql-5.1-innodb
  timestamp: Tue 2010-05-11 13:53:08 +0300
  message:
    Merge a patch from Facebook to fix Bug #53290

    commit e759bc64eb5c5eed4f75677ad67246797d486460
    Author: Ryan Mack
    Date:   3 days ago

        Bugfix for 53290, fast unique index creation fails on duplicate null values

        Summary:
        Bug in the fast index creation code incorrectly considers null
        values to be duplicates during block merging.  Innodb policy is that
        multiple null values are allowed in a unique index.  Null duplicates
        were correctly ignored while sorting individual blocks and with slow
        index creation.

        Test Plan:
        mtr, including new test, load dbs using deferred index creation

        License:
        Copyright (C) 2009-2010 Facebook, Inc.  All Rights Reserved.

        Dual licensed under BSD license and GPLv2.

        Redistribution and use in source and binary forms, with or without
        modification, are permitted provided that the following conditions are met:
        1. Redistributions of source code must retain the above copyright notice,
           this list of conditions and the following disclaimer.
        2. Redistributions in binary form must reproduce the above copyright notice,
           this list of conditions and the following disclaimer in the documentation
           and/or other materials provided with the distribution.

        THIS SOFTWARE IS PROVIDED BY FACEBOOK, INC. ``AS IS'' AND ANY EXPRESS OR
        IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
        MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
        EVENT SHALL FACEBOOK, INC. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
        SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
        PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
        OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
        WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
        OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
        ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

        This program is free software; you can redistribute it and/or modify it
        under the terms of the GNU General Public License as published by the Free
        Software Foundation; version 2 of the License.

        This program is distributed in the hope that it will be useful, but WITHOUT
        ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
        FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
        more details.

        You should have received a copy of the GNU General Public License along with
        this program; if not, write to the Free Software Foundation, Inc., 59 Temple
        Place, Suite 330, Boston, MA  02111-1307  USA
      ------------------------------------------------------------
      revno: 3453.2.1
      revision-id: marko.makela@oracle.com-20100505123901-xjxu93h1xnbkfkq0
      parent: marko.makela@oracle.com-20100505120555-ukoq1gklpheslrxs
      committer: Marko Mäkelä <marko.makela@oracle.com>
      branch nick: 5.1-innodb
      timestamp: Wed 2010-05-05 15:39:01 +0300
      message:
        Merge a contribution from Ryan Mack at Facebook:

        Bugfix for 53290, fast unique index creation fails on duplicate null values

            Summary:
            Bug in the fast index creation code incorrectly considers null
            values to be duplicates during block merging.  Innodb policy is that
            multiple null values are allowed in a unique index.  Null duplicates
            were correctly ignored while sorting individual blocks and with slow
            index creation.

            Test Plan:
            mtr, including new test, load dbs using deferred index creation

            DiffCamp Revision: 110840
            Reviewed By: mcallaghan
            CC: mcallaghan, mysql-devel@lists
            Revert Plan:
            OK
2010-05-11 19:18:28 +03:00
Alexey Kopytov
a6cf28a7a1 Manual merge from mysql-5.1-bugteam to mysql-trunk-merge.
Conflicts:

Text conflict in sql/sql_base.cc
Text conflict in sql/sql_partition.cc
Text conflict in sql/sql_priv.h
Text conflict in sql/sql_show.cc
2010-05-11 20:02:50 +04:00
Alexander Nozdrin
3511c2e45a Make innodb.innodb_information_schema experimental due to Bug 48883. 2010-05-11 16:00:24 +04:00
Vasil Dimov
5875344794 Merge mysql-trunk into mysql-trunk-innodb 2010-05-11 14:29:58 +03:00
Vasil Dimov
ef4a1ba0c6 Merge mysql-5.1-innodb from bk-internal locally 2010-05-11 14:00:29 +03:00
Marko Mäkelä
45a2fee9eb Merge a patch from Facebook to fix Bug #53290
commit e759bc64eb5c5eed4f75677ad67246797d486460
Author: Ryan Mack
Date:   3 days ago

    Bugfix for 53290, fast unique index creation fails on duplicate null values

    Summary:
    Bug in the fast index creation code incorrectly considers null
    values to be duplicates during block merging.  Innodb policy is that
    multiple null values are allowed in a unique index.  Null duplicates
    were correctly ignored while sorting individual blocks and with slow
    index creation.

    Test Plan:
    mtr, including new test, load dbs using deferred index creation

    License:
    Copyright (C) 2009-2010 Facebook, Inc.  All Rights Reserved.

    Dual licensed under BSD license and GPLv2.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions are met:
    1. Redistributions of source code must retain the above copyright notice,
       this list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright notice,
       this list of conditions and the following disclaimer in the documentation
       and/or other materials provided with the distribution.

    THIS SOFTWARE IS PROVIDED BY FACEBOOK, INC. ``AS IS'' AND ANY EXPRESS OR
    IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
    EVENT SHALL FACEBOOK, INC. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
    OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
    WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
    OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
    ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

    This program is free software; you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by the Free
    Software Foundation; version 2 of the License.

    This program is distributed in the hope that it will be useful, but WITHOUT
    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
    more details.

    You should have received a copy of the GNU General Public License along with
    this program; if not, write to the Free Software Foundation, Inc., 59 Temple
    Place, Suite 330, Boston, MA  02111-1307  USA
2010-05-11 13:53:08 +03:00
Vasil Dimov
b98db7675a Merge mysql-5.1 into mysql-5.1-innodb 2010-05-11 13:41:34 +03:00
Alexey Kopytov
db9672cfde Manual merge from mysql-5.1-bugteam to mysql-trunk-merge.
Conflicts:

Text conflict in tests/mysql_client_test.c
2010-05-11 12:27:53 +04:00
Inaam Rana
1a1d460338 Undo the changes made by Vasil in sys_vars/all_vars when adjusting
for the new parameters introduced in the plugin 1.1. Now that we have
basic tests for all these new parameters it is no longer needed to
adjust the all_vars.result file.
2010-05-10 17:44:40 -04:00
Mattias Jonsson
af2de57325 merge 2010-05-10 15:17:06 +02:00
Marko Makela
a2ea94bac7 Merge from mysql-5.1-innodb:
------------------------------------------------------------
  revno: 3454
  committer: Marko Makela <mmakela@bk-internal.mysql.com>
  branch nick: mysql-5.1-innodb
  timestamp: Mon 2010-05-10 13:37:52 +0200
  message:
    Add an innodb test case for Bug #49164.
2010-05-10 15:14:45 +02:00
Marko Makela
1a84dcdf24 Add an innodb_plugin test case for Bug #49164. 2010-05-10 13:38:25 +02:00
Marko Makela
b092cd2f15 Add an innodb test case for Bug #49164. 2010-05-10 13:37:52 +02:00
Martin Hansson
1c5200f67d Bug#50939: Loose Index Scan unduly relies on engine to
remember range endpoints

The Loose Index Scan optimization keeps track of a sequence
of intervals. For the current interval it maintains the
current interval's endpoints. But the maximum endpoint was
not stored in the SQL layer; rather, it relied on the
storage engine to retain this value in-between reads. By
coincidence this holds for MyISAM and InnoDB. Not for the
partitioning engine, however.

Fixed by making the key values iterator 
(QUICK_RANGE_SELECT) keep track of the current maximum endpoint.
This is also more efficient as we save a call through the
handler API in case of open-ended intervals.

The code to calculate endpoints was extracted into 
separate methods in QUICK_RANGE_SELECT, and it was possible to
get rid of some code duplication as part of fix.
2010-05-10 09:23:23 +02:00
Alfranio Correia
f438d08aee BUG#49019 Mixing self-logging eng. and regular eng. does not switch to row in mixed mode
Backport of the patch for 5.1-bugteam.
2010-05-09 23:45:25 +01:00
Alexey Kopytov
ad43230e3b Manual merge of mysql-5.1-bugteam to mysql-trunk-merge.
Conflicts:

Text conflict in mysql-test/r/grant.result
Text conflict in mysql-test/t/grant.test
Text conflict in mysys/mf_loadpath.c
Text conflict in sql/slave.cc
Text conflict in sql/sql_priv.h
2010-05-09 02:03:35 +04:00
Luis Soares
60ff8469a0 BUG#49522: Replication problem with mixed MyISAM/InnoDB
When using a non-transactional table (t1) on the master 
and with autocommit disabled, no COMMIT is recorded 
in the binary log ending the statement. Therefore, if 
the slave has t1 in a transactional engine, then it will 
be as if a transaction is started but never ends. This is
actually BUG#29288 all over again.

We fix this by cherrypicking the cset for BUG#29288 which
was pushed to a later mysql version. The revision picked
was: mats@sun.com-20090923094343-bnheplq8n95opjay .

Additionally, a test case for covering the scenario depicted
in the bug report is included in this cset.
2010-05-07 18:48:35 +01:00
Konstantin Osipov
5ac769be68 Draft patch that fixes and a sketches test cases for:
Bug#20837 Apparent change of isolation level during transaction,
Bug#46527 COMMIT AND CHAIN RELEASE does not make sense,
Bug#53343 completion_type=1, COMMIT/ROLLBACK AND CHAIN don't 
preserve the isolation level
Bug#53346 completion_type has strange effect in a stored 
procedure/prepared statement

Make thd->tx_isolation mean strictly "current transaction 
isolation level"
Make thd->variables.tx_isolation mean "current session isolation
level".
The current transaction isolation level is now established
at transaction start. If there was a SET TRANSACTION
ISOLATION LEVEL statement, the value is taken from it.
Otherwise, the session value is used.
A change in a session value, made while a transaction is active,
whereas still allowed, no longer has any effect on the
current transaction isolation level. This is an incompatible
change.
A change in a session isolation level, made while there is
no active transaction, overrides SET TRANSACTION statement,
if there was any.
Changed the impelmentation to not look at @@session.completion_type
in the parser, and thus fixed Bug#53346.
Changed the parser to not allow AND NO CHAIN RELEASE,
and thus fixed Bug#46527.
Changed the transaction API to take the current transaction
isolation level into account:
- BEGIN/COMMIT now do preserve the current transaction
isolation level if chaining is on.
- implicit commit, XA COMMIT or XA ROLLBACK or autocommit don't.
2010-05-07 20:28:59 +04:00
Alexey Kopytov
9a2f981989 Manual merge of mysql-5.1-bugteam to mysql-trunk-merge.
Conflicts:

Text conflict in mysql-test/r/explain.result
Text conflict in mysql-test/t/explain.test
Text conflict in sql/net_serv.cc
Text conflict in sql/sp_head.cc
Text conflict in sql/sql_priv.h
2010-05-07 20:17:55 +04:00
Alexey Kopytov
480a4852a0 Manual merge of local mysql-trunk-merge with bk-internal.
Conflicts:

Text conflict in sql/CMakeLists.txt
2010-05-07 18:56:46 +04:00
Alexander Nozdrin
2a95927fa7 Fix merge error: update test result file. 2010-05-07 15:10:40 +04:00
Alexander Nozdrin
fe8f7052fc Manual merge from mysql-trunk.
Conflicts:
  - mysql-test/suite/engines/funcs/t/disabled.def
  - mysql-test/suite/engines/iuds/t/disabled.def
  - mysql-test/suite/engines/iuds/t/insert_number.test
2010-05-07 13:37:16 +04:00
Martin Hansson
31a79ec3c6 Merge of fix for Bug#52357 2010-05-07 09:12:16 +02:00
Sergey Glukhov
2c83fc6266 Bug#53334 Incorrect result for InnoDB in LEFT JOIN with impossible condition
The fix actually reverts the change introduced
by the patch for bug 51494.
The fact is that patches for bugs 52177&48419
fix bugs 51194&50575 as well.
2010-05-07 10:38:42 +05:00
Gleb Shchepa
c4021e2d43 Bug #53088: mysqldump with -T & --default-character-set set
truncates text/blob to 766 chars

mysqldump and SELECT ... INTO OUTFILE truncated long BLOB/TEXT
values to size of 766 bytes (MAX_FIELD_WIDTH or 255 * 3 + 1).

The select_export::send_data method has been modified to
reallocate a conversion buffer for long field data.
2010-05-07 00:41:37 +04:00
Martin Hansson
9bd08c192a Merge of fix for Bug#52357 2010-05-06 10:59:28 +02:00
Martin Hansson
4e75f7c053 Bug#52357: Assertion failed: join->best_read in
greedy_search optimizer_search_depth=0

The algorithm inside restore_prev_nj_state failed to
properly update the counters within the NESTED_JOIN
tree. The counter was decremented each time a table in the
node was removed from the QEP, the correct thing to do being
only to decrement it when the last table in the child node
was removed from the plan. This lead to node counters
getting negative values and the plan thus appeared
impossible. An assertion caught this.

Fixed by not recursing up the tree unless the last table in
the join nest node is removed from the plan
2010-05-06 10:45:00 +02:00
Magne Mahre
24a14875bc Bug#49193 CREATE TABLE reacts differently depending on whether
data is selected or not

Temporary and permanent tables should live in different 
namespaces.  In this case, resolving a permanent table
name gave the temporary table, resulting in a name
collision.
2010-05-05 23:28:58 +02:00
Marko Mäkelä
543ae0093c Merge a contribution from Ryan Mack at Facebook:
Bugfix for 53290, fast unique index creation fails on duplicate null values

    Summary:
    Bug in the fast index creation code incorrectly considers null
    values to be duplicates during block merging.  Innodb policy is that
    multiple null values are allowed in a unique index.  Null duplicates
    were correctly ignored while sorting individual blocks and with slow
    index creation.

    Test Plan:
    mtr, including new test, load dbs using deferred index creation

    DiffCamp Revision: 110840
    Reviewed By: mcallaghan
    CC: mcallaghan, mysql-devel@lists
    Revert Plan:
    OK
2010-05-05 15:39:01 +03:00
Marko Mäkelä
2582a3e97b Re-enable ps_3innodb. 2010-05-05 15:05:55 +03:00
Marko Mäkelä
bc7dcdc0b1 Merge from mysql-5.1-innodb:
------------------------------------------------------------
  revno: 3449
  revision-id: marko.makela@oracle.com-20100505104425-39y6qbffgotrhck2
  parent: marko.makela@oracle.com-20100505104001-883pqiepo384qr5h
  committer: Marko Mäkelä <marko.makela@oracle.com>
  branch nick: 5.1-innodb
  timestamp: Wed 2010-05-05 13:44:25 +0300
  message:
    Factor out innodb_multi_update.test from innodb.test
2010-05-05 14:03:14 +03:00
Alexander Nozdrin
d91c271b2b Patch for Bug#50511 (Sometimes wrong handling of user variables containing NULL).
The bug happened under the following condition:
  - there was a user variable of type REAL, containing NULL value
  - there was a table with a NOT_NULL column of any type but REAL, having
    default value (or auto increment);
  - a row was inserted into the table with the user variable as value.
    A warning was emitted here.

The problem was that handling of NULL values of REAL type was not properly
implemented: it didn't expect that REAL NULL value can be assigned to other
data type.

Basically, the problem was that set_field_to_null() was used instead of
set_field_to_null_with_conversions().

The fix is to use the right function, or more generally, to allow conversion of
REAL NULL values to other data types.
2010-05-05 15:00:59 +04:00
Marko Mäkelä
2cabdebc4f Factor out innodb_multi_update.test from innodb.test 2010-05-05 13:44:25 +03:00
Marko Mäkelä
f9a7a32414 Factor out innodb_multi_update.test from innodb.test 2010-05-05 13:40:01 +03:00
Alexander Barkov
25d31b8f7c Bug#51571 load xml infile causes server crash
Problem:
  item->name was NULL for Item_user_var_as_out_param
  which made strcmp(something, item->name) crash in the LOAD XML code.
  
  Fix:
  - item_func.h: Adding set_name() in constuctor for Item_user_var_as_out_param
  - sql_load.cc: Changing the condition in write_execute_load_query_log_event() which
  distiguished between Item_user_var_as_out_param and Item_field
  from
    if (item->name == NULL)
  to
    if (item->type() == Item::FIELD_ITEM)
  - loadxml.result, loadxml.test: adding tests
2010-05-05 14:34:20 +04:00
Magne Mahre
1cf9861f86 Bug#48800 CREATE TABLE t...SELECT fails if t is a temporary
table

If a temporary table A exists, and a (permanent) table 
with the same name is attempted created with 
"CREATE TABLE ... AS SELECT", the create would fail with 
an error.
   1050: Table 'A' already exists

The error occured in MySQL 5.1 releases, but is not
present in MySQL 5.5.   This patch adds a regression
test to ensure that the problem does not reoccur.
2010-05-05 12:17:07 +02:00
Vasil Dimov
781debb59b Fix path to include file in innodb_bug52745.test 2010-05-05 13:13:58 +03:00
Vasil Dimov
484741475e Fix path to include file. 2010-05-05 13:13:05 +03:00
Alexander Barkov
6bf10a8623 Bug#52849 [Com]: datetime index not work
Problem: after introduction of "WL#2649 Number-to-string conversions"

This query:
  SET NAMES cp850; -- Or any other non-latin1 ASCII-based character set
  SELECT * FROM t1
  WHERE datetime_column='2010-01-01 00:00:00'
started to add extra character set conversion: 
  SELECT * FROM t1
  WHERE CONVERT(datetime_column USING cp850)='2010-01-01 00:00:00';

so index on DATETIME column was not used anymore.
Fix:
  avoid convertion of NUMERIC/DATETIME items
  (i.e. those with derivation DERIVATION_NUMERIC).
2010-05-05 13:28:37 +04:00
Horst.Hunger
8975d4766f Patch for 47759 to trunk-bugfixing. 2010-05-05 09:35:38 +02:00
Jon Olav Hauglid
27da41cc2e merge from mysql-trunk-bugfixing 2010-05-05 09:25:04 +02:00
Omer BarNir
d24425712e Updates to README file of the 'engines' test suites 2010-05-04 14:24:36 -07:00
Omer BarNir
3cf56bb21b Changes to result files in the engine suite - missed from previous commit 2010-05-04 13:39:17 -07:00
Andrei Elkin
e97a0c1881 Bug #50942 mix_innodb_myisam_side_effects.test is not deterministic
The test was used to fail because of 
 UPDATE t3,t4 SET t3.a=t4.a + bug27417(1);
did not prescribe the order of two row operations implied by the update.

Fixed with forcing the order with adding a where condition w/o
affecting the former bug fixes logics.
2010-05-04 22:31:49 +03:00
Omer BarNir
1c731cb0c6 Updates to test and result files in the 'engine' suites following changes in 5.5 2010-05-04 11:10:17 -07:00
Georgi Kodinov
0f26a0533b Bug #53371: COM_FIELD_LIST can be abused to bypass table level grants.
This is the 5.1 merge and extension of the fix.
The server was happily accepting paths in table name in all places a table
name is accepted (e.g. a SELECT). This allowed all users that have some 
privilege over some database to read all tables in all databases in all
mysql server instances that the server file system has access to.
Fixed by :
1. making sure no path elements are allowed in quoted table name when
constructing the path (note that the path symbols are still valid in table names
when they're properly escaped by the server).
2. checking the #mysql50# prefixed names the same way they're checked for
path elements in mysql-5.0.
2010-05-04 17:03:28 +03:00
Marko Mäkelä
dc29792ff2 fsp_init_file_page_low(): Zero out the page. (Bug #53306) 2010-05-04 16:13:58 +03:00
Mattias Jonsson
07c765aa42 merge 2010-05-04 14:26:44 +02:00
Alexander Nozdrin
a7cc09e01a Mark 3 test cases experimental on FreeBSD due to Bug 43020, Bug 38965. 2010-05-04 16:17:46 +04:00
Vasil Dimov
f6181a3e76 Merge from mysql-5.1-innodb:
------------------------------------------------------------
  revno: 3419
  revision-id: marko.makela@oracle.com-20100426110856-14tc8re1f5kp5j3g
  parent: marko.makela@oracle.com-20100426105215-2e9nzq8z0nfwxjky
  committer: Marko M?kel? <marko.makela@oracle.com>
  branch nick: 5.1-innodb
  timestamp: Mon 2010-04-26 14:08:56 +0300
  message:
    Add a test case for Bug #52745.
  added:
    mysql-test/suite/innodb_plugin/r/innodb_bug52745.result innodb_bug52745.resu-20100426110444-2211220xcgz0el4v-1
    mysql-test/suite/innodb_plugin/t/innodb_bug52745.test innodb_bug52745.test-20100426110444-2211220xcgz0el4v-2
  ------------------------------------------------------------
2010-05-04 13:15:46 +03:00
Vasil Dimov
5d2f6e7c94 Merge from mysql-5.1-innodb:
------------------------------------------------------------
  revno: 3417
  revision-id: marko.makela@oracle.com-20100426102725-as2vc44ddykg1786
  parent: marko.makela@oracle.com-20100426073949-txnbqldrl9fdlapx
  committer: Marko M?kel? <marko.makela@oracle.com>
  branch nick: 5.1-innodb
  timestamp: Mon 2010-04-26 13:27:25 +0300
  message:
    row_search_for_mysql(): Never try semi-consistent read in unique searches.
    They are only useful in table scans. (Bug #52663)
  added:
    mysql-test/suite/innodb/r/innodb_bug52663.result innodb_bug52663.resu-20100426102328-fymyevkummgyc3gm-1
    mysql-test/suite/innodb/t/innodb_bug52663-master.opt innodb_bug52663maste-20100426102328-fymyevkummgyc3gm-2
    mysql-test/suite/innodb/t/innodb_bug52663.test innodb_bug52663.test-20100426102328-fymyevkummgyc3gm-3
    mysql-test/suite/innodb_plugin/r/innodb_bug52663.result innodb_bug52663.resu-20100426102328-fymyevkummgyc3gm-4
    mysql-test/suite/innodb_plugin/t/innodb_bug52663.test innodb_bug52663.test-20100426102328-fymyevkummgyc3gm-5
  modified:
    storage/innobase/row/row0sel.c 2@cee13dc7-1704-0410-992b-c9b4543f1246:trunk%2Frow%2Frow0sel.c
    storage/innodb_plugin/ChangeLog 2425@16c675df-0fcb-4bc9-8058-dcc011a37293:branches%2Fzip%2FChangeLog
    storage/innodb_plugin/row/row0sel.c 2@16c675df-0fcb-4bc9-8058-dcc011a37293:trunk%2Frow%2Frow0sel.c
  ------------------------------------------------------------
2010-05-04 12:51:25 +03:00
Vasil Dimov
46b1ee7330 Merge from mysql-5.1-innodb:
------------------------------------------------------------
  revno: 3415
  revision-id: calvin.sun@oracle.com-20100422191614-2atswbilyyxep6rm
  parent: marko.makela@oracle.com-20100422093342-jf9ojlzdqsdebohn
  committer: Calvin Sun <calvin.sun@oracle.com>
  branch nick: mysql-5.1-innodb
  timestamp: Thu 2010-04-22 14:16:14 -0500
  message:
    mysql-5.1-innodb: add error codes to innodb_bug51920.test
    kill of active connection yields different error code
    depending on platform.
  modified:
    mysql-test/suite/innodb/r/innodb_bug51920.result 6918@cee13dc7-1704-0410-992b-c9b4543f1246:branches%2F5.1%2Fmysql-test%2Finnodb_bug51920.result
    mysql-test/suite/innodb/t/innodb_bug51920.test 6918@cee13dc7-1704-0410-992b-c9b4543f1246:branches%2F5.1%2Fmysql-test%2Finnodb_bug51920.test
    mysql-test/suite/innodb_plugin/r/innodb_bug51920.result 6919@16c675df-0fcb-4bc9-8058-dcc011a37293:branches%2Fzip%2Fmysql-test%2Finnodb_bug51920.result
    mysql-test/suite/innodb_plugin/t/innodb_bug51920.test 6919@16c675df-0fcb-4bc9-8058-dcc011a37293:branches%2Fzip%2Fmysql-test%2Finnodb_bug51920.test
  ------------------------------------------------------------
2010-05-04 12:40:41 +03:00
Kristofer Pettersson
83fb8a7770 Automerge 2010-05-03 19:21:09 +02:00
Inaam Rana
67b1d84ce4 pull changes from parent 2010-05-03 12:21:10 -04:00
Kristofer Pettersson
5b6ebdf086 Bug#50373 --secure-file-priv=""
Iterative patch improvement. Previously committed patch
caused wrong result on Windows. The previous patch also
broke secure_file_priv for symlinks since not all file
paths which must be compared against this variable are
normalized using the same norm.

The server variable opt_secure_file_priv wasn't
normalized properly and caused the operations
LOAD DATA INFILE .. INTO TABLE ..
and
SELECT load_file(..)
to do different interpretations of the 
--secure-file-priv option.
     
The patch moves code to the server initialization
routines so that the path always is normalized
once and only once.
      
It was also intended that setting the option
to an empty string should be equal to 
lifting all previously set restrictions. This
is also fixed by this patch.
2010-05-03 18:14:39 +02:00
Georgi Kodinov
d441947cb0 merged 5.1-innodb 2010-05-01 19:12:12 +03:00
Sunny Bains
49b2c09248 Fix failing tests. 2010-05-01 07:54:14 +10:00
Alexander Nozdrin
c784ee2782 Patch for Bug#52356: query_cache_debug fails on Linux.
There were two problems here:
  1. misleading error message
  2. abusing KILL QUERY in the test case

1. The server reported "'DELETE FROM t1' failed: 1689: Wait on a lock was
aborted due to a pending exclusive lock", while the proper error message
should be "'DELETE FROM t1' failed: 1317: Query execution was interrupted".

The problem is that the server has two different flags for
signalling that a query is being killed: THD::killed and
mysys_var::abort. The test case triggers a race: sometimes
mysys_var::abort is set earlier than THD::killed. That leads
to the following situation:

  - thr_lock() checks mysys_var::abort and returns error status,
    since mysys_var::abort is set;

  - the caller (mysql_lock_tables()) gets an error from thr_lock(),
    but THD::killed is not set, so it decides that thr_lock() couldn't
    get a lock due to a pending exclusive lock.

This is a known issue with the server and it's not going to be fixed soon.

5.5 differs from 5.1 here as follows: when thr_lock() returns an error:
  - 5.1 continues trying thr_lock() until success;
  - 5.5 propagates the error

2. The test case uses KILL QUERY is a highly concurent environment.

The fix is to wait for the dying statement to rest in peace before
executing another DELETE FROM t1.
2010-04-30 16:12:41 +04:00
Daniel Fischer
b1109f0331 merge 2010-04-30 13:36:57 +02:00
Alexey Kopytov
0f5afe5d7f Automerge. 2010-04-30 15:27:17 +04:00
Alexey Kopytov
96366e1196 Bug #48419: another explain crash..
WHERE predicates containing references to empty tables in a
subquery were handled incorrectly by the optimizer when
executing EXPLAIN. As a result, the optimizer could try to
evaluate such predicates rather than just stop with
"Impossible WHERE noticed after reading const tables" as 
it would do in a non-subquery case. This led to valgrind 
errors and crashes.

Fixed the code checking the above condition so that subqueries
are not excluded and hence are handled in the same way as top
level SELECTs.
2010-04-30 15:10:48 +04:00
Vasil Dimov
8e6e163473 Disable innodb.innodb, main.ps_3innodb and main.partition_innodb_plugin
mysql-tests because those emit (spurious?) valgrind warnings.
2010-04-30 13:02:36 +03:00
Alexey Kopytov
940ad61b71 Manual merge of mysql-5.1-bugteam to mysql-trunk-merge.
Conflicts:

Text conflict in configure.in
Text conflict in dbug/dbug.c
Text conflict in mysql-test/r/ps.result
Text conflict in mysql-test/t/ps.test
Text conflict in sql/CMakeLists.txt
Text conflict in sql/ha_ndbcluster.cc
Text conflict in sql/mysqld.cc
Text conflict in sql/sql_plugin.cc
Text conflict in sql/sql_table.cc
2010-04-30 00:33:06 +04:00
Inaam Rana
33587bfbe2 Add basic tests for new innodb features 2010-04-29 13:43:10 -04:00
Konstantin Osipov
f41933c436 Bug#46947 "Embedded SELECT without FOR UPDATE is causing a lock"
Update the result file to minor tweaks of the comments in the
test case.
2010-04-28 17:43:25 +04:00
Bjorn Munch
5492202344 Do not install mysql-test/lib/t 2010-04-28 14:56:38 +02:00
Georgi Kodinov
70a969139c Bug #47453: InnoDB incorrectly changes TIMESTAMP columns when JOINed
during an UPDATE

Extended the fix for bug 29310 to multi-table update:

When a table is being updated it has two set of fields - fields required for
checks of conditions and fields to be updated. A storage engine is allowed
not to retrieve columns marked for update. Due to this fact records can't
be compared to see whether the data has been changed or not. This makes the
server always update records independently of data change.
  
Now when an auto-updatable timestamp field is present and server sees that
a table handle isn't going to retrieve write-only fields then all of such
fields are marked as to be read to force the handler to retrieve them.
2010-04-28 15:55:54 +03:00
Sven Sandberg
a651824329 BUG#50670: Slave stops with error code 1644
Clarified error messages related to unsafe statements:
 - avoid the internal technical term "row injection"
 - use 'binary log' instead of 'binlog'
 - avoid the word 'unsafeness'
2010-04-28 14:47:49 +02:00
Alexander Nozdrin
72ae25b11e After-merge fixes. 2010-04-28 14:33:53 +04:00
Konstantin Osipov
8280fdd3c3 Committing on behalf or Dmitry Lenev:
Fix for bug #46947 "Embedded SELECT without FOR UPDATE is
causing a lock", with after-review fixes.

SELECT statements with subqueries referencing InnoDB tables
were acquiring shared locks on rows in these tables when they
were executed in REPEATABLE-READ mode and with statement or
mixed mode binary logging turned on.

This was a regression which were introduced when fixing
bug 39843.

The problem was that for tables belonging to subqueries
parser set TL_READ_DEFAULT as a lock type. In cases when
statement/mixed binary logging at open_tables() time this
type of lock was converted to TL_READ_NO_INSERT lock at
open_tables() time and caused InnoDB engine to acquire
shared locks on reads from these tables. Although in some
cases such behavior was correct (e.g. for subqueries in
DELETE) in case of SELECT it has caused unnecessary locking.

This patch tries to solve this problem by rethinking our
approach to how we handle locking for SELECT and subqueries.
Now we always set TL_READ_DEFAULT lock type for all cases
when we read data. When at open_tables() time this lock
is interpreted as TL_READ_NO_INSERT or TL_READ depending
on whether this statement as a whole or call to function
which uses particular table should be written to the
binary log or not (if yes then statement should be properly
serialized with concurrent statements and stronger lock
should be acquired).

Test coverage is added for both InnoDB and MyISAM.

This patch introduces an "incompatible" change in locking
scheme for subqueries used in SELECT ... FOR UPDATE and
SELECT .. IN SHARE MODE.
In 4.1 the server would use a snapshot InnoDB read for 
subqueries in SELECT FOR UPDATE and SELECT .. IN SHARE MODE
statements, regardless of whether the binary log is on or off.
If the user required a different type of read (i.e. locking read),
he/she could request so explicitly by providing FOR UPDATE/IN SHARE MODE
clause for each individual subquery.
On of the patches for 5.0 broke this behaviour (which was not documented
or tested), and started to use locking reads fora all subqueries in SELECT ... 
FOR UPDATE/IN SHARE MODE. This patch restored 4.1 behaviour.
2010-04-28 14:04:11 +04:00
fa28ba8ba6 Bug #51839 mixup of DDL causes slave to stop
Stored routine DDL statements use statement-based replication
regardless of the current binlog format. The problem here was
that if a DDL statement failed during metadata lock acquisition
or opening of mysql.proc, the binlog format would not be reset
before returning. So the following DDL or DML statements are 
binlogged with a wrong binlog format, which causes the slave 
to stop.

The problem can be resolved by grabbing an exclusive MDL lock firstly
instead of clearing the current binlog format. So that the binlog
format will not be affected when the lock grab returns directly with
an error. The same way is taken to open a proc table for update.
2010-04-28 11:26:47 +08:00
Luis Soares
a1b3955f32 BUG#53101: binlog.binlog_tmp_table fails on sol10 sparc64 max in
parallel mode
      
The failure has nothing to do with parallel, but rather on the
order the tests are executed. In this case, the test
binlog_tmp_table (lets call it test2) was not ensuring that the
binary logs would be reset when it started. Later the test issues
a mysqlbinlog .../master-bin.000002 | mysql ... If the test that
was executed before this one (lets call it test1) had issued a
flush logs, then the file in use in test1 (master-bin.000002)
would not actually match the one that was expected. Eventually,
this would cause the statements logged in test1 to be replayed,
instead of the ones logged in the beginning of test2.
    
We fix this by:
  1. adding RESET MASTER to the beginning of binlog_tmp_table
  2. setting dynamically the file to use in binlog_tmp_table
     
Only #1 was needed, but the two make the tests cases more robust.
2010-04-27 12:25:55 +01:00
Alexander Nozdrin
d328d5be33 Manual merge from mysql-trunk.
Conflicts:
  - mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result
2010-04-27 13:58:21 +04:00
Vasil Dimov
e3dc155d60 Merge 3417..3421 from mysql-5.1-innodb 2010-04-27 09:16:45 +03:00
Vasil Dimov
2a97503d06 Split the innodb.innodb mysql-test.
Extract part of innodb.innodb into innodb.innodb_misc1

This is needed in order to be able to more easily debug this test,
under valgrind, it is too huge.
2010-04-27 09:09:08 +03:00
Alexey Kopytov
eb5d1df3a9 Null merge. 2010-04-27 00:46:52 +04:00
Alexey Kopytov
1a1fd04d84 Backport of the fix for bug #50335 to 5.0.
The problem was in an incorrect debug assertion. The expression
used in the failing assertion states that when finding
references matching ORDER BY expressions, there can be only one
reference to a single table. But that does not make any sense,
all test cases for this bug are valid examples with multiple
identical WHERE expressions referencing the same table which
are also present in the ORDER BY list.

Fixed by removing the failing assertion. We also have to take
care of the 'found' counter so that we count multiple
references only once. We rely on this fact later in
eq_ref_table().
2010-04-27 00:06:00 +04:00
Horst.Hunger
4f4ed5d9e1 only This is a backport of the patch for 47739 into trunk. 2010-04-26 21:39:24 +02:00
Horst.Hunger
63e7004bcc backport of patch for blckhole plugin (47748) to trunk-bugfixing. 2010-04-26 20:44:10 +02:00
Alexander Nozdrin
b6131a36a2 Making few tests experimental as they fail on Open Solaris constantly. 2010-04-26 18:51:56 +04:00
Marko Mäkelä
9ec44b56e4 Add a test case for Bug #52745. 2010-04-26 14:08:56 +03:00
Marko Mäkelä
30b15fae14 row_search_for_mysql(): Never try semi-consistent read in unique searches.
They are only useful in table scans. (Bug #52663)
2010-04-26 13:27:25 +03:00
Alfranio Correia
a6d6ac3dbe BUG#53075 SBR: Strange warning around CONNECTION_ID
Statements with CONNECTION_ID were forced to be kept in the transactional
cache and by consequence non-transactional changes that were supposed to
be flushed ahead of the transaction were kept in the transactional cache.

This happened because after BUG#51894 any statement whose thd's
thread_specific_used was set was kept in the transactional cache. The idea
was to keep changes on temporary tables in the transactional cache. However,
the thread_specific_used was set not only for statements that accessed
temporary tables but also when the CONNECTION_ID was used.

To fix the problem, we created a new variable to keep track of updates
to temporary tables.
2010-04-26 10:02:29 +01:00
Ramil Kalimullin
4a1a64ec53 Fix for bug#50946: fast index creation still seems to copy the table
Problem: ALTER TABLE ADD INDEX may lead to table copying if there's
numeric field(s) with non-default display width modificator specified.

Fix: compare numeric field's storage lenghts when we decide whether 
they can be considered 'equal' for table alteration purposes.
2010-04-25 15:06:40 +04:00
Vasil Dimov
e54c2e009d Fix typo in comment in innodb_bug38231.test 2010-04-23 17:12:56 +03:00
Calvin Sun
5bad43c1ff mysql-5.1-innodb: add error codes to innodb_bug51920.test
kill of active connection yields different error code
depending on platform.
2010-04-22 14:16:14 -05:00
Staale Smedseng
9ea5576662 Bug#46261 Plugins can be installed with --skip-grant-tables
Previously installed dynamic plugins are explicitly not loaded
on startup with --skip-grant-tables enabled. However, INSTALL
PLUGIN/UNINSTALL PLUGIN commands are allowed, and result in
inconsistent error messages (reporting duplicate plugin or
plugin does not exist).

This patch adds a check for --skip-grant-tables mode, and
returns error ER_OPTION_PREVENTS_STATEMENT to the user when
the above commands are attempted.
2010-04-22 15:52:00 +02:00
Vasil Dimov
0ecec12df3 Merge r3403..3414 from mysql-5.1-innodb:
------------------------------------------------------------
  revno: 3414
  revision-id: marko.makela@oracle.com-20100422093342-jf9ojlzdqsdebohn
  parent: marko.makela@oracle.com-20100421185359-8qaxoa2yyrpzwdd7
  committer: Marko M?kel? <marko.makela@oracle.com>
  branch nick: 5.1-innodb
  timestamp: Thu 2010-04-22 12:33:42 +0300
  message:
    Correct the definition of DICT_SYS_INDEXES_NAME_FIELD.
    When row_merge_drop_temp_indexes() was reworked to drop the indexes
    via the data dictionary cache, the code was broken because it would
    read the index name from the wrong field.
  modified:
    storage/innodb_plugin/ChangeLog 2425@16c675df-0fcb-4bc9-8058-dcc011a37293:branches%2Fzip%2FChangeLog
    storage/innodb_plugin/dict/dict0boot.c 2@16c675df-0fcb-4bc9-8058-dcc011a37293:trunk%2Fdict%2Fdict0boot.c
    storage/innodb_plugin/include/dict0boot.h 2@16c675df-0fcb-4bc9-8058-dcc011a37293:trunk%2Finclude%2Fdict0boot.h
  ------------------------------------------------------------
  revno: 3413
  revision-id: marko.makela@oracle.com-20100421185359-8qaxoa2yyrpzwdd7
  parent: marko.makela@oracle.com-20100421102723-0i80uezbyu0ekj5d
  committer: Marko M?kel? <marko.makela@oracle.com>
  branch nick: 5.1-innodb
  timestamp: Wed 2010-04-21 21:53:59 +0300
  message:
    btr_page_split_and_insert(): Avoid an infinite loop. (Bug #52964)
    
    btr_page_tuple_smaller(): New function, refactored from
    btr_page_split_and_insert().
    
    btr_page_get_split_rec(): Renamed from btr_page_get_sure_split_rec().
    Note that a NULL return may mean that the tuple is to be inserted into
    either the lower or upper page, to be determined by btr_page_tuple_smaller().
    
    btr_page_split_and_insert(): When btr_page_get_split_rec() returns NULL,
    invoke btr_page_tuple_smaller() to determine which half-page the tuple
    belongs to.
    
    Reviewed by Sunny Bains
  modified:
    storage/innodb_plugin/ChangeLog 2425@16c675df-0fcb-4bc9-8058-dcc011a37293:branches%2Fzip%2FChangeLog
    storage/innodb_plugin/btr/btr0btr.c 2@16c675df-0fcb-4bc9-8058-dcc011a37293:trunk%2Fbtr%2Fbtr0btr.c
  ------------------------------------------------------------
  revno: 3412
  revision-id: marko.makela@oracle.com-20100421102723-0i80uezbyu0ekj5d
  parent: marko.makela@oracle.com-20100421100029-mji6lmdgvuqh96qq
  committer: Marko M?kel? <marko.makela@oracle.com>
  branch nick: 5.1-innodb
  timestamp: Wed 2010-04-21 13:27:23 +0300
  message:
    dict_create_index_step(): Be strict about DYNAMIC and COMPRESSED tables.
    Bug #50495 is about REDUNDANT and COMPACT tables, after all.
  modified:
    mysql-test/suite/innodb_plugin/r/innodb-zip.result 2252@16c675df-0fcb-4bc9-8058-dcc011a37293:branches%2Fzip%2Fmysql-test%2Finnodb-zip.result
    mysql-test/suite/innodb_plugin/t/innodb-zip.test 2252@16c675df-0fcb-4bc9-8058-dcc011a37293:branches%2Fzip%2Fmysql-test%2Finnodb-zip.test
    storage/innodb_plugin/ChangeLog 2425@16c675df-0fcb-4bc9-8058-dcc011a37293:branches%2Fzip%2FChangeLog
    storage/innodb_plugin/dict/dict0crea.c 2@16c675df-0fcb-4bc9-8058-dcc011a37293:trunk%2Fdict%2Fdict0crea.c
  ------------------------------------------------------------
  revno: 3411
  revision-id: marko.makela@oracle.com-20100421100029-mji6lmdgvuqh96qq
  parent: marko.makela@oracle.com-20100421095033-0acvzxb8um8cms0a
  committer: Marko M?kel? <marko.makela@oracle.com>
  branch nick: 5.1-innodb
  timestamp: Wed 2010-04-21 13:00:29 +0300
  message:
    ha_innobase::add_index(): Only check for duplicate indexes
    when the data dictionary is locked.
    This fixes a UNIV_DEBUG assertion failure in innodb-index.test.
  modified:
    storage/innodb_plugin/handler/handler0alter.cc 1845@16c675df-0fcb-4bc9-8058-dcc011a37293:branches%2Fzip%2Fhandler%2Fhandler0alter.cc
  ------------------------------------------------------------
  revno: 3410
  revision-id: marko.makela@oracle.com-20100421095033-0acvzxb8um8cms0a
  parent: marko.makela@oracle.com-20100421094032-ir4glqk46qvg2ywn
  committer: Marko M?kel? <marko.makela@oracle.com>
  branch nick: 5.1-innodb
  timestamp: Wed 2010-04-21 12:50:33 +0300
  message:
    dtuple_convert_big_rec(): Store locally any fields whose maximum length
    is less than 256 bytes. (Bug #52745)
    Add related comments and debug assertions to the "offsets"
    functions in rem0rec.c.
    Approved by Sunny Bains
  modified:
    storage/innodb_plugin/ChangeLog 2425@16c675df-0fcb-4bc9-8058-dcc011a37293:branches%2Fzip%2FChangeLog
    storage/innodb_plugin/data/data0data.c 2@16c675df-0fcb-4bc9-8058-dcc011a37293:trunk%2Fdata%2Fdata0data.c
    storage/innodb_plugin/rem/rem0rec.c 2@16c675df-0fcb-4bc9-8058-dcc011a37293:trunk%2Frem%2Frem0rec.c
  ------------------------------------------------------------
  revno: 3409
  revision-id: marko.makela@oracle.com-20100421094032-ir4glqk46qvg2ywn
  parent: marko.makela@oracle.com-20100421091611-uu46iygmv5sizjru
  committer: Marko M?kel? <marko.makela@oracle.com>
  branch nick: 5.1-innodb
  timestamp: Wed 2010-04-21 12:40:32 +0300
  message:
    Adjust tests for the Bug #50495 fix.
  modified:
    mysql-test/suite/innodb_plugin/r/innodb-zip.result 2252@16c675df-0fcb-4bc9-8058-dcc011a37293:branches%2Fzip%2Fmysql-test%2Finnodb-zip.result
    mysql-test/suite/innodb_plugin/t/innodb-zip.test 2252@16c675df-0fcb-4bc9-8058-dcc011a37293:branches%2Fzip%2Fmysql-test%2Finnodb-zip.test
    mysql-test/suite/innodb_plugin/t/innodb_bug36169.test 2418@16c675df-0fcb-4bc9-8058-dcc011a37293:branches%2Fzip%2Fmysql-test%2Finnodb_bug36169.test
  ------------------------------------------------------------
  revno: 3408
  revision-id: marko.makela@oracle.com-20100421091611-uu46iygmv5sizjru
  parent: marko.makela@oracle.com-20100421063916-h3gwjea7jzjilyww
  committer: Marko M?kel? <marko.makela@oracle.com>
  branch nick: 5.1-innodb
  timestamp: Wed 2010-04-21 12:16:11 +0300
  message:
    rec_convert_dtuple_to_rec(): Correct the debug check.
    The "extern" accessor functions return zero or nonzero, not 0 or 1.
  modified:
    storage/innodb_plugin/rem/rem0rec.c 2@16c675df-0fcb-4bc9-8058-dcc011a37293:trunk%2Frem%2Frem0rec.c
  ------------------------------------------------------------
  revno: 3407
  revision-id: marko.makela@oracle.com-20100421063916-h3gwjea7jzjilyww
  parent: marko.makela@oracle.com-20100420201550-cax1xywvlcdshgfg
  committer: Marko M?kel? <marko.makela@oracle.com>
  branch nick: 5.1-innodb
  timestamp: Wed 2010-04-21 09:39:16 +0300
  message:
    rec_convert_dtuple_to_rec(): Add a debug check.
  modified:
    storage/innodb_plugin/rem/rem0rec.c 2@16c675df-0fcb-4bc9-8058-dcc011a37293:trunk%2Frem%2Frem0rec.c
  ------------------------------------------------------------
  revno: 3406
  revision-id: marko.makela@oracle.com-20100420201550-cax1xywvlcdshgfg
  parent: marko.makela@oracle.com-20100420114222-diq7h2hiom9ww6me
  committer: Marko Makela <marko.makela@oracle.com>
  branch nick: 5.1-innodb
  timestamp: Tue 2010-04-20 23:15:50 +0300
  message:
    btr_cur_optimistic_insert(): Remove unused variable "heap".
  modified:
    storage/innodb_plugin/btr/btr0cur.c 2@16c675df-0fcb-4bc9-8058-dcc011a37293:trunk%2Fbtr%2Fbtr0cur.c
  ------------------------------------------------------------
  revno: 3405
  revision-id: marko.makela@oracle.com-20100420114222-diq7h2hiom9ww6me
  parent: marko.makela@oracle.com-20100420082908-tpako8jd4imkh1xb
  committer: Marko Makela <marko.makela@oracle.com>
  branch nick: 5.1-innodb
  timestamp: Tue 2010-04-20 14:42:22 +0300
  message:
    dict_create_index_step(): Invoke dict_index_add_to_cache()
    in strict mode only if innodb_strict_mode is set. (Bug #50495)
    
    trx_is_strict(): New function, for checking innodb_strict_mode.
  modified:
    storage/innodb_plugin/ChangeLog 2425@16c675df-0fcb-4bc9-8058-dcc011a37293:branches%2Fzip%2FChangeLog
    storage/innodb_plugin/dict/dict0crea.c 2@16c675df-0fcb-4bc9-8058-dcc011a37293:trunk%2Fdict%2Fdict0crea.c
    storage/innodb_plugin/handler/ha_innodb.cc 2@16c675df-0fcb-4bc9-8058-dcc011a37293:trunk%2Fhandler%2Fha_innodb.cc
    storage/innodb_plugin/include/trx0trx.h 2@16c675df-0fcb-4bc9-8058-dcc011a37293:trunk%2Finclude%2Ftrx0trx.h
  ------------------------------------------------------------
  revno: 3404
  revision-id: marko.makela@oracle.com-20100420082908-tpako8jd4imkh1xb
  parent: marko.makela@oracle.com-20100419103603-u5pz4qc6hfhx4nua
  committer: Marko M?kel? <marko.makela@oracle.com>
  branch nick: 5.1-innodb
  timestamp: Tue 2010-04-20 11:29:08 +0300
  message:
    Implement UNIV_BTR_AVOID_COPY, an optimization of page splits.
  modified:
    storage/innodb_plugin/ChangeLog 2425@16c675df-0fcb-4bc9-8058-dcc011a37293:branches%2Fzip%2FChangeLog
    storage/innodb_plugin/btr/btr0btr.c 2@16c675df-0fcb-4bc9-8058-dcc011a37293:trunk%2Fbtr%2Fbtr0btr.c
    storage/innodb_plugin/include/univ.i 2@16c675df-0fcb-4bc9-8058-dcc011a37293:trunk%2Finclude%2Funiv.i
  ------------------------------------------------------------
  revno: 3403
  revision-id: marko.makela@oracle.com-20100419103603-u5pz4qc6hfhx4nua
  parent: marko.makela@oracle.com-20100419094405-fd3xwadullishv07
  committer: Marko =?ISO-8859-1?Q?M=E4kel=E4?= <marko.makela@oracle.com>
  branch nick: 5.1-innodb
  timestamp: Mon 2010-04-19 13:36:03 +0300
  message:
    Enable UNIV_DEBUG_VALGRIND when HAVE_purify is set.
  modified:
    storage/innobase/include/univ.i 2@cee13dc7-1704-0410-992b-c9b4543f1246:trunk%2Finclude%2Funiv.i
    storage/innodb_plugin/include/univ.i 2@16c675df-0fcb-4bc9-8058-dcc011a37293:trunk%2Finclude%2Funiv.i
2010-04-22 14:24:42 +03:00
Mattias Jonsson
2faf4ddfd4 Bug#52815: LIST COLUMNS doesn't insert rows in correct
partition if muliple columns used

Problem was that range scanning through the sorted array of
the column list values did not use a correct index calculation.

Fixed by also taking the number of columns in the calculation.
2010-04-21 15:32:27 -07:00
Alfranio Correia
2e99b0bef3 BUG#51894 Replication failure with SBR on DROP TEMPORARY TABLE inside a
transaction
BUG#52616 Temp table prevents switch binlog format from STATEMENT to ROW

Post-merge fixes.
2010-04-21 14:28:00 +01:00
Daniel Fischer
50edf454b1 Merge 2010-04-21 14:58:09 +02:00
Luis Soares
ddb5d63346 BUG#52868: Wrong handling of NULL value during update, replication out
of sync

In RBR, sometimes the table->s->last_null_bit_pos can be zero. This
has impact at the slave when it compares records fetched from the
storage engine against records in the binary log event. If
last_null_bit_pos is zero the slave, while comparing in
log_event.cc:record_compare function, would set all bits in the last
null_byte to 1 (assumed all 8 were unused) . Thence it would loose the
ability to distinguish records that were similar in contents except
for the fact that some field was null in one record, but not in the
other. Ultimately this would cause wrong matches, and in the specific
case depicted in the bug report the same record would be updated
twice, resulting in a lost update.

Additionally, in the record_compare function the slave was setting the
X bit unconditionally. There are cases that the X bit does not exist
in the record header. This could also lead to wrong matches between
records.

We fix both by conditionally resetting the bits: (i) unused null_bits
are set if last_null_bit_pos > 0; (ii) X bit is set if
HA_OPTION_PACK_RECORD is in use.
2010-04-21 13:47:55 +01:00
Marko Mäkelä
c129f738a6 dict_create_index_step(): Be strict about DYNAMIC and COMPRESSED tables.
Bug #50495 is about REDUNDANT and COMPACT tables, after all.
2010-04-21 13:27:23 +03:00
Marko Mäkelä
74422d6164 Adjust tests for the Bug #50495 fix. 2010-04-21 12:40:32 +03:00
Jon Olav Hauglid
da1fbb375e merge from mysql-trunk-bugfixing 2010-04-21 08:50:58 +02:00
Kristofer Pettersson
9d63e36ca7 Bug#50373 --secure-file-priv=""
Correcting a patch misstake. The converted file path is placed in 'buff' not in opt_secure_file_priv.
2010-04-20 16:17:34 +02:00
Vasil Dimov
63d38a4815 Adjust the result for the mysql-test sys_vars.all_vars after the
addition of a new config variable.
2010-04-20 15:29:06 +03:00
Alfranio Correia
9ba731c299 BUG#51894 Replication failure with SBR on DROP TEMPORARY TABLE inside a
transaction
BUG#52616 Temp table prevents switch binlog format from STATEMENT to ROW

Before the WL#2687 and BUG#46364, every non-transactional change that happened
after a transactional change was written to trx-cache and flushed upon
committing the transaction. WL#2687 and BUG#46364 changed this behavior and
non-transactional changes are now written to the binary log upon committing
the statement.

A binary log event is identified as transactional or non-transactional through
a flag in the Log_event which is set taking into account the underlie storage
engine on what it is stems from. In the current bug, this flag was not being
set properly when the DROP TEMPORARY TABLE was executed.

However, while fixing this bug we figured out that changes to temporary tables
should be always written to the trx-cache if there is an on-going transaction.
Otherwise, binlog events in the reversed order would be produced.

Regarding concurrency, keeping changes to temporary tables in the trx-cache is
also safe as temporary tables are only visible to the owner connection.

In this patch, we classify the following statements as unsafe:
   1 - INSERT INTO t_myisam SELECT * FROM t_myisam_temp

   2 - INSERT INTO t_myisam_temp SELECT * FROM t_myisam

   3 - CREATE TEMPORARY TABLE t_myisam_temp SELECT * FROM t_myisam

On the other hand, the following statements are classified as safe:

   1 - INSERT INTO t_innodb SELECT * FROM t_myisam_temp

   2 - INSERT INTO t_myisam_temp SELECT * FROM t_innodb

The patch also guarantees that transactions that have a DROP TEMPORARY are
always written to the binary log regardless of the mode and the outcome:
commit or rollback. In particular, the DROP TEMPORARY is extended with the
IF EXISTS clause when the current statement logging format is set to row.

Finally, the patch allows to switch from STATEMENT to MIXED/ROW when there
are temporary tables but the contrary is not possible.
2010-04-20 10:10:43 +01:00
Jon Olav Hauglid
f2587df7ba merge from mysql-trunk-bugfixing 2010-04-20 10:51:50 +02:00
Alexey Kopytov
5575d724cf Added a test for skip_name_resolve to the sys_vars suite. 2010-04-20 11:32:39 +04:00
Vasil Dimov
4e87ba75b8 Refactor the innodb_bug38231 mysql-test to conform with the
newly introduced metadata locks.

Previously the behavior was deterministic and if several LOCKs were
waiting the first one of them was released by UNLOCK (in chronological
order).

Now (with MDLs) the behavior is undefined and since we do not know in
what order to --reap the connections we simply disconnect them without
reaping.
2010-04-19 19:58:12 +03:00
Jon Olav Hauglid
b12af816d5 Additional test coverage for
Bug#30977 Concurrent statement using stored function and
          DROP FUNCTION breaks SBR
Bug#48246 assert in close_thread_table
2010-04-19 15:35:13 +02:00
Alexey Kopytov
ee09f97211 Manual merge of mysql-5.1-bugteam to
mysql-trunk-merge.

Conflicts:

Text conflict in sql/sql_priv.h
2010-04-19 16:09:44 +04:00
Vasil Dimov
210510f472 Fix typo in comment. 2010-04-19 14:27:41 +03:00
Vasil Dimov
15a5839c25 Update innodb.result which I forgot to do in the previous revision. 2010-04-19 14:10:43 +03:00
Vasil Dimov
0f0e5a9106 Re-enable tests that have been fixed and update the innodb test to the
latest behavior after it has been disabled for a long time.
2010-04-19 14:07:35 +03:00
Alfranio Correia
de3e233b8a auto-merge mysql-trunk-bugfixing (local) --> mysql-trunk-bugfixing 2010-04-19 12:05:07 +01:00
Marko =?ISO-8859-1?Q?M=E4kel=E4?=
5c6d38d781 Enable innodb_plugin tests based on the presence of lib_innodb_plugin. 2010-04-19 12:44:05 +03:00
Marko =?ISO-8859-1?Q?M=E4kel=E4?=
59137ec354 Do not require innodb for running innodb_plugin tests. 2010-04-19 12:21:13 +03:00
Alexey Kopytov
3f0f8048d9 Automerge. 2010-04-19 12:27:46 +04:00
Vasil Dimov
7670eb5241 Move InnoDB mysql-tests to the innodb suite. 2010-04-16 19:19:07 +03:00
Kristofer Pettersson
f394543181 Automerge 2010-04-16 16:56:16 +02:00
Kristofer Pettersson
2a37d531be Bug#50373 --secure-file-priv=""
The server variable opt_secure_file_priv wasn't
normalized properly and caused the operations
LOAD DATA INFILE .. INTO TABLE ..
and
SELECT load_file(..)
to do different interpretations of the 
--secure-file-priv option.

The patch moves code to the server initialization
routines so that the path always is normalized
once and only once.

It was also intended that setting the option
to an empty string should be equal to 
lifting all previously set restrictions. This
is also fixed by this patch.
2010-04-16 16:10:47 +02:00
Sergey Glukhov
0d242648b5 Bug#52124 memory leaks like a sieve in datetime, timestamp, time, date fields + warnings
Arg_comparator initializes 'comparators' array in case of
ROW comparison and does not free this array on destruction.
It leads to memory leaks.
The fix:
-added Arg_comparator::cleanup() method which frees
 'comparators' array.
-added Item_bool_func2::cleanup() method which calls 
 Arg_comparator::cleanup() method
2010-04-16 16:42:34 +05:00
Georgi Kodinov
51880686ad Bug #52629: memory leak from sys_var_thd_dbug in binlog.binlog_write_error
When re-setting (SET GLOBAL debug='') the GLOBAL debug settings the 
server was not freeing the data elements from the top (initial) frame 
before setting them to 0 without freeing the underlying memory. As these 
are global settings there's a chance that something is there already.
Fixed by :
1. making sure the allocated data are cleaned up before re-setting them
while parsing a debug string
2. making sure the stuff allocated in the global settings is freed on 
shutdown.
2010-04-16 10:30:53 +03:00
Luis Soares
b5c258a829 automerge: merged bug clone into latest mysql-5.1-bugteam. 2010-04-16 01:59:21 +01:00
Jon Olav Hauglid
1a1a96e7af Bug #47459 Assertion in Diagnostics_area::set_eof_status on OPTIMIZE TABLE
This assertion could be triggered during execution of OPTIMIZE TABLE for
InnoDB tables. As part of optimize for InnoDB tables, the table is recreated
and then opened again. If the reopen failed for any reason, the assertion
would be triggered. This could for example be caused by a concurrent DROP
TABLE executed by a different connection. The reason for the assertion was
that any failures during reopening were ignored.

This patch fixes the problem by making sure that the result of reopening the
table is checked and that any error messages are sent to the client.

Test case added to innodb_mysql_sync.test.
2010-04-15 18:53:57 +02:00
Georgi Kodinov
a8ae3cd6e9 Bug #52711: Segfault when doing EXPLAIN SELECT with
union...order by (select... where...)

The problem is mysql is trying to materialize and 
cache the scalar sub-queries at JOIN::optimize
even for EXPLAIN where the number of columns is 
totally different from what's expected.
Fixed by not executing the scalar subqueries 
for EXPLAIN.
2010-04-15 17:04:24 +03:00
Jon Olav Hauglid
b6f0c3a157 Bug #51391 Deadlock involving events during rqg_info_schema test
This was a deadlock between CREATE/ALTER/DROP EVENT and a query
accessing both the mysql.event table and I_S.GLOBAL_VARIABLES.

The root of the problem was that the LOCK_event_metadata mutex was
used to both protect the "event_scheduler" global system variable
and the internal event data structures used by CREATE/ALTER/DROP EVENT.

The deadlock would occur if CREATE/ALTER/DROP EVENT held
LOCK_event_metadata while trying to open the mysql.event table,
at the same time as the query had mysql.event open, trying to
lock LOCK_event_metadata to access "event_scheduler".

This bug was fixed in the scope of Bug#51160 by using only
LOCK_global_system_variables to protect "event_scheduler".
This makes it so that the query above won't lock LOCK_event_metadata,
thereby preventing this deadlock from occuring.

This patch contains no code changes.
Test case added to lock_sync.test.
2010-04-15 14:14:28 +02:00
Alexander Nozdrin
1c4e27a8f6 Post-fix for Bug#52444: update test result. 2010-04-15 12:12:03 +04:00
Jon Olav Hauglid
e232fbe067 Bug #51327 MyISAM table is automatically repaired on ALTER
even if myisam-recover is OFF

The problem was that a corrupted MyISAM table was auto repaired
even if the myisam_recover_options server variable (or the 
myisam_recover option) was set to OFF.

The reason was that the auto_repair() function, which is supposed
to say if auto repair is to be used, did not use the server variable
setting correctly. This bug was a regression introduced by WL#4738.

This patch fixes the problem by making sure auto_repair() returns
FALSE if myisam_recover_options is set to OFF.

Test case added to myisam.test.
2010-04-15 09:16:29 +02:00
Vasil Dimov
5a8749546a Replay r2875.107.114 on top of the innodb-lock mysql test
------------------------------------------------------------
  revno: 2875.107.114
  revision-id: dlenev@mysql.com-20100201114306-cve0yq5akrxjoei0
  parent: dlenev@mysql.com-20100121204303-sr6d1436mac7x6vz
  committer: Dmitry Lenev <dlenev@mysql.com>
  branch nick: mysql-next-4284-nl-push
  timestamp: Mon 2010-02-01 14:43:06 +0300
  message:
    Implement new type-of-operation-aware metadata locks.
    Add a wait-for graph based deadlock detector to the
    MDL subsystem.
    
    Fixes bug #46272 "MySQL 5.4.4, new MDL: unnecessary deadlock" and
    bug #37346 "innodb does not detect deadlock between update and
    alter table".
    
    The first bug manifested itself as an unwarranted abort of a
    transaction with ER_LOCK_DEADLOCK error by a concurrent ALTER
    statement, when this transaction tried to repeat use of a
    table, which it has already used in a similar fashion before
    ALTER started.
    
    The second bug showed up as a deadlock between table-level
    locks and InnoDB row locks, which was "detected" only after
    innodb_lock_wait_timeout timeout.
    
    A transaction would start using the table and modify a few
    rows.
    Then ALTER TABLE would come in, and start copying rows
    into a temporary table. Eventually it would stumble on
    the modified records and get blocked on a row lock.
    The first transaction would try to do more updates, and get
    blocked on thr_lock.c lock.
    This situation of circular wait would only get resolved
    by a timeout.
    
    Both these bugs stemmed from inadequate solutions to the
    problem of deadlocks occurring between different
    locking subsystems.
    
    In the first case we tried to avoid deadlocks between metadata
    locking and table-level locking subsystems, when upgrading shared
    metadata lock to exclusive one.
    Transactions holding the shared lock on the table and waiting for
    some table-level lock used to be aborted too aggressively.
    
    We also allowed ALTER TABLE to start in presence of transactions
    that modify the subject table. ALTER TABLE acquires
    TL_WRITE_ALLOW_READ lock at start, and that block all writes
    against the table (naturally, we don't want any writes to be lost
    when switching the old and the new table). TL_WRITE_ALLOW_READ
    lock, in turn, would block the started transaction on thr_lock.c
    lock, should they do more updates. This, again, lead to the need
    to abort such transactions.
    
    The second bug occurred simply because we didn't have any
    mechanism to detect deadlocks between the table-level locks
    in thr_lock.c and row-level locks in InnoDB, other than
    innodb_lock_wait_timeout.
    
    This patch solves both these problems by moving lock conflicts
    which are causing these deadlocks into the metadata locking
    subsystem, thus making it possible to avoid or detect such
    deadlocks inside MDL.
    
    To do this we introduce new type-of-operation-aware metadata
    locks, which allow MDL subsystem to know not only the fact that
    transaction has used or is going to use some object but also what
    kind of operation it has carried out or going to carry out on the
    object.
    
    This, along with the addition of a special kind of upgradable
    metadata lock, allows ALTER TABLE to wait until all
    transactions which has updated the table to go away.
    This solves the second issue.
    Another special type of upgradable metadata lock is acquired
    by LOCK TABLE WRITE. This second lock type allows to solve the
    first issue, since abortion of table-level locks in event of
    DDL under LOCK TABLES becomes also unnecessary.
    
    Below follows the list of incompatible changes introduced by
    this patch:
    
    - From now on, ALTER TABLE and CREATE/DROP TRIGGER SQL (i.e. those
      statements that acquire TL_WRITE_ALLOW_READ lock)
      wait for all transactions which has *updated* the table to
      complete.
    
    - From now on, LOCK TABLES ... WRITE, REPAIR/OPTIMIZE TABLE
      (i.e. all statements which acquire TL_WRITE table-level lock) wait
      for all transaction which *updated or read* from the table
      to complete.
      As a consequence, innodb_table_locks=0 option no longer applies
      to LOCK TABLES ... WRITE.
    
    - DROP DATABASE, DROP TABLE, RENAME TABLE no longer abort
      statements or transactions which use tables being dropped or
      renamed, and instead wait for these transactions to complete.
    
    - Since LOCK TABLES WRITE now takes a special metadata lock,
      not compatible with with reads or writes against the subject table
      and transaction-wide, thr_lock.c deadlock avoidance algorithm
      that used to ensure absence of deadlocks between LOCK TABLES
      WRITE and other statements is no longer sufficient, even for
      MyISAM. The wait-for graph based deadlock detector of MDL
      subsystem may sometimes be necessary and is involved. This may
      lead to ER_LOCK_DEADLOCK error produced for multi-statement
      transactions even if these only use MyISAM:
    
      session 1:         session 2:
      begin;
    
      update t1 ...      lock table t2 write, t1 write;
                         -- gets a lock on t2, blocks on t1
    
      update t2 ...
      (ER_LOCK_DEADLOCK)
    
    - Finally,  support of LOW_PRIORITY option for LOCK TABLES ... WRITE
      was abandoned.
      LOCK TABLE ... LOW_PRIORITY WRITE from now on has the same
      priority as the usual LOCK TABLE ... WRITE.
      SELECT HIGH PRIORITY no longer trumps LOCK TABLE ... WRITE  in
      the wait queue.
    
    - We do not take upgradable metadata locks on implicitly
      locked tables. So if one has, say, a view v1 that uses
      table t1, and issues:
      LOCK TABLE v1 WRITE;
      FLUSH TABLE t1; -- (or just 'FLUSH TABLES'),
      an error is produced.
      In order to be able to perform DDL on a table under LOCK TABLES,
      the table must be locked explicitly in the LOCK TABLES list.
  
   @ mysql-test/include/handler.inc
      Adjusted test case to trigger an execution path on which bug 41110
      "crash with handler command when used concurrently with alter
      table" and bug 41112 "crash in mysql_ha_close_table/get_lock_data
      with alter table" were originally discovered. Left old test case
      which no longer triggers this execution path for the sake of
      coverage.
      Added test coverage for HANDLER SQL statements and type-aware
      metadata locks.
      Added a test for the global shared lock and HANDLER SQL.
      Updated tests to take into account that the old simple deadlock
      detection heuristics was replaced with a graph-based deadlock
      detector.
  
   @ mysql-test/r/debug_sync.result
      Updated results (see debug_sync.test).
  
   @ mysql-test/r/handler_innodb.result
      Updated results (see handler.inc test).
  
   @ mysql-test/r/handler_myisam.result
      Updated results (see handler.inc test).
  
   @ mysql-test/r/innodb-lock.result
      Updated results (see innodb-lock.test).
  
   @ mysql-test/r/innodb_mysql_lock.result
      Updated results (see innodb_mysql_lock.test).
  
   @ mysql-test/r/lock.result
      Updated results (see lock.test).
  
   @ mysql-test/r/lock_multi.result
      Updated results (see lock_multi.test).
  
   @ mysql-test/r/lock_sync.result
      Updated results (see lock_sync.test).
  
   @ mysql-test/r/mdl_sync.result
      Updated results (see mdl_sync.test).
  
   @ mysql-test/r/sp-threads.result
      SHOW PROCESSLIST output has changed due to the fact that waiting
      for LOCK TABLES WRITE now happens within metadata locking
      subsystem.
  
   @ mysql-test/r/truncate_coverage.result
      Updated results (see truncate_coverage.test).
  
   @ mysql-test/suite/funcs_1/datadict/processlist_val.inc
      SELECT FROM I_S.PROCESSLIST output has changed due to fact that
      waiting for LOCK TABLES WRITE now happens within metadata locking
      subsystem.
  
   @ mysql-test/suite/funcs_1/r/processlist_val_no_prot.result
      SELECT FROM I_S.PROCESSLIST output has changed due to fact that
      waiting for LOCK TABLES WRITE now happens within metadata locking
      subsystem.
  
   @ mysql-test/suite/rpl/t/rpl_sp.test
      Updated to a new SHOW PROCESSLIST state name.
  
   @ mysql-test/t/debug_sync.test
      Use LOCK TABLES READ instead of LOCK TABLES WRITE as the latter
      no longer allows to trigger execution path involving waiting on
      thr_lock.c lock and therefore reaching debug sync-point covered
      by this test.
  
   @ mysql-test/t/innodb-lock.test
      Adjusted test case to the fact that innodb_table_locks=0 option is
      no longer supported, since LOCK TABLES WRITE handles all its
      conflicts within MDL subsystem.
  
   @ mysql-test/t/innodb_mysql_lock.test
      Added test for bug #37346 "innodb does not detect deadlock between
      update and alter table".
  
   @ mysql-test/t/lock.test
      Added test coverage which checks the fact that we no longer support
      DDL under LOCK TABLES on tables which were locked implicitly.
      Adjusted existing test cases accordingly.
  
   @ mysql-test/t/lock_multi.test
      Added test for bug #46272 "MySQL 5.4.4, new MDL: unnecessary
      deadlock".  Adjusted other test cases to take into account the
      fact that waiting for LOCK TABLES ... WRITE now happens within MDL
      subsystem.
  
   @ mysql-test/t/lock_sync.test
      Since LOCK TABLES ... WRITE now takes SNRW metadata lock for
      tables locked explicitly we have to implicitly lock InnoDB tables
      (through view) to trigger the table-level lock conflict between
      TL_WRITE and TL_WRITE_ALLOW_WRITE.
  
   @ mysql-test/t/mdl_sync.test
      Added basic test coverage for type-of-operation-aware metadata
      locks. Also covered with tests some use cases involving HANDLER
      statements in which a deadlock could arise.
      Adjusted existing tests to take type-of-operation-aware MDL into
      account.
  
   @ mysql-test/t/multi_update.test
      Update to a new SHOW PROCESSLIST state name.
  
   @ mysql-test/t/truncate_coverage.test
      Adjusted test case after making LOCK TABLES WRITE to wait until
      transactions that use the table to be locked are completed.
      Updated to the changed name of DEBUG_SYNC point.
  
   @ sql/handler.cc
      Global read lock functionality has been
      moved into a class.
  
   @ sql/lock.cc
      Global read lock functionality has been
      moved into a class.
      Updated code to use the new MDL API.
  
   @ sql/mdl.cc
      Introduced new type-of-operation aware metadata locks.
      To do this:
      - Changed MDL_lock to use one list for waiting requests and one
        list for granted requests. For each list, added a bitmap
        that holds information what lock types a list contains.
        Added a helper class MDL_lock::List to manipulate with granted
        and waited lists while keeping the bitmaps in sync
        with list contents.
      - Changed lock-compatibility functions to use bitmaps that
        define compatibility.
      - Introduced a graph based deadlock detector inspired by
        waiting_threads.c from Maria implementation.
      - Now that we have a deadlock detector, and no longer have
        a global lock to protect individual lock objects, but rather
        use an rw lock per object, removed redundant code for upgrade,
        and the global read lock. Changed the MDL API to
        no longer require the caller to acquire the global
        intention exclusive lock by means of a separate method.
        Removed a few more methods that became redundant.
      - Removed deadlock detection heuristic, it has been made
        obsolete by the deadlock detector.
      - With operation-type-aware metadata locks, MDL subsystem has
        become aware of potential conflicts between DDL and open
        transactions. This made it possible to remove calls to
        mysql_abort_transactions_with_shared_lock() from acquisition
        paths for exclusive lock and lock upgrade. Now we can simply
        wait for these transactions to complete without fear of
        deadlock. Function mysql_lock_abort() has also become
        unnecessary for all conflicting cases except when a DDL
        conflicts with a connection that has an open HANDLER.
  
   @ sql/mdl.h
      Introduced new type-of-operation aware metadata locks.
      Introduced a graph based deadlock detector and supporting
      methods.
      Added comments.
      God rid of redundant API calls.
      Renamed m_lt_or_ha_sentinel to m_trans_sentinel,
      since now it guards the global read lock as well as
      LOCK TABLES and HANDLER locks.
  
   @ sql/mysql_priv.h
      Moved the global read lock functionality into a
      class.
      Added MYSQL_OPEN_FORCE_SHARED_MDL flag which forces
      open_tables() to take MDL_SHARED on tables instead of
      metadata locks specified in the parser. We use this to
      allow PREPARE run concurrently in presence of
      LOCK TABLES ... WRITE.
      Added signature for find_table_for_mdl_ugprade().
  
   @ sql/set_var.cc
      Global read lock functionality has been
      moved into a class.
  
   @ sql/sp_head.cc
      When creating TABLE_LIST elements for prelocking or
      system tables set the type of request for metadata
      lock according to the operation that will be performed
      on the table.
  
   @ sql/sql_base.cc
      - Updated code to use the new MDL API.
      - In order to avoid locks starvation we take upgradable
        locks all at once. As result implicitly locked tables no
        longer get an upgradable lock. Consequently DDL and FLUSH
        TABLES for such tables is prohibited.
        find_write_locked_table() was replaced by
        find_table_for_mdl_upgrade() function.
        open_table() was adjusted to return TABLE instance with
        upgradable ticket when necessary.
      - We no longer wait for all locks on OT_WAIT back off
        action -- only on the lock that caused the wait
        conflict. Moreover, now we distinguish cases when we
        have to wait due to conflict in MDL and old version
        of table in TDC.
      - Upate mysql_notify_threads_having_share_locks()
        to only abort thr_lock.c waits of threads that
        have open HANDLERs, since lock conflicts with only
        these threads now can lead to deadlocks not detectable
        by the MDL deadlock detector.
      - Remove mysql_abort_transactions_with_shared_locks()
        which is no longer needed.
  
   @ sql/sql_class.cc
      Global read lock functionality has been moved into a class.
      Re-arranged code in THD::cleanup() to simplify assert.
  
   @ sql/sql_class.h
      Introduced class to incapsulate global read lock
      functionality.
      Now sentinel in MDL subsystem guards the global read lock
      as well as LOCK TABLES and HANDLER locks. Adjusted code
      accordingly.
  
   @ sql/sql_db.cc
      Global read lock functionality has been moved into a class.
  
   @ sql/sql_delete.cc
      We no longer acquire upgradable metadata locks on tables
      which are locked by LOCK TABLES implicitly. As result
      TRUNCATE TABLE is no longer allowed for such tables.
      Updated code to use the new MDL API.
  
   @ sql/sql_handler.cc
      Inform MDL_context about presence of open HANDLERs.
      Since HANLDERs break MDL protocol by acquiring table-level
      lock while holding only S metadata lock on a table MDL
      subsystem should take special care about such contexts (Now
      this is the only case when mysql_lock_abort() is used).
  
   @ sql/sql_parse.cc
      Global read lock functionality has been moved into a class.
      Do not take upgradable metadata locks when opening tables
      for CREATE TABLE SELECT as it is not necessary and limits
      concurrency.
      When initializing TABLE_LIST objects before adding them
      to the table list set the type of request for metadata lock
      according to the operation that will be performed on the
      table.
      We no longer acquire upgradable metadata locks on tables
      which are locked by LOCK TABLES implicitly. As result FLUSH
      TABLES is no longer allowed for such tables.
  
   @ sql/sql_prepare.cc
      Use MYSQL_OPEN_FORCE_SHARED_MDL flag when opening
      tables during PREPARE. This allows PREPARE to run
      concurrently in presence of LOCK TABLES ... WRITE.
  
   @ sql/sql_rename.cc
      Global read lock functionality has been moved into a class.
  
   @ sql/sql_show.cc
      Updated code to use the new MDL API.
  
   @ sql/sql_table.cc
      Global read lock functionality has been moved into a class.
      We no longer acquire upgradable metadata locks on tables
      which are locked by LOCK TABLES implicitly. As result DROP
      TABLE is no longer allowed for such tables.
      Updated code to use the new MDL API.
  
   @ sql/sql_trigger.cc
      Global read lock functionality has been moved into a class.
      We no longer acquire upgradable metadata locks on tables
      which are locked by LOCK TABLES implicitly. As result
      CREATE/DROP TRIGGER is no longer allowed for such tables.
      Updated code to use the new MDL API.
  
   @ sql/sql_view.cc
      Global read lock functionality has been moved into a class.
      Fixed results of wrong merge that led to misuse of GLR API.
      CREATE VIEW statement is not a commit statement.
  
   @ sql/table.cc
      When resetting TABLE_LIST objects for PS or SP re-execution
      set the type of request for metadata lock according to the
      operation that will be performed on the table. Do the same
      in auxiliary function initializing metadata lock requests
      in a table list.
  
   @ sql/table.h
      When initializing TABLE_LIST objects set the type of request
      for metadata lock according to the operation that will be
      performed on the table.
  
   @ sql/transaction.cc
      Global read lock functionality has been moved into a class.
2010-04-14 22:20:46 +03:00
Vasil Dimov
8516962bfc Disable parts of the innodb-index test that are not prepared for the
metadata locks that were added at the MySQL level as part of the fix for
Bug#45225 Locking: hang if drop table with no timeout
2010-04-14 21:17:50 +03:00
Vasil Dimov
57fb7ed678 Remove "loose" prefix from options from InnoDB mysql-tests. It was
inherited from the InnoDB Plugin and is not required anymore.
2010-04-14 18:59:34 +03:00
Vasil Dimov
501da6811b Update mysql-test innodb_file_format to match the latest behavior
(different error number).
2010-04-14 18:42:17 +03:00
Vasil Dimov
ab297b1402 Update mysql-test innodb-zip to match the latest behavior
(different error number).
2010-04-14 18:40:24 +03:00
Vasil Dimov
681e3dd164 Update mysql-test innodb_bug42101 to match the latest behavior
(different error number).
2010-04-14 18:30:07 +03:00
Vasil Dimov
f229524c21 Update mysql-test innodb-autoinc-44030 to match the latest behavior
of the mysql server - data dictionaries do not go out of sync now.
2010-04-14 18:26:47 +03:00
Vasil Dimov
bf13237447 Update mysql-test innodb_bug42101-nonzero to match the latest behavior
(different error number).
2010-04-14 18:24:33 +03:00
Vasil Dimov
3b4be648f0 Update the sys_vars.innodb_change_buffering_basic mysql-test since the
imported InnoDB provides more values for "innodb_change_buffering".
2010-04-14 15:05:56 +03:00
Vasil Dimov
818b32c4b9 Update the result file for sys_vars.all_vars since the imported
InnoDB provides a few more config variables.
2010-04-14 14:53:08 +03:00
Vasil Dimov
23d91d656d Move InnoDB tests from storage/innobase/mysql-test/ (where they were ignored)
to mysql-test/
2010-04-14 14:14:48 +03:00
Jon Olav Hauglid
d18275c2c2 Bug #52593 SHOW CREATE TABLE is blocked if table is locked
for write by another connection

The problem was that if a table was locked in one connection by
LOCK TABLES ... WRITE, REPAIR TABLE or OPTIMIZE TABLE, SHOW CREATE
TABLE from another connection would be blocked. As SHOW CREATE TABLE
only reads metadata about the table, such blocking is not needed.

The problem was that when SHOW CREATE TABLE tried to get a metadata
lock on the table in order to open it, it used the wrong type of
metadata lock request. It used MDL_SHARED_READ which is used when
the intent is to read both table metadata and table data. Instead
it should have used MDL_SHARED_HIGH_PRIO which signifies an intent
to only read metadata.

This patch fixes the problem by making sure SHOW CREATE TABLE uses
the MDL_SHARED_HIGH_PRIO metadata lock request type when trying to
open the table. The patch also fixes a similar problem with the
mysql_list_fields API call.

Test case added to show_check.test.
2010-04-14 09:40:45 +02:00
Konstantin Osipov
b8d014b8f6 A fix for Bug#11918 "SP does not accept variables in LIMIT clause"
Allow stored procedure variables in LIMIT clause.
Only allow variables of INTEGER types. 
Handle negative values by means of an implicit cast to UNSIGNED 
(similarly to prepared statement placeholders).
Add tests.
Make sure replication works by not doing NAME_CONST substitution
for variables in LIMIT clause.
Add replication tests.
2010-04-14 01:56:19 +04:00
Konstantin Osipov
53fecff1ef Backport of:
ChangeSet@1.2703, 2007-12-07 09:35:28-05:00, cmiller@zippy.cornsilk.net +40 -0
Bug#13174: SHA2 function
Patch contributed from Bill Karwin, paper unnumbered CLA in Seattle

Implement SHA2 functions.

Chad added code to make it work with YaSSL.  Also, he removed the 
(probable) bug of embedded server never using SSL-dependent 
functions.  (libmysqld/Makefile.am didn't read ANY autoconf defs.)

Function specification:
  SHA2( string cleartext, integer hash_length ) 
    -> string hash, or NULL
where hash_length is one of 224, 256, 384, or 512.  If either is 
NULL or a length is unsupported, then the result is NULL.  The 
resulting string is always the length of the hash_length parameter
or is NULL.

Include the canonical hash examples from the NIST in the test
results.
---
Polish and address concerns of reviewers.
2010-04-13 19:04:45 +04:00
oystein.grovlen@sun.com
5af5bb2da6 Bug#51980 mysqld service crashes with a simple COUNT(DISTINCT) query over a view
Problem: Segmentation fault in add_group_and_distinct_keys() when accessing
field of what is assumed to be an Item_field object.

Cause: In case of views, the item added to list by is_indexed_agg_distinct() 
was not of type Item_field, but Item_ref.

Resolution:  Add the real Item_field object, the one referred to by 
Item_ref object, to the list, instead.
2010-04-13 11:38:28 +02:00
Vasil Dimov
73a25e4fa5 Fix path to have_innodb_plugin.inc 2010-04-12 17:26:20 +03:00
Vasil Dimov
668f2a89c3 Remove unused file 2010-04-12 17:23:00 +03:00
Vasil Dimov
02e1075fdf Fix path to innodb-index.inc 2010-04-12 16:58:47 +03:00
Vasil Dimov
ceaca681a6 Remove outdated InnoDB Plugin tests from mysql-test/suite/innodb,
the InnoDB Plugin tests are now in mysql-test/suite/innodb_plugin.

Move InnoDB tests to the innodb suite at mysql-test/suite/innodb.
2010-04-12 14:56:24 +03:00
Alexey Kopytov
54f3f65601 Some post-merge fixes afer a merge from mysql-5.1-bugteam. 2010-04-11 14:42:05 +04:00
Alexey Kopytov
abab51e0db Automerge of mysql-5.1-bugteam to mysql-trunk-merge. 2010-04-11 11:17:42 +04:00
Alexey Kopytov
ab50b8885f Automerge. 2010-04-11 10:33:07 +04:00
Alexander Nozdrin
5513891cc3 Make main.query_cache_debug experimental on Linux due to Bug 52356. 2010-04-10 12:25:57 +04:00
Davi Arnaut
9d59b2705a Backport revision alik@sun.com-20100223131824-comthndat57kx8s5:
Add ignore pattern for valgrind messages.
2010-04-09 14:57:11 -03:00
Vasil Dimov
a633c45592 Convert InnoDB Plugin tests to include have_innodb_plugin.inc.
This also instructs mtr to transparently load the plugin.
2010-04-09 16:38:28 +03:00
Vasil Dimov
02c597e731 Fix mtr warning in innodb-autoinc-44030.test 2010-04-09 16:33:42 +03:00
Vasil Dimov
537b806cc8 Fix a failure of innodb_plugin.innodb-autoinc-44030 now that
MySQL and InnoDB dictionaries do not get out of sync.
2010-04-09 16:29:13 +03:00
Vasil Dimov
edaca4bd50 Fix a mtr warning in innodb_plugin.innodb-autoinc 2010-04-09 16:25:17 +03:00
Vasil Dimov
67b9324860 Merge from innodb-branches-zip 2010-04-09 16:07:41 +03:00
Vasil Dimov
164dedbad0 Move the InnoDB Plugin tests from storage/innodb_plugin/mysql-test/ where
they are ignored to a new test suite "innodb_plugin".

Remove a hack in mtr that was deployed to run the builtin InnoDB tests against
the InnoDB Plugin. Also detect if a test is an 'innodb plugin test' and if so
then transparently replace the builtin InnoDB with the InnoDB Plugin.
2010-04-09 15:56:51 +03:00
Vasil Dimov
91600911d9 Adjust mysql-test/suite/binlog/t/binlog_killed.test after a change
in behavior in InnoDB. The change in behavior was introduced by this
changeset:

  ------------------------------------------------------------
  revno: 3370
  revision-id: vasil.dimov@oracle.com-20100331130613-8ja7n0vh36a80457
  parent: vasil.dimov@oracle.com-20100331130440-l0y517y3mjsjqy4v
  parent: vasil.dimov@oracle.com-20100331113119-2kbgkaz1d426a43c
  committer: Vasil Dimov <vasil.dimov@oracle.com>
  branch nick: mysql-5.1-innodb
  timestamp: Wed 2010-03-31 16:06:13 +0300
  message:
    Merge from innodb-branches-5.1
      ------------------------------------------------------------
      revno: 0.1.819
      revision-id: vasil.dimov@oracle.com-20100331113119-2kbgkaz1d426a43c
      parent: vasil.dimov@oracle.com-20100331064722-9rc3wypzmer7d6jj
      parent: svn-v4:cee13dc7-1704-0410-992b-c9b4543f1246:branches/5.1:6918
      committer: Vasil Dimov <vasil.dimov@oracle.com>
      branch nick: innodb-branches-5.1
      timestamp: Wed 2010-03-31 14:31:19 +0300
      message:
        Merge from SVN
          ------------------------------------------------------------
          revno: 0.2.1
          revision-id: svn-v4:cee13dc7-1704-0410-992b-c9b4543f1246:branches/5.1:6918
          parent: svn-v4:cee13dc7-1704-0410-992b-c9b4543f1246:branches/5.1:6912
          committer: mmakela
          timestamp: Wed 2010-03-31 07:14:51 +0000
          message:
            branches/5.1: Obey KILL during a lock wait (Bug #51920).
  
            srv_suspend_mysql_thread(), srv_lock_timeout_and_monitor_thread():
            Check trx_is_interrupted() in addition to checking the lock wait timeout.
  
            rb://279 approved by Sunny Bains
2010-04-08 19:55:55 +03:00
Omer BarNir
24a9fb555c Correction to the disabled.def file in engines/iuds that got overwritten by
mistake in previous push
2010-04-07 11:28:28 -07:00
Georgi Kodinov
257363e6c4 Bug #52512: Assertion `! is_set()' in Diagnostics_area::set_ok_status
on LOAD DATA

Two problems :
1. LOAD DATA was not checking for SQL errors and was sending an OK
packet even when there were errors reported already. Fixed to check for
SQL errors in addition to the error conditions already detected.
2. There was an over-ambitious assert() on the server to check if the 
protocol is always followed by the client. This can cause crashes on 
debug servers by clients not completing the protocol exchange for some
reason (e.g. --send command in mysqltest). Fixed by keeping the assert
only on client side, since the server always completes the protocol 
exchange.
2010-04-07 18:17:56 +03:00
Vasil Dimov
2bfc788f7f Merge from mysql-5.1 2010-04-07 15:32:51 +03:00
Vasil Dimov
167b68fecb Move everything into a subdirectory xyz/ 2010-04-07 14:18:43 +03:00
Alexey Kopytov
5a274915ec Bug #52165: Assertion failed: file .\dtoa.c, line 465
The failing assertion was written with the assumption that a NULL
string can never be passed to my_strtod(). However, an empty string
may be passed under some circumstances by passing str == NULL and
*end == NULL.

Fixed the assertion to take the above case into account.
2010-04-07 13:59:02 +04:00
Omer BarNir
327d3f3d58 Updates to test files in the 'engines' suite following changes in 5.1.46 2010-04-06 11:06:34 -07:00
Sergey Glukhov
35f6b544c4 Bug#52120 create view cause Assertion failed: 0, file .\item_subselect.cc, line 817
We should disable const subselect item evaluation because
subselect transformation does not happen in view_prepare_mode
and thus val_...() methods can not be called.
2010-04-06 12:26:59 +05:00
Sergey Glukhov
416f32050a Bug#52336 Segfault / crash in 5.1 copy_fields (param=0x9872980) at sql_select.cc:15355
The problem is that we can not use make_cond_for_table().
This function relies on used_tables() condition
which is not set properly for subqueries.
As result subquery is not filtered out.
The fix is to use remove_eq_conds() function instead
of make_cond_for_table() func. 'remove_eq_conds()'
algorithm relies on const_item() value and it allows
to handle subqueries in right way.
2010-04-05 16:10:26 +05:00
Alexey Kopytov
cab4a776d8 Manual merge of mysql-5.1-bugteam into mysql-trunk-merge.
Conflicts:

Text conflict in storage/myisam/mi_delete_table.c
2010-04-03 21:55:04 +04:00
Alexey Kopytov
7320a95808 Manual merge of mysql-5.1-bugteam into mysql-trunk-merge.
Conflicts:

Text conflict in mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result
Text conflict in sql/log.cc
Text conflict in sql/set_var.cc
Text conflict in sql/sql_class.cc
2010-04-03 21:35:51 +04:00
Alexey Kopytov
374bd06319 Manual merge of mysql-5.1-bugteam into mysql-trunk-merge.
Conflicts:

Text conflict in mysql-test/r/partition.result
Text conflict in mysql-test/t/partition.test
Text conflict in storage/myisam/mi_dynrec.c
2010-04-03 12:37:53 +04:00
Gleb Shchepa
99a0ace460 Bug #40625: Concat fails on DOUBLE values in a Stored
Procedure, while DECIMAL works

Selecting of the CONCAT(...<SP variable>...) result into
a user variable may return wrong data.


Item_func_concat::val_str contains a number of memory
allocation-saving tricks. One of them concatenates
strings inplace inserting the value of one string
at the beginning of the other string. However,
this trick didn't care about strings those points
to the same data buffer: this is possible when
a CONCAT() parameter is a stored procedure variable -
Item_sp_variable::val_str() uses the intermediate
Item_sp_variable::str_value field, where it may
store a reference to an external buffer.


The Item_func_concat::val_str function has been
modified to take into account val_str functions
(such as Item_sp_variable::val_str) that return
a pointer to an internal Item member variable
that may reference to a buffer provided.
2010-04-03 00:30:22 +04:00
Alexey Kopytov
87b98f6350 Manual merge of mysql-5.1-bugteam into mysql-trunk-merge.
Conflicts:

Text conflict in mysql-test/r/func_str.result
Text conflict in mysql-test/suite/sys_vars/r/myisam_sort_buffer_size_basic_32.result
Text conflict in mysql-test/suite/sys_vars/r/myisam_sort_buffer_size_basic_64.result
Text conflict in mysql-test/t/func_str.test
Text conflict in sql/mysqld.cc
Text conflict in sql/protocol.cc
Text conflict in storage/myisam/mi_open.c
2010-04-02 19:17:43 +04:00
Alexey Kopytov
5e770ab352 Automerge. 2010-04-02 18:22:18 +04:00
Anurag Shekhar
92a4196045 Bug #47904 Incorrect results w/ table subquery, derived SQs, and LEFT JOIN
on index

'my_decimal' class has two members which can be used to access the 
value. The member variable buf (inherited from parent class decimal_t) 
is set to member variable buffer so that both are pointing to same value.

Item_copy_decimal::copy() uses memcpy to clone 'my_decimal'. The member
buffer is declared as an array and memcpy results in copying the values
of the array, but the inherited member buf, which should be pointing at
the begining of the array 'buffer' starts pointing to the begining of 
buffer in original object (which is being cloned). Further updates on 
'my_decimal' updates only the inherited member 'buf' but leaves 
buffer unchanged.

Later when the new object (which now holds a inconsistent value) is cloned
again using proper cloning function 'my_decimal2decimal' the buf pointer
is fixed resulting in loss of the current value.

Using my_decimal2decimal instead of memcpy in Item_copy_decimal::copy()
fixed this problem.
2010-04-02 01:35:36 +05:30
Sergey Vojtovich
645ee41e26 Merge fix for BUG40980 to mysql-5.1-bugteam. 2010-04-01 22:17:34 +04:00
Sergey Vojtovich
c9ed4d0bfc Merge innodb-zip-ss6900 to mysql-5.1-bugteam. 2010-04-01 19:10:05 +04:00
Sergey Vojtovich
4050910f03 BUG#40980 - Drop table can remove another MyISAM table's
data and index files

It was possible if DATA/INDEX DIRECTORY is pointing to
symlinked MySQL data home directory.

Do not allow to drop data/index files implicitly symlinked
to data home directory. For such tables remove symlink only.
2010-04-01 18:49:02 +04:00
Davi Arnaut
49318af314 Bug#50755: Crash if stored routine def contains version comments
The problem was that a syntactically invalid trigger could cause
the server to crash when trying to list triggers. The crash would
happen due to a mishap in the backup/restore procedure that should
protect parser items which are not associated with the trigger. The
backup/restore is used to isolate the parse tree (and context) of
a statement from the load (and parsing) of a trigger. In this case,
a error during the parsing of a trigger could cause the improper
backup/restore sequence.

The solution is to properly restore the original statement context
before the parser is exited due to syntax errors in the trigger body.
2010-04-01 10:15:22 -03:00
Sergey Vojtovich
edba051bee Applying InnoDB snapshot
Detailed revision comments:

r6800 | marko | 2010-03-11 12:02:57 +0200 (Thu, 11 Mar 2010) | 1 line
branches/zip: Add ut_ad(mtr->state == MTR_ACTIVE) to various places.
2010-04-01 16:27:13 +04:00
Sergey Vojtovich
07e86b5008 Applying InnoDB snapshot
Detailed revision comments:

r6799 | jyang | 2010-03-11 09:59:42 +0200 (Thu, 11 Mar 2010) | 5 lines
branches/zip: Once change in bug #47621 merges into zip branch,
zip only test innodb_bug44571 needs to be updated to reflect the
column name change would be successful be done in InnoDB as well.
2010-04-01 16:22:36 +04:00
Sergey Vojtovich
aacb485899 Applying InnoDB snapshot, fixes BUG#51356.
Detailed revision comments:

r6790 | jyang | 2010-03-10 13:09:41 +0200 (Wed, 10 Mar 2010) | 7 lines
branches/zip: Fix bug #51356: "many valgrind errors in error messages
with concurrent ddl". Null terminate the name string returned
from innobase_convert_identifier() call when reporting DB_DUPLICATE_KEY
error in create_table_def().
rb://266 approved by Marko
2010-04-01 16:14:51 +04:00
Sergey Vojtovich
d10b72dbd6 Applying InnoDB snapshot
Detailed revision comments:

r6786 | vasil | 2010-03-10 09:16:50 +0200 (Wed, 10 Mar 2010) | 4 lines
branches/zip:

Fix typo in comment
2010-04-01 16:07:40 +04:00
Sergey Vojtovich
bb8467ecc5 Applying InnoDB snapshot
Detailed revision comments:

r6770 | marko | 2010-03-03 12:52:55 +0200 (Wed, 03 Mar 2010) | 12 lines
branches/zip: Disallow duplicate index name when creating an index.
This should fix Mantis Issue #461.

innodb.test, innodb.result, innodb-index.test, innodb-index.result:
Adjust the test result and mention that the introduced restriction
has been reported as MySQL Bug #51451.

innobase_check_index_keys(): Add a parameter for the InnoDB table and
check that no duplicate index name is added.  Report errors by
my_error() instead of sql_print_error().

rb://260 approved by Sunny Bains
2010-04-01 16:04:43 +04:00
Sergey Vojtovich
09353b5909 Applying InnoDB snapshot, fixes BUG#47622.
Detailed revision comments:

r6526 | jyang | 2010-01-28 18:12:40 +0200 (Thu, 28 Jan 2010) | 8 lines
branches/zip: Add index translation table to map mysql index
number to InnoDB index structure directly. Fix Bug #47622:
"the new index is added before the existing ones in MySQL,
but after one in SE".

rb://215, approved by Marko
2010-04-01 15:30:11 +04:00
Sergey Vojtovich
33bac9249f Applying InnoDB snapshot
Detailed revision comments:

r6472 | calvin | 2010-01-16 01:53:47 +0200 (Sat, 16 Jan 2010) | 12 lines
branches/zip: Merge revisions 6425:6471 from branches/5.1
to pick up the first part fix of bug49396.

    ------------------------------------------------------------------------
    r6471 | calvin | 2010-01-15 17:43:27 -0600 (Fri, 15 Jan 2010) | 4 lines

    branches/5.1: fix bug#49396: main.innodb test fails in embedded mode

    Change replace_result by using $MYSQLD_DATADIR. Tested in both embedded
    mode and normal server mode.
    ------------------------------------------------------------------------

r6473 | calvin | 2010-01-16 01:58:16 +0200 (Sat, 16 Jan 2010) | 6 lines
branches/zip: fix bug#49396: innodb.innodb-index test fails in
embedded mode

This is 2nd part of the fix for bug#49396. The 1st part is
innodb.test. Tested in both embedded mode and normal server mode.
2010-04-01 15:25:06 +04:00
Georgi Kodinov
3a7b39e17c merge 2010-04-01 14:04:45 +03:00
Alfranio Correia
ec6c56ef5a BUG#51291 Unfortunate effect around variable binlog_direct_non_transactional_updates
Post-merge fix.
2010-04-01 00:16:22 +01:00
Vasil Dimov
2ef71e71a4 Merge from innodb-branches-5.1 2010-03-31 17:02:35 +03:00
Alfranio Correia
2b48577cc2 auto-merge mysql-trunk-bugfixing (local) --> mysql-trunk-bugfixing 2010-03-31 14:51:52 +01:00
Alfranio Correia
f7776c999e BUG#51291 Unfortunate effect around variable binlog_direct_non_transactional_updates
Added test cases to check the case where the option 
binlog_direct_non_transactional_updates is OFF.
2010-03-31 14:49:20 +01:00
Alfranio Correia
4d71a007ba auto-merge mysql-trunk-bugfixing (local) --> mysql-trunk-bugfixing 2010-03-31 14:30:24 +01:00
Alfranio Correia
7827688f23 BUG#51291 Unfortunate effect around variable binlog_direct_non_transactional_updates
BUG#46364 introduced the flag binlog_direct_non_transactional_updates which
would make N-changes to be written to the binary log upon committing the
statement when "ON". On the other hand, when "OFF" the option was supposed
to mimic the behavior in 5.1. However, the implementation was not mimicking
the behavior correctly and the following bugs popped up:

  Case #1: N-changes executed within a transaction would go into
           the S-cache. When later in the same transaction a
           T-change occurs, N-changes following it were written
           to the T-cache instead of the S-cache. In some cases,
           this raises problems. For example, a
           Table_map_log_event being written initially into the
           S-cache, together with the initial N-changes, would be
           absent from the T-cache. This would log N-changes
           orphaned from a Table_map_log_event (thence discarded
           at the slave). (MIXED and ROW)

   Case #2: When rolling back a transaction, the N-changes that
            might be in the T-cache were disregarded and
            truncated along with the T-changes. (MIXED and ROW)

   Case #3: When a MIXED statement (TN) is ahead of any other
            T-changes in the transaction and it fails, it is kept
            in the T-cache until the transaction ends. This is
            not the case in 5.1 or Betony (5.5.2). In these, the
            failed TN statement would be written to the binlog at
            the same instant it had failed and not deferred until
            transaction end. (SBR)

To fix these problems, we have decided to do what follows:

   For Case #1 and #2, we circumvent them:

      1. by not letting binlog_direct_non_transactional_updates
         affect MIXED and RBR. These modes will keep the behavior
         provided by WL#2687. Although this will make Celosia to
         behave differently from 5.1, an execution will be always
         safe under such modes in the sense that slaves will never
         go out sync. In 5.1, using either MIXED or ROW while
         mixing N-statements and T-statements was not safe.

   For Case #3, we don't actually fix it. We:

      1. keep it and make all MIXED statements whether they end
         up failing or not or whether they are up front in the
         transaction or after some transactional change to always
         be stored in the T-cache. This means that it is written
         to the binary log on transaction commit/rollback only.

      2. We make the warning message even more specific about the
         MIXED statement and SBR.
2010-03-31 14:22:47 +01:00
Alfranio Correia
1ddd2ac2db auto-merge mysql-trunk-bugfixing (local) --> mysql-trunk-bugfixing 2010-03-31 14:15:48 +01:00
Vasil Dimov
ae042b6f96 Merge from innodb-branches-5.1. 2010-03-31 16:14:24 +03:00
Georgi Kodinov
56c9c9e9f5 Bug #37168: Missing variable - skip_name_resolve
Added a read-only global boolean variable skip_name_resolve.
2010-03-31 16:12:37 +03:00
Vasil Dimov
d160966976 Rename the newly added mysql-tests from InnoDB to their proper location. 2010-03-31 16:07:55 +03:00
Vasil Dimov
cfcc7ac3a4 Move ./storage/innobase/mysql-test/* into ./mysql-test/* except
innodb.*, innodb_bug34300* and innodb_bug39438* in order to preserve their
history from SVN.
2010-03-31 16:04:40 +03:00
Ramil Kalimullin
2cf7456e03 Fix for bug#52397: another crash with explain extended and group_concat
Problem: EXPLAIN EXTENDED was trying to resolve references to 
freed temporary table fields for GROUP_CONCAT()'s ORDER BY arguments.

Fix: use stored original GROUP_CONCAT()'s arguments in such a case.
2010-03-31 17:00:56 +04:00
mmakela
7079eef220 branches/zip: Merge revisions 6921:6924 from branches/5.1:
------------------------------------------------------------------------
  r6924 | mmakela | 2010-03-31 15:28:25 +0300 (Wed, 31 Mar 2010) | 1 line
  Changed paths:
     M /branches/5.1/mysql-test/innodb_bug51920.test

  branches/5.1: innodb_bug51920.test: Fix a race condition.
  ------------------------------------------------------------------------
2010-03-31 11:30:56 +00:00
mmakela
e92a36c804 branches/zip: Merge revisions 6918:6921 from branches/5.1:
------------------------------------------------------------------------
  r6921 | mmakela | 2010-03-31 14:33:04 +0300 (Wed, 31 Mar 2010) | 2 lines
  Changed paths:
     M /branches/5.1/mysql-test/innodb_bug51920.result
     M /branches/5.1/mysql-test/innodb_bug51920.test

  branches/5.1: innodb_bug51920.test: Make the test quicker and more
  deterministic.  Suggested by Vasil Dimov.
  ------------------------------------------------------------------------
2010-03-31 10:54:30 +00:00
mmakela
5ccfae8284 branches/zip: Merge revisions 6788:6918 from branches/5.1:
------------------------------------------------------------------------
  r6822 | vasil | 2010-03-15 10:17:31 +0200 (Mon, 15 Mar 2010) | 12 lines
  Changed paths:
     M /branches/5.1/row/row0sel.c

  branches/5.1:

  Typecast to silence a compiler warning:

  row/row0sel.c: 4548
          C4244: '=' : conversion from 'float' to 'ib_ulonglong', possible loss of data
  row/row0sel.c: 4553
          C4244: '=' : conversion from 'double' to 'ib_ulonglong', possible loss of data

  Reported by:	Jonas Oreland <Jonas.Oreland@Sun.COM>
  Discussed with:	Sunny Bains <sunny.bains@oracle.com>
  ------------------------------------------------------------------------
  r6884 | vdimov | 2010-03-26 13:05:03 +0200 (Fri, 26 Mar 2010) | 6 lines
  Changed paths:
     M /branches/5.1/mysql-test/innodb_bug38231.test

  branches/5.1:

  Fix a non-determinism in innodb_bug38231.

  Reported by:	Sergey Vojtovich <svoj@Sun.COM>
  ------------------------------------------------------------------------
  r6911 | vdimov | 2010-03-30 11:39:02 +0300 (Tue, 30 Mar 2010) | 2 lines
  Changed paths:
     M /branches/5.1/handler/ha_innodb.cc

  branches/5.1: Whitespace fixup
  ------------------------------------------------------------------------
  r6912 | vdimov | 2010-03-30 12:18:46 +0300 (Tue, 30 Mar 2010) | 2 lines
  Changed paths:
     M /branches/5.1/handler/ha_innodb.cc

  branches/5.1: Whitespace fixup on line 354
  ------------------------------------------------------------------------
  r6918 | mmakela | 2010-03-31 11:14:51 +0300 (Wed, 31 Mar 2010) | 6 lines
  Changed paths:
     A /branches/5.1/mysql-test/innodb_bug51920.result
     A /branches/5.1/mysql-test/innodb_bug51920.test
     M /branches/5.1/srv/srv0srv.c

  branches/5.1: Obey KILL during a lock wait (Bug #51920).

  srv_suspend_mysql_thread(), srv_lock_timeout_and_monitor_thread():
  Check trx_is_interrupted() in addition to checking the lock wait timeout.

  rb://279 approved by Sunny Bains
  ------------------------------------------------------------------------
2010-03-31 07:34:22 +00:00
Mattias Jonsson
864d6bc90b Bug#51851: Server with SBR locks mutex twice on LOAD DATA
into partitioned MyISAM table

Problem was that the ha_data structure was introduced in 5.1
and only used for partitioning first, but with the intention
of be of use for others engines as well, and when used by other
engines it would clash if it also was partitioned.

Solution is to move the partitioning specific data to a separate
structure, with its own mutex (which is used for auto_increment).

Also did rename PARTITION_INFO to PARTITION_STATS since there
already exist a class named partition_info, also cleaned up
some related variables.
2010-03-30 22:52:45 +02:00
Vasil Dimov
c75d70fdc4 Move everything into a subdir in order to workaround a bzr merge bug:
https://bugs.launchpad.net/bzr/+bug/375898
2010-03-30 19:03:46 +03:00
Georgi Kodinov
2d035bf78d Bug #51893: crash with certain characters given to load_file
function on windows
               
When making sure that the directory path ends up with a 
slash/backslash we need to check for the correct length of 
the buffer and trim at the appropriate location so we don't
write past the end of the buffer.
2010-03-30 15:03:50 +03:00
He Zhenxing
44325dc6b7 Bug#49492 rpl_semi_sync failed on PB2
After stopped slave, it is possible that the Dump thread on master
is still running and has locked the semi-sync master plugin, and when
uninstalling the semi-sync master plugin, a plugin busy warning could
be generated.

Fixed by disabling the warnings when uninstalling semi-sync plugin
on master.
2010-03-30 17:17:19 +08:00
Georgi Kodinov
e32e9cdc66 merge 2010-03-30 15:10:25 +03:00
2049d1afc0 Bug #50407 mysqlbinlog --database=X produces bad output for SAVEPOINTs
When mysqlbinlog was given the --database=X flag, it always printed
'ROLLBACK TO', but the corresponding 'SAVEPOINT' statement was not
printed. The replicated filter(replicated-do/ignore-db) and binlog
filter (binlog-do/ignore-db) has the same problem. They are solved
in this patch together.

After this patch, We always check whether the query is 'SAVEPOINT'
statement or not. Because this is a literal check, 'SAVEPOINT' and
'ROLLBACK TO' statements are also binlogged in uppercase with no
any comments.

The binlog before this patch can be handled correctly except one case
that any comments are in front of the keywords. for example:
 /* bla bla */ SAVEPOINT a;
 /* bla bla */ ROLLBACK TO a;
2010-03-28 19:57:33 +08:00
8d22c5f3ef Bug #50095 Multi statement including CREATE EVENT causes rotten binlog entry
The log event of 'CREATE EVENT' was being binlogged with garbage
at the end of the query if 'CREATE EVENT' is followed by another SQL statement
and they were executed as one command.
for example:
    DELIMITER |;
    CREATE EVENT e1 ON EVERY DAY DO SELECT 1; SELECT 'a';
    DELIMITER ;|
When binlogging 'CREATE EVENT', we always create a new statement with definer
and write it into the log event. The new statement is made from cpp_buf(preprocessed buffer).
which is not a c string(end with '\0'), but it is copied as a c string.

In this patch, cpp_buf is copied with its length.
2010-03-28 16:37:47 +08:00
Jonathan Perkin
ddf5d0517a Install mtr, mysql-test-run and my_safe_process into the correct
locations.
2010-03-26 16:11:56 +01:00
Sergey Vojtovich
8620be47e5 Applying InnoDB snapshot
Detailed revision comments:

r6884 | vdimov | 2010-03-26 13:05:03 +0200 (Fri, 26 Mar 2010) | 6 lines
branches/5.1:

Fix a non-determinism in innodb_bug38231.

Reported by:	Sergey Vojtovich <svoj@Sun.COM>

r6884 | vdimov | 2010-03-26 13:05:03 +0200 (Fri, 26 Mar 2010) | 6 lines
branches/5.1:

Fix a non-determinism in innodb_bug38231.

Reported by:	Sergey Vojtovich <svoj@Sun.COM>
2010-03-26 15:20:11 +04:00
vdimov
53c27178bd branches/5.1:
Fix a non-determinism in innodb_bug38231.

Reported by:	Sergey Vojtovich <svoj@Sun.COM>
2010-03-26 11:05:03 +00:00
Sergey Vojtovich
8d0b9a8d9d Merge fix for BUG51868 to mysql-5.1-bugteam. 2010-03-26 14:21:10 +04:00
Sergey Vojtovich
0d1c997db5 Merge fix for BUG46565 to mysql-5.1-bugteam. 2010-03-26 14:20:10 +04:00
Sergey Glukhov
1a56ad41f6 Bug#52177 crash with explain, row comparison, join, text field
The crash is the result of an attempt made by JOIN::optimize to evaluate
the WHERE condition when no records have been actually read.
The fix is to remove erroneous 'outer_join' variable check.
2010-03-26 11:44:24 +04:00
Sergey Glukhov
52d89df285 Bug#52164 Assertion failed: param.sort_length, file .\filesort.cc, line 149
The crash happens because of incorrect max_length calculation
in QUOTE function(due to overflow). max_length is set
to 0 and it leads to assert failure.
The fix is to cast expression result to
ulonglong variable and adjust it if the
result exceeds MAX_BLOB_WIDTH.
2010-03-26 09:49:35 +04:00
Sergey Vojtovich
bb3f75bdbc BUG#46565 - repair of partition fail for archive engine
There was no way to repair corrupt ARCHIVE data file,
when unrecoverable data loss is inevitable.

With this fix REPAIR ... EXTENDED attempts to restore
as much rows as possible, ignoring unrecoverable data.

Normal REPAIR is still able to repair meta-data file
only.
2010-03-25 23:57:06 +04:00
Ramil Kalimullin
bd2a0eaa82 An addition to fix for BUG#51866 - crash with repair
by sort and fulltext keys.

Min value for myisam_sort_buffer_size is 4096.
2010-03-25 20:35:07 +04:00
Sergey Vojtovich
47fa2317e5 Merge fixes for BUG51877, BUG51866, BUG47598 to mysql-5.1-bugteam. 2010-03-25 19:59:54 +04:00
Sergey Vojtovich
45e4c066e8 Merge fix for BUG51866 to mysql-5.1-bugteam. 2010-03-25 16:11:16 +04:00