← Back to team overview

maria-developers team mailing list archive

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)