Commit graph

26877 commits

Author SHA1 Message Date
Joerg Bruehe
2067e6c46f Fix an issue with the IBM C++ compiler
which was detected during the build of 5.5.3-m3.
This requires version 9 of IBM C++ to help.

More fixes will still be needed, it is very strict
(or rather: a bit picky?) about templates.
2010-03-24 20:15:06 +01:00
Luis Soares
66ee3a4490 BUG#51716 post push fix.
There are two issues fixed here:

  1. We needed to update the result file, for some of 
     mysqlbinlog_* tests, because now the some padding chars
     are not output anymore.

  2. We needed to change the Field_string::pack so that
     for BINARY types the padding chars are not packed 
     (lengthsp will return full length for these types).
2010-03-12 12:42:30 +00:00
Konstantin Osipov
42b7812898 A fix for Bug#49972 "Crash in prepared statements":
The problem is introduced by WL#4435 "Support OUT-parameters in 
prepared statements".
When a statement that has out parameters was reprepared,
the reprepare request error was ignored, and an
attempt to send out parameters to the client was made.

Since the out parameter list was not initialized in case
of an error, this attempt led to a crash.

Don't try to send out parameters to the client
if an error occurred in statement execution.
2010-03-11 16:47:34 +03:00
Luis Soares
b7a5c1b329 Automerge: mysql-next-mr-bugfixing bug branch --> mysql-next-mr-bugfixing latest. 2010-03-11 11:28:35 +00:00
Davi Arnaut
09f9014238 Automatic merge. 2010-03-10 15:44:58 -03:00
Luis Soares
2c368f050e Fix for BUG#51716 and BUG#51787.
In BUG#51787 we were using the wrong charset to print out the
data. We were using the field charset for the string that would
hold the information. This caused the assertion, because the
string length was not aligned with UTF32 bytes requirements for
storage.

We fix this by using &my_charset_latin1 in the string object
instead of the field->charset(). As a side-effect, we needed to
extend the show_sql_type interface so that it took the field
charset is now passed as a parameter, so that one is able to
calculate the correct field size.

In BUG#51716 we had issues with Field_string::pack and
Field_string::unpack. When packing, the length was incorrectly
calculated. When unpacking, the padding the string would be
padded with the wrong bytes (a few bytes less than it should).

We fix this by resorting to charset abstractions (functions) that
calculate the correct length when packing and pad correctly the
string when unpacking.
2010-03-10 17:33:51 +00:00
Alexander Nozdrin
5c7687c2ef Auto-merge from mysql-next-mr-bugfixing. 2010-03-10 17:58:35 +03:00
Konstantin Osipov
861b86d678 A fix and a test case for Bug#51710 FLUSH TABLES <view> WITH READ
LOCK kills the server.

Prohibit FLUSH TABLES WITH READ LOCK application to views or
temporary tables.
Fix a subtle bug in the implementation when we actually
did not remove table share objects from the table cache after 
acquiring exclusive locks.
2010-03-10 17:35:25 +03:00
Davi Arnaut
30cb1779ed Bug#33669: Transactional temporary tables do not work under --read-only
The problem was that in read only mode (read_only enabled),
the server would mistakenly deny data modification attempts
for temporary tables which belong to a transactional storage
engine (eg. InnoDB).

The solution is to allow transactional temporary tables to be
modified under read only mode. As a whole, the read only mode
does not apply to any kind of temporary table.
2010-03-10 10:36:40 -03:00
Tor Didriksen
58d05caec1 Bug#50888 valgrind warnings in Field_timestamp::val_str
Ensure that we store the correct cached_field_type whenever we cache Field items
(in this case it allows us to compare dates as dates, rather than strings)
2010-03-09 15:54:12 +01:00
Marc Alff
2399b61443 Bug#51295 Build warnings in mdl.cc
Before this fix, the performance schema instrumentation
in mdl.h / mdl.cc was incomplete, causing:
- build warnings,
- no data collection for the performance schema

