Commit graph

58977 commits

Author SHA1 Message Date
Gleb Shchepa
3461cdc1a1 Bug #49480: WHERE using YEAR columns returns unexpected results
A few problems were found in the fix for bug 43668:
1) Comparison of the YEAR column with NULL always returned TRUE;
2) Comparison of the YEAR column with constants always returned
   unpredictable result;
3) Unnecessary conversion warnings when comparing a non-integer
   constant with a NULL value in the YEAR column;

The problems described above have been resolved with an
exception: zero (i.e. invalid) YEAR column value comparison
with 00 or 2000 still fail (it is not a regression and it was
not a regression), so MIN/MAX on YEAR column containing zero
value still fail.
2009-12-10 10:05:44 +04:00
Ramil Kalimullin
89ea92505f Auto-merge. 2009-12-10 09:51:08 +04:00
He Zhenxing
644015d239 Auto merge 2009-12-10 12:56:10 +08:00
He Zhenxing
6878d7e74b Merge from 5.0-bugteam 2009-12-10 11:51:42 +08:00
He Zhenxing
cc92cd72a4 Post fix for bug#45520 2009-12-10 11:44:19 +08:00
Evgeny Potemkin
69fa790fbd Bug#49489: Uninitialized cache led to a wrong result.
Arg_comparator uses Item_cache objects to store constants being compared when
they're need a type conversion. Because this cache wasn't initialized properly
Arg_comparator might produce wrong comparison result.

The Arg_comparator::cache_converted_constant function now initializes cache
prior to usage.
2009-12-09 18:43:45 +03:00
Alfranio Correia
ebed1914ec merge mysql-5.1-bugteam (local) --> mysql-5.1-bugteam 2009-12-09 11:03:01 +00:00
Olav Sandstaa
2b0642a639 Fix for Bug#49506 Valgrind error in make_cond_for_table_from_pred
This fix has been proposed by Sergey Petrunya and has been contributed
under SCA by sca@askmonty.org.
      
The cause for this valgrind error is that in the function
add_cond_and_fix() in sql_select.cc an Item_cond_and object is
created. This is marked as fixed but does not have a correct
table_map() attribute. Later, in make_join_select(), if
engine_condition_pushdown is in use, this table map is used and
results in the valgrind error.
      
The fix is to add a call to update_used_tables() in add_cond_and_fix()
so that the table map is updated correctly.
      
This patch is tested by multiple existing tests (e.g. the tests
innodb_mysql, innodb, fulltext, compress all produces this valgrind
warning/error without this fix).
2009-12-09 10:16:11 +01:00
He Zhenxing
a8a01f2062 Merge from 5.0-bugteam 2009-12-09 14:39:07 +08:00
He Zhenxing
714348a8d3 removed rpl_killed_ddl from disabled list 2009-12-09 14:27:46 +08:00
He Zhenxing
bda9422a3a Merge Bug#45520 fix from 5.0-bugteam 2009-12-09 14:24:54 +08:00
He Zhenxing
9058e48121 BUG#45520 rpl_killed_ddl fails sporadically in pb2
There are three issues that caused rpl_killed_ddl fails sporadically
in pb2:

 1) thd->clear_error() was not called before create Query event
if operation is executed successfully.
 2) DATABASE d2 might do exist because the statement to CREATE or
ALTER it was killed
 3) because of bug 43353, kill the query that do DROP FUNCTION or
    DROP PROCEDURE can result in SP not found

This patch fixed all above issues by:
 1) Called thd->clear_error() if the operation succeeded.
 2) Add IF EXISTS to the DROP DATABASE d2 statement
 3) Temporarily disabled testing DROP FUNCTION/PROCEDURE IF EXISTS.
