Commit graph

18789 commits

Author SHA1 Message Date
Alexey Kopytov
7f2ba28ef9 Bug #48472: Loose index scan inappropriately chosen for some
WHERE conditions 
 
check_group_min_max() checks if the loose index scan 
optimization is applicable for a given WHERE condition, that is 
if the MIN/MAX attribute participates only in range predicates 
comparing the corresponding field with constants. 
 
The problem was that it considered the whole predicate suitable 
for the loose index scan optimization as soon as it encountered 
a constant as a predicate argument. This is obviously wrong for 
cases when a constant is the first argument of a predicate 
which does not satisfy the above condition. 
 
Fixed check_group_min_max() so that all arguments of the input 
predicate are considered to decide if it passes the test, even 
though a constant has already been encountered.
2009-11-17 17:07:14 +03:00
Evgeny Potemkin
726e83907c Bug#43668: Wrong comparison and MIN/MAX for YEAR(2)
MySQL manual describes values of the YEAR(2) field type as follows:
values 00 - 69 mean 2000 - 2069 years and values 70 - 99 mean 1970 - 1999
years. MIN/MAX and comparison functions was comparing them as int values
thus producing wrong result.

Now the Arg_comparator class is extended with compare_year function which
performs correct comparison of the YEAR type.
The Item_sum_hybrid class now uses Item_cache and Arg_comparator objects to
correctly calculate its value.
To allow Arg_comparator to use func_name() function for Item_func and Item_sum
objects the func_name declaration is moved to the Item_result_field class.
A helper function is_owner_equal_func is added to the Arg_comparator class.
It checks whether the Arg_comparator object owner is the <=> function or not.
A helper function setup is added to the Item_sum_hybrid class. It sets up
cache item and comparator.
2009-11-17 17:06:46 +03:00
Jorgen Loland
2a254a13ef Bug#48052: Valgrind warning - uninitialized value in
init_read_record() - (records.cc:274)
      
Item_cond::used_tables_cache was accessed in
records.cc#init_read_record() without being initialized. It had
not been initialized because it was wrongly assumed that the
Item's variables would not be accessed, and hence
quick_fix_field() was used instead of fix_fields() to save a few
CPU cycles at creation time.

The fix is to properly initilize the Item by replacing
quick_fix_field() with fix_fields().
2009-11-13 12:22:39 +01:00
Davi Arnaut
4beeb3fa60 Bug#47627 SET @@{global.session}.local_variable in stored routine causes crash
This patch borrows ideas, text and code from Kristofer
Pettersson's patch.

An assignment of a system variable sharing the same base
name as a declared stored procedure variable in the same
context could lead to a crash.

The reason was that during the parsing of the syntactic
rule 'option_value' an uninitialized set_var object was
pushed to the parameter stack of the SET statement. The
parent rule 'option_type_value' interpreted the existence
of variables on the parameter stack as an assignment and
wrapped it in a sp_instr_set object.

As the procedure later was executed an attempt was made
to run the method 'check()' on an uninitialized member
object (NULL value) belonging to the previously created
but uninitialized object.

This patch refactors the 'internal_variable_name' rule and
copies the semantic analysis part to the depending parent
rule: 'option_value'. This makes it possible to account
for any prefixes affecting the interpretation of the
internal_variable_name.
2009-11-12 23:03:26 -02:00
Andrei Elkin
41a125474f Bug #47210 first execution of "start slave until" stops too early
Until-pos guarding did not distiguish the master originated events from ones that the slave 
can introduce to the relay log e.g Rotate to the next relay log at slave restarting.
The local Rotate's coordinate are incomparable with the Until-master-pos.
That led to the unexpectable stop this bug describes.

Fixed with to avoid Until-master-pos comparison for a local slave's event.
Notice that if --replicate-same-server is true such event is treated as coming from
the master side.
2009-11-12 17:10:19 +02:00
Magne Mahre
6947ee3771 Bug #37183 insert ignore into .. select ... hangs after
deadlock was encountered

