Commit graph

71 commits

Author SHA1 Message Date
Sergey Glukhov
d28369b121 test case fix 2010-06-01 11:54:06 +04:00
Sergey Glukhov
fa3570f96a Bug#52005 'JOIN_TAB->dependent' may be incorrectly propageted for multilevel outer joins
There are two problems:
1. In simplify_joins function we calculate table dependencies. If STRAIGHT_JOIN hint
is used for whole SELECT we do not count it and as result some dependendecies
might be lost. It leads to incorrect table order which is returned by
join_tab_cmp_straight() function.
2. make_join_statistics() calculate the transitive closure for relations a particular
JOIN_TAB is 'dependent on'.
We aggregate the dependent table_map of a JOIN_TAB by adding dependencies from other
tables which we depend on. However, this may also cause new dependencies to be
available after we have completed processing a certain JOIN_TAB.
Both these problems affect condition pushdown and as result condition might be pushed
into wrong table which leads to crash or even omitted which leads to wrong result.
The fix:
1. Use modified 'transitive closure' algorithm provided by Ole John Aske
2. Update table dependences in simplify_joins according to 
   global STRAIGHT_JOIN hint.
Note: the patch also fixes bugs 46091 & 51492
2010-05-27 19:13:53 +04:00
Martin Hansson
9bd08c192a Merge of fix for Bug#52357 2010-05-06 10:59:28 +02:00
Martin Hansson
4e75f7c053 Bug#52357: Assertion failed: join->best_read in
greedy_search optimizer_search_depth=0

The algorithm inside restore_prev_nj_state failed to
properly update the counters within the NESTED_JOIN
tree. The counter was decremented each time a table in the
node was removed from the QEP, the correct thing to do being
only to decrement it when the last table in the child node
was removed from the plan. This lead to node counters
getting negative values and the plan thus appeared
impossible. An assertion caught this.

Fixed by not recursing up the tree unless the last table in
the join nest node is removed from the plan
2010-05-06 10:45:00 +02:00
Sergey Glukhov
879b705342 Bug#51598 Inconsistent behaviour with a COALESCE statement inside an IN comparison
Optimizer erroneously translated LEFT JOIN into INNER JOIN.
It leads to cutting rows with NULL right side. It happens
because Item_row uses not_null_tables() method form the
base(Item) class and does not calculate 'null tables'
properly. The fix is adding calculation of 'not null tables'
to Item_row.
2010-03-19 10:21:37 +04:00
Martin Hansson
b0c9164cc9 Bug#47650: using group by with rollup without indexes
returns incorrect results with where

An outer join of a const table (outer) and a normal table
(inner) with GROUP BY on a field from the outer table would
optimize away GROUP BY, and thus trigger the optimization to
do away with a temporary table if grouping was performed on
columns from the const table, hence executing the query with
filesort without temporary table. But this should not be
done if there is a non-indexed access to the inner table,
since filesort does not handle joins. It expects either ref
access, range ditto or table scan. The join condition will
thus not be applied.

Fixed by always forcing execution with temporary table in
the case of ROLLUP with a query involving an outer join. This
is a slightly broader class of queries than need fixing, but
it is hard to ascertain the position of a ROLLUP field wrt
outer join with current query representation.
2009-12-17 10:55:18 +01:00
jimw@rama.(none)
3c93323d28 Bug #28842 Different 'duplicate key' error code between 5.0 and 5.1
The patch for WL 1563 added a new duplicate key error message so that the
  key name could be provided instead of the key number. But the error code
  for the new message was used even though that did not need to change.

  This could cause unnecessary problems for applications that used the old
  ER_DUP_ENTRY error code to detect duplicate key errors.