2009-12-09 14:13:56 +08:00
Alfranio Correia
259b028d8e Post-push fix for BUG#45292.
Disabled execution in valgrind to avoid false positive memory
leaks due to fault-injection tests (i.e. call to abort()).
2009-12-08 16:03:19 +00:00
karen.langford@sun.com
d4d4e38413 Raise version number after cloning 5.0.89 2009-12-08 16:35:00 +01:00
sunanda.menon@sun.com
d6e7402d42 Null-merge from mysql-5.1.40sp1-release 2009-12-08 10:26:11 +01:00
Georgi Kodinov
3c434c93d0 Bug #42760: Select doesn't return desired results when we have null values
Part 2 : 
There was a special optimization on the ref access method for 
ORDER BY ... DESC that was set without actually looking on the type of the 
selected index for ORDER BY.
Fixed the SELECT ... ORDER BY .. DESC (it uses a different code path compared
to the ASC that has been fixed with the previous fix).
2009-12-07 16:38:56 +02:00
Luis Soares
514f4814d5 Automerge bzr bundle in bug report into local mysql-5.1-bugteam latest. 2009-12-07 00:28:14 +00:00
Luis Soares
1ee79014e3 Automerge bzr bundle from bug report.
Removed rpl_cross_version from experimental list.
2009-12-06 23:36:07 +00:00
Luis Soares
2abecf2a21 automerge: mysql-5.1-bugteam bug branch --> mysql-5.1-bugteam latest 2009-12-06 23:14:45 +00:00
Luis Soares
289c14931b BUG#49119: Master crashes when executing 'REVOKE ... ON
{PROCEDURE|FUNCTION} FROM ...'

The master would hit an assertion when binary log was
active. This was due to the fact that the thread's diagnostics
area was being cleared before writing to the binlog,
independently of mysql_routine_grant returning an error or
not. When mysql_routine_grant was to return an error, the return
value and the diagnostics area contents would
mismatch. Consequently, neither my_ok would be called nor an
error would be signaled in the diagnostics area, eventually
triggering the assertion in net_end_statement.

We fix this by not clearing the diagnostics area at binlogging
time.
2009-12-06 23:12:11 +00:00
Staale Smedseng
d5391ed61d Merge from 5.0 2009-12-06 19:01:11 +01:00
Staale Smedseng
846c81c763 Bug #47391 no stack trace printed to error log on
solaris after a crash
      
This patch adds a Solaris-specific version of
print_stacktrace() which uses printstack(2), available on all
Solaris versions since Solaris 9. (While Solaris 11 adds
support for the glibc functions backtrace_*() as of
PSARC/2007/162, printstack() is used for consistency over all
Solaris versions.)

The symbol names are mangled, so use of c++filt may be
required as described in the MySQL documentation.
2009-12-06 18:11:37 +01:00
Luis Soares
d0a24b1367 BUG#49479: Slave stops with syntax error: LOAD DATA event without
escaped field names

When in mixed or statement mode, the master logs LOAD DATA
queries by resorting to an Execute_load_query_log_event. This
event does not contain the original query, but a rewritten
version of it, which includes the table field names. However, the
rewrite does not escape the field names. If these names match a
reserved keyword, then the slave will stop with a syntax error
when executing the event.

We fix this by escaping the fields names as it happens already
for the table name.
2009-12-06 01:11:32 +00:00
Alfranio Correia
42fead104a Post-push fix for BUG#45292. 2009-12-05 22:09:41 +00:00
Ramil Kalimullin
7888c98327 Fix for bug#49199: Optimizer handles incorrectly:
field='const1' AND field='const2' in some cases

Building multiple equality predicates containing
a constant which is compared as a datetime (with a field)
we should take this fact into account and compare the 
constant with another possible constatns as datetimes 
as well.

E.g. for the
SELECT ... WHERE a='2001-01-01' AND a='2001-01-01 00:00:00'
we should compare '2001-01-01' with '2001-01-01 00:00:00' as
datetimes but not as strings.
2009-12-04 21:58:40 +04:00
Davi Arnaut
96a3a92c71 Bug#49141: Encode function is significantly slower in 5.1 compared to 5.0
The problem was that the multiple evaluations of a ENCODE or
DECODE function within a single statement caused the random
generator to be reinitialized at each evaluation, even though
the parameters were constants.

The solution is to initialize the random generator only once
if the password (seed) parameter is constant.

This patch borrows code and ideas from Georgi Kodinov's patch.
2009-12-04 13:36:58 -02:00
Davi Arnaut
a2d630d055 Bug#41569: mysql_upgrade (ver 5.1) add 3 fields to mysql.proc table but does not set values
Post-merge fix: Redirect stderr to a file as to avoid buffering
problems due to redirecting stderr to stdout.
2009-12-04 14:00:20 -02:00
Alfranio Correia
e362e9a71b BUG#45292 orphan binary log created when starting server twice
This patch fixes three bugs as follows. First, aborting the server while purging
binary logs might generate orphan files due to how the purge operation was
implemented:

          (purge routine - sql/log.cc - MYSQL_BIN_LOG::purge_logs)

      1 - register the files to be removed in a temporary buffer.
      2 - update the log-bin.index.
      3 - flush the log-bin.index.
      4 - erase the files whose names where register in the temporary buffer
      in step 1.

