Don't reset maybe_null in update_used_tables(); This breaks ROLLUP
This fixed failing test in group_by.test mysql-test/r/join_outer.result: Updated test case mysql-test/r/join_outer_jcl6.result: Updated test case sql/item.cc: Don't reset maybe_null in update_used_tables(); This breaks ROLLUP sql/item.h: Don't reset maybe_null in update_used_tables(); This breaks ROLLUP sql/item_cmpfunc.h: Don't reset maybe_null in update_used_tables(); This breaks ROLLUP
This commit is contained in:
parent
c4e00d03e7
commit
c65f9a1914
@ -2019,10 +2019,10 @@ SELECT t1.pk FROM t2 LEFT JOIN t1 ON t2.pk = t1.a
|
|||||||
WHERE t1.b BETWEEN 5 AND 6 AND t1.pk IS NULL OR t1.pk = 5
|
WHERE t1.b BETWEEN 5 AND 6 AND t1.pk IS NULL OR t1.pk = 5
|
||||||
ORDER BY t1.pk;
|
ORDER BY t1.pk;
|
||||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
1 SIMPLE t1 const PRIMARY PRIMARY 4 const 1 100.00
|
1 SIMPLE t1 const PRIMARY,idx PRIMARY 4 const 1 100.00
|
||||||
1 SIMPLE t2 const PRIMARY PRIMARY 4 const 1 100.00 Using index
|
1 SIMPLE t2 const PRIMARY PRIMARY 4 const 1 100.00 Using index
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select 5 AS `pk` from `test`.`t2` join `test`.`t1` where (1) order by 5
|
Note 1003 select 5 AS `pk` from `test`.`t2` join `test`.`t1` where ((((1 between 5 and 6) and isnull(5)) or 1)) order by 5
|
||||||
SELECT t1.pk FROM t2 LEFT JOIN t1 ON t2.pk = t1.a
|
SELECT t1.pk FROM t2 LEFT JOIN t1 ON t2.pk = t1.a
|
||||||
WHERE t1.b BETWEEN 5 AND 6 AND t1.pk IS NULL OR t1.pk = 5
|
WHERE t1.b BETWEEN 5 AND 6 AND t1.pk IS NULL OR t1.pk = 5
|
||||||
ORDER BY t1.pk;
|
ORDER BY t1.pk;
|
||||||
@ -2058,10 +2058,10 @@ SELECT t1.b, t2.c, t2.d FROM t2 LEFT JOIN t1 ON t2.c = t1.a
|
|||||||
WHERE t1.pk BETWEEN 5 AND 6 AND t1.b IS NULL OR t1.b = 5
|
WHERE t1.pk BETWEEN 5 AND 6 AND t1.b IS NULL OR t1.b = 5
|
||||||
ORDER BY t1.b;
|
ORDER BY t1.b;
|
||||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
1 SIMPLE t1 ref idx idx 4 const 2 100.00 Using where
|
1 SIMPLE t1 ref PRIMARY,idx idx 4 const 2 100.00 Using where; Using filesort
|
||||||
1 SIMPLE t2 ref c c 5 test.t1.a 2 100.00
|
1 SIMPLE t2 ref c c 5 test.t1.a 2 100.00
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select `test`.`t1`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2` join `test`.`t1` where ((`test`.`t2`.`c` = `test`.`t1`.`a`) and (`test`.`t1`.`b` = 5)) order by `test`.`t1`.`b`
|
Note 1003 select `test`.`t1`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2` join `test`.`t1` where ((`test`.`t2`.`c` = `test`.`t1`.`a`) and (((`test`.`t1`.`pk` between 5 and 6) and isnull(`test`.`t1`.`b`)) or (`test`.`t1`.`b` = 5))) order by `test`.`t1`.`b`
|
||||||
SELECT t1.b, t2.c, t2.d FROM t2 LEFT JOIN t1 ON t2.c = t1.a
|
SELECT t1.b, t2.c, t2.d FROM t2 LEFT JOIN t1 ON t2.c = t1.a
|
||||||
WHERE t1.pk BETWEEN 5 AND 6 AND t1.b IS NULL OR t1.b = 5
|
WHERE t1.pk BETWEEN 5 AND 6 AND t1.b IS NULL OR t1.b = 5
|
||||||
ORDER BY t1.b;
|
ORDER BY t1.b;
|
||||||
|
@ -2030,10 +2030,10 @@ SELECT t1.pk FROM t2 LEFT JOIN t1 ON t2.pk = t1.a
|
|||||||
WHERE t1.b BETWEEN 5 AND 6 AND t1.pk IS NULL OR t1.pk = 5
|
WHERE t1.b BETWEEN 5 AND 6 AND t1.pk IS NULL OR t1.pk = 5
|
||||||
ORDER BY t1.pk;
|
ORDER BY t1.pk;
|
||||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
1 SIMPLE t1 const PRIMARY PRIMARY 4 const 1 100.00
|
1 SIMPLE t1 const PRIMARY,idx PRIMARY 4 const 1 100.00
|
||||||
1 SIMPLE t2 const PRIMARY PRIMARY 4 const 1 100.00 Using index
|
1 SIMPLE t2 const PRIMARY PRIMARY 4 const 1 100.00 Using index
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select 5 AS `pk` from `test`.`t2` join `test`.`t1` where (1) order by 5
|
Note 1003 select 5 AS `pk` from `test`.`t2` join `test`.`t1` where ((((1 between 5 and 6) and isnull(5)) or 1)) order by 5
|
||||||
SELECT t1.pk FROM t2 LEFT JOIN t1 ON t2.pk = t1.a
|
SELECT t1.pk FROM t2 LEFT JOIN t1 ON t2.pk = t1.a
|
||||||
WHERE t1.b BETWEEN 5 AND 6 AND t1.pk IS NULL OR t1.pk = 5
|
WHERE t1.b BETWEEN 5 AND 6 AND t1.pk IS NULL OR t1.pk = 5
|
||||||
ORDER BY t1.pk;
|
ORDER BY t1.pk;
|
||||||
@ -2069,10 +2069,10 @@ SELECT t1.b, t2.c, t2.d FROM t2 LEFT JOIN t1 ON t2.c = t1.a
|
|||||||
WHERE t1.pk BETWEEN 5 AND 6 AND t1.b IS NULL OR t1.b = 5
|
WHERE t1.pk BETWEEN 5 AND 6 AND t1.b IS NULL OR t1.b = 5
|
||||||
ORDER BY t1.b;
|
ORDER BY t1.b;
|
||||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
1 SIMPLE t1 ref idx idx 4 const 2 100.00 Using where
|
1 SIMPLE t1 ref PRIMARY,idx idx 4 const 2 100.00 Using where; Using filesort
|
||||||
1 SIMPLE t2 ref c c 5 test.t1.a 2 100.00
|
1 SIMPLE t2 ref c c 5 test.t1.a 2 100.00
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select `test`.`t1`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2` join `test`.`t1` where ((`test`.`t2`.`c` = `test`.`t1`.`a`) and (`test`.`t1`.`b` = 5)) order by `test`.`t1`.`b`
|
Note 1003 select `test`.`t1`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2` join `test`.`t1` where ((`test`.`t2`.`c` = `test`.`t1`.`a`) and (((`test`.`t1`.`pk` between 5 and 6) and isnull(`test`.`t1`.`b`)) or (`test`.`t1`.`b` = 5))) order by `test`.`t1`.`b`
|
||||||
SELECT t1.b, t2.c, t2.d FROM t2 LEFT JOIN t1 ON t2.c = t1.a
|
SELECT t1.b, t2.c, t2.d FROM t2 LEFT JOIN t1 ON t2.c = t1.a
|
||||||
WHERE t1.pk BETWEEN 5 AND 6 AND t1.b IS NULL OR t1.b = 5
|
WHERE t1.pk BETWEEN 5 AND 6 AND t1.b IS NULL OR t1.b = 5
|
||||||
ORDER BY t1.b;
|
ORDER BY t1.b;
|
||||||
|
@ -9603,7 +9603,7 @@ void Item_ref::update_used_tables()
|
|||||||
{
|
{
|
||||||
if (!get_depended_from())
|
if (!get_depended_from())
|
||||||
(*ref)->update_used_tables();
|
(*ref)->update_used_tables();
|
||||||
maybe_null= (*ref)->maybe_null;
|
maybe_null|= (*ref)->maybe_null;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Item_direct_view_ref::update_used_tables()
|
void Item_direct_view_ref::update_used_tables()
|
||||||
|
@ -2057,7 +2057,7 @@ public:
|
|||||||
{
|
{
|
||||||
update_table_bitmaps();
|
update_table_bitmaps();
|
||||||
if (field && field->table)
|
if (field && field->table)
|
||||||
maybe_null= field->maybe_null();
|
maybe_null|= field->maybe_null();
|
||||||
}
|
}
|
||||||
Item *get_tmp_table_item(THD *thd);
|
Item *get_tmp_table_item(THD *thd);
|
||||||
bool collect_item_field_processor(uchar * arg);
|
bool collect_item_field_processor(uchar * arg);
|
||||||
@ -3112,7 +3112,7 @@ public:
|
|||||||
void update_used_tables()
|
void update_used_tables()
|
||||||
{
|
{
|
||||||
orig_item->update_used_tables();
|
orig_item->update_used_tables();
|
||||||
maybe_null= orig_item->maybe_null;
|
maybe_null|= orig_item->maybe_null;
|
||||||
}
|
}
|
||||||
bool const_item() const { return orig_item->const_item(); }
|
bool const_item() const { return orig_item->const_item(); }
|
||||||
table_map not_null_tables() const { return orig_item->not_null_tables(); }
|
table_map not_null_tables() const { return orig_item->not_null_tables(); }
|
||||||
|
@ -770,7 +770,7 @@ public:
|
|||||||
void update_used_tables()
|
void update_used_tables()
|
||||||
{
|
{
|
||||||
Item_func_coalesce::update_used_tables();
|
Item_func_coalesce::update_used_tables();
|
||||||
maybe_null= args[1]->maybe_null;
|
maybe_null|= args[1]->maybe_null;
|
||||||
}
|
}
|
||||||
const char *func_name() const { return "ifnull"; }
|
const char *func_name() const { return "ifnull"; }
|
||||||
Field *tmp_table_field(TABLE *table);
|
Field *tmp_table_field(TABLE *table);
|
||||||
@ -797,7 +797,7 @@ public:
|
|||||||
void update_used_tables()
|
void update_used_tables()
|
||||||
{
|
{
|
||||||
Item_func::update_used_tables();
|
Item_func::update_used_tables();
|
||||||
maybe_null= args[1]->maybe_null || args[2]->maybe_null;
|
maybe_null|= args[1]->maybe_null || args[2]->maybe_null;
|
||||||
}
|
}
|
||||||
uint decimal_precision() const;
|
uint decimal_precision() const;
|
||||||
const char *func_name() const { return "if"; }
|
const char *func_name() const { return "if"; }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user