2007-06-06 10:57:07 -07:00
gshchepa/uchum@gleb.loc
fae737b426 Merge gleb.loc:/home/uchum/work/bk/mysql-5.0-opt
into  gleb.loc:/home/uchum/work/bk/mysql-5.1-opt
2007-05-28 00:22:44 +05:00
igor@olga.mysql.com
fbebb47efe Fixed bug #28571. Outer join queries with ON conditions over
constant outer tables did not return null complemented
rows when conditions were evaluated to FALSE.
Wrong results were returned because the conditions over constant
outer tables, when being pushed down, were erroneously enclosed 
into the guard function used for WHERE conditions.
2007-05-26 10:33:01 -07:00
gkodinov/kgeorge@magare.gmz
ee624171eb Merge magare.gmz:/home/kgeorge/mysql/work/B27531-5.0-opt
into  magare.gmz:/home/kgeorge/mysql/work/B27531-5.1-opt
2007-05-04 16:37:30 +03:00
igor@olga.mysql.com
1a0cf6db7c Fixed bug #28188: performance degradation for outer join queries to which
'not exists' optimization is applied.

In fact 'not exists' optimization did not work anymore after the patch
introducing the evaluate_join_record function had been applied.

Corrected the evaluate_join_record function to respect the 'not_exists'
optimization.
2007-05-01 23:34:14 -07:00
igor@olga.mysql.com
fb9e0ad3be Merge olga.mysql.com:/home/igor/mysql-5.0-opt
into  olga.mysql.com:/home/igor/mysql-5.1-opt
2007-02-13 01:34:36 -08:00
igor@olga.mysql.com
951fe3cade Fixed bug #26017.
Objects of the class Item_equal contain an auxiliary member
eval_item of the type cmp_item that is used only for direct 
evaluation of multiple equalities. Currently a multiple equality
is evaluated directly only in the cases when the equality holds
at most for one row in the result set.
The compare collation of eval_item was determined incorectly.
It could lead to returning incorrect results for some queries.
2007-02-09 12:54:50 -08:00
monty@mysql.com/narttu.mysql.fi
2dcc7110c9 Give warnings for unused objects
Changed error message to be compatible with old error file
Added new error message for new DUP_ENTRY syntax
2007-01-22 18:42:52 +02:00
evgen@moonbone.local
8cf9781717 Merge moonbone.local:/work/tmp_merge-5.0-mysql
into  moonbone.local:/work/tmp_merge-5.1-opt-mysql
2006-08-29 18:58:50 +04:00
sergefp@mysql.com
e3bdd6c6c2 Fix by Georgi Kodinov:
Bug #18744 Test 'join_outer' fails if "classic" configuration in 5.0
 - moved an InnoDB dependent test to the appropriate file
2006-08-21 14:20:03 +04:00
msvensson@neptunus.(none)
2c538f6cde Merge bk-internal:/home/bk/mysql-5.1
into  neptunus.(none):/home/msvensson/mysql/mysql-5.1-new-maint
2006-06-10 20:33:50 +02:00
msvensson@neptunus.(none)
5367facc66 Move innodb dependent test to join_outer_innodb 2006-05-22 13:57:32 +02:00
msvensson@shellback.(none)
ed349f7c69 Tests uses innodb, add test to check if innodb is available 2006-05-18 20:07:35 +02:00
igor@rurik.mysql.com
9ec8101813 Fixed bug #19816.
This bug was introduced when the patch resolving the
performance problem 17164 was applied. As a result
of that modification the not_null_tables attributes
were calculated incorrectly for constant OR conditions.
This triggered invalid conversion of outer joins into
inner joins.
2006-05-17 20:48:48 -07:00
igor@rurik.mysql.com
058cba6b11 Fixed bug #19396: a crash for a an outer join operation
over two views when using syntax with curly braces.
Each outer join operation must be placed in a separate
nest. This was not done when the syntax with curly braces
was used. In some cases, in particular, for queries with outer
join operation over views it could cause a crash.
2006-05-13 11:56:05 -07:00
igor@rurik.mysql.com
e99247775a Fixed bug #17164.
If the WHERE condition of a query contained an ORed FALSE term
then the set of tables whose rows cannot serve for null complements
in outer joins was determined incorrectly. It resulted in blocking 
possible conversions of outer joins into joins for such queries.
2006-03-24 12:44:54 -08:00
msvensson@neptunus.(none)
9304785c10 Add new option "check-testcases" to mysql-test-run.pl
Cleanup the sideeffects from most of the  testcases with sideeffects.
2006-01-26 17:54:34 +01:00
aivanov@mysql.com
2165167200 Merge mysql.com:/home/alexi/dev/mysql-4.1-0
into  mysql.com:/home/alexi/dev/mysql-5.0-0
2005-09-06 23:49:54 +04:00
aivanov@mysql.com
fa51afedeb item_cmpfunc.h:
Fixed bugs #12101, #12102: wrong calculation of not_null_tables()
   for some expressions.
   The classes Item_func_between, Item_func_if, Item_func_in are modified.
   Item_func_between/in objects can represent now [NOT]BETWEEN/IN expressions.
   The class Item_func_opt_neg is added to factor out the functionality
   common for the modified classes Item_func_between and Item_func_in.