Thus a failure while  executing step 4 would generate an orphan file. Second,
a similar issue might happen while creating a new binary as follows:

          (create routine - sql/log.cc - MYSQL_BIN_LOG::open)

      1 - open the new log-bin.
      2 - update the log-bin.index.

Thus a failure while executing step 1 would generate an orphan file.

To fix these issues, we record the files to be purged or created before really
removing or adding them. So if a failure happens such records can be used to
automatically remove dangling files. The new steps might be outlined as follows:

          (purge routine - sql/log.cc - MYSQL_BIN_LOG::purge_logs)

      1 - register the files to be removed in the log-bin.~rec~ placed in
      the data directory.
      2 - update the log-bin.index.
      3 - flush the log-bin.index.
      4 - delete the log-bin.~rec~.

          (create routine - sql/log.cc - MYSQL_BIN_LOG::open)

      1 - register the file to be created in the log-bin.~rec~
      placed in the data directory.
      2 - open the new log-bin.
      3 - update the log-bin.index.
      4 - delete the log-bin.~rec~.

          (recovery routine - sql/log.cc - MYSQL_BIN_LOG::open_index_file)

      1 - open the log-bin.index.
      2 - open the log-bin.~rec~.
      3 - for each file in log-bin.~rec~.
        3.1 Check if the file is in the log-bin.index and if so ignore it.
        3.2 Otherwise, delete it.

The third issue can be described as follows. The purge operation was allowing
to remove a file in use thus leading to the loss of data and possible
inconsistencies between the master and slave. Roughly, the routine was only
taking into account the dump threads and so if a slave was not connect the
file might be delete even though it was in use.
2009-12-04 14:40:42 +00:00
Gleb Shchepa
2a878de041 Bug #38883: thd_security_context is not thread safe, crashes?
After-push minor code cleanup for WL 2360: unnecessary external
reference to LOCK_thread_count has been removed from ha_innodb.cc.
2009-12-03 23:38:09 +04:00
lars-erik.bjork@sun.com
99654c27f0 This is a patch for bug#41569.
"mysql_upgrade (ver 5.1) add 3 fields to mysql.proc table but does
not set values".
            
mysql_upgrade (ver 5.1) adds 3 fields (character_set_client, 
collation_connection and db_collation) to the mysql.proc table, but 
does not set any values. When we run stored procedures, which were 
created with mysql 5.0, a warning is logged into the error log.
            
The solution to this is for mysql_upgrade to set default best guess
values for these fields. A warning is also written during upgrade, to
make the user aware that default values are set.
2009-12-03 17:15:47 +01:00
Evgeny Potemkin
c286b4115d Auto-merged. 2009-12-03 16:24:50 +03:00
Evgeny Potemkin
eb9114229f Auto-merged. 2009-12-03 16:21:53 +03:00
Evgeny Potemkin
a2f18f44c6 Bug#48508: Crash on prepared statement re-execution.
Test case cleanup.
2009-12-03 16:15:20 +03:00
Georgi Kodinov
1457d7b367 Bug #48985: show create table crashes if previous access to the table was killed
When checking for an error after removing the special view error handler the code
was not taking into account that open_tables() may fail because of the current
statement being killed. 
Added a check for thd->killed.
Added a client program to test it.
2009-12-03 14:07:46 +02:00
Alexander Barkov
3707a74e6e Bug#44131 Binary-mode "order by" returns records in incorrect order for UTF-8 strings
Problem: Item_char_typecast reported wrong max_length when
casting to BINARY, which lead, in particular, in wrong
"ORDER BY BINARY(char_column)" results.

Fix: making Item_char_typecast report correct max_length.

  @ mysql-test/r/ctype_utf16.result
    Fixing old incorrect test result.
  @ mysql-test/r/ctype_utf32.result
    Fixing old incorrect test result.
  @ mysql-test/r/ctype_utf8.result
    Adding new test
  @ mysql-test/t/ctype_utf8.test
    Adding new test
  @ sql/item_timefunc.cc
    Making Item_char_typecast report correct max_length
    when cast is done to BINARY.