The bug is caused by an inconsistent handling of the IGNORE
clause.  A read from a const table caused a lock timeout
(ER_LOCK_TIMEOUT) in innodb.  Since the IGNORE clause was
given, the timeout was converted into a warning instead of
an error, thus not populating the diagnostics area.  When
innodb subsequently marked the transaction for rollback,
mysql asserted since the diag.area was empty.

This patch consists of only a test case, as the bug itself
was fixed by the patch for Bug #46539
2009-11-12 12:43:33 +01:00
Alexander Nozdrin
e2f935eff7 Auto-merge from mysql-next-mr. 2009-11-12 18:00:24 +03:00
Alexey Botchkov
4e612a1c66 test updated 2009-11-11 21:30:51 +04:00
Anurag Shekhar
862c422c4c Bug #47012 archive tables are not upgradeable, and server crashes
on any access

Archive engine for 5.1 (and latter) version uses a modified 
version of zlib (azlib). These two version are incompatible
so a proper upgrade is needed before tables created in 5.0 
can be used reliable.

This upgrade can be performed using repair. But due to lack 
of test its risky to allow upgrade for now. This patch addresses
only the crashing issue. Any attempt to repair will be blocked.

Eventually repair can be allowed to run through (which will also
cause an upgrade from older version to newer) but only after a 
thorough testing.
2009-11-11 13:33:29 +05:30
Alexey Botchkov
0503387ccc loadxml test update. 2009-11-11 05:42:02 +04:00
Alexey Botchkov
6d9aa9ea29 Bug#42520 killing load .. infile Assertion failed: ! is_set(), file .\sql_error.cc, line 8
The additional patch. That 'loadxml.test' failure was actually about our testing system,
   not the code.
   Firstly we need a new mysqltest command, wich i called 'send_eval'. So the expression
   can be evaluated, then started in a parallel thread. We only have separane 'send' and
   'eval' commands at the moment.
   Then we need to add the waiting code after the 'KILL' to our test, so the thread will be killed
   before the test goes further. The present 'reap' command doesn't handle the killed threads
   well.
      
per-file comments:
  client/mysqltest.cc
Bug#42520      killing load .. infile Assertion failed: ! is_set(), file .\sql_error.cc, line 8
    The 'send_eval' command implemented.

  mysql-test/r/loadxml.result
Bug#42520      killing load .. infile Assertion failed: ! is_set(), file .\sql_error.cc, line 8
   test result updated.

  mysql-test/t/loadxml.test
Bug#42520      killing load .. infile Assertion failed: ! is_set(), file .\sql_error.cc, line 8
   test case added.
2009-11-11 00:55:05 +04:00
Alexander Nozdrin
55b4a2ab87 Auto-merge from mysql-next-mr-alik. 2009-11-10 11:34:26 +03:00
Alexander Nozdrin
dadf820743 Auto-merge from mysql-next-mr. 2009-11-10 10:31:33 +03:00
Georgi Kodinov
48c67b2ca0 Bug #48458: simple query tries to allocate enormous amount of
memory

The server was doing a bad class typecast causing setting of 
wrong value for the maximum number of items in an internal
structure used in equality propagation.
Fixed by not doing the wrong typecast and asserting the type
of the Item where it should be done.
2009-11-09 16:09:46 +02:00
Georgi Kodinov
154c348031 Bug #42760: Select doesn't return desired results when we have null
values
 
 We should re-set the access method functions when changing the access
 method when switching to another index to avoid sorting.
 
 Fixed by doing a little re-engineering : encapsulating all the function
 assignment into a special function and calling it when flipping the 
 indexes.
