Commit graph

66730 commits

Author SHA1 Message Date
Martin Hansson
c09489ebb2 Merge of fix for Bug#50394. 2010-09-13 14:46:55 +02:00
Martin Hansson
20bdf7636b Bug #50394: Regression in EXPLAIN with index scan, LIMIT, GROUP BY and
ORDER BY computed col
      
GROUP BY implies ORDER BY in the MySQL dialect of SQL. Therefore, when an
index on the first table in the query is used, and that index satisfies
ordering according to the GROUP BY clause, the query optimizer estimates the
number of tuples that need to be read from this index. If there is a LIMIT
clause, table statistics on tables following this 'sort table' are employed.

There may be a separate ORDER BY clause however, which mandates reading the
whole 'sort table' anyway. But the previous estimate was left untouched.

Fixed by removing the estimate from EXPLAIN output if GROUP BY is used in
conjunction with an ORDER BY clause that mandates using a temporary table.
2010-09-13 13:33:19 +02:00
Gleb Shchepa
83c5552b4f manual merge 5.1-bugteam --> 5.5-merge (bug 55779) 2010-09-13 11:30:10 +04:00
Gleb Shchepa
79c1faa05e Bug #55779: select does not work properly in mysql server
Version "5.1.42 SUSE MySQL RPM"

When a query was using a DATE or DATETIME value formatted
using different formatting than "yyyy-mm-dd HH:MM:SS", a
query with a greater-or-equal '>=' condition matched only
greater values in an indexed TIMESTAMP column.

The problem was introduced by the fix for the bug 46362
and partially solved (for DATE and DATETIME columns only)
by the fix for the bug 47925.

The stored_field_cmp_to_item function has been modified
to take into account TIMESTAMP columns like we do for
DATE and DATETIME columns.
2010-09-13 11:18:35 +04:00
Bjorn Munch
68c14bca35 null upmerge 2010-09-10 10:05:04 +02:00
Bjorn Munch
d898106014 merge 55178,55413,56383 2010-09-10 09:59:40 +02:00
Bjorn Munch
4b1d6118e8 merge 55178,55413,56383 2010-09-10 09:58:26 +02:00
Alexey Kopytov
637c7529de Manual merge of the fix for bug #54190 and the addendum patch
to 5.5 (removed one test case as it is no longer valid).
2010-09-09 19:00:33 +04:00
Alexey Kopytov
f563a012ce Addendum patch for bug #54190.
The patch caused some test failures when merged to 5.5 because,
unlike 5.1, it utilizes Item_cache_row to actually cache row
values. The problem was that Item_cache_row::bring_value()
essentially did nothing. In particular, it did not update its
null_value, so all Item_cache_row objects were always having
their null_values set to TRUE. This went unnoticed previously,
but now when Arg_comparator::compare_row() actually depends on
the row's null_value to evaluate the comparison, the problem
has surfaced.

Fixed by calling the underlying item's bring_value() and
updating null_value in Item_cache_row::bring_value().

Since the problem also exists in 5.1 code (albeit hidden, since
the relevant code is not used anywhere), the addendum patch is
against 5.1.
2010-09-09 18:44:53 +04:00
Alexey Kopytov
df198b5f6a Automerge. 2010-09-09 16:48:06 +04:00
Alexey Kopytov
9066714c81 Bug #54190: Comparison to row subquery produces incorrect
result

Row subqueries producing no rows were not handled as UNKNOWN
values in row comparison expressions.

That was a result of the following two problems:

1. Item_singlerow_subselect did not mark the resulting row
value as NULL/UNKNOWN when no rows were produced.

2. Arg_comparator::compare_row() did not take into account that
a whole argument may be NULL rather than just individual scalar
values.

Before bug#34384 was fixed, the above problems were hidden
because an uninitialized (i.e. without any stored value) cached
object would appear as NULL for scalar values in a row subquery
returning an empty result. After the fix
Arg_comparator::compare_row() would try to evaluate
uninitialized cached objects.

