mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Fix for bug#58134: 'Incorrectly condition pushdown inside subquery to NDB engine'
An incorrect 'table_map' containing both the table itself, and possible any outer-refs if this was the last table in the subquery, was presented to make_cond_for_table(). As a pushed condition is only able to refer column from the table the condition is pushed to, nothing else than columns from the table itself (tab->table->map) may be refered in the pushed condition constructed by 'push_cond= make_cond_for_table()'. Also fix a minor 'copy and paste' bug in a comment inside make_cond_for_table(). No testcase is possible on mainbranch as the NDB engine is not available (yet) on mysql >= 5.5
This commit is contained in:
@ -6480,7 +6480,7 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond)
|
|||||||
OPTIMIZER_SWITCH_ENGINE_CONDITION_PUSHDOWN)
|
OPTIMIZER_SWITCH_ENGINE_CONDITION_PUSHDOWN)
|
||||||
{
|
{
|
||||||
COND *push_cond=
|
COND *push_cond=
|
||||||
make_cond_for_table(tmp, current_map, current_map);
|
make_cond_for_table(tmp, tab->table->map, tab->table->map);
|
||||||
if (push_cond)
|
if (push_cond)
|
||||||
{
|
{
|
||||||
/* Push condition to handler */
|
/* Push condition to handler */
|
||||||
@ -13099,7 +13099,7 @@ make_cond_for_table(COND *cond, table_map tables, table_map used_table)
|
|||||||
new_cond->argument_list()->push_back(fix);
|
new_cond->argument_list()->push_back(fix);
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
Item_cond_and do not need fix_fields for execution, its parameters
|
Item_cond_or do not need fix_fields for execution, its parameters
|
||||||
are fixed or do not need fix_fields, too
|
are fixed or do not need fix_fields, too
|
||||||
*/
|
*/
|
||||||
new_cond->quick_fix_field();
|
new_cond->quick_fix_field();
|
||||||
|
Reference in New Issue
Block a user