This fix:
- added instrumentation helpers for the new preferred
  reader read write lock, mysql_prlock_*
- implemented completely the performance schema
  instrumentation of mdl.h / mdl.cc
2010-03-07 10:50:47 -07:00
Guilhem Bichot
39e30ed9e0 Fix for BUG#51215 "log-error partially works with version 5.5": WL 4738 (reengineering of server variables)
had broken the 5.1 behaviour of --log-error: --log-error without argument sent to stderr instead of writing
to a file with an autogenerated name.
2010-03-05 14:08:21 +01:00
Alexander Nozdrin
2155847a29 Auto-merge from mysql-next-mr-bugfixing. 2010-03-04 18:34:29 +03:00
Alexander Nozdrin
4f08c6d0e5 A follow-up on WL#5154 and WL#5182: remove forgotten options. 2010-03-03 22:22:02 +03:00
Vladislav Vaintroub
1befd1fb25 merge 2010-03-03 16:06:14 +01:00
Mattias Jonsson
af738870d4 Fix for debug print of null string
(fails on pb for solaris debug_max)
2010-03-03 15:58:12 +01:00
Vladislav Vaintroub
c903a13e6a merge 2010-03-03 15:48:54 +01:00
Vladislav Vaintroub
44084ea4b3 Fix a problem reported by Alik:
when cmake is used for building in a symlinked directory, 
and confguration is later adjusted with "cmake-gui ." After it,
GenServerSource fails with "no rule for <filename>". The reason
for the error is that cmake-gui  resolves "." as realpath and rules
are generated accordingly, while "cmake" used symlinked path

The fix uses ${CMAKE_CURRENT_BINARY_DIR} instead of 
${CMAKE_BINARY_DIR}/sql  for generated files. 
This causes CMake to use relative file names so 
relative file names when generating make rules.
Using relative filenames avoids the problem of 
refering to the same directory using 2 different paths.

Besides, using ${CMAKE_CURRENT_BINARY_DIR} is 
a commonly used style when working with generated 
files.
2010-03-03 12:43:30 +01:00
Vladislav Vaintroub
273d74eaa5 Bug #51488 :missing features and change behavior in cmake runs compared to
autotools runs
- Fix recognition of --with-debug=full in configure wrapper
- Remove CMakeCache.txt in configure wrapper, to match the original
- Fix recognition of max-no-ndb
- Fix broken dependencies of mysql_fix_privilege_table.sql from 
  mysql_system_tables.sql and mysql_system_tables_fix.sql
- Add "distclean target" that informs user about appropriate bzr command
2010-03-03 12:29:34 +01:00
Jon Olav Hauglid
b59f88ee1f Bug #51376 Assert `! is_set()' failed in
Diagnostics_area::set_ok_status on DROP FUNCTION

This assert tests that the server is not trying to send "ok" to
the client if an error has occured during statement processing.

In this case, the assert was triggered by lock timeout errors when
accessing system tables to do an implicit REVOKE after executing
DROP FUNCTION/PROCEDURE. In practice, this was only likely to
happen with very low values for "lock_wait_timeout" (in the bug report
1 second was used). These errors were ignored and the server tried
to send "ok" to the client, triggering the assert.

The patch for Bug#45225 introduced lock timeouts for metadata locks.
This made it possible to get timeouts when accessing system tables.
Note that a followup patch for Bug#45225 pushed after this
bug was reported, changed accessing of system tables such
that the user-supplied timeout value is ignored and the maximum
timeout value is used instead. This exact bug was therefore
only noticeable in the period between the initial Bug#45225 patch
and the followup patch.

However, the same problem could occur for any errors during revoking
of privileges - not just timeouts. This patch fixes the problem by
making sure that any errors during revoking of privileges are
reported to the client. 

Test case added to sp-destruct.test. Since the original bug is not
reproducable now that system tables are accessed using a a long
timeout value, this test instead calls DROP FUNCTION with a grant
system table missing.
2010-03-03 10:24:53 +01:00
Alexander Nozdrin
c17e266437 Manual merge from mysql-next-mr.
Conflicts:
  - sql/sql_base.cc
