maria-developers team mailing list archive
-
maria-developers team
-
Mailing list archive
-
Message #00813
Rev 2745: MWL#17: Table elimination in file:///home/psergey/dev/maria-5.1-table-elim-r11-gcov/
At file:///home/psergey/dev/maria-5.1-table-elim-r11-gcov/
------------------------------------------------------------
revno: 2745
revision-id: psergey@xxxxxxxxxxxx-20090825103822-ldmjinfdh7ymc35r
parent: psergey@xxxxxxxxxxxx-20090825092750-mnmatimn7cxm4rl8
committer: Sergey Petrunya <psergey@xxxxxxxxxxxx>
branch nick: maria-5.1-table-elim-r11-gcov
timestamp: Tue 2009-08-25 13:38:22 +0300
message:
MWL#17: Table elimination
- More test coverage
- Remove unused code
=== modified file 'mysql-test/r/table_elim.result'
--- a/mysql-test/r/table_elim.result 2009-08-25 09:27:50 +0000
+++ b/mysql-test/r/table_elim.result 2009-08-25 10:38:22 +0000
@@ -314,8 +314,8 @@
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)
as select a as pk, a as b from t1 where a in (1,2);
-create table t3 (pk int primary key, b int)
-as select a as pk, a as b from t1 where a in (1,3);
+create table t3 (pk1 int, pk2 int, b int, unique(pk1,pk2));
+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;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 4
@@ -344,4 +344,11 @@
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
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;
=== modified file 'mysql-test/t/table_elim.test'
--- a/mysql-test/t/table_elim.test 2009-08-25 09:27:50 +0000
+++ b/mysql-test/t/table_elim.test 2009-08-25 10:38:22 +0000
@@ -274,5 +274,7 @@
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;
=== modified file 'sql/opt_table_elimination.cc'
--- a/sql/opt_table_elimination.cc 2009-08-25 09:27:50 +0000
+++ b/sql/opt_table_elimination.cc 2009-08-25 10:38:22 +0000
@@ -490,7 +490,7 @@
{
Item *tmp=new Item_null;
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;
}
case Item_func::MULT_EQUAL_FUNC:
@@ -828,7 +828,7 @@
{
Table_value *tbl_dep;
if (!(tbl_dep= new Table_value(table)))
- return NULL; /* purecov: inspected */
+ return NULL;
Key_module **key_list= &(tbl_dep->keys);
/* Add dependencies for unique keys */
@@ -853,15 +853,8 @@
static Field_value *get_field_value(Func_dep_analyzer *fda, Field *field)
{
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 */
Field_value **pfield= &(tbl_dep->fields);
while (*pfield && (*pfield)->field->field_index < field->field_index)