1
0
mirror of https://github.com/MariaDB/server.git synced 2025-05-31 08:42:45 +03:00

28265 Commits

Author SHA1 Message Date
Marc Alff
5ee9001844 Bug#11766528 PERFORMANCE_SCHEMA TRACKS BOTH BINARY AND RELAY LOGS IN THE SAME EVENTS
Before this fix, all the performance schema instrumentation for both the binary log
and the relay log would use the following instruments:
- wait/io/file/sql/binlog
- wait/io/file/sql/binlog_index
- wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_index
- wait/synch/cond/sql/MYSQL_BIN_LOG::update_cond

This instrumentation is too general and can be more specific.

With this fix, the binlog instrumentation is identical,
and the relay log instrumentation is changed to:
- wait/io/file/sql/relaylog
- wait/io/file/sql/relaylog_index
- wait/synch/mutex/sql/MYSQL_RELAY_LOG::LOCK_index
- wait/synch/cond/sql/MYSQL_RELAY_LOG::update_cond

With this change, the performance instrumentation for the binary log and the relay log,
which share the same structure but have different uses, is more detailed.
This is especially important for hosts in the middle of a replication chain,
that are both masters (binlog) and slaves (relaylog).
2011-03-01 17:39:28 +01:00
Tor Didriksen
69b8293759 Bug #11747102 30771: LOG MORE INFO ABOUT THREADS KILL'D AND SORT ABORTED MESSAGES
mysql-test/r/filesort_debug.result:
  New test case.
mysql-test/t/filesort_debug.test:
  New test case.
sql/filesort.cc:
  thd->killed does not imply thd->is_error(), so test for that separately.
2011-02-24 08:00:12 +01:00
Vasil Dimov
19372f1094 Merge mysql-5.5-innodb -> mysql-5.5 2011-02-23 19:33:41 +02:00
Vasil Dimov
9f699b39f8 Fix the failing sys_vars.all_vars on behalf of Sunny 2011-02-23 16:39:54 +02:00
Nirbhay Choubey
07e3056777 Merging from mysql-5.1. 2011-02-22 19:32:49 +05:30
Nirbhay Choubey
f27a13cf09 Postfix for tests failing due to fix for bug#11766310. 2011-02-22 19:28:50 +05:30
Jorgen Loland
d1d166875a BUG#11762751: UPDATE STATEMENT THROWS AN ERROR, BUT STILL
UPDATES THE TABLE ENTRIES (formerly 55385)
BUG#11764529: MULTI UPDATE+INNODB REPORTS ER_KEY_NOT_FOUND 
              IF A TABLE IS UPDATED TWICE (formerly 57373)
            
If multiple-table update updates a row through two aliases and
the first update physically moves the row, the second update will
fail to locate the row. This results in different errors
depending on storage engine:
  * MyISAM: Got error 134 from storage engine
  * InnoDB: Can't find record in 'tbl'
None of these errors accurately describe the problem. 
      
Furthermore, since MyISAM is non-transactional, the update
executed first will be performed while the second will not.
In addition, for two equal multiple-table update statements,
one could succeed and the other fail based on whether or not
the record actually moved or not. This was inconsistent.
      
Two update operations may physically move a row:
  1) Update of a column in a clustered primary key
  2) Update of a column used to calculate which partition the 
     row belongs to
           
BUG#11764529 is about case 1) above, BUG#11762751 was about case 2).
      
The fix for these bugs is to return with an error if multiple-table 
update is about to:
  a) Update a table through multiple aliases, and
  b) Perform an update that may physically more the row 
     in at least one of these aliases
    
This avoids 
  * partial updates as described for MyISAM above,
  * provides the same error message that describes the actual problem
    for all SEs
  * inconsistent behavior where a statement fails or succeeds based on
    e.g. the partitioning algorithm of the table.

mysql-test/r/multi_update.result:
  Add test for bug#57373
mysql-test/r/multi_update_innodb.result:
  Add test for bug#57373
mysql-test/r/partition.result:
  Add test for bug#55385
mysql-test/t/multi_update.test:
  Add test for bug#57373
mysql-test/t/multi_update_innodb.test:
  Add test for bug#57373
mysql-test/t/partition.test:
  Add test for bug#55385
sql/handler.cc:
  Translate handler error HA_ERR_RECORD_DELETED to server error
sql/share/errmsg-utf8.txt:
  New error message for multi-table update where the same table is updated multiple times.
sql/sql_update.cc:
  Add function unsafe_key_update()