item_cmpfunc.cc:
  Fixed bugs #12101, #12102: wrong calculation of not_null_tables()
   for some expressions.
   Added Item_func_between::fix_fields(), Item_func_if::fix_fields(),
   Item_func_in::fix_fields(). They correct generic calculation of
   the not_null_tables attribute when it is needed.
   Modified Item_func_between::val_int(), Item_func_in::val_int().
opt_range.cc:
  Fixed bugs #12101, #12102: wrong calculation of not_null_tables()
   for some expressions.
   The function get_mm_tree() is modified. There cannot be NOT before
   BETWEEN/IN anymore. Rather Item_func_between/in objects can represent
   now [NOT]BETWEEN/IN expressions.
sql_yacc.yy:
  Fixed bugs #12101, #12102: wrong calculation of not_null_tables()
   for some expressions.
   Item_func_between/in objects can represent now [NOT]BETWEEN/IN expresions.
join_outer.result:
  Fixed some testcases results (bugs #12101, #12102)
join_outer.test:
  Added testcases for bugs #12101, #12102
2005-09-06 18:03:08 +04:00
timour@mysql.com
e040300393 WL#2486 - natural and using join according to SQL:2003
* Provide backwards compatibility extension to name resolution of
  coalesced columns. The patch allows such columns to be qualified
  with a table (and db) name, as it is in 4.1.
  Based on a patch from Monty.

* Adjusted tests accordingly to test both backwards compatible name
  resolution of qualified columns, and ANSI-style resolution of
  non-qualified columns.
  For this, each affected test has two versions - one with qualified
  columns, and one without.
2005-08-23 18:08:04 +03:00
timour@mysql.com
a247282aa6 Implementation of WL#2486 -
"Process NATURAL and USING joins according to SQL:2003".

* Some of the main problems fixed by the patch:
  - in "select *" queries the * expanded correctly according to
    ANSI for arbitrary natural/using joins
  - natural/using joins are correctly transformed into JOIN ... ON
    for any number/nesting of the joins.
  - column references are correctly resolved against natural joins
    of any nesting and combined with arbitrary other joins.

* This patch also contains a fix for name resolution of items
  inside the ON condition of JOIN ... ON - in this case items must
  be resolved only against the JOIN operands. To support such
  'local' name resolution, the patch introduces a stack of
  name resolution contexts used at parse time.

NOTICE:
- This patch is not complete in the sense that
  - there are 2 test cases that still do not pass -
    one in join.test, one in select.test. Both are marked
    with a comment "TODO: WL#2486".
  - it does not include a new test specific for the task
2005-08-12 17:57:19 +03:00
monty@mysql.com
15d48525af Merge mysql.com:/home/my/mysql-4.1
into  mysql.com:/home/my/mysql-5.0
2005-07-28 17:09:54 +03:00
monty@mysql.com
3c12d0ae54 Added end marker for tests to make future merges easier 2005-07-28 03:22:47 +03:00
igor@rurik.mysql.com
46325044d0 join_outer.result, join_outer.test:
Added a test case for bug #11285.
sql_select.cc:
  Fixed bug #11285.
  The problem occurred with Item_equal in an 'on expression'
  that was evaluated to false.
2005-06-15 02:02:25 -07:00
igor@rurik.mysql.com
2433210829 join_outer.test, join_outer.result:
Added test cases for bug #9938.
item.h:
  Fixed bug #9938: missing method not_null_tables for Item_ref.
2005-05-21 08:44:50 -07:00
serg@serg.mylan
e7b2de98ee be sure to call top_level_item() on the new Item_cond_and,
that merges ON and WHERE (BUG#10162)
2005-04-27 01:32:44 +02:00
jimw@mysql.com
bb215f648b Merge 2005-04-04 23:03:56 -07:00
jimw@mysql.com
247f2ac563 Merge new tests 2005-04-04 18:29:18 -07:00
serg@serg.mylan
f04bef8faf merged 2005-03-14 18:46:30 +01:00
serg@serg.mylan
dba1e0889a Merge bk-internal:/home/bk/mysql-5.0
into serg.mylan:/usr/home/serg/Abk/mysql-5.0
2005-03-14 14:47:51 +01:00
serg@serg.mylan
ada959edf8 anotehr fix for Item_func_isnotnull::not_null_tables() 2005-03-14 11:04:42 +01:00
serg@serg.mylan
9248f0d714 Item_func_isnotnull::not_null_tables - return 0 if not top-level item 2005-03-13 23:56:25 +01:00
serg@serg.mylan
18343b9454 correct not_null_tables() for XOR and AND
correct top_level_item for XOR
2005-03-13 16:34:40 +01:00
igor@rurik.mysql.com
536728c5e8 join_outer.test:
Correction after manual merge.
2005-03-13 01:07:01 -08:00
igor@rurik.mysql.com
7d8b91060d Manual merge 2005-03-13 00:40:55 -08:00
igor@rurik.mysql.com
a90d2bd97c join_outer.result, join_outer.test:
Added a test case for bug #9017.
item_cmpfunc.h:
  A wrong not_null_tables method for Item_cond_xor
  caused a conversion of a left join into an inner join
  that was not valid.
2005-03-12 23:31:52 -08:00
sergefp@mysql.com
f9322a85a4 Merge mysql.com:/home/psergey/mysql-4.1-bug8711
into mysql.com:/home/psergey/mysql-5.0-bug8711
2005-03-11 02:26:38 +03:00
sergefp@mysql.com
763039a17b Merge 2005-03-11 02:23:16 +03:00
sergefp@mysql.com
5d865045c9 Fix for BUG#8711: "<=>" may have true value for NULL arguments, so make
Item_func_equal::not_null_tables() always return 0.
2005-03-11 02:17:03 +03:00
jimw@mysql.com
624f855e94 Make sure that warning message when GROUP_CONCAT() cuts values is also
updated with the correct number of lines. (Bug #8681)
2005-02-23 17:58:20 -08:00
sergefp@mysql.com
48d7fe1671 Fix for valgrind failures in get_mm_tree. 2005-01-18 23:50:42 +03:00
sergefp@mysql.com
e89f5a7136 Fix for BUG#4480: In joins with SELECT_STRAIGHT_JOIN re-order tables by outer join dependency,
so we read dependent tables after tables they depend on (this is needed for outer joins)
2004-12-21 01:59:58 +03:00
monty@mysql.com
1087186657 Merge with 4.1 to get new thd->mem_root handling 2004-11-08 17:53:32 +02:00
igor@rurik.mysql.com
ca355c8a46 join_outer.result, join_outer.test:
Added cases for bugs #6307 and #6460.
sql_select.cc:
  Fixed the problem of bug reports #6307 and #6460.
  The reported wrong result sets were due to the fact that
  the added call of the fix_fields method for the built
  AND condition that joined WHERE and ON conditions
  broke ON expression, as it removed extra AND levels
  in the built condition. 
  It looks like that no attributes of the built condition
  are needed, so we don't have to call fix_fields here.
2004-11-05 22:15:24 -08:00