Fixed by removing the aforementioned problems.
2010-09-09 16:46:13 +04:00
Dmitry Shulga
d88a11a766 Fix mysql_client_test failure introduced by a patch for Bug#47485.
The problem was that mysql_stmt_next_result() (new to 5.5)
was not properly updated.
2010-09-09 19:36:57 +07:00
Martin Hansson
06b70326ce Merge of fix for Bug#51070. 2010-09-07 12:17:12 +02:00
Martin Hansson
babebf9ceb Bug#51070: Query with a NOT IN subquery predicate returns a wrong result set
The EXISTS transformation has additional switches to catch the known corner
cases that appear when transforming an IN predicate into EXISTS. Guarded
conditions are used which are deactivated when a NULL value is seen in the
outer expression's row. When the inner query block supplies NULL values,
however, they are filtered out because no distinction is made between the
guarded conditions; guarded NOT x IS NULL conditions in the HAVING clause that
filter out NULL values cannot be de-activated in isolation from those that
match values or from the outer expression or NULL's.

The above problem is handled by making the guarded conditions remember whether
they have rejected a NULL value or not, and index access methods are taking
this into account as well. 

The bug consisted of 

1) Not resetting the property for every nested loop iteration on the inner
   query's result.

2) Not propagating the NULL result properly from inner query to IN optimizer.

3) A hack that may or may not have been needed at some point. According to a
   comment it was aimed to fix #2 by returning NULL when FALSE was actually
   the result. This caused failures when #2 was properly fixed. The hack is
   now removed.

The fix resolves all three points.
2010-09-07 11:21:09 +02:00
Dmitry Shulga
417092560c Auto-merge from mysql-5.1-bugteam. 2010-09-07 16:00:41 +07:00
Dmitry Shulga
70807d1473 Fixed bug #55421 - Protocol::end_statement(): Assertion `0' on
multi-table UPDATE IGNORE.
The problem was that if there was an active SELECT statement
during trigger execution, an error risen during the execution
may cause a crash. The fix is to temporary reset LEX::current_select
before trigger execution and restore it afterwards. This way
errors risen during the trigger execution are processed as
if there was no active SELECT.
2010-09-07 15:53:46 +07:00
Martin Hansson
3825f36429 Merge of fix for Bug#54543. Test case only (bug is not present in this tree). 2010-09-07 10:00:52 +02:00
Martin Hansson
3d5b9792e6 Bug#54543: update ignore with incorrect subquery leads to assertion failure:
inited==INDEX

When an error occurs while sending the data in a temporary table there was no
cleanup performed. This caused a failed assertion in the case when different
access methods were used for populating the table vs. retrieving the data from
the table if IGNORE was specified and sql_safe_updates = 0. In this case
execution continues, but the handler expects to continue with the access
method used for row retrieval.

Fixed by doing the cleanup even if errors occur.
2010-09-07 09:58:05 +02:00
Dmitry Shulga
d439036a04 Auto-merge from mysql-5.1-bugteam. 2010-09-07 14:49:47 +07:00
Dmitry Shulga
14dbc7e4e6 Fixed bug #47485 - mysql_store_result returns a not NULL result set
for a prepared statement.
2010-09-07 14:18:01 +07:00
Magne Mahre
f3dae641ad Null merge of mysql-5.1-bugteam into mysql-5.5-merge 2010-09-06 15:40:55 +02:00
Davi Arnaut
bb080fc7cd Null merge of mysql-5.1-bugteam into mysql-5.5-merge. 2010-09-06 10:32:45 -03:00
Gleb Shchepa
01818ec2da automerge 5.1-bugteam --> 5.5-merge (bug 53034) 2010-09-06 16:10:36 +04:00
Ramil Kalimullin
df798550cc Automerge. 2010-09-06 13:54:44 +04:00
Magne Mahre
f4bbb44ac9 Null merge (InnoDB changes are already in 5.5) 2010-09-03 12:36:44 +02:00
Magne Mahre
24fc7ca4c8 Bug#39932 "create table fails if column for FK is in different
case than in corr index".
      
Server was unable to find existing or explicitly created supporting
index for foreign key if corresponding statement clause used field
names in case different than one used in key specification and created
yet another supporting index.
In cases when name of constraint (and thus name of generated index)
was the same as name of existing/explicitly created index this led
to duplicate key name error.
      