2010-03-02 17:34:50 +03:00
Mattias Jonsson
b2838f1a70 manual merge fix of bug#42438 in mysql-next-mr-merge 2010-03-02 00:05:30 +01:00
Dmitry Lenev
48367a2155 Merged recent changes from mysql-next-mr-bugfixing
into mysql-next-4284 tree.
2010-03-01 20:07:11 +03:00
Dmitry Lenev
e5876eea6f Merged recent changes from mysql-next-mr-bugfixing
into mysql-next-4284.
2010-03-01 19:48:39 +03:00
Andrei Elkin
16a81cd32f BUG#50296
restoring the maximum of slave_net_timeout as defined
#define LONG_TIMEOUT ((ulong) 3600L*24L*365L)
2010-03-01 18:48:34 +02:00
Roy Lyseng
9302df9131 WL#5252: Deprecate --optimizer_search_depth=63
Add deprecation warning when variable optimizer_search_depth is given
the value 63.
      
  mysql-test/r/greedy_optimizer.result
    Updated with warning text.
  mysql-test/r/mysqld--help-notwin.result
    Updated with warning from mysqld --help --verbose.
  mysql-test/r/mysqld--help-win.result
    Updated with warning from mysqld --help --verbose.
  sql/sys_vars.cc
    Added an update check function to the constructor invocation for
    the optimizer_search_depth variable. The function emits a
    warning message for the value 63.
2010-03-01 17:31:02 +01:00
Dmitry Lenev
178daf9273 Merge recent changes from mysql-next-mr-bugfixing
into mysql-next-4284 tree.
2010-03-01 18:13:57 +03:00
Marc Alff
9b2bb69c4a Bug#50296 Slave reconnects earlier than the prescribed slave_net_timeout value
Fixed failed assert on 64 bit platforms, introduced by the previous fix.