2009-12-03 13:22:34 +04:00
karen.langford@sun.com
032f88055e Raise version number after cloning 5.1.42 2009-12-02 18:52:19 +01:00
Evgeny Potemkin
e4344ffa41 Auto-merged. 2009-12-02 16:49:21 +03:00
Evgeny Potemkin
1a0f3c38b8 Auto-merged fix for the bug#48508. 2009-12-02 16:47:12 +03:00
Alexander Barkov
f81700aa4e Bug#48766 SHOW CREATE FUNCTION returns extra data in return clause
Problem: SHOW CREATE FUNCTION and SELECT DTD_IDENTIFIER FROM I_S.ROUTINES
returned wrong values in case of ENUM return data type and UCS2
character set.

Fix: the string to collect returned data type was incorrectly set to
"binary" character set, therefore UCS2 values where returned with
extra '\0' characters.
Setting string character set to creation_ctx->get_client_cs()
in sp_find_routine(), and to system_charset_info in sp_create_routine
fixes the problem.

Adding tests:
- the original test with Latin letters
- an extra test with non-Latin letters
2009-12-02 15:17:08 +04:00
Satya B
317d0f76b6 Disable the test case innodb-autonic.test until BUG#49267 is fixed
Add the test to disabled list and remove from the experimental list.
2009-12-02 15:17:49 +05:30
Georgi Kodinov
8cef75fa8c merge 2009-12-02 10:00:33 +02:00
Georgi Kodinov
3b5b82eea3 tree name change to -main 2009-12-02 09:58:30 +02:00
Evgeny Potemkin
1db3a684e2 Bug#48508: Crash on prepared statement re-execution.
Actually there is two different bugs.
The first one caused crash on queries with WHERE condition over views
containing WHERE condition. A wrong check for prepared statement phase led
to items for view fields being allocated in the execution memory and freed
at the end of execution. Thus the optimized WHERE condition refers to
unallocated memory on the second execution and server crashed.
The second one caused by the Item_cond::compile function not saving changes
it made to the item tree. Thus on the next execution changes weren't
reverted and server crashed on dereferencing of unallocated space.

The new helper function called is_stmt_prepare_or_first_stmt_execute
is added to the Query_arena class.
The find_field_in_view function now uses
is_stmt_prepare_or_first_stmt_execute() to check whether
newly created view items should be freed at the end of the query execution.
The Item_cond::compile function now saves changes it makes to item tree.
2009-12-01 21:28:45 +03:00
Satya B
f327aa6eee merge to mysql-5.1-bugteam 2009-12-01 17:48:57 +05:30
Satya B
a5b6f69396 Addition to Innodb Plugin 1.0.6 snapshot
the last IF ELSE part which decides the plugin name is not relevant as we still have
to substitute the occurences of INNOBASE with INNODB_PLUGIN.
Remove the last IF ELSE part in CMakeLists.txt as it doesn't make sense in 5.1.
2009-12-01 17:37:56 +05:30
Gleb Shchepa
b2fc91147a Bug #38883 (reopened): thd_security_context is not thread safe, crashes?
manual merge 5.0-->5.1, updating InnoDB plugin.
2009-12-01 14:38:40 +04:00
Gleb Shchepa
5f31dbdc11 Bug #38883 (reopened): thd_security_context is not thread safe, crashes?
The bug 38816 changed the lock that protects THD::query from
LOCK_thread_count to LOCK_thd_data, but didn't update the associated
InnoDB functions.

1. The innobase_mysql_prepare_print_arbitrary_thd and the
innobase_mysql_end_print_arbitrary_thd InnoDB functions have been
removed, since now we have a per-thread mutex: now we don't need to wrap
several inter-thread access tries to THD::query with a single global
LOCK_thread_count lock, so we can simplify the code.

2. The innobase_mysql_print_thd function has been modified to lock
LOCK_thd_data in direct way.
2009-12-01 14:24:44 +04:00
Georgi Kodinov
0b7c514e1e merged 2009-12-01 11:24:42 +02:00
Georgi Kodinov
a33168168c Bug #45576: moving the test from experimental to disabled. 2009-12-01 11:21:15 +02:00
Georgi Kodinov
0852721dbe Revert of the push of bug #20837 due to failing regression tests. 2009-12-01 11:19:51 +02:00