The problem was that unlike all other code Key_part_spec::operator==()
compared field names in case sensitive fashion. As result routines
responsible for getting rid of redundant generated supporting indexes
for foreign key were not working properly for versions of field names
using different cases.

(backported from mysql-trunk)
2010-09-01 19:38:34 +02:00
Bjorn Munch
4698ed2be8 upmerge 56383 2010-09-01 15:52:31 +02:00
Bjorn Munch
2154211192 merge from 5.5 2010-09-01 15:49:43 +02:00
Alexander Nozdrin
f8f23158c7 Auto-merge from mysql-5.5. 2010-09-01 17:17:57 +04:00
Alexander Nozdrin
afe9d44c3a Auto-merge from mysql-5.5-stage. 2010-09-01 16:59:52 +04:00
Davi Arnaut
0ce793faf6 Bug#55846: Link tests fail on Windows - my_compiler.h missing
Make the my_compiler.h header, like my_attribute.h, part of
the distribution. This is required due to the dependency of
the former on the latter (which can undefine __attribute__).
2010-08-31 11:28:22 -03:00
Bjorn Munch
e59b1980e6 Bug #56383 provide option to restart mysqld after each mtr test
Added --force-restart
2010-08-31 11:27:57 +02:00
Alexander Nozdrin
e4a7db6c67 Auto-merge from mysql-5.5-merge. 2010-08-31 11:55:41 +04:00
Gleb Shchepa
7a343e0c82 automerge local --> 5.1-bugteam (bug 53034) 2010-08-31 02:32:03 +04:00
Gleb Shchepa
4c47c78c41 automerge 5.1-bugteam --> 5.5-merge (bug 53034) 2010-08-31 02:22:01 +04:00
Gleb Shchepa
9554b7ac6e Bug #53034: Multiple-table DELETE statements not accepting
"Access compatibility" syntax

The "wild" "DELETE FROM table_name.* ... USING ..." syntax
for multi-table DELETE statements is documented but it was
lost in the fix for the bug 30234.

The table_ident_opt_wild parser rule has been added
to restore the lost syntax.
2010-08-31 02:16:38 +04:00
Alexander Nozdrin
dc195adf34 Auto-merge from mysql-5.5-merge. 2010-08-30 18:07:40 +04:00
Bjorn Munch
8ee29b7e6a upmerge 55178,55413 2010-08-30 15:19:46 +02:00
Bjorn Munch
c3f69b4191 merge 55413 2010-08-30 11:26:40 +02:00
Bjorn Munch
fd9b6b8e07 Bug #55178 Set timeout on test-to-test-basis
Allow --testcase-timeout=<mins> to be set in .opt file for test
2010-08-30 11:25:10 +02:00
Dmitry Shulga
05482f3c7b Follow-up for Bug#29751: FLUSH LOGS doesn't create -old file,
so test case has to be updated.
2010-08-30 16:09:28 +07:00
Alexander Nozdrin
862af4eeaa Auto-merge from mysql-5.5. 2010-08-30 12:36:02 +04:00
Alexander Nozdrin
a87059b940 Disable 'plugin*' tests due to Bug 55966. 2010-08-30 12:32:53 +04:00
Alexander Nozdrin
2c89cb23af Auto-merge from mysql-5.5-bugfixing. 2010-08-30 12:27:27 +04:00
Ramil Kalimullin
03d0aedd8e Automerge. 2010-08-30 12:08:28 +04:00
Ramil Kalimullin
9c6143ef80 Fix for bug #51875: crash when loading data into geometry function polyfromwkb
Check for number of line strings in the incoming polygon data (wkb) and
for number of points in the incoming linestring wkb.
2010-08-30 11:51:46 +04:00
Alexey Kopytov
0a95aff58a Automerge. 2010-08-30 11:36:04 +04:00
Alexey Kopytov
d5b40686b0 Automerge. 2010-08-30 11:19:09 +04:00
Alexander Nozdrin
19908377b8 Update result files. 2010-08-28 20:36:17 +04:00
Vasil Dimov
74c32d69b0 Merge mysql-5.1-innodb -> mysql-5.1-bugteam 2010-08-28 00:58:46 +03:00