mysqld: sys_vars.h:125: Assertion `size == sizeof(T)' failed.
2010-03-01 07:30:22 -07:00
Alexander Nozdrin
b73cba223b Manual merge from mysql-next-mr.
Conflicts:
  - sql/item.cc
2010-03-01 13:06:11 +03:00
Alexander Nozdrin
1913b715bc Manual merge from mysql-trunk-merge.
Conflicts:
  - sql/share/Makefile.am
2010-03-01 12:39:44 +03:00
Andrei Elkin
97a22d0af5 merging to 6.0-codebase-bugfixing from a local branch 2010-02-28 19:47:16 +02:00
Andrei Elkin
e8de82d3d5 Bug #50296 Slave reconnects earlier than the prescribed slave_net_timeout value
There was auto-reconnecting by slave earlier than a prescribed by slave_net_timeout value.
The issue happened on 64bit solaris that spotted rather incorrect casting of 
the ulong slave_net_timeout into the uint of mysql.options.read_timeout.

Notice, that there is no reason for slave_net_timeout to be of type of ulong.
Since it's primarily passed as arg to mysql_options the type can be made
as uint to avoid all conversion hassles.
That's what the fixes are made.
A "side" effect of the patch is a new value for the max of slave_net_timeout
to be the max of the unsigned int type (therefore to vary across platforms).

Note, a regression test can't be made to run reliably without making it to last over some 
20 secs. That's why it is placed in suite/large_tests.
2010-02-28 19:31:46 +02:00
Dmitry Lenev
dcaa144852 Fix for bug #51105 "MDL deadlock in rqg_mdl_stability test
on Windows".

On platforms where read-write lock implementation does not
prefer readers by default (Windows, Solaris) server might
have deadlocked while detecting MDL deadlock.

MDL deadlock detector relies on the fact that read-write
locks which are used in its implementation prefer readers
(see new comment for MDL_lock::m_rwlock for details).
So far MDL code assumed that default implementation of
read/write locks for the system has this property.
Indeed, this turned out ot be wrong, for example, for
Windows or Solaris. Thus MDL deadlock detector might have
deadlocked on these systems.

This fix simply adds portable implementation of read/write
lock which prefer readers and changes MDL code to use this
new type of synchronization primitive.

No test case is added as existing rqg_mdl_stability test can
serve as one.
2010-02-28 07:35:09 +03:00
Konstantin Osipov
e5f5956014 WL#5000 FLUSH TABLES|TABLE table_list WITH READ LOCK.
Extend and implement the grammar that allows to FLUSH WITH READ LOCK
a list of tables, rather than all of them.

Incompatible grammar change:
Previously one could perform FLUSH TABLES, HOSTS, PRIVILEGES in a single
statement.
After this change, FLUSH TABLES must always be alone on the list.
Judging by the test suite, however, the old extended syntax
was never or very rarely used.

The new statement requires RELOAD ACL global privilege and
LOCK_TABLES_ACL | SELECT_ACL on individual tables.
In other words, it's an atomic combination of LOCK TALBES <list> READ
and FLUSH TABLES <list>, and requires respective privileges.

For additional information about the semantics, please
see WL#5000 and the comment for flush_tables_with_read_lock()
function in sql_parse.cc
2010-02-27 20:05:14 +03:00
Alexander Barkov
06ca4ae33d Mergine from mysql-next-me 2010-02-27 11:43:32 +04:00
Alexey Kopytov
031657c694 Manual merge from mysql-5.1-bugteam to mysql-trunk-merge.
Conflicts:

Text conflict in scripts/Makefile.am
Text conflict in sql/share/Makefile.am
2010-02-26 16:06:31 +03:00
Jon Olav Hauglid
016928320d Bug #51240 ALTER TABLE of a locked MERGE table fails
The problem was that ALTER TABLE on a merge table which was locked 
using LOCK TABLE ... WRITE, by mistake gave 
ER_TABLE_NOT_LOCKED_FOR_WRITE.

During opening of the table to be ALTERed, open_table() tried to
get an upgradable metadata lock. In LOCK TABLEs mode, this lock
must already exist (i.e. taken by LOCK TABLE) as new locks of this
type cannot be acquired for fear of deadlock. So in LOCK TABLEs
mode, open_table() tried to find an existing upgradable lock for
the table to be altered.

The problem was that open_table() also tried to find upgradable
metadata locks for children of merge tables even if no such
locks are needed to execute ALTER TABLE on merge tables.

This patch fixes the problem by making sure that open tables code
only searches for upgradable metadata locks for the merge table
and not for the merge children tables. 

The patch also fixes a related bug where an upgradable metadata
lock was aquired outside of LOCK TABLEs mode even if the table in
question was temporary. This bug meant that LOCK TABLES or DDL on
temporary tables by mistake could be blocked/aborted by locks held
on base tables with the same table name by other connections.

Test cases added to merge.test and lock_multi.test.
2010-02-26 13:40:25 +01:00
Sergey Glukhov
1bb6ea1727 automerge 2010-02-26 16:19:05 +04:00
Sergey Glukhov
fe94dec679 Bug#50995 Having clause on subquery result produces incorrect results.
The problem is that cond->fix_fields(thd, 0) breaks
condition(cuts off 'having'). The reason of that is
that NULL valued Item pointer is present in the
middle of Item list and it breaks the Item processing
loop.
2010-02-26 15:39:25 +04:00
Evgeny Potemkin
a0723c0665 Auto-merged fox for the bug#50843. 2010-02-26 14:19:44 +03:00
Evgeny Potemkin
cc01fc3f5f Bug#50843: Filesort used instead of clustered index led to
performance degradation.

Filesort + join cache combination is preferred to full index scan because it
is usually faster. But it's not the case when the index is clustered one.

Now test_if_skip_sort_order function prefers filesort only if index isn't
clustered.
2010-02-26 14:17:00 +03:00
Jon Olav Hauglid
2c4b6dc503 Bug #51336 Assert in reload_acl_and_cache during RESET QUERY CACHE
Attempts to execute RESET statements within a transaction that
had acquired metadata locks, led to an assertion failure on 
debug servers. This bug didn't cause any problems on release
builds.

The triggered assert is designed to check that caches are not
flushed or reset while having active transactions. It is triggered
if acquired metadata locks exist that are not from LOCK TABLE or
HANDLER statements.

In this case it was triggered by RESET QUERY CACHE while having
an active transaction that had acquired locks. The reason the
assertion was triggered, was that RESET statements, unlike the
similar FLUSH statements, was not causing an implicit commit.

This patch fixes the problem by making sure RESET statements
commit the current transaction before executing. The commit
causes acquired metadata locks to be released, preventing the
assertion from being triggered.

Incompatible change: This patch changes RESET statements so
that they cause an implicit commit.

Test case added to query_cache.test.
2010-02-26 10:58:33 +01:00
Alexander Nozdrin
16fd5b9b05 Auto-merge from mysql-next-mr. 2010-02-25 23:00:37 +03:00
Alexander Nozdrin
c962fdf25c Auto-merge from mysql-next-mr. 2010-02-25 22:58:57 +03:00
Gleb Shchepa
79d8de67a9 Bug #45360: wrong results
Propagation of a large unsigned numeric constant
in the WHERE expression led to wrong result.

For example,
"WHERE a = CAST(0xFFFFFFFFFFFFFFFF AS USIGNED) AND FOO(a)",
where a is an UNSIGNED BIGINT, and FOO() accepts strings,
was transformed to "... AND FOO('-1')".

That has been fixed.

Also EXPLAIN EXTENDED printed incorrect numeric constants in
transformed WHERE expressions like above. That has been
fixed too.
2010-02-25 23:13:11 +04:00
Jon Olav Hauglid
3eead1f0f1 Bug #51355 handler stmt cause assertion in
bool MDL_context::try_acquire_lock(MDL_request*)

This assert was triggered in the following way:
1) HANDLER OPEN t1 from connection 1
2) DROP TABLE t1 from connection 2. This will block due to the metadata lock
held by the open handler in connection 1.
3) DML statement (e.g. INSERT) from connection 1. This will close the table
opened by the HANDLER in 1) and release its metadata lock. This is done due
to the pending exclusive metadata lock from 2). 
4) DROP TABLE t1 from connection 2 now completes and removes table t1.
5) HANDLER READ from connection 1. Since the handler table was closed in 3),
the handler code will try to reopen the table. First a new metadata lock on
t1 will be granted before the command fails since the table was removed in 4).
6) HANDLER READ from connection 1. This caused the assert.

The reason for the assert was that the MDL_request's pointer to the lock
ticket was not reset when the statement failed. HANDLER READ then tried to
acquire a lock using the same MDL_request object, triggering the assert.
This bug was only noticeable on debug builds and did not cause any problems
on release builds.

This patch fixes the problem by assuring that the pointer to the metadata 
lock ticket is reset when reopening of handler tables fails.

Test case added to handler.inc
2010-02-25 18:08:12 +01:00
Alexey Kopytov
3dc164664a Automerge. 2010-02-25 19:26:30 +03:00
Alexey Kopytov
735de9ea7e Bug #50335: Assertion `!(order->used & map)' in eq_ref_table
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-02-25 18:48:53 +03:00
Jon Olav Hauglid
a52ad97e67 merge from mysql-next-mr-bugfixing 2010-02-25 13:29:14 +01:00
Jonathan Perkin
26e77e0027 Some CMake packaging fixes:
- Remove INSTALL-BINARY from installed docs directory, we provide a copy
   in the root directory (but perhaps this should be revisited later).

 - Disable audit_null and daemon_example plugins.

 - Fix the docs directory.

 - Remove mysql-test/Makefile.in

 - Build and install mysql_tzinfo_to_sql

 - Remove share/charsets/languages.html
2010-02-24 19:19:24 +00:00