2011-02-21 16:49:03 +01:00
Jon Olav Hauglid
f7a0b45f5a Bug #11754461 CANNOT ALTER TABLE WHEN KEY PREFIX TOO LONG
The problem was that doing ALTER TABLE on a table which had a key
on a TEXT/BLOB column with a prefix longer than the maximum number
of characteres in this column (as per the character set), by mistake,
caused an error (Error 1170 - ER_BLOB_KEY_WITHOUT_LENGTH).

This bug not repeatable in 5.5.

This patch adds a regression test to alter_table.test and
contains no code changes.
2011-02-21 12:30:08 +01:00
Sergey Vojtovich
95b4ff0081 Merge. 2011-02-21 11:17:56 +03:00
Nirbhay Choubey
a5f20712a0 Merge of fix for bug#11766310 from mysql-5.1 -> mysql-5.5. 2011-02-21 12:42:27 +05:30
Nirbhay Choubey
876502d743 Bug#11766310 : 59398: MYSQLDUMP 5.1 CAN'T HANDLE A DASH
("-") IN DATABASE NAMES IN ALTER DATABASE.

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

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

Fixed by quoting the database name.


client/mysqldump.c:
  Bug#11766310 : 59398: MYSQLDUMP 5.1 CAN'T HANDLE A DASH
                 ("-") IN DATABASE NAMES IN ALTER DATABASE.
  
  Modified the print statement in order to print the quoted
  database name for 'ALTER DATABASE' statements.
mysql-test/r/mysqldump.result:
  Added a test case for bug#11766310.
mysql-test/t/mysqldump.test:
  Added a test case for bug#11766310.
2011-02-21 12:37:24 +05:30
Vasil Dimov
6a435e05d3 Merge mysql-5.5-innodb -> mysql-5.5 2011-02-18 14:57:50 +02:00
Vasil Dimov
4b7a924732 Merge mysql-5.1-innodb -> mysql-5.1 2011-02-18 14:57:11 +02:00
Martin Hansson
4d7042ce23 Merge of fix for Bug#11766675. 2011-02-18 11:55:24 +01:00
Martin Hansson
61b256177b Bug#11766675 - 59839: Aggregation followed by subquery yields wrong result
The loop that was looping over subqueries' references to outer field used a
local boolean variable to tell whether the field was grouped or not. But the
implementor failed to reset the variable after each iteration. Thus a field
that was not directly aggregated appeared to be.

Fixed by resetting the variable upon each new iteration.
2011-02-18 11:50:06 +01:00
Sergey Vojtovich
659ff29394 BUG#11766720 - setting storage engine to null segfaults mysqld
MONTHNAME(0) claims that it is about to return NOT NULL
value, whereas it actually returns NULL.

As a result storage_engine variable (which cannot be NULL)
protection was bypassed and NULL value was accepted, causing
server crash.

Fixed MONTHNAME(0) to report valid NULL flag.

mysql-test/r/func_time.result:
  A test case for BUG#11766720.
mysql-test/t/func_time.test:
  A test case for BUG#11766720.
sql/item_timefunc.cc:
  MONTHNAME(0) must report NULL, as opposed to base class
  MONTH(0) which is NOT NULL.
  
  Fixed Item_func_monthname to inherit from Item_str_func
  instead of Item_func_month.
sql/item_timefunc.h:
  MONTHNAME(0) must report NULL, as opposed to base class
  MONTH(0) which is NOT NULL.
  
  Fixed Item_func_monthname to inherit from Item_str_func
  instead of Item_func_month.
2011-02-18 11:10:30 +03:00
Alexander Barkov
0db53b19b7 Bug#60101 COALESCE with cp1251 tables causes [Err] 1267 - Illegal mix of collations
Problem:
  IF() did not copy collation derivation and repertoire from
  an argument if the opposite argument was NULL:
    IF(cond, res1, NULL)
    IF(cond, NULL, res2)
  only CHARSET_INFO pointer was copied.
  This resulted in illegal mix of collations error.

Fix:
  copy all collation parameters from the non-NULL argument:
  CHARSET_INFO pointer, derivation, repertoire.