2009-11-10 10:21:41 +02:00
Mattias Jonsson
3ebb8be932 Bug#48276: can't add column if subpartition exists
Bug when setting up default partitioning,
used an uninitialized variabe.
2009-11-09 11:26:01 +01:00
Mikael Ronstrom
52beed00e2 Merge BUG#48161, BUG#48447 2009-11-06 23:23:28 +01:00
Alexander Nozdrin
35b00a182e Manual merge from mysql-trunk-merge. 2009-11-06 19:13:33 +03:00
Alexander Nozdrin
9c61ec687f Manual merge from mysql-trunk-merge. 2009-11-06 18:19:24 +03:00
Alexey Kopytov
91829c0a32 Automerge. 2009-11-06 17:56:58 +03:00
Alexey Kopytov
9674ef6809 Automerge. 2009-11-06 17:54:19 +03:00
Alexander Nozdrin
2ca5b2c791 Manual merge from mysql-trunk-merge. 2009-11-06 17:20:27 +03:00
Mikael Ronstrom
d4ca8b12cd Review fixes for BUG#48161 and BUG#48447 2009-11-06 11:49:27 +01:00
Alexander Nozdrin
f956ea3771 Manual-merge from mysql-trunk-merge. 2009-11-06 12:52:45 +03:00
Alexander Nozdrin
d9d3271da3 Auto-merge from mysql-trunk-merge. 2009-11-06 12:17:01 +03:00
Alexander Nozdrin
ab2450efd5 Manual merge from mysql-trunk-merge.
Fix partition_column.test.
2009-11-06 11:56:48 +03:00
Alexey Kopytov
9fff9acf0c Bug #48475: DISTINCT is ignored with GROUP BY WITH ROLLUP and
only const tables

The problem was caused by two shortcuts in the optimizer that
are inapplicable in the ROLLUP case.

Normally in a case when only const tables are involved in a
query, DISTINCT clause can be safely optimized away since there
may be only one row produced by the join. Similarly, we don't
need to create a temporary table to resolve DISTINCT/GROUP
BY/ORDER BY. Both of these are inapplicable when the WITH
ROLLUP modifier is present.

Fixed by disabling the said optimizations for the WITH ROLLUP
case.
2009-11-06 09:44:01 +03:00
Alexander Nozdrin
ef862653af Manual merge from mysql-trunk-merge. 2009-11-05 23:48:01 +03:00
Alexander Nozdrin
2242926ae0 Manual merge from mysql-5.1. 2009-11-05 17:59:05 +03:00
Mikael Ronstrom
09580562a2 BUG#48447, BUG#48161, fixed a regression from fix of BUG#6045, where binary collations can use indexes/partition pruning for cases using equality conditions, however it cannot be used for any other condition like <, >, <=, >=, <>, also added test case for verification of BUG#47774 in this patch 2009-11-05 15:42:03 +01:00
Sergey Vojtovich
2cd0b2f373 Updates for test cases from innodb-zip-ss6129. 2009-11-05 17:23:50 +04:00
Alexander Nozdrin
26fc558319 Auto-merge from mysql-5.1. 2009-11-05 15:13:16 +03:00
Alexander Nozdrin
411a6bfeb9 Auto-merge from mysql-next-mr. 2009-11-05 15:08:37 +03:00
Alexander Nozdrin
258ec2ebaa Auto-merge from mysql-5.1. 2009-11-05 14:03:16 +03:00
Alexander Nozdrin
13f1ace38b Auto-merge from mysql-5.1. 2009-11-05 13:59:58 +03:00
Alexander Nozdrin
b591221eb1 Auto-merge from mysql-5.1. 2009-11-05 12:38:14 +03:00
Alexander Nozdrin
f51d08921a Auto-merge from mysql-5.1. 2009-11-05 12:37:26 +03:00
Alexander Nozdrin
e6fffedb27 Manual merge from mysql-5.1. 2009-11-05 12:23:55 +03:00
Alexander Nozdrin
5ae8ae3a8e Manual merge from mysql-5.1. 2009-11-05 12:20:41 +03:00
Alexander Nozdrin
39822f2367 Auto-merge from mysql-5.1. 2009-11-05 12:02:44 +03:00
Alexander Nozdrin
55cb8c77fa Auto-merge from mysql-5.1. 2009-11-05 12:02:03 +03:00
Alexander Nozdrin
09ff80f2a0 Manual merge from mysql-5.1. 2009-11-05 11:48:06 +03:00
Georgi Kodinov
9ba74e5d21 Bug #46175: NULL read_view and consistent read assertion
The SE API requires mysql to notify the storage engine that
it's going to read certain tables at the beginning of the 
statement (by calling start_stmt(), store_lock() or
external_lock()).
These are typically called by the lock_tables(). 
However SHOW CREATE TABLE is not pre-locking the tables
because it's not expected to access the data at all.
But for some view definitions (that include comparing a
date/datetime/timestamp column to a string returning
scalar subquery) the JOIN::prepare may still access data
when materializing the scalar non-correlated subquery
in Arg_comparator::can_compare_as_dates().
Fixed by not materializing the subquery when the function
is called in a SHOW/EXPLAIN/CREATE VIEW
2009-11-04 13:54:28 +02:00
Konstantin Osipov
409160e466 A fix and a test case for
Bug#41756 "Strange error messages about locks from InnoDB".
      
