mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MWL#17: Table elimination
- More test coverage - Remove unused code
This commit is contained in:
@@ -314,8 +314,8 @@ create table t1 (a int, b int, c int, d int);
|
|||||||
insert into t1 values (0,0,0,0),(1,1,1,1),(2,2,2,2),(3,3,3,3);
|
insert into t1 values (0,0,0,0),(1,1,1,1),(2,2,2,2),(3,3,3,3);
|
||||||
create table t2 (pk int primary key, b int)
|
create table t2 (pk int primary key, b int)
|
||||||
as select a as pk, a as b from t1 where a in (1,2);
|
as select a as pk, a as b from t1 where a in (1,2);
|
||||||
create table t3 (pk int primary key, b int)
|
create table t3 (pk1 int, pk2 int, b int, unique(pk1,pk2));
|
||||||
as select a as pk, a as b from t1 where a in (1,3);
|
insert into t3 select a as pk1, a as pk2, a as b from t1 where a in (1,3);
|
||||||
explain select t1.a from t1 left join t2 on t2.pk=t1.a and t2.b<t1.b;
|
explain select t1.a from t1 left join t2 on t2.pk=t1.a and t2.b<t1.b;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 4
|
||||||
@@ -344,4 +344,11 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
explain select t1.a from t1 left join t2 on t2.pk in (t1.a);
|
explain select t1.a from t1 left join t2 on t2.pk in (t1.a);
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 4
|
||||||
|
explain select t1.a from t1 left join t2 on TRUE;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 4
|
||||||
|
1 SIMPLE t2 index NULL PRIMARY 4 NULL 2 Using index
|
||||||
|
explain select t1.a from t1 left join t3 on t3.pk1=t1.a and t3.pk2 IS NULL;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 4
|
||||||
drop table t1,t2,t3;
|
drop table t1,t2,t3;
|
||||||
|
@@ -274,5 +274,7 @@ explain select t1.a from t1 left join t2 on t2.pk in (t1.a);
|
|||||||
|
|
||||||
explain select t1.a from t1 left join t2 on TRUE;
|
explain select t1.a from t1 left join t2 on TRUE;
|
||||||
|
|
||||||
|
explain select t1.a from t1 left join t3 on t3.pk1=t1.a and t3.pk2 IS NULL;
|
||||||
|
|
||||||
drop table t1,t2,t3;
|
drop table t1,t2,t3;
|
||||||
|
|
||||||
|
@@ -490,7 +490,7 @@ void build_eq_mods_for_cond(Func_dep_analyzer *fda, Equality_module **eq_mod,
|
|||||||
{
|
{
|
||||||
Item *tmp=new Item_null;
|
Item *tmp=new Item_null;
|
||||||
if (tmp)
|
if (tmp)
|
||||||
add_eq_mod(fda, eq_mod, *and_level, cond_func, args[0], args[1]);
|
add_eq_mod(fda, eq_mod, *and_level, cond_func, args[0], tmp);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Item_func::MULT_EQUAL_FUNC:
|
case Item_func::MULT_EQUAL_FUNC:
|
||||||
@@ -828,7 +828,7 @@ static Table_value *get_table_value(Func_dep_analyzer *fda, TABLE *table)
|
|||||||
{
|
{
|
||||||
Table_value *tbl_dep;
|
Table_value *tbl_dep;
|
||||||
if (!(tbl_dep= new Table_value(table)))
|
if (!(tbl_dep= new Table_value(table)))
|
||||||
return NULL; /* purecov: inspected */
|
return NULL;
|
||||||
|
|
||||||
Key_module **key_list= &(tbl_dep->keys);
|
Key_module **key_list= &(tbl_dep->keys);
|
||||||
/* Add dependencies for unique keys */
|
/* Add dependencies for unique keys */
|
||||||
@@ -853,15 +853,8 @@ static Table_value *get_table_value(Func_dep_analyzer *fda, TABLE *table)
|
|||||||
static Field_value *get_field_value(Func_dep_analyzer *fda, Field *field)
|
static Field_value *get_field_value(Func_dep_analyzer *fda, Field *field)
|
||||||
{
|
{
|
||||||
TABLE *table= field->table;
|
TABLE *table= field->table;
|
||||||
Table_value *tbl_dep;
|
Table_value *tbl_dep= fda->table_deps[table->tablenr];
|
||||||
|
|
||||||
/* First, get the table*/
|
|
||||||
if (!(tbl_dep= fda->table_deps[table->tablenr]))
|
|
||||||
{
|
|
||||||
if (!(tbl_dep= get_table_value(fda, table)))
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Try finding the field in field list */
|
/* Try finding the field in field list */
|
||||||
Field_value **pfield= &(tbl_dep->fields);
|
Field_value **pfield= &(tbl_dep->fields);
|
||||||
while (*pfield && (*pfield)->field->field_index < field->field_index)
|
while (*pfield && (*pfield)->field->field_index < field->field_index)
|
||||||
|
Reference in New Issue
Block a user