Table elimination works 5.3 release builds even if turned off
| Affects | Status | Importance | Assigned to | Milestone | |
|---|---|---|---|---|---|
| MariaDB |
Fix Released
|
Undecided
|
Unassigned | ||
Bug Description
Table elimination works in 5.3 release builds, even if one sets @@optimizer_switch to turn it off.
create table t1 (a int);
insert into t1 values (0),(1),(2),(3);
create table t2 (a int primary key, b int)
as select a, a as b from t1 where a in (1,2);
set optimizer_
explain extended select t1.a from t1 left join t2 on t2.a=t1.a;
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 100.00
Warnings:
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where 1
set optimizer_
explain extended select t1.a from t1 left join t2 on t2.a=t1.a;
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 100.00
Warnings:
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where 1
| Changed in maria: | |
| status: | New → Fix Committed |
| Changed in maria: | |
| status: | Fix Committed → Fix Released |

The problem is because of this code in eliminate_tables();
#ifndef DBUG_OFF flag(thd, OPTIMIZER_ SWITCH_ TABLE_ELIMINATI ON)) VOID_RETURN; /* purecov: inspected */
if (!optimizer_
DBUG_
#endif
The "#ifndef DBUG_OFF" part is left since the times when table_eliminati on=on/off was present only in debug builds.