In JT_EQ_REF (join_read_key()) access method, 
don't try to unlock rows in the handler, unless certain that 
a) they were locked
b) they are not used.

Unlocking of rows is done by the logic of the nested join loop,
and is unaware of the possible caching that the access method may
have. This could lead to double unlocking, when a row
was unlocked first after reading into the cache, and then 
when taken from cache, as well as to unlocking of rows which
were actually used (but taken from cache).
      
Delegate part of the unlocking logic to the access method,
and in JT_EQ_REF count how many times a record was actually 
used in the join. Unlock it only if it's usage count is 0.

Implemented review comments.
2009-11-03 20:45:52 +03:00
Konstantin Osipov
d2babeaf3a A fix and a test case for
Bug#41756 "Strange error messages about locks from InnoDB".

In JT_EQ_REF (join_read_key()) access method,
don't try to unlock rows in the handler, unless certain that
a) they were locked
b) they are not used.

Unlocking of rows is done by the logic of the nested join loop,
and is unaware of the possible caching that the access method may
have. This could lead to double unlocking, when a row
was unlocked first after reading into the cache, and then
when taken from cache, as well as to unlocking of rows which
were actually used (but taken from cache).

Delegate part of the unlocking logic to the access method,
and in JT_EQ_REF count how many times a record was actually
used in the join. Unlock it only if it's usage count is 0.

Implemented review comments.
2009-11-03 19:58:54 +03:00
Kristofer Pettersson
6eec4b9824 automerge 2009-11-03 17:23:05 +01:00
Kristofer Pettersson
4b7a8a294b Moved test case for bug 31157 from query_cache.test to subselect.test 2009-11-03 17:18:43 +01:00
Jorgen Loland
7f9a504745 Bug#48177 - SELECTs with NOT IN subqueries containing NULL
values return too many records

WHERE clauses with "outer_value_list NOT IN subselect" were
handled incorrectly if the outer value list contained multiple 
items where at least one of these could be NULL. The first 
outer record with NULL value was handled correctly, but if a 
second record with NULL value existed, the optimizer would 
choose to reuse the result it got on the last execution of the 
subselect. This is incorrect if the outer value list has 
multiple items.
     
The fix is to make Item_in_optimizer::val_int (in 
item_cmpfunc.cc) reuse the result of the latest execution
for NULL values only if all values in the outer_value_list 
are NULL.
2009-11-03 13:48:59 +01:00
Mikael Ronstrom
fc863ba96f Merge 2009-11-03 12:37:02 +01:00
133bfc7fdb BUG#48216 Replication fails on all slaves after upgrade to 5.0.86 on master
When a sessione is closed, all temporary tables of the session are automatically 
dropped and are binlogged. But it will be binlogged with wrong database names when
the length of the temporary tables' database names are greater than the 
length of the current database name or the current database is not set.

Query_log_event's db_len is forgot to set when Query_log_event's db is set.
This patch wrote code to set db_len immediately after db has set.
2009-11-03 17:00:41 +08:00