2011-02-18 10:32:40 +03:00
Marko Mäkelä
be59ca8275 Merge mysql-5.1-innodb to mysql-5.5-innodb. 2011-02-17 22:27:56 +02:00
Marko Mäkelä
c83889d9d6 Allow 30 seconds for slow shutdown in the Bug #60049 test. 2011-02-17 22:25:33 +02:00
Vasil Dimov
c0ec353277 Merge mysql-5.1-innodb -> mysql-5.5-innodb 2011-02-17 19:14:41 +02:00
Vasil Dimov
a27d85aa46 Fix the non-determinism in innodb_information_schema.test
Thanks to Kristian Nielsen for finding out the root cause for the
failure, see: https://bugs.launchpad.net/maria/+bug/677407
2011-02-17 19:09:53 +02:00
Vasil Dimov
cc7b3de9fc Merge mysql-5.1 from bk-internal into my local repo 2011-02-17 14:07:39 +02:00
Vasil Dimov
70b9a5fa6b Merge mysql-5.5 from bk-internal into my local repo 2011-02-17 14:06:32 +02:00
Vasil Dimov
0047afa3b2 Merge mysql-5.5-innodb -> mysql-5.5 2011-02-17 13:57:26 +02:00
Vasil Dimov
0bbaf6e8a7 Merge mysql-5.1-innodb -> mysql-5.1 2011-02-17 13:56:05 +02:00
Magne Mahre
5a47bc87c8 Merge from 5.1 2011-02-17 12:53:09 +01:00
Magne Mahre
6503226743 Bug#48053 String::c_ptr has a race and/or does an invalid
memory reference

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

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

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

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

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

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


sql/set_var.cc:
  These two cases have been reported to fail
  with Valgrind.
2011-02-17 12:43:53 +01:00
Marko Mäkelä
5c96991a6f Merge mysql-5.1-innodb to mysql-5.5-innodb. 2011-02-17 09:48:01 +02:00
Marko Mäkelä
61449541fb Disable the Bug #60049 test on embedded, as it requires server restart. 2011-02-17 09:45:07 +02:00
Tor Didriksen
2152cd958d Disable this test when running 'mtr --mem'
With --mem if fails with
+UNEXPECTED ERROR NUMBER: 1290

In var/log/mysqld.2.err we have:
[ERROR] LOAD DATA INFILE in the slave SQL Thread can only read from --slave-load-tmpdir. Please, report a bug.
[ERROR] Slave SQL: Error 'The MySQL server is running with the --slave-load-tmpdir option so it cannot execute this statement' on query. Default database: 'test'. Query: 'LOAD DATA INFILE '../../tmp/SQL_LOAD-2-1-1.data' INTO  TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`a`, `b`)', Error_code: 1290

getcwd() in the server yields something like: /dev/shm/var_auto_iv5Q/mysqld.2/data
2011-02-17 08:27:24 +01:00
Bjorn Munch
d260eded76 Simple fix of suppress pattern in test insert_select 2011-02-16 21:45:52 +01:00
Bjorn Munch
ee2f9d868c Simple fix of suppress pattern in test insert_select 2011-02-16 21:43:12 +01:00
Sven Sandberg
2f9198a0f2 WL#5670: Proposal: Remove SHOW NEW MASTER statement
Removes SHOW NEW MASTER statement and all related code.
Also removes the unused function update_slave_list from repl_failsafe.cc.


mysql-test/r/signal_code.result:
  Updated result file.
  The output of SHOW PROCEDURE CODE has changed, because the numerical values
  of some SQLCOM_ commands have changes. This is not a problem, because
  SHOW PROCEDURE CODE only exists in debug builds and the numerical values of
  SQLCOM_ constants are not exposed elsewhere.
mysql-test/r/sp-code.result:
  Updated result file.
  The output of SHOW PROCEDURE CODE has changed, because the numerical values
  of some SQLCOM_ commands have changes. This is not a problem, because
  SHOW PROCEDURE CODE only exists in debug builds and the numerical values of
  SQLCOM_ constants are not exposed elsewhere.
sql/mysqld.cc:
  Remove SQLCOM_SHOW_NEW_MASTER.
sql/repl_failsafe.cc:
  Remove show_new_master, which was only used by the removed SHOW NEW MASTER statement.
  Remove translate_master, which was only used by show_new_master.
  Remove find_slave_event, which was only used by translate_master.
  Remove find_target_pos, which was only used by translate_master.
  Remove cmp_master_pos, which was only used by translate_master.
  Remove update_slave_list, which was not used at all.
sql/repl_failsafe.h:
  Remove declarations of functions removed by this patch:
    update_slave_list, show_new_master, translate_master, update_slave_list
  
  Remove declarations of functions that did not exist before this patch:
    handle_failsafe_rpl, load_master_data
  
  Remove declaration of function that is static in slave.cc:
    connect_to_master
