From: Ole John Aske Date: November 17 2010 11:59am Subject: bzr push into mysql-5.1-telco-7.0-spj-scan-vs-scan branch (ole.john.aske:3372 to 3373) List-Archive: http://lists.mysql.com/commits/124145 Message-Id: <20101117115956.B4DCC222@fimafeng09.norway.sun.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 3373 Ole John Aske 2010-11-17 SPJ-scan-scan: Rework / refactoring of http://lists.mysql.com/commits/124035 Changed the way AQP determines a table to has been 'optimized away, or const'ified by optimizer' modified: mysql-test/suite/ndb/r/ndb_join_pushdown.result sql/abstract_query_plan.cc sql/ha_ndbcluster.cc 3372 Ole John Aske 2010-11-16 [merge] Merge from telco-70 main modified: client/mysqltest.cc cmake/build_configurations/mysql_release.cmake cmake/cmake_parse_arguments.cmake cmake/install_layout.cmake cmake/install_macros.cmake cmake/libutils.cmake cmake/mysql_add_executable.cmake cmake/os/WindowsCache.cmake cmake/plugin.cmake mysql-test/mysql-test-run.pl storage/ndb/include/ndb_global.h storage/ndb/tools/CMakeLists.txt === modified file 'mysql-test/suite/ndb/r/ndb_join_pushdown.result' --- a/mysql-test/suite/ndb/r/ndb_join_pushdown.result 2010-11-16 13:26:19 +0000 +++ b/mysql-test/suite/ndb/r/ndb_join_pushdown.result 2010-11-17 11:59:32 +0000 @@ -2709,7 +2709,7 @@ id select_type table type possible_keys 1 SIMPLE t1 const PRIMARY PRIMARY 4 const 1 100.00 1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 const 1 100.00 Warnings: -Note 1644 Table 't1' not pushable, select list can't contain BLOB columns +Note 1644 Table 't1' was optimized away, or const'ified by optimizer Note 1003 select '2' AS `a`,'1' AS `b`,'kalle' AS `c`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` join `test`.`t2` where ((`test`.`t2`.`a` = '1')) select * from t1, t2 @@ -4528,7 +4528,7 @@ id select_type table type possible_keys 1 SIMPLE b system NULL NULL NULL NULL 1 100.00 1 SIMPLE a ALL NULL NULL NULL NULL 4 50.00 Warnings: -Note 1644 Table 'b' was const-table optimized, no runtime access required +Note 1644 Table 'b' was optimized away, or const'ified by optimizer Note 1003 select `test`.`a`.`k` AS `k`,`test`.`a`.`uq` AS `uq`,NULL AS `k`,NULL AS `uq` from `test`.`t` `a` left join `test`.`t` `b` on((isnull(`test`.`a`.`k`) and (`test`.`a`.`uq` = NULL))) select * from t as a left join t as b on a.k is null and a.uq=b.uq; === modified file 'sql/abstract_query_plan.cc' --- a/sql/abstract_query_plan.cc 2010-11-16 13:26:19 +0000 +++ b/sql/abstract_query_plan.cc 2010-11-17 11:59:32 +0000 @@ -298,6 +298,16 @@ namespace AQP DBUG_VOID_RETURN; } + /* Tables below 'const_tables' has been const'ified, or entirely + * optimized away due to 'impossible WHERE/ON' + */ + if (join_tab < join->join_tab+join->const_tables) + { + DBUG_PRINT("info", ("Operation %d is const-optimized.", m_tab_no)); + m_access_type= AT_FIXED; + DBUG_VOID_RETURN; + } + /* First non-const table may provide 'simple' ordering for entire join */ if (join_tab == join->join_tab+join->const_tables) { @@ -309,11 +319,6 @@ namespace AQP */ switch (join_tab->type) { - case JT_SYSTEM: - DBUG_PRINT("info", ("Operation %d is const-optimized.", m_tab_no)); - m_access_type= AT_FIXED; - break; - case JT_EQ_REF: case JT_CONST: m_index_no= join_tab->ref.key; === modified file 'sql/ha_ndbcluster.cc' --- a/sql/ha_ndbcluster.cc 2010-11-16 13:26:19 +0000 +++ b/sql/ha_ndbcluster.cc 2010-11-17 11:59:32 +0000 @@ -862,7 +862,6 @@ ndb_pushed_builder_ctx::init_pushability const AQP::Table_access* const table_access = m_plan.get_table_access(i); if (table_access->get_table()->file->ht != ndbcluster_hton) { - m_tables[i].m_maybe_pushable= 0; EXPLAIN_NO_PUSH("Table '%s' not in ndb engine, not pushable", table_access->get_table()->alias); continue; @@ -875,16 +874,14 @@ ndb_pushed_builder_ctx::init_pushability break; case AQP::AT_FIXED: - EXPLAIN_NO_PUSH("Table '%s' was const-table optimized, no runtime access required", + EXPLAIN_NO_PUSH("Table '%s' was optimized away, or const'ified by optimizer", table_access->get_table()->alias); - m_tables[i].m_maybe_pushable= 0; break; case AQP::AT_OTHER: EXPLAIN_NO_PUSH("Table '%s' is not pushable: %s", table_access->get_table()->alias, table_access->get_other_access_reason()); - m_tables[i].m_maybe_pushable= 0; break; case AQP::AT_UNDECIDED: @@ -892,7 +889,6 @@ ndb_pushed_builder_ctx::init_pushability " execution time and '%s' is therefore not pushable.", table_access->get_table()->alias, table_access->get_table()->alias); - m_tables[i].m_maybe_pushable= 0; break; default: No bundle (reason: useless for push emails).