Commit graph

18179 commits

Author SHA1 Message Date
Alexey Kopytov
689901f36f Automerge. 2009-06-17 16:36:45 +04:00
Alexey Kopytov
736fa25e58 Automerge. 2009-06-17 15:50:50 +04:00
Martin Hansson
aa8677bc32 Bug#45168: assertion with convert() and empty set value
The assertion in String::copy was added in order to avoid
valgrind errors when the destination was the same as the source.
Eased restriction to allow for the case when str == NULL.


mysql-test/r/func_set.result:
  Bug#45168: Test result
mysql-test/t/func_set.test:
  Bug#45168: Test case
sql/item_strfunc.cc:
  Bug#45168: Code cleanup and grammar correction in comment
sql/sql_string.cc:
  Bug#45168: Fix
2009-06-16 16:36:15 +02:00
Georgi Kodinov
48d911e708 Addendum to the fix for bug #44821: move partition dependent test
to a test file that guarantees the presence of partition code
2009-06-16 12:59:57 +03:00
Kristofer Pettersson
86c0346212 Automerge 2009-06-16 10:49:04 +02:00
Kristofer Pettersson
b9e1ee63bb Automerge 2009-06-16 10:42:54 +02:00
Kristofer Pettersson
02e5ad9881 Bug#43758 Query cache can lock up threads in 'freeing items' state
Early patch submitted for discussion.

It is possible for more than one thread to enter the condition
in query_cache_insert(), but the condition predicate is to
signal one thread each time the cache status changes between
the following states: {NO_FLUSH_IN_PROGRESS,FLUSH_IN_PROGRESS,
TABLE_FLUSH_IN_PROGRESS}

Consider three threads THD1, THD2, THD3

   THD2: select ... => Got a writer in ::store_query
   THD3: select ... => Got a writer in ::store_query
   THD1: flush tables => qc status= FLUSH_IN_PROGRESS;
                      new writers are blocked.
   THD2: select ... => Still got a writer and enters cond in
                       query_cache_insert
   THD3: select ... => Still got a writer and enters cond in
                       query_cache_insert
   THD1: flush tables => finished and signal status change.
   THD2: select ... => Wakes up and completes the insert.
   THD3: select ... => Happily waiting for better times. Why hurry?

This patch is a refactoring of this lock system. It introduces four new methods:
   Query_cache::try_lock()
   Query_cache::lock()
   Query_cache::lock_and_suspend()
   Query_cache::unlock()

This change also deprecates wait_while_table_flush_is_in_progress(). All threads are
queued and put on a conditional wait. On each unlock the queue is signalled. This resolve
the issues with left over threads. To assure that no threads are spending unnecessary
time waiting a signal broadcast is issued every time a lock is taken before a full
cache flush.

mysql-test/r/query_cache_debug.result:
  * Added test case for bug43758
mysql-test/t/query_cache_debug.test:
  * Added test case for bug43758
sql/sql_cache.cc:
  * Replaced calls to wait_while_table_flush_is_in_progress() with
    calls to try_lock(), lock_and_suspend() and unlock().
  * Renamed enumeration Cache_status to Cache_lock_status.
  * Renamed enumeration items to UNLOCKED, LOCKED_NO_WAIT and LOCKED.
    If the LOCKED_NO_WAIT lock type is used to lock the query cache, other
    threads using try_lock() will fail to acquire the lock.
    This is useful if the query cache is temporary disabled due to 
    a full table flush.
sql/sql_cache.h:
  * Replaced calls to wait_while_table_flush_is_in_progress() with
    calls to try_lock(), lock_and_suspend() and unlock().
  * Renamed enumeration Cache_status to Cache_lock_status.
  * Renamed enumeration items to UNLOCKED, LOCKED_NO_WAIT and LOCKED.
    If the LOCKED_NO_WAIT lock type is used to lock the query cache, other
    threads using try_lock() will fail to acquire the lock.
    This is useful if the query cache is temporary disabled due to 
    a full table flush.
2009-06-16 10:34:47 +02:00
Martin Hansson
5d44b2f3a5 Merge 2009-06-16 10:34:32 +02:00
Davi Arnaut
3cc3aa7d70 Post-merge fix: modify regular expression to better handle 24 hour
times (ie: 2:16:20).