sql/sp_head.cc:
  Removed SQLCOM_SHOW_NEW_MASTER
sql/sql_lex.h:
  Removed SQLCOM_SHOW_NEW_MASTER
sql/sql_parse.cc:
  Removed SQLCOM_SHOW_NEW_MASTER
sql/sql_repl.cc:
  Removed cmp_master_pos(char*,ulonglong,char*,ulonglong), which was
  only used by cmp_master_pos*Slave_log_event* sev, LEX_MASTER_INFO* mi) in repl_failsafe.cc,
  which has been removed.
sql/sql_repl.h:
  removed cmp_master_pos
sql/sql_yacc.yy:
  removed syntax SHOW NEW MASTER.
2011-02-16 17:27:35 +01:00
Marko Mäkelä
c10b46dfb5 Merge mysql-5.1-innodb to mysql-5.5-innodb. 2011-02-16 15:41:46 +02:00
Marko Mäkelä
6459e2c3e1 Make the implicit unpack parameter explicit in the Bug #60049 test. 2011-02-16 15:34:16 +02:00
Tor Didriksen
e86d90e72c Bug #11751935 42969: PLEASE ADD A MANIFEST TO EACH BUILD
post-push fix: make it work in out-of-source builds.

mysql-test/mysql-test-run.pl:
  Set MYSQL_BINDIR, to be used by tests.
mysql-test/t/file_contents.test:
  Use MYSQL_BINDIR, which is different from MYSQL_LIBDIR for out-of-source builds.
2011-02-16 13:44:28 +01:00
Bjorn Munch
2d332d627d Removed unused code accidentally pushed with Bug @58122 2011-02-16 12:24:17 +01:00
Dmitry Lenev
093d94cc1d Merged recent changes from mysql-5.5 tree with
fix for bug @59888.
2011-02-15 15:19:30 +03:00
Dmitry Lenev
1cff3f95e6 Merged fix for bug #59888 "debug assertion when attempt to
create spatial index on char > 31 bytes". Did after-merge
fixes.
2011-02-15 15:04:52 +03:00
Luis Soares
44fac8eafb BUG#11754075: BUG#45621: A FEW TEST FILES ARE DISABLED DUE TO WL#4284
Backporting the patch from BUG#11753506 into mysql-5.5 
as it is already in mysql-trunk but not in mysql-5.5.
2011-02-15 12:01:52 +00:00
Luis Soares
0d82c585aa BUG#11754075: BUG#45621: A FEW TEST FILES ARE DISABLED DUE TO WL#4284
Backporting the patch from BUG#11753489 into mysql-5.5 
as it is already in mysql-trunk but not in mysql-5.5.
2011-02-15 11:59:12 +00:00
Dmitry Lenev
9c89cca5e3 Fix for bug#11766714 (former bug @59888) "debug assertion when
attempt to create spatial index on char > 31 bytes".

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

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

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

mysql-test/r/gis.result:
  Added test for bug @59888 "debug assertion when attempt to
  create spatial index on char > 31 bytes".
mysql-test/t/gis.test:
  Added test for bug @59888 "debug assertion when attempt to
  create spatial index on char > 31 bytes".
storage/myisam/mi_create.c:
  Changed mi_create() not to release THR_LOCK_myisam mutex on
  error path if it was not acquired.
2011-02-15 14:03:05 +03:00
Marko Mäkelä
6e1908afeb Merge mysql-5.1-innodb to mysql-5.5-innodb. 2011-02-15 12:18:15 +02:00
Marko Mäkelä
cb884043b6 Add a test for suspected Bug#60049. 2011-02-15 12:12:27 +02:00
Marko Mäkelä
18e7b61e64 Merge mysql-5.1-innodb to mysql-5.5-innodb. 2011-02-15 11:29:56 +02:00
Marko Mäkelä
0efaef7d46 Bug#59307 Valgrind: uninitialized value in rw_lock_set_writer_id_and_recursion_flag()
rw_lock_create_func(): Initialize lock->writer_thread, so that Valgrind
will not complain even when Valgrind instrumentation is not enabled.
Flag lock->writer_thread uninitialized, so that Valgrind can complain
when it is used uninitialized.

rw_lock_set_writer_id_and_recursion_flag(): Revert the bogus Valgrind
instrumentation that was pushed in the first attempt to fix this bug.
2011-02-15 10:51:33 +02:00
Joerg Bruehe
a7662cf0a9 Merge bug fix 42969 into main 5.5 branch. 2011-02-14 15:53:51 +01:00
Jon Olav Hauglid
3058b8e2a6 Bug #11766788 (former bug 59986)
Assert in Diagnostics_area::set_ok_status() for XA COMMIT

This assert was triggered if XA COMMIT was issued when an XA transaction
already had encountered an error (e.g. a deadlock) which required
the XA transaction to be rolled back.

In general, the assert is triggered if a statement tries to send OK to
the client when an error has already been reported. It was triggered
in this case because the trans_xa_commit() function first reported an
error, then rolled back the transaction and finally returned FALSE,
indicating success. Since trans_xa_commit() reported success,
mysql_execute_command() tried to report OK, triggering the assert.

This patch fixes the problem by fixing trans_xa_commit() to return TRUE
if it encounters an error that requires rollback, even if the rollback
itself is successful.

Test case added to xa.test.
2011-02-14 14:16:31 +01:00
Joerg Bruehe
bb956c1ea2 Fix bug#42969 Please add a MANIFEST to each build
With this change, there will be new files "INFO_SRC"
and "INFO_BIN", which describe the source and the
binaries.
They will be contained in all packages:
- in "tar.gz" and derived packages, in "docs/",
- in RPMs, in "/usr/share/doc/packages/MySQL-server".

"INFO_SRC" is also part of a source tarball.
It gives the version as exact as possible, preferably
by calling "bzr version-info" on the source tree.
If that is not possible, it just contains the three
level version number.

"INFO_BIN" contains some info when and where the
binaries were built, the options given to the compiler,
and the flags controlling the included features.

The tests (test "mysql" in the main suite) are extended
to verify the existence of both "INFO_SRC" and "INFO_BIN",
as well as some of the expected contents.


CMakeLists.txt:
  For the new files describing the source and the build
  ("INFO_SRC" and "INFO_BIN"), we need a new file
  "cmake/info_macros.cmake.in" with the build rules.
  
  1) This file must be configured with the current variables.
  
  2) "INFO_SRC" can be created during the cmake phase,
     but this should be repeated with each "make" to
  protect against a developer doing only "make" after
  a "bzr pull" (or "bzr commit").
  So have it both as a cmake rule and as a custom target.
  
  3) "INFO_BIN" must be created during the make phase
     only, because it contains information from files
  which will be written at the end of the cmake phase only.
  Therefore, it must be a custom target which is included
  in all "make" targets.
  
  4) The resulting "INFO_*" files must be included in packages.
cmake/info_bin.cmake:
  This is the file to create "INFO_BIN",
  by calling the "CREATE_INFO_BIN()" macro.
  
  It must be a separate file, so that the macro
  definitions can be included in other cmake scripts
  without that file inclusion causing a side effect,
  the macro call.
  That call would modify the source tree which should
  be trated read-only.
cmake/info_macros.cmake.in:
  This new file contains the macros to create the
  "INFO_*" files during various steps of the build,
  the calls will be at other places.
  
  1) For source: If running from a BZR tree, always create
     (update) "INFO_SRC" by running "bzr version-info".
     Outside a BZR tree, try to take it from exported
     sources, and create it only if missing, in that
     case put the three level version number into it.
  
  2) "INFO_BIN" contains
     - date/time and host name of the build host,
     - information about the platform,
     - information about the C and CXX compiler
       and the options given to them (Unix only),
     - the feature flags as reported by "cmake -L".
cmake/info_src.cmake:
  This is the file to create "INFO_SRC",
  by calling the "CREATE_INFO_SRC()" macro.
  
  It must be a separate file, so that the macro
  definitions can be included in other cmake scripts
  without that file inclusion causing a side effect,
  the macro call.
  That call would modify the source tree which should
  be trated read-only.
cmake/make_dist.cmake.in:
  Create a "VERSION_src" file during "make dist".
  
  In case it already exists from a preceding "cmake" run
  or tree export (which is quite likely), a new
  "make dist" must not modify it.
mysql-test/r/file_contents.result:
  Result of test for bug#42969.
mysql-test/t/file_contents.test:
  Perl test scriptlet for bug#42969.
support-files/mysql.spec.sh:
  Add "INFO_SRC" and "INFO_BIN" to the RPM contents.
2011-02-11 15:55:25 +01:00
Alexander Barkov
50c9f1f63d Bug#31384 DATE_ADD() and DATE_SUB() return binary data
An after-fix to workaround different metadata in "mtr --ps" output.
2011-02-10 16:38:18 +03:00