mysql-test/r/log_tables_debug.result:
  Update test case result.
mysql-test/t/log_tables_debug.test:
  Skip spaces and handle case when a leading zero is not printed.
2009-06-15 20:27:27 -03:00
Davi Arnaut
cebad07c5d Disable session debugging after its not necessary anymore.
mysql-test/t/log_tables_debug.test:
  Remove spurious spaces and disable session debugging.
2009-06-15 20:02:25 -03:00
Staale Smedseng
37a5f2d421 Bug #45387 Information about statement id for prepared
statements missed from general log

A FLUSH LOGS is added to ensure that the log info hits
the file before attempting to process.

mysql-test/t/log_tables_debug.test:
  A FLUSH LOGS is added, and in the event that a match is
  not found, <FILE> is reset and the contents of the log
  file is dumped for debugging purposes.
2009-06-15 18:03:25 +02:00
Bernt M. Johnsen
d6a9e61c45 Bug#32357 Prepared for push on 5.0-bugteam branch 2009-06-15 17:14:00 +02:00
Georgi Kodinov
6df6c8ee95 Bug #44810: index merge and order by with low sort_buffer_size
crashes server!

The problem affects the scenario when index merge is followed by a filesort
and the sort buffer is not big enough for all the sort keys.
In this case the filesort function will read the data to the end through the 
index merge quick access method (and thus closing the cursor etc), 
but will leave the pointer to the quick select method in place.
It will then create a temporary file to hold the results of the filesort and
will add it as a sort output file (in sort.io_cache).
Note that filesort will copy the original 'sort' structure in an automatic
variable and restore it after it's done.
As a result at exiting filesort() we have a sort.io_cache filled in and 
nothing else (as a result of close of the cursors at end of reading data 
through index merge).
Now create_sort_index() will note that there is a select and will clean it up
(as it's been used already by filesort() reading the data in). While doing that
a special case in the index merge destructor will clean up the sort.io_cache,
assuming it's an output of the index merge method and is not needed anymore.
As a result the code that tries to read the data back from the filesort output 
will get no data in both memory and disk and will crash.
      
Fixed similarly to how filesort() does it : by copying the sort.io_cache structure
to a local variable, removing the pointer to the io_cache (so that it's not freed 
by QUICK_INDEX_MERGE_SELECT::~QUICK_INDEX_MERGE_SELECT) and restoring the original 
structure (together with the valid pointer) after the cleanup is done.
This is a safe thing to do because all the structures are already cleaned up by
hitting the end of the index merge's read method (QUICK_INDEX_MERGE_SELECT::get_next()) 
and the cleanup code being written in a way that tolerates repeating cleanups.

mysql-test/r/index_merge.result:
  Bug #44810: test case
mysql-test/t/index_merge.test:
  Bug #44810: test case
sql/sql_select.cc:
  Bug #44810: preserve the io_cache produced by filesort while cleaning up
  the index merge quick access method (QUICK_INDEX_MERGE_SELECT).
2009-06-15 16:38:15 +03:00
Davi Arnaut
66398a877a Bug#45100: Incomplete DROP USER in case of SQL_MODE = 'PAD_CHAR_TO_FULL_LENGTH'
The SQL-mode PAD_CHAR_TO_FULL_LENGTH could prevent a DROP USER
statement from privileges associated with the user being dropped.
What ocurred was that reading from the User and Host fields of
the tables tables_priv or columns_priv would yield values padded
with spaces, causing a failure to match a specified user or host 
('user' != 'user     ');

The solution is to disregard the PAD_CHAR_TO_FULL_LENGTH mode
when iterating over and matching values in the privileges tables
for a DROP USER statement.

mysql-test/r/sql_mode.result:
  Add test case result for Bug#45100.
mysql-test/t/sql_mode.test:
  Add test case for Bug#45100.
sql/sql_acl.cc:
  Clear MODE_PAD_CHAR_TO_FULL_LENGTH before dropping privileges.
2009-06-12 18:11:19 -03:00
Staale Smedseng
35cf663250 Bug #45387 Information about statement id for prepared
statements missed from general log

A refinement of the test in the previous patch to avoid
using sleep as a means to ensure that timestamps are
added to the log entries.

mysql-test/t/log_tables_debug.test:
  New test file. A debug feature is used to ensure that
  log entries are prefixed with a timestamp.
sql/log.cc:
  A debug feature is implemented to ensure that
  log entries are prefixed with a timestamp.
2009-06-12 16:28:10 +02:00
Georgi Kodinov
ed112a8049 automerge 2009-06-12 17:04:24 +03:00
Georgi Kodinov
4228f4371e automerge 2009-06-12 16:58:48 +03:00
Patrick Crews
62a32540fc Bug#44920: MTR2 is not processing master.opt input properly on Windows
Re-enabled tests main.init_connect and rpl.rpl_init_slave.test for non-Windows
platforms.

Please remove this code upon fixing the bug.
2009-06-12 14:40:02 +01:00
Georgi Kodinov
3e82a86ed2 Bug #45386: Wrong query result with MIN function in field list,
WHERE and GROUP BY clause

Loose index scan may use range conditions on the argument of 
the MIN/MAX aggregate functions to find the beginning/end of 
the interval that satisfies the range conditions in a single go.
These range conditions may have open or closed minimum/maximum 
values. When the comparison returns 0 (equal) the code should 
check the type of the min/max values of the current interval 
and accept or reject the row based on whether the limit is 
open or not.
There was a wrong composite condition on checking this and it was
not working in all cases.
Fixed by simplifying the conditions and reversing the logic.

mysql-test/r/group_min_max.result:
  Bug #45386: test case
mysql-test/t/group_min_max.test:
  Bug #45386: test case
sql/opt_range.cc:
  Bug #45386: fix the check whether to use the value if on the
  interval boundry
2009-06-12 15:38:55 +03:00
Satya B
92ffd7e025 Applying InnoDB snashot 5.1-ss5282, Add TestCase for BUG#40565
Merge the test case from 5.0 to 5.1 for BUG#40565

Detailed revision comments:

r5233 | marko | 2009-06-03 15:12:44 +0300 (Wed, 03 Jun 2009) | 11 lines
branches/5.1: Merge the test case from r5232 from branches/5.0:
  ------------------------------------------------------------------------
  r5232 | marko | 2009-06-03 14:31:04 +0300 (Wed, 03 Jun 2009) | 21 lines

  branches/5.0: Merge r3590 from branches/5.1 in order to fix Bug #40565
  (Update Query Results in "1 Row Affected" But Should Be "Zero Rows").

  Also, add a test case for Bug #40565.

  rb://128 approved by Heikki Tuuri
  ------------------------------------------------------------------------
2009-06-11 18:42:25 +05:30
Martin Hansson
f2448c93d6 Bug#44821: select distinct on partitioned table returns wrong results
Range analysis did not request sorted output from the storage engine,
which cause partitioned handlers to process one partition at a time
while reading key prefixes in ascending order, causing values to be 
missed. Fixed by always requesting sorted order during range analysis.
This fix is introduced in 6.0 by the fix for bug no 41136.

mysql-test/r/group_min_max.result:
  Bug#44821: Test result.
mysql-test/t/group_min_max.test:
  Bug#44821: Test case
sql/opt_range.cc:
  Bug#44821: Fix.
2009-06-10 11:56:00 +02:00
Vladislav Vaintroub
768bbae90e Backport WL#3653 to 5.1 to enable bundled innodb plugin.
Remove custom DLL loader code from innodb plugin code, use 
symbols exported from mysqld.


storage/innodb_plugin/handler/ha_innodb.cc:
  Remove a Win32 workaround for current_thd.
  The original  problem that innodb plugin used
  value of TLS variable across DLL boundaries is 
  solved in MySQL server (current_thd is a function
  not TLS variable now)
storage/innodb_plugin/handler/handler0alter.cc:
  Remove custom delay loader
storage/innodb_plugin/handler/handler0vars.h:
  Remove custom delay loader
storage/innodb_plugin/handler/i_s.cc:
  Remove custom delay loader
storage/innodb_plugin/handler/win_delay_loader.cc:
  Remove custom delay loader
storage/innodb_plugin/plug.in:
  Remove commented out MYSQL_PLUGIN_STATIC, 
  CMake would not parse that correctly
2009-06-10 10:59:49 +02:00
Philip Stoev
d98dee2c3b Bug #29971 status.test fails
This test uses SHOW STATUS and the like, which may be unstable in the face
of logging to table, since the CSV handler is actively executing operations
and thus incrementing the counters.

Fixed by disabling logging to table for the duration of the test and restoring
it afterwards. This causes various counters to properly start counting from zero
and never advance due to CSV operations.
2009-06-10 11:58:36 +03:00
Alexey Kopytov
897a1b56d8 Bug #45236: large blob inserts from mysqldump fail, possible
memory issue ? 
 
The mysql command line client could misinterpret some character 
sequences as commands under some circumstances. 
 
The upper limit for internal readline buffer was raised to 1 GB 
(the same as for server's max_allowed_packet) so that any input 
line is processed by add_line() as a whole rather than in 
chunks.

client/mysql.cc:
  The upper limit for internal readline buffer was raised to 1 GB 
  (the same as for server's max_allowed_packet) so that any input 
  line is processed by add_line() as a whole rather than in 
  chunks.
mysql-test/r/mysql-bug45236.result:
  Added a test case for bug #45236.
mysql-test/t/mysql-bug45236.test:
  Added a test case for bug #45236.
2009-06-10 11:24:47 +04:00
Davi Arnaut
9d8c191e9c Tag count_distinct3.test as a big test.
mysql-test/t/count_distinct3.test:
  Test is resource intensive.
2009-06-08 20:03:01 -03:00
Davi Arnaut
8ad4596150 Test is very resource intensive under debug and valgrind runs.
Under a debug run, the trace file grows to a few gigabytes.
Under valgrind, takes more then 20 minutes due to the high
number of insert statements.

mysql-test/t/multi_update2.test:
  Skip under --valgrind and --debug.
2009-06-08 19:18:31 -03:00
Davi Arnaut
a7c2707740 Test is very resource intensive under debug and valgrind runs.
Under a debug run, the trace file grows to a few gigabytes.
Under valgrind, takes more then 20 minutes due to the high
number of insert statements.

mysql-test/t/multi_update2.test:
  Skip under --valgrind and --debug.
2009-06-08 12:51:06 -03:00
Davi Arnaut
55eee5208c Merge from 5.1 main. 2009-06-08 09:55:37 -03:00
Gleb Shchepa
ed7f0f3023 Bug #44886: SIGSEGV in test_if_skip_sort_order() -
uninitialized variable used as subscript

Grouping select from a "constant" InnoDB table (a table
of a single row) joined with other tables caused a crash.


mysql-test/r/innodb_mysql.result:
  Added test case for bug bug #44886.
mysql-test/t/innodb_mysql.test:
  Added test case for bug bug #44886.
sql/sql_select.cc:
  Bug #44886: SIGSEGV in test_if_skip_sort_order() -
              uninitialized variable used as subscript
  
  1. The test_if_order_by_key function returned unitialized
     used_key_parts parameter in case of a "constant" InnoDB
     table. Calling function uses this parameter values as
     an array index, thus sometimes it caused a crash.
     The test_if_order_by_key function has been modified
     to set used_key_parts to 0 (no need for ordering).
  
  2. The test_if_skip_sort_order function has been
     modified to accept zero used_key_parts value and
     to prevent an array access by negative index.
2009-06-08 01:40:53 +05:00
Davi Arnaut
12f91b1d8c Bug#44672: Assertion failed: thd->transaction.xid_state.xid.is_null()
The problem is that when a optimization of read-only transactions
(bypass 2-phase commit) was implemented, it removed the code that
reseted the XID once a transaction wasn't active anymore:

sql/sql_parse.cc:

-  bzero(&thd->transaction.stmt, sizeof(thd->transaction.stmt));
-  if (!thd->active_transaction())
-    thd->transaction.xid_state.xid.null();
+  thd->transaction.stmt.reset();

This mostly worked fine as the transaction commit and rollback
functions (in handler.cc) reset the XID once the transaction is
ended. But those functions wouldn't reset the XID in case of
a empty transaction, leading to a assertion when a new starting
a new XA transaction.

The solution is to ensure that the XID state is reset when empty
transactions are ended (by either commit or rollback). This is
achieved by reorganizing the code so that the transaction cleanup
routine is invoked whenever a transaction is ended.

mysql-test/r/xa.result:
  Add test case result for Bug#44672
mysql-test/t/xa.test:
  Add test case for Bug#44672
sql/handler.cc:
  Invoke transaction cleanup function whenever a transaction is
  ended. Move XID state reset logic to the transaction cleanup
  function.
sql/sql_class.h:
  Add XID state reset logic.
2009-06-05 19:16:54 -03:00
Bernt M. Johnsen
6199226f94 Bug#15866 Split of main.sp and main.sp-fib. Merged from 5.0 gca 2009-06-04 16:13:16 +02:00
Bernt M. Johnsen
dee1bbaa5c Bug#15866 Split of main.sp and main.sp-fib. Merged from 5.1 gca 2009-06-04 16:10:18 +02:00
Bernt M. Johnsen
caa703b1e3 Bug#15866 ported from 5.0-gca 2009-06-04 13:53:15 +02:00
Bernt M. Johnsen
a3ac1f7e78 Bug#15866 main.sp-fib split from main.sp 2009-06-04 13:38:53 +02:00
Georgi Kodinov
a037071a75 Bug #36995: valgrind error in remove_const during subquery executions
When copying the Item class one must copy its attributes as well.

mysql-test/r/innodb_mysql.result:
  Bug #36995: test case
mysql-test/t/innodb_mysql.test:
  Bug #36995: test case
sql/item.cc:
  Bug #36995: copy attributes in the copy constructor
2009-06-04 12:52:40 +03:00
Alexander Barkov
d7bfc76dec Bug#43827 Server closes connections and restarts
Problem:
  Crash happened with a user-defined utf8 collation,
  on attempt to insert a value longer than the column
  to store.
Reason:
  The "ctype" member was not initialized (NULL) when
  allocating a user-defined utf8 collation, so an attempt
  to call my_ctype(cs, *str) to check if we loose any important
  data when truncating the value made the server crash.
Fix:
  Initializing tge "ctype" member to a proper value.


mysql-test/r/ctype_ldml.result
  Adding tests

mysql-test/t/ctype_ldml.test
  Adding tests

strings/ctype-uca.c
  Adding initialization of "ctype" member.

modified:
  mysql-test/r/ctype_ldml.result
  mysql-test/t/ctype_ldml.test
  strings/ctype-uca.c
2009-06-04 14:35:29 +05:00
Sergey Glukhov
5fb8b93e98 5.0-bugteam->5.1-bugteam merge 2009-06-04 10:54:23 +05:00
Sergey Glukhov
8041311e24 Bug#44798 MySQL engine crashes when creating stored procedures with execute_priv=N
The crash happens because of uninitialized
lex->ssl_cipher, lex->x509_subject, lex->x509_issuer variables.
The fix is to add initialization of these variables for
stored procedures&functions.


mysql-test/r/sp_notembedded.result:
  test result
mysql-test/t/sp_notembedded.test:
  test case
sql/sql_acl.cc:
  The crash happens because of uninitialized
  lex->ssl_cipher, lex->x509_subject, lex->x509_issuer variables.
  The fix is to add initialization of these variables for
  stored procedures&functions.
2009-06-04 10:28:45 +05:00
Satya B
ac8e02d55f merge to 5.1-bugteam 2009-06-02 14:10:21 +05:30
Satya B
8bd3383fd6 merge to 5.1-bugteam tree 2009-06-02 13:44:41 +05:30
Sergey Glukhov
86e425fe11 5.0-bugteam->5.1-bugteam merge 2009-06-02 12:00:37 +05:00
Sergey Glukhov
33734e956f Bug#45152 crash with round() function on longtext column in a derived table
The crash happens due to wrong max_length value which is set on
Item_func_round::fix_length_and_dec() stage. The value is set to
args[0]->max_length which is too big in case of LONGTEXT(LONGBLOB) fields.
The fix is to set max_length using float_length() function.



mysql-test/r/func_math.result:
  test result
mysql-test/t/func_math.test:
  test case
sql/item_func.cc:
  The crash happens due to wrong max_length value which is set on
  Item_func_round::fix_length_and_dec() stage. The value is set to
  args[0]->max_length which is too big in case of LONGTEXT(LONGBLOB) fields.
  The fix is to set max_length using float_length() function.
2009-06-02 11:38:13 +05:00
Alexey Kopytov
aef45b47a0 Automerge. 2009-06-01 16:43:16 +04:00
Alexey Kopytov
47b334a642 Automerge. 2009-06-01 16:42:24 +04:00
Alexey Kopytov
7561bc9212 Manual merge. 2009-06-01 16:00:38 +04:00
He Zhenxing
5dd1abae7d BUG#43263 BEGIN skipped in some replicate-do-db cases
BEGIN/COMMIT/ROLLBACK was subject to replication db rules, and
caused the boundary of a transaction not recognized correctly 
when these queries were ignored by the rules.

Fixed the problem by skipping replication db rules for these
statements.


sql/log_event.cc:
  Skip checking replication db rules for BEGIN/COMMIT/ROLLBACK statements
2009-05-31 11:26:58 +08:00
Tatiana A. Nurnberg
88e84c1fbf auto-merge 2009-05-29 18:49:35 +02:00
Kristofer Pettersson
b34227cee6 Automerge 2009-05-29 16:25:22 +02:00
Kristofer Pettersson
66e0ee6639 Bug#44658 Create procedure makes server crash when user does not have ALL privilege
MySQL crashes if a user without proper privileges attempts to create a procedure.

The crash happens because more than one error state is pushed onto the Diagnostic
area. In this particular case the user is denied to implicitly create a new user
account with the implicitly granted privileges ALTER- and EXECUTE ROUTINE.

The new account is needed if the original user account contained a host mask.
A user account with a host mask is a distinct user account in this context.
An alternative would be to first get the most permissive user account which
include the current user connection and then assign privileges to that
account. This behavior change is considered out of scope for this bug patch.

The implicit assignment of privileges when a user creates a stored routine is a
considered to be a feature for user convenience and as such it is not
a critical operation. Any failure to complete this operation is thus considered
non-fatal (an error becomes a warning).

The patch back ports a stack implementation of the internal error handler interface.
This enables the use of multiple error handlers so that it is possible to intercept
and cancel errors thrown by lower layers. This is needed as a error handler already
is used in the call stack emitting the errors which needs to be converted.


mysql-test/r/grant.result:
  * Added test case for bug44658
mysql-test/t/grant.test:
  * Added test case for bug44658
sql/sp.cc:
  * Removed non functional parameter no_error and my_error calls as all errors
    from this function will be converted to a warning anyway.
  * Change function return type from int to bool.
sql/sp.h:
  * Removed non functional parameter no_error and my_error calls as all errors
    from this function will be converted to a warning anyway.
  * Changed function return value from int to bool
sql/sql_acl.cc:
  * Removed the non functional no_error parameter from the function prototype.
    The function is called from two places and in one of the places we now 
    ignore errors through error handlers.
  * Introduced the parameter write_to_binlog
  * Introduced an error handler to cancel any error state from mysql_routine_grant.
  * Moved my_ok() signal from mysql_routine_grant to make it easier to avoid
    setting the wrong state in the Diagnostic area.
  * Changed the broken error state in sp_grant_privileges() to a warning
    so that if "CREATE PROCEDURE" fails because "Password hash isn't a hexidecimal
    number" it is still clear what happened.
sql/sql_acl.h:
  * Removed the non functional no_error parameter from the function prototype.
    The function is called from two places and in one of the places we now 
    ignore errors through error handlers.
  * Introduced the parameter write_to_binlog
  * Changed return type for sp_grant_privileges() from int to bool
sql/sql_class.cc:
  * Back ported implementation of internal error handler from 6.0 branch
sql/sql_class.h:
  * Back ported implementation of internal error handler from 6.0 branch
sql/sql_parse.cc:
  * Moved my_ok() signal from mysql_routine_grant() to make it easier to avoid
    setting the wrong state in the Diagnostic area.
2009-05-29 15:37:54 +02:00
Bjorn Munch
cf6aeea48c merge from 5.1 main 2009-05-29 13:04:02 +02:00