From: magnus.blaudd Date: September 28 2011 10:50am Subject: bzr push into mysql-trunk-cluster branch (magnus.blaudd:3370 to 3383) List-Archive: http://lists.mysql.com/commits/141183 Message-Id: <201109281050.p8SAoW74028022@acsmt357.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 3383 magnus.blaudd@stripped 2011-09-28 remove compiler warnings ignored by Cluster team modified: support-files/compiler_warnings.supp 3382 magnus.blaudd@stripped 2011-09-28 [merge] Merge trunk-cluster -> trunk-cluster-merge modified: sql/binlog.cc sql/ha_partition.h sql/rpl_mi.cc sql/rpl_mi.h sql/rpl_reporting.cc sql/table.cc 3381 magnus.blaudd@stripped 2011-09-28 [merge] Merge trunk-cluster -> trunk-cluster-merge modified: cmake/configure.pl 3380 magnus.blaudd@stripped 2011-09-28 [merge] Merge trunk-cluster -> trunk-cluster-merge modified: sql/rpl_injector.h sql/sql_select.cc 3379 magnus.blaudd@stripped 2011-09-28 MCP - remove MCP patch for WL#6004 modified: sql/handler.h sql/sql_acl.cc 3378 magnus.blaudd@stripped 2011-09-28 remove another extra newline modified: sql/sql_update.cc 3377 magnus.blaudd@stripped 2011-09-28 remove extra newline modified: sql/sql_truncate.cc 3376 magnus.blaudd@stripped 2011-09-28 [merge] Merge trunk-cluster -> trunk-cluster-merge modified: sql/handler.cc 3375 magnus.blaudd@stripped 2011-09-28 remove extra newline modified: sql/handler.cc 3374 magnus.blaudd@stripped 2011-09-28 MCP - remove MCP patch for WL#5906 modified: sql/handler.h sql/sql_delete.cc sql/sql_update.cc 3373 magnus.blaudd@stripped 2011-09-28 MCP - remove MCP patch for WL4784 removed: sql/abstract_query_plan.cc sql/abstract_query_plan.h modified: sql/CMakeLists.txt sql/handler.cc sql/handler.h sql/opt_explain.cc sql/sql_select.cc sql/sql_select.h 3372 magnus.blaudd@stripped 2011-09-28 [merge] Merge trunk-cluster -> trunk-cluster-merge modified: include/my_base.h 3371 magnus.blaudd@stripped 2011-09-28 [merge] Merge trunk-cluster -> trunk-cluster-merge modified: storage/archive/archive_reader.c 3370 magnus.blaudd@stripped 2011-09-27 [merge] Merge trunk-cluster -> trunk-cluster-merge removed: scripts/make_binary_distribution.sh scripts/make_win_bin_dist support-files/config.huge.ini.sh support-files/config.medium.ini.sh support-files/config.small.ini.sh support-files/ndb-config-2-node.ini.sh added: mysql-test/r/auth_rpl.result mysql-test/suite/opt_trace/include/filesort_pq.inc mysql-test/suite/opt_trace/r/filesort_pq.result mysql-test/suite/opt_trace/t/filesort_pq.test mysql-test/t/auth_rpl-master.opt mysql-test/t/auth_rpl-slave.opt mysql-test/t/auth_rpl.test modified: CMakeLists.txt client/mysql_plugin.c client/mysqltest.cc cmake/mysql_version.cmake cmake/plugin.cmake config.h.cmake extra/perror.c include/my_base.h include/mysql/plugin.h include/mysql/plugin_audit.h.pp include/mysql/plugin_auth.h.pp include/mysql/plugin_ftparser.h.pp include/mysql/psi/mysql_socket.h libmysql/authentication_win/common.cc libmysql/authentication_win/common.h libmysql/authentication_win/handshake_client.cc libmysql/authentication_win/log_client.cc libmysql/client_settings.h mysql-test/collections/default.experimental mysql-test/collections/disabled-weekly.list mysql-test/include/icp_tests.inc mysql-test/include/mtr_check.sql mysql-test/include/order_by.inc mysql-test/mysql-test-run.pl mysql-test/r/ctype_errors.result mysql-test/r/ctype_utf16.result mysql-test/r/ctype_utf32_uca.result mysql-test/r/derived.result mysql-test/r/func_str.result mysql-test/r/innodb_icp.result mysql-test/r/innodb_icp_none.result mysql-test/r/innodb_mrr_cost_icp.result mysql-test/r/innodb_mrr_icp.result mysql-test/r/join.result mysql-test/r/myisam_icp.result mysql-test/r/myisam_icp_none.result mysql-test/r/myisampack.result mysql-test/r/order_by_all.result mysql-test/r/order_by_icp_mrr.result mysql-test/r/order_by_none.result mysql-test/r/plugin_auth.result mysql-test/r/query_cache.result mysql-test/r/range_all.result mysql-test/r/sp-error.result mysql-test/r/sp.result mysql-test/r/subquery_all.result mysql-test/r/subquery_all_bka.result mysql-test/r/subquery_sj_dupsweed.result mysql-test/r/subquery_sj_dupsweed_bka.result mysql-test/r/subquery_sj_dupsweed_bkaunique.result mysql-test/r/subquery_sj_loosescan.result mysql-test/r/subquery_sj_loosescan_bka.result mysql-test/r/subquery_sj_loosescan_bkaunique.result mysql-test/r/subquery_sj_mat.result mysql-test/r/subquery_sj_mat_bka.result mysql-test/r/subquery_sj_mat_bkaunique.result mysql-test/r/subquery_sj_none.result mysql-test/r/subquery_sj_none_bka.result mysql-test/r/subquery_sj_none_bka_nobnl.result mysql-test/r/subquery_sj_none_bkaunique.result mysql-test/r/type_float.result mysql-test/r/union.result mysql-test/r/view_grant.result mysql-test/suite/innodb/r/innodb-index.result mysql-test/suite/innodb/t/innodb-index.test mysql-test/suite/opt_trace/r/bugs_no_prot_none.result mysql-test/suite/opt_trace/r/bugs_ps_prot_none.result mysql-test/suite/opt_trace/r/general2_no_prot.result mysql-test/suite/opt_trace/r/general2_ps_prot.result mysql-test/suite/opt_trace/r/general_no_prot_none.result mysql-test/suite/opt_trace/r/general_ps_prot_none.result mysql-test/suite/opt_trace/r/range_no_prot.result mysql-test/suite/opt_trace/r/range_ps_prot.result mysql-test/suite/perfschema/r/pfs_upgrade.result mysql-test/suite/perfschema/t/socket_instances_func.test mysql-test/suite/perfschema/t/socket_instances_func_win.test mysql-test/suite/perfschema/t/socket_summary_by_instance_func.test mysql-test/suite/perfschema/t/socket_summary_by_instance_func_win.test mysql-test/suite/rpl/r/rpl_row_ignorable_event.result mysql-test/suite/rpl/r/rpl_slave_load_remove_tmpfile.result mysql-test/suite/rpl/t/rpl_row_ignorable_event.test mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test mysql-test/t/ctype_errors.test mysql-test/t/ctype_utf32_uca.test mysql-test/t/derived.test mysql-test/t/func_str.test mysql-test/t/join.test mysql-test/t/multi_plugin_load.test mysql-test/t/myisampack.test mysql-test/t/mysql_plugin.test mysql-test/t/plugin_auth.test mysql-test/t/query_cache.test mysql-test/t/sp-error.test mysql-test/t/sp.test mysql-test/t/type_float.test mysql-test/t/union.test mysql-test/t/view_grant.test mysql-test/valgrind.supp mysys/my_handler_errors.h plugin/audit_null/audit_null.c plugin/auth/auth_socket.c plugin/auth/dialog.c plugin/auth/qa_auth_interface.c plugin/auth/qa_auth_server.c plugin/auth/test_plugin.c plugin/daemon_example/daemon_example.cc plugin/fulltext/plugin_example.c plugin/semisync/semisync_master.cc plugin/semisync/semisync_master_plugin.cc plugin/semisync/semisync_slave_plugin.cc scripts/CMakeLists.txt scripts/mysql_install_db.pl.in scripts/mysql_install_db.sh scripts/mysql_system_tables.sql sql/binlog.cc sql/client_settings.h sql/filesort.cc sql/ha_partition.cc sql/handler.cc sql/item.cc sql/item.h sql/item_create.cc sql/item_strfunc.cc sql/item_strfunc.h sql/opt_range.cc sql/opt_trace.h sql/rpl_slave.cc sql/share/errmsg-utf8.txt sql/sql_acl.cc sql/sql_base.cc sql/sql_cache.cc sql/sql_error.cc sql/sql_lex.cc sql/sql_plugin.cc sql/sql_select.cc sql/sql_test.cc sql/sql_test.h sql/sql_union.cc sql/sql_update.cc sql/sql_yacc.yy sql/table.h storage/archive/ha_archive.cc storage/blackhole/ha_blackhole.cc storage/csv/ha_tina.cc storage/example/ha_example.cc storage/federated/ha_federated.cc storage/heap/ha_heap.cc storage/innobase/CMakeLists.txt storage/innobase/btr/btr0btr.c storage/innobase/btr/btr0cur.c storage/innobase/btr/btr0pcur.c storage/innobase/buf/buf0buddy.c storage/innobase/buf/buf0buf.c storage/innobase/buf/buf0flu.c storage/innobase/data/data0data.c storage/innobase/dict/dict0dict.c storage/innobase/dict/dict0load.c storage/innobase/fsp/fsp0fsp.c storage/innobase/handler/ha_innodb.cc storage/innobase/handler/i_s.cc storage/innobase/ibuf/ibuf0ibuf.c storage/innobase/include/btr0btr.ic storage/innobase/include/btr0pcur.h storage/innobase/include/btr0pcur.ic storage/innobase/include/buf0buf.h storage/innobase/include/buf0buf.ic storage/innobase/include/data0data.ic storage/innobase/include/data0type.ic storage/innobase/include/db0err.h storage/innobase/include/dict0dict.ic storage/innobase/include/dict0load.h storage/innobase/include/mtr0mtr.h storage/innobase/include/page0page.h storage/innobase/include/page0page.ic storage/innobase/include/page0zip.ic storage/innobase/include/rem0rec.ic storage/innobase/include/row0upd.ic storage/innobase/include/srv0mon.h storage/innobase/include/sync0sync.h storage/innobase/include/trx0sys.h storage/innobase/include/trx0trx.h storage/innobase/include/trx0undo.h storage/innobase/include/univ.i storage/innobase/include/ut0mem.h storage/innobase/include/ut0mem.ic storage/innobase/log/log0log.c storage/innobase/mtr/mtr0log.c storage/innobase/mtr/mtr0mtr.c storage/innobase/os/os0file.c storage/innobase/page/page0cur.c storage/innobase/page/page0page.c storage/innobase/page/page0zip.c storage/innobase/read/read0read.c storage/innobase/rem/rem0cmp.c storage/innobase/row/row0merge.c storage/innobase/row/row0mysql.c storage/innobase/row/row0purge.c storage/innobase/row/row0row.c storage/innobase/row/row0sel.c storage/innobase/row/row0upd.c storage/innobase/srv/srv0start.c storage/innobase/sync/sync0sync.c storage/innobase/trx/trx0purge.c storage/innobase/trx/trx0rec.c storage/innobase/trx/trx0undo.c storage/innobase/ut/ut0mem.c storage/innobase/ut/ut0ut.c storage/myisam/ft_boolean_search.c storage/myisam/ft_nlq_search.c storage/myisam/ha_myisam.cc storage/myisam/mi_check.c storage/myisam/mi_write.c storage/myisammrg/ha_myisammrg.cc storage/perfschema/ha_perfschema.cc storage/perfschema/pfs.cc storage/perfschema/pfs_instr.cc storage/perfschema/pfs_instr.h strings/dtoa.c support-files/CMakeLists.txt support-files/mysql.spec.sh tests/mysql_client_test.c unittest/gunit/CMakeLists.txt === modified file 'cmake/configure.pl' --- a/cmake/configure.pl 2011-09-07 10:08:09 +0000 +++ b/cmake/configure.pl 2011-09-28 09:38:22 +0000 @@ -206,11 +206,12 @@ foreach my $option (@ARGV) ($option =~ /enable/ ? "1" : "0"); next; } - if ($option =~ /with-gcov/) + if ($option =~ /with-comment=/) { - $cmakeargs = $cmakeargs." -DENABLE_GCOV=ON"; - next; + $cmakeargs = $cmakeargs." \"-DWITH_COMMENT=".substr($option,13)."\""; + next; } +#ifndef MCP_NDB_BUILD_INTEGRATION if ($option =~ /with-classpath=/) { $cmakeargs = $cmakeargs." \"-DWITH_CLASSPATH=".substr($option,15)."\""; @@ -226,6 +227,12 @@ foreach my $option (@ARGV) $cmakeargs = $cmakeargs." \"-DWITH_NDB_CCFLAGS=".substr($option,17)."\""; next; } +#endif + if ($option =~ /with-gcov/) + { + $cmakeargs = $cmakeargs." -DENABLE_GCOV=ON"; + next; + } $option = uc($option); $option =~ s/-/_/g; === modified file 'include/my_base.h' --- a/include/my_base.h 2011-09-27 13:38:39 +0000 +++ b/include/my_base.h 2011-09-28 08:00:32 +0000 @@ -556,10 +556,6 @@ enum data_file_type { /* Deprecated, currently used only by NDB at row retrieval */ #define SKIP_RANGE 256 -#ifndef MCP_BUG58084 -#define READ_KEY_FROM_RANGE 512 /* Reserved for MySQL Cluster internal use */ -#define EMPTY_RANGE 1024 /* Reserved for MySQL Cluster internal use */ -#endif typedef struct st_key_range { === modified file 'sql/CMakeLists.txt' --- a/sql/CMakeLists.txt 2011-09-27 12:11:16 +0000 +++ b/sql/CMakeLists.txt 2011-09-28 08:33:28 +0000 @@ -37,7 +37,6 @@ IF(SSL_DEFINES) ENDIF() SET(SQL_SHARED_SOURCES - abstract_query_plan.cc # MCP_WL4784 datadict.cc debug_sync.cc derror.cc === removed file 'sql/abstract_query_plan.cc' --- a/sql/abstract_query_plan.cc 2011-07-01 06:38:52 +0000 +++ b/sql/abstract_query_plan.cc 1970-01-01 00:00:00 +0000 @@ -1,559 +0,0 @@ -/* - Copyright 2010 Sun Microsystems, Inc. - All rights reserved. Use is subject to license terms. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifdef USE_PRAGMA_IMPLEMENTATION -#pragma implementation // gcc: Class implementation -#endif - -#include "sql_priv.h" -#include "sql_select.h" -#include "abstract_query_plan.h" - - - -namespace AQP -{ - - /** - @param join_tab Array of access methods constituting the nested loop join. - @param access_count Length of array. - */ - Join_plan::Join_plan(const JOIN* join) - : m_join_tabs(join->join_tab), - m_access_count(join->tables), - m_table_accesses(NULL) - { - /* - This combination is assumed not to appear. If it does, code must - be written to handle it. - */ - DBUG_ASSERT((m_join_tabs[0].use_quick != 2) - || (m_join_tabs[0].type == JT_ALL) - || (m_join_tabs[0].select == NULL) - || (m_join_tabs[0].select->quick == NULL)); - - m_table_accesses= new Table_access[m_access_count]; - for(uint i= 0; i < m_access_count; i++) - { - m_table_accesses[i].m_join_plan= this; - m_table_accesses[i].m_tab_no= i; - } - } - - Join_plan::~Join_plan() - { - delete[] m_table_accesses; - m_table_accesses= NULL; - } - - /** Get the JOIN_TAB of the n'th table access operation.*/ - const JOIN_TAB* Join_plan::get_join_tab(uint join_tab_no) const - { - DBUG_ASSERT(join_tab_no < m_access_count); - return m_join_tabs + join_tab_no; - } - - void - Join_plan::find_skippabable_group_or_order() const - { - const - JOIN* const join= m_join_tabs->join; - - if (join->const_tables < join->tables) - { - JOIN_TAB* join_head= join->join_tab+join->const_tables; - - m_group_by_filesort_is_skippable= join->group_optimized_away; - m_order_by_filesort_is_skippable= join->skip_sort_order; - - /* A single row don't have to be sorted */ - if (join_head->type == JT_CONST || - join_head->type == JT_SYSTEM || - join_head->type == JT_EQ_REF) - { - m_group_by_filesort_is_skippable= true; - m_order_by_filesort_is_skippable= true; - } - else if (join->select_options & SELECT_BIG_RESULT) - { - /* Excluded from ordered index optimization */ - } - else if (join->group_list && !m_group_by_filesort_is_skippable) - { - if (!join->tmp_table_param.quick_group || join->procedure) - { - /* Unsure how to handle - Is disabled in ::compute_type_and_index() */ - } - if (join->simple_group) - { - /** - test_if_skip_sort_order(...group_list...) already done by JOIN::optimize(). - As we still have a 'simple_group', GROUP BY has been optimized through an - access path providing an ordered sequence as required by GROUP BY: - - Verify this assumption in ASSERT below: - */ - DBUG_ASSERT(test_if_skip_sort_order(join_head, join->group_list, - join->unit->select_limit_cnt, true, - &join_head->table->keys_in_use_for_group_by)); - m_group_by_filesort_is_skippable= true; - } - } - else if (join->order && !m_order_by_filesort_is_skippable) - { - if (join->simple_order) - { - m_order_by_filesort_is_skippable= - test_if_skip_sort_order(join_head, - join->order, - join->unit->select_limit_cnt, false, - &join_head->table->keys_in_use_for_order_by); - } - } - } - } - - bool - Join_plan::group_by_filesort_is_skippable() const - { - return (m_group_by_filesort_is_skippable == true); - } - - bool - Join_plan::order_by_filesort_is_skippable() const - { - return (m_order_by_filesort_is_skippable == true); - } - - /** - Determine join type between this table access and some other table - access that preceeds it in the join plan.. - */ - enum_join_type - Table_access::get_join_type(const Table_access* predecessor) const - { - DBUG_ENTER("get_join_type"); - DBUG_ASSERT(get_access_no() > predecessor->get_access_no()); - - if (get_join_tab()->table->pos_in_table_list->outer_join != 0) - { - /* - This cover unnested outer joins such as - 'select * from t1 left join t2 on t1.attr=t1.pk'. - */ - DBUG_PRINT("info", ("JT_OUTER_JOIN between %s and %s", - predecessor->get_join_tab()->table->alias, - get_join_tab()->table->alias)); - DBUG_RETURN(JT_OUTER_JOIN); - } - - const TABLE_LIST* const child_embedding= - get_join_tab()->table->pos_in_table_list->embedding; - - if (child_embedding == NULL) - { - // 'this' is not on the inner side of any left join. - DBUG_PRINT("info", ("JT_INNER_JOIN between %s and %s", - predecessor->get_join_tab()->table->alias, - get_join_tab()->table->alias)); - DBUG_RETURN(JT_INNER_JOIN); - } - - DBUG_ASSERT(child_embedding->outer_join != 0); - - const TABLE_LIST *predecessor_embedding= - predecessor->get_join_tab()->table->pos_in_table_list->embedding; - - /* - This covers the nested join case, i.e: - LEFT JOIN (). - - TABLE_LIST objects form a tree where TABLE_LIST::emebedding points to - the parent object. Now if child_embedding is non null and not an - ancestor of predecessor_embedding in the embedding tree, then 'this' - must be on the inner side of some left join where 'predecessor' is on - the outer side. - */ - while (true) - { - if (predecessor_embedding == child_embedding) - { - DBUG_PRINT("info", ("JT_INNER_JOIN between %s and %s", - predecessor->get_join_tab()->table->alias, - get_join_tab()->table->alias)); - DBUG_RETURN(JT_INNER_JOIN); - } - else if (predecessor_embedding == NULL) - { - /* - We reached the root of the tree without finding child_embedding, - so it must be in another branch and hence on the inner side of some - left join where 'predecessor' is on the outer side. - */ - DBUG_PRINT("info", ("JT_OUTER_JOIN between %s and %s", - predecessor->get_join_tab()->table->alias, - get_join_tab()->table->alias)); - DBUG_RETURN(JT_OUTER_JOIN); - } - // Iterate through ancestors of predecessor_embedding. - predecessor_embedding = predecessor_embedding->embedding; - } - } - - /** - Get the number of key values for this operation. It is an error - to call this method on an operation that is not an index lookup - operation. - */ - uint Table_access::get_no_of_key_fields() const - { - DBUG_ASSERT(m_access_type == AT_PRIMARY_KEY || - m_access_type == AT_UNIQUE_KEY || - m_access_type == AT_MULTI_PRIMARY_KEY || - m_access_type == AT_MULTI_UNIQUE_KEY || - m_access_type == AT_ORDERED_INDEX_SCAN); // Used as 'range scan' - return get_join_tab()->ref.key_parts; - } - - /** - Get the field_no'th key values for this operation. It is an error - to call this method on an operation that is not an index lookup - operation. - */ - const Item* Table_access::get_key_field(uint field_no) const - { - DBUG_ASSERT(field_no < get_no_of_key_fields()); - return get_join_tab()->ref.items[field_no]; - } - - /** - Get the field_no'th KEY_PART_INFO for this operation. It is an error - to call this method on an operation that is not an index lookup - operation. - */ - const KEY_PART_INFO* Table_access::get_key_part_info(uint field_no) const - { - DBUG_ASSERT(field_no < get_no_of_key_fields()); - const KEY* key= &get_join_tab()->table->key_info[get_join_tab()->ref.key]; - return &key->key_part[field_no]; - } - - /** - Get the table that this operation accesses. - */ - TABLE* Table_access::get_table() const - { - return get_join_tab()->table; - } - - /** Get the JOIN_TAB object that corresponds to this operation.*/ - const JOIN_TAB* Table_access::get_join_tab() const - { - return m_join_plan->get_join_tab(m_tab_no); - } - - /** Get the Item_equal's set relevant for the specified 'Item_field' */ - Item_equal* - Table_access::get_item_equal(const Item_field* field_item) const - { - DBUG_ASSERT(field_item->type() == Item::FIELD_ITEM); - - COND_EQUAL* const cond_equal = get_join_tab()->join->cond_equal; - if (cond_equal!=NULL) - { - return (field_item->item_equal != NULL) - ? field_item->item_equal - : const_cast(field_item)->find_item_equal(cond_equal); - } - return NULL; - } - - /** - Write an entry in the trace file about the contents of this object. - */ - void Table_access::dbug_print() const - { - DBUG_PRINT("info", ("type:%d", get_join_tab()->type)); - DBUG_PRINT("info", ("ref.key:%d", get_join_tab()->ref.key)); - DBUG_PRINT("info", ("ref.key_parts:%d", get_join_tab()->ref.key_parts)); - DBUG_PRINT("info", ("ref.key_length:%d", get_join_tab()->ref.key_length)); - - DBUG_PRINT("info", ("order:%p", get_join_tab()->join->order)); - DBUG_PRINT("info", ("skip_sort_order:%d", - get_join_tab()->join->skip_sort_order)); - DBUG_PRINT("info", ("no_order:%d", get_join_tab()->join->no_order)); - DBUG_PRINT("info", ("simple_order:%d", get_join_tab()->join->simple_order)); - - DBUG_PRINT("info", ("group:%d", get_join_tab()->join->group)); - DBUG_PRINT("info", ("group_list:%p", get_join_tab()->join->group_list)); - DBUG_PRINT("info", ("simple_group:%d", get_join_tab()->join->simple_group)); - DBUG_PRINT("info", ("group_optimized_away:%d", - get_join_tab()->join->group_optimized_away)); - - DBUG_PRINT("info", ("full_join:%d", get_join_tab()->join->full_join)); - DBUG_PRINT("info", ("need_tmp:%d", get_join_tab()->join->need_tmp)); - DBUG_PRINT("info", ("select_distinct:%d", - get_join_tab()->join->select_distinct)); - - DBUG_PRINT("info", ("use_quick:%d", get_join_tab()->use_quick)); - DBUG_PRINT("info", ("index:%d", get_join_tab()->index)); - DBUG_PRINT("info", ("quick:%p", get_join_tab()->quick)); - DBUG_PRINT("info", ("select:%p", get_join_tab()->select)); - if (get_join_tab()->select && get_join_tab()->select->quick) - { - DBUG_PRINT("info", ("select->quick->get_type():%d", - get_join_tab()->select->quick->get_type())); - } - } - - - /** - Compute the access type and index (if apliccable) of this operation . - */ - void Table_access::compute_type_and_index() const - { - DBUG_ENTER("Table_access::compute_type_and_index"); - const JOIN_TAB* const join_tab= get_join_tab(); - JOIN* const join= join_tab->join; - - /** - * There are some JOIN arguments we don't fully understand or has - * not yet invested time into exploring pushability of: - */ - if (join->procedure) - { - m_access_type= AT_OTHER; - m_other_access_reason = - "'PROCEDURE'-clause post processing cannot be pushed."; - DBUG_VOID_RETURN; - } - - if (join->group_list && !join->tmp_table_param.quick_group) - { - m_access_type= AT_OTHER; - m_other_access_reason = - "GROUP BY cannot be done using index on grouped columns."; - 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) - { - m_join_plan->find_skippabable_group_or_order(); - } - - /* - Identify the type of access operation and the index to use (if any). - */ - switch (join_tab->type) - { - case JT_EQ_REF: - case JT_CONST: - m_index_no= join_tab->ref.key; - - if (m_index_no == static_cast(join_tab->table->s->primary_key)) - { - DBUG_PRINT("info", ("Operation %d is a primary key lookup.", m_tab_no)); - m_access_type= AT_PRIMARY_KEY; - } - else - { - DBUG_PRINT("info", ("Operation %d is a unique index lookup.", - m_tab_no)); - m_access_type= AT_UNIQUE_KEY; - } - break; - - case JT_REF: - { - DBUG_ASSERT(join_tab->ref.key >= 0); - DBUG_ASSERT(join_tab->ref.key < MAX_KEY); - m_index_no= join_tab->ref.key; - - /* - All parts of a key are specified for an unique index -> access is a key lookup. - */ - const KEY *key_info= join_tab->table->s->key_info; - if (key_info[m_index_no].key_parts == join_tab->ref.key_parts && - key_info[m_index_no].flags & HA_NOSAME) - { - m_access_type= - (m_index_no == static_cast(join_tab->table->s->primary_key)) - ? AT_PRIMARY_KEY - : AT_UNIQUE_KEY; - DBUG_PRINT("info", ("Operation %d is an unique key referrence.", m_tab_no)); - } - else - { - DBUG_ASSERT(join_tab->ref.key_parts > 0); - DBUG_ASSERT(join_tab->ref.key_parts <= key_info[m_index_no].key_parts); - m_access_type= AT_ORDERED_INDEX_SCAN; - DBUG_PRINT("info", ("Operation %d is an ordered index scan.", m_tab_no)); - } - break; - } - case JT_NEXT: - DBUG_ASSERT(join_tab->index < MAX_KEY); - m_index_no= join_tab->index; - m_access_type= AT_ORDERED_INDEX_SCAN; - DBUG_PRINT("info", ("Operation %d is an ordered index scan.", m_tab_no)); - break; - - case JT_ALL: - if (join_tab->use_quick == 2) - { - /* - use_quick == 2 means that the decision on which access method to use - will be taken late (as rows from the preceeding operation arrive). - This operation is therefor not pushable. - */ - DBUG_PRINT("info", - ("Operation %d has 'use_quick == 2' -> not pushable", - m_tab_no)); - m_access_type= AT_UNDECIDED; - m_index_no= -1; - } - else - { - if (join_tab->select != NULL && - join_tab->select->quick != NULL) - { - QUICK_SELECT_I *quick= join_tab->select->quick; - - /** QUICK_SELECT results in execution of MRR (Multi Range Read). - * Depending on each range, it may require execution of - * either a PK-lookup or a range scan. To cover both of - * these we may need to prepare both a pushed lookup join - * and a pushed range scan. Currently we handle it as - * a range scan and convert e PK lookup to a (closed-) range - * whenever required. - **/ - - const KEY *key_info= join_tab->table->s->key_info; - DBUG_EXECUTE("info", quick->dbug_dump(0, TRUE);); - - // Temporary assert as we are still investigation the relation between - // 'quick->index == MAX_KEY' and the different quick_types - DBUG_ASSERT ((quick->index == MAX_KEY) == - ((quick->get_type() == QUICK_SELECT_I::QS_TYPE_INDEX_MERGE) || - (quick->get_type() == QUICK_SELECT_I::QS_TYPE_ROR_INTERSECT) || - (quick->get_type() == QUICK_SELECT_I::QS_TYPE_ROR_UNION))); - - // JT_INDEX_MERGE: We have a set of qualifying PKs as root of pushed joins - if (quick->index == MAX_KEY) - { - m_index_no= join_tab->table->s->primary_key; - m_access_type= AT_MULTI_PRIMARY_KEY; // Multiple PKs are produced by merge - } - - // Else JT_RANGE: May be both exact PK and/or index scans when sorted index available - else if (quick->index == join_tab->table->s->primary_key) - { - m_index_no= quick->index; - if (key_info[m_index_no].algorithm == HA_KEY_ALG_HASH) - m_access_type= AT_MULTI_PRIMARY_KEY; // MRR w/ multiple PK's - else - m_access_type= AT_MULTI_MIXED; // MRR w/ both range and PKs - } - else - { - m_index_no= quick->index; - if (key_info[m_index_no].algorithm == HA_KEY_ALG_HASH) - m_access_type= AT_MULTI_UNIQUE_KEY; // MRR with multiple unique keys - else - m_access_type= AT_MULTI_MIXED; // MRR w/ both range and unique keys - } - } - else - { - DBUG_PRINT("info", ("Operation %d is a table scan.", m_tab_no)); - m_access_type= AT_TABLE_SCAN; - } - } - break; - - default: - /* - Other join_types either cannot be pushed or the code analyze them is - not yet in place. - */ - DBUG_PRINT("info", - ("Operation %d has join_type %d. -> Not pushable.", - m_tab_no, join_tab->type)); - m_access_type= AT_OTHER; - m_index_no= -1; - m_other_access_reason = "This table access method can not be pushed."; - break; - } - DBUG_VOID_RETURN; - } - // Table_access::compute_type_and_index() - - - Table_access::Table_access() - :m_join_plan(NULL), - m_tab_no(0), - m_access_type(AT_VOID), - m_other_access_reason(NULL), - m_index_no(-1) - {} - - /** - @return True iff ordered index access is *required* from this operation. - */ - bool Table_access::is_fixed_ordered_index() const - { - const JOIN_TAB* const join_tab= get_join_tab(); - - /* For the QUICK_SELECT_I classes we can disable ordered index usage by - * setting 'QUICK_SELECT_I::sorted = false'. - * However, QUICK_SELECT_I::QS_TYPE_RANGE_DESC is special as its - * internal implementation requires its 'multi-ranges' to be retrieved - * in (descending) sorted order from the underlying table. - */ - if (join_tab->select != NULL && - join_tab->select->quick != NULL) - { - QUICK_SELECT_I *quick= join_tab->select->quick; - return (quick->get_type() == QUICK_SELECT_I::QS_TYPE_RANGE_DESC); - } - return false; - } - - /** - Check if the results from this operation will joined with results - from the next operation using a join buffer (instead of plain nested loop). - @return True if using a join buffer. - */ - bool Table_access::uses_join_cache() const - { - return get_join_tab()->next_select == sub_select_cache; - } - -}; -// namespace AQP === removed file 'sql/abstract_query_plan.h' --- a/sql/abstract_query_plan.h 2011-06-23 06:59:40 +0000 +++ b/sql/abstract_query_plan.h 1970-01-01 00:00:00 +0000 @@ -1,315 +0,0 @@ -/* - Copyright 2010 Sun Microsystems, Inc. - All rights reserved. Use is subject to license terms. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef ABSTRACT_QUERY_PLAN_H_INCLUDED -#define ABSTRACT_QUERY_PLAN_H_INCLUDED - -struct TABLE; -struct st_join_table; -typedef st_join_table JOIN_TAB; -class JOIN; -class Item; -class Item_field; -class Item_equal_iterator; - -/** - Abstract query plan (AQP) is an interface for examining certain aspects of - query plans without accessing mysqld internal classes (JOIN_TAB, SQL_SELECT - etc.) directly. - - AQP maps join execution plans, as represented by mysqld internals, to a set - of facade classes. Non-join operations such as sorting and aggregation is - currently *not* modelled in the AQP. - - The AQP models an n-way join as a sequence of the n table access operations - that the MySQL server would execute as part of its nested loop join - execution. (Each such table access operation is a scan of a table or index, - or an index lookup.) For each lookup operation, it is possible to examine - the expression that represents each field in the key. - - A storage enging will typically use the AQP for finding sections of a join - execution plan that may be executed in the engine rather than in mysqld. By - using the AQP rather than the mysqld internals directly, the coupling between - the engine and mysqld is reduced. -*/ -namespace AQP -{ - class Table_access; - - /** - This class represents a query plan for an n-way join, in the form a - sequence of n table access operations that will execute as a nested loop - join. - */ - class Join_plan - { - friend class Equal_set_iterator; - friend class Table_access; - public: - - explicit Join_plan(const JOIN* join); - - ~Join_plan(); - - const Table_access* get_table_access(uint access_no) const; - - uint get_access_count() const; - - /** - Can filesort(), normally required by execution of GROUP BY - or ORDER BY, be skipped due to the columns already being - accessible in required sorted order. - */ - bool group_by_filesort_is_skippable() const; - bool order_by_filesort_is_skippable() const; - - private: - /** - Array of the JOIN_TABs that are the internal representation of table - access operations. - */ - const JOIN_TAB* const m_join_tabs; - - /** Number of table access operations. */ - const uint m_access_count; - Table_access* m_table_accesses; - - mutable bool m_group_by_filesort_is_skippable; - mutable bool m_order_by_filesort_is_skippable; - - void find_skippabable_group_or_order() const; - - const JOIN_TAB* get_join_tab(uint join_tab_no) const; - - // No copying. - Join_plan(const Join_plan&); - Join_plan& operator=(const Join_plan&); - }; - // class Join_plan - - - /** - This class is an iterator for iterating over sets of fields (columns) that - should have the same value. For example, if the query is - SELECT * FROM T1, T2, T3 WHERE T1.b = T2.a AND T2.a = T3.a - then there would be such a set of {T1.b, T2.a, T3.a}. - */ - class Equal_set_iterator - { - public: - explicit Equal_set_iterator(Item_equal& item_equal) - : m_iterator(item_equal) {} - - const Item_field* next() - { return m_iterator++; } - - private: - /** - This class is implemented in terms of this mysqld internal class. - */ - Item_equal_iterator m_iterator; - - // No copying. - Equal_set_iterator(const Equal_set_iterator&); - Equal_set_iterator& operator=(const Equal_set_iterator&); - }; - // class Equal_set_iterator - - /** The type of a table access operation. */ - enum enum_access_type - { - /** For default initialization.*/ - AT_VOID, - /** Value has already been fetched / determined by optimizer.*/ - AT_FIXED, - /** Do a lookup of a single primary key.*/ - AT_PRIMARY_KEY, - /** Do a lookup of a single unique index key.*/ - AT_UNIQUE_KEY, - /** Scan an ordered index with a single upper and lower bound pair.*/ - AT_ORDERED_INDEX_SCAN, - /** Do a multi range read for a set of primary keys.*/ - AT_MULTI_PRIMARY_KEY, - /** Do a multi range read for a set of unique index keys.*/ - AT_MULTI_UNIQUE_KEY, - /** - Do a multi range read for a mix of ranges (for which there is an - ordered index), and either primary keys or unique index keys. - */ - AT_MULTI_MIXED, - /** Scan a table. (No index is assumed to be used.) */ - AT_TABLE_SCAN, - /** Access method will not be chosen before the execution phase.*/ - AT_UNDECIDED, - /** - The access method has properties that prevents it from being pushed to a - storage engine. - */ - AT_OTHER - }; - - /** The type of join operation require */ - enum enum_join_type - { - JT_OUTER_JOIN, - JT_INNER_JOIN, - JT_SEMI_JOIN - }; - - /** - This class represents an access operation on a table, such as a table - scan, or a scan or lookup via an index. A Table_access object is always - owned by a Join_plan object, such that the life time of the Table_access - object ends when the life time of the owning Join_plan object ends. - */ - class Table_access - { - friend class Join_plan; - friend inline bool equal(const Table_access*, const Table_access*); - public: - - const Join_plan* get_join_plan() const; - - enum_access_type get_access_type() const; - - const char* get_other_access_reason() const; - - enum_join_type get_join_type(const Table_access* parent) const; - - uint get_no_of_key_fields() const; - - const Item* get_key_field(uint field_no) const; - - const KEY_PART_INFO* get_key_part_info(uint field_no) const; - - uint get_access_no() const; - - int get_index_no() const; - - TABLE* get_table() const; - - Item_equal* get_item_equal(const Item_field* field_item) const; - - void dbug_print() const; - - bool is_fixed_ordered_index() const; - - bool uses_join_cache() const; - - private: - - /** Backref. to the Join_plan which this Table_access is part of */ - const Join_plan* m_join_plan; - - /** This operation corresponds to m_root_tab[m_tab_no].*/ - uint m_tab_no; - - /** The type of this operation.*/ - mutable enum_access_type m_access_type; - - /** - The reason for getting m_access_type==AT_OTHER. Used for explain extended. - */ - mutable const char* m_other_access_reason; - - /** The index to use for this operation (if applicable )*/ - mutable int m_index_no; - - explicit Table_access(); - - const JOIN_TAB* get_join_tab() const; - - void compute_type_and_index() const; - - /** No copying*/ - Table_access(const Table_access&); - Table_access& operator=(const Table_access&); - }; - // class Table_access - - /** - Get the n'th table access operation. - @param access_no The index of the table access operation to fetch. - @return The access_no'th table access operation. - */ - inline const Table_access* Join_plan::get_table_access(uint access_no) const - { - DBUG_ASSERT(access_no < m_access_count); - return m_table_accesses + access_no; - } - - /** - @return The number of table access operations in the nested loop join. - */ - inline uint Join_plan::get_access_count() const - { - return m_access_count; - } - - /** Get the Join_plan that this Table_access belongs to.*/ - inline const Join_plan* Table_access::get_join_plan() const - { - return m_join_plan; - } - - /** Get the type of this operation.*/ - inline enum_access_type Table_access::get_access_type() const - { - if (m_access_type == AT_VOID) - compute_type_and_index(); - return m_access_type; - } - - /** - Get a description of the reason for getting access_type==AT_OTHER. To be - used for informational messages. - @return A string that should be assumed to have the same life time as the - Table_access object. - */ - inline const char* Table_access::get_other_access_reason() const - { - if (m_access_type == AT_VOID) - compute_type_and_index(); - return m_other_access_reason; - } - - /** - @return The number of the index to use for this access operation ( - or -1 for non-index operations). - */ - inline int Table_access::get_index_no() const - { - if (m_access_type == AT_VOID) - compute_type_and_index(); - - return m_index_no; - } - - /** - Get the number of this Table_access within the enclosing Join_plan. - (This number will be in the range 0 to Join_plan::get_access_count() - 1.) - */ - inline uint Table_access::get_access_no() const - { - return m_tab_no; - } - -}; -// namespace AQP - -#endif === modified file 'sql/binlog.cc' --- a/sql/binlog.cc 2011-09-27 12:11:16 +0000 +++ b/sql/binlog.cc 2011-09-28 10:06:31 +0000 @@ -4874,10 +4874,6 @@ int THD::binlog_write_table_map(TABLE *t binlog_start_trans_and_stmt(this, &the_event); -#ifndef MCP_BUG11799583 - the_event.flags |= LOG_EVENT_NO_FILTER_F; -#endif - binlog_cache_mngr *const cache_mngr= (binlog_cache_mngr*) thd_get_ha_data(this, binlog_hton); === modified file 'sql/ha_partition.h' --- a/sql/ha_partition.h 2011-09-07 10:08:09 +0000 +++ b/sql/ha_partition.h 2011-09-28 10:00:58 +0000 @@ -177,11 +177,7 @@ private: MY_BITMAP m_locked_partitions; public: handler *clone(const char *name, MEM_ROOT *mem_root); -#ifndef MCP_BUG56438 virtual void set_part_info(partition_info *part_info, bool early) -#else - virtual void set_part_info(partition_info *part_info) -#endif { m_part_info= part_info; m_is_sub_partitioned= part_info->is_sub_partitioned(); === modified file 'sql/handler.cc' --- a/sql/handler.cc 2011-09-27 13:38:39 +0000 +++ b/sql/handler.cc 2011-09-28 08:58:03 +0000 @@ -4337,29 +4337,6 @@ int ha_table_exists_in_engine(THD* thd, DBUG_RETURN(args.err); } -#ifndef MCP_WL4784 -/** - Prepare (sub-) sequences of joins in this statement - which may be pushed to each storage engine for execution. -*/ -int ha_make_pushed_joins(THD *thd, AQP::Join_plan* plan) -{ - Ha_trx_info *info; - - for (info= thd->transaction.stmt.ha_list; info; info= info->next()) - { - handlerton *hton= info->ht(); - if (hton && hton->make_pushed_join) - { - const int error= hton->make_pushed_join(hton, thd, plan); - if (unlikely(error)) - return error; - } - } - return 0; -} -#endif - /* TODO: change this into a dynamic struct List does not work as @@ -4499,7 +4476,7 @@ void ha_binlog_log_query(THD *thd, handl #endif -#ifndef MC_GLOBAL_SCHEMA_LOCK +#ifndef MCP_GLOBAL_SCHEMA_LOCK /** Fill list of htons which are initialized and have the global_schema_func set */ === modified file 'sql/handler.h' --- a/sql/handler.h 2011-09-23 13:06:41 +0000 +++ b/sql/handler.h 2011-09-28 09:10:16 +0000 @@ -180,13 +180,6 @@ #define HA_KEY_SCAN_NOT_ROR 128 #define HA_DO_INDEX_COND_PUSHDOWN 256 /* Supports Index Condition Pushdown */ -#ifndef MCP_WL4784 -/* - no IO if read data when scan index - i.e index is covering -*/ -#define HA_CLUSTERED_INDEX 512 -#endif /* bits in alter_table_flags: @@ -365,13 +358,6 @@ enum enum_binlog_command { LOGCOM_CREATE_DB, LOGCOM_ALTER_DB, LOGCOM_DROP_DB -#ifndef MCP_WL6004_DISTRIBUTION - ,LOGCOM_CREATE_USER - ,LOGCOM_DROP_USER - ,LOGCOM_RENAME_USER - ,LOGCOM_GRANT - ,LOGCOM_REVOKE -#endif }; /* struct to hold information about the table that should be created */ @@ -415,32 +401,6 @@ typedef ulonglong my_xid; // this line i #define COMPATIBLE_DATA_YES 0 #define COMPATIBLE_DATA_NO 1 -#ifndef MCP_WL4784 -namespace AQP { - class Join_plan; -}; - -/* Flag used for for test_push_flag() */ -enum ha_push_flag { - - /* Handler want to block const table optimization */ - HA_PUSH_BLOCK_CONST_TABLE - - /* Handler reports a pushed join as having multiple dependencies - if its results does not only depend on the root operation: - ie. results from some child operations does not only depend - on results from the root operation and/or other child operations - within this pushed join - */ - ,HA_PUSH_MULTIPLE_DEPENDENCY - - /* Handler is unable to return the result in sorted order using an - ordered index on the parent operation. - */ - ,HA_PUSH_NO_ORDERED_INDEX -}; -#endif - /** struct xid_t is binary compatible with the XID structure as in the X/Open CAE Specification, Distributed Transaction Processing: @@ -848,10 +808,6 @@ struct handlerton int (*table_exists_in_engine)(handlerton *hton, THD* thd, const char *db, const char *name); -#ifndef MCP_WL4784 - int (*make_pushed_join)(handlerton *hton, THD* thd, - AQP::Join_plan* plan); -#endif #ifndef MCP_GLOBAL_SCHEMA_LOCK int (*global_schema_func)(THD* thd, bool lock, void* args); #endif @@ -1870,30 +1826,6 @@ public: virtual int extra_opt(enum ha_extra_function operation, ulong cache_size) { return extra(operation); } -#ifndef MCP_WL5906 - /* - Informs the handler if this handler support read removal - (could use table_flags, but patch is smaller this way) - */ - virtual bool read_before_write_removal_supported(void) const - { return false; } - - /* - Informs handler that it is possible to optimise away the real read - operation from the handler for the current table and instead - use a generated read to optimise simple UPDATE and DELETEs. - */ - virtual bool read_before_write_removal_possible(void) - { return false; } - - /* - Return the number of rows the handler has written while using - read before write removal - */ - virtual ha_rows read_before_write_removal_rows_written(void) const - { DBUG_ASSERT(0); return (ha_rows) 0; } -#endif - /** In an UPDATE or DELETE, if the row under the cursor was locked by another transaction, and the engine used an optimistic read of the last @@ -2232,41 +2164,6 @@ public: virtual Item *idx_cond_push(uint keyno, Item* idx_cond) { return idx_cond; } -#ifndef MCP_WL4784 - /** - Reports #tables included in pushed join which this - handler instance is part of. ==0 -> Not pushed - */ - virtual uint number_of_pushed_joins() const - { return 0; } - - /** - If this handler instance is part of a pushed join sequence - returned TABLE instance being root of the pushed query? - */ - virtual const TABLE* root_of_pushed_join() const - { return NULL; } - - /** - If this handler instance is a child in a pushed join sequence - returned TABLE instance being my parent? - */ - virtual const TABLE* parent_of_pushed_join() const - { return NULL; } - - virtual bool test_push_flag(enum ha_push_flag flag) const - { - return FALSE; - } - - virtual int index_read_pushed(uchar * buf, const uchar * key, - key_part_map keypart_map) - { return HA_ERR_WRONG_COMMAND; } - - virtual int index_next_pushed(uchar * buf) - { return HA_ERR_WRONG_COMMAND; } -#endif - virtual bool check_if_incompatible_data(HA_CREATE_INFO *create_info, uint table_changes) { return COMPATIBLE_DATA_NO; } @@ -2659,11 +2556,6 @@ int ha_rollback_to_savepoint(THD *thd, S int ha_savepoint(THD *thd, SAVEPOINT *sv); int ha_release_savepoint(THD *thd, SAVEPOINT *sv); -#ifndef MCP_WL4784 -/* Build pushed joins in handlers implementing this feature */ -int ha_make_pushed_joins(THD *thd, AQP::Join_plan* plan); -#endif - /* these are called by storage engines */ void trans_register_ha(THD *thd, bool all, handlerton *ht); === modified file 'sql/opt_explain.cc' --- a/sql/opt_explain.cc 2011-09-06 12:43:05 +0000 +++ b/sql/opt_explain.cc 2011-09-28 08:33:28 +0000 @@ -720,42 +720,6 @@ void Explain_table_base::explain_extra_c table->file->pushed_idx_cond) || (tab && tab->cache_idx_cond)) str_extra->append(STRING_WITH_LEN("; Using index condition")); -#ifndef MCP_WL4784 - const TABLE* pushed_root= table->file->root_of_pushed_join(); - if (pushed_root) - { - char buf[64]; - int len; - int pushed_id= 0; - - for (JOIN_TAB* prev= join->join_tab; prev <= tab; prev++) - { - const TABLE* prev_root= prev->table->file->root_of_pushed_join(); - if (prev_root == prev->table) - { - pushed_id++; - if (prev_root == pushed_root) - break; - } - } - if (pushed_root == table) - { - uint pushed_count= tab->table->file->number_of_pushed_joins(); - len= my_snprintf(buf, sizeof(buf)-1, - "; Parent of %d pushed join@%d", - pushed_count, pushed_id); - } - else - { - len= my_snprintf(buf, sizeof(buf)-1, - "; Child of '%s' in pushed join@%d", - tab->table->file->parent_of_pushed_join()->alias, - pushed_id); - } - str_extra->append(buf,len); - } -#endif - switch (quick_type) { case QUICK_SELECT_I::QS_TYPE_ROR_UNION: case QUICK_SELECT_I::QS_TYPE_ROR_INTERSECT: === modified file 'sql/rpl_injector.h' --- a/sql/rpl_injector.h 2011-09-07 10:08:09 +0000 +++ b/sql/rpl_injector.h 2011-09-28 09:12:47 +0000 @@ -193,9 +193,6 @@ public: use_table() is called after any *_row() function has been called for the transaction. - The caller is responsible for filtering out table map events - which shouldn't be included due to binlog_do/ignore db. - RETURN VALUE 0 All OK === modified file 'sql/rpl_mi.cc' --- a/sql/rpl_mi.cc 2011-09-07 10:08:09 +0000 +++ b/sql/rpl_mi.cc 2011-09-28 10:27:22 +0000 @@ -116,10 +116,6 @@ Master_info::Master_info( ssl_crl[0]= 0; ssl_crlpath[0]= 0; master_uuid[0]= 0; ignore_server_ids= new Server_ids(sizeof(::server_id)); - -#ifndef MCP_WL4080 - master_epoch= 0; -#endif } Master_info::~Master_info() === modified file 'sql/rpl_mi.h' --- a/sql/rpl_mi.h 2011-09-07 10:08:09 +0000 +++ b/sql/rpl_mi.h 2011-09-28 10:21:55 +0000 @@ -109,10 +109,6 @@ public: char master_uuid[UUID_LENGTH+1]; char bind_addr[HOSTNAME_LENGTH+1]; -#ifndef MCP_WL4080 - uint64 master_epoch; -#endif - int init_info(); void end_info(); int flush_info(bool force= FALSE); === modified file 'sql/rpl_reporting.cc' --- a/sql/rpl_reporting.cc 2011-09-07 10:08:09 +0000 +++ b/sql/rpl_reporting.cc 2011-09-28 10:21:55 +0000 @@ -79,9 +79,14 @@ int Slave_reporting_capability::has_temp /* currently temporary error set in ndbcluster */ +#ifndef MCP_FIX_COMPILER_ERROR_INSIDE_HAVE_NDB_BINLOG Diagnostics_area::Sql_condition_iterator it= thd->get_stmt_da()->sql_conditions(); const Sql_condition *err; +#else + List_iterator_fast it(thd->warning_info->warn_list()); + Sql_condition *err; +#endif while ((err= it++)) { DBUG_PRINT("info", ("has condition %d %s", err->get_sql_errno(), === modified file 'sql/sql_acl.cc' --- a/sql/sql_acl.cc 2011-09-27 12:11:16 +0000 +++ b/sql/sql_acl.cc 2011-09-28 09:10:16 +0000 @@ -50,10 +50,6 @@ #include "hostname.h" #include "sql_db.h" -#ifndef MCP_WL6004_DISTRIBUTION -#include "handler.h" -#endif - bool mysql_user_table_is_in_short_password_format= false; static const @@ -1187,14 +1183,6 @@ my_bool acl_reload(THD *thd) if (old_initialized) mysql_mutex_unlock(&acl_cache->lock); end: -#ifndef MCP_WL6004_TRANS - if (!thd->transaction.stmt.is_empty()) - { - DBUG_PRINT("info", ("%u: Committing read transaction", __LINE__)); - trans_commit_stmt(thd); - assert(thd->transaction.stmt.is_empty()); - } -#endif close_mysql_tables(thd); DBUG_RETURN(return_val); } @@ -1846,9 +1834,6 @@ bool change_password(THD *thd, const cha bool save_binlog_row_based; uint new_password_len= (uint) strlen(new_password); bool result= 1; -#ifndef MCP_WL6004_DISTRIBUTION - bool do_distribute= 0; -#endif DBUG_ENTER("change_password"); DBUG_PRINT("enter",("host: '%s' user: '%s' new_password: '%s'", host,user,new_password)); @@ -1920,47 +1905,7 @@ bool change_password(THD *thd, const cha acl_cache->clear(1); // Clear locked hostname cache mysql_mutex_unlock(&acl_cache->lock); result= 0; - -#ifndef MCP_WL6004_TRANS - if (!thd->transaction.stmt.is_empty()) - { - if (!result) - { - int err= trans_commit_stmt(thd); - if (err == 0) - { - DBUG_PRINT("info", ("%u: Commit DDL transaction ok", __LINE__)); - } - else - { - result= 1; - do_distribute= 0; - DBUG_PRINT("info", ("%u: Commit DDL transaction failed: %d", - __LINE__, err)); - } - } - else - { - DBUG_PRINT("info", ("%u: Aborting DDL transaction", __LINE__)); - do_distribute= 0; - trans_rollback_stmt(thd); - } - assert(thd->transaction.stmt.is_empty()); - } -#endif - -#ifndef MCP_WL6004_DISTRIBUTION - if (result) - { - do_distribute= 0; - } - else - { - do_distribute= 1; - } -#endif - - if (!result && mysql_bin_log.is_open()) + if (mysql_bin_log.is_open()) { query_length= sprintf(buff, "SET PASSWORD FOR '%-.120s'@'%-.120s'='%-.120s'", acl_user->user ? acl_user->user : "", @@ -1971,35 +1916,7 @@ bool change_password(THD *thd, const cha FALSE, FALSE, FALSE, 0); } end: - -#ifndef MCP_WL6004_TRANS - if (!thd->transaction.stmt.is_empty()) - { - /** - * We get here if something went wrong, - * check that result != 0 - */ - assert(result != 0); - DBUG_PRINT("info", ("%u: Aborting DDL transaction", __LINE__)); - trans_rollback_stmt(thd); - assert(thd->transaction.stmt.is_empty()); - } -#endif - -#ifndef MCP_WL6004_DISTRIBUTION - if (do_distribute) - { - query_length= sprintf(buff, "SET PASSWORD FOR '%-.120s'@'%-.120s'='%-.120s'", - acl_user->user ? acl_user->user : "", - acl_user->host.hostname ? acl_user->host.hostname : "", - new_password); - ha_binlog_log_query(thd, 0, LOGCOM_GRANT, - buff, query_length, - "mysql", ""); - } -#endif - - close_thread_tables(thd); + close_mysql_tables(thd); /* Restore the state of binlog format */ DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); @@ -3852,53 +3769,11 @@ int mysql_table_grant(THD *thd, TABLE_LI thd->mem_root= old_root; mysql_mutex_unlock(&acl_cache->lock); -#ifndef MCP_WL6004_TRANS - if (!thd->transaction.stmt.is_empty()) - { - if (!result) - { - int err= trans_commit_stmt(thd); - if (err == 0) - { - DBUG_PRINT("info", ("%u: Commit DDL transaction ok", __LINE__)); - } - else - { - result= 1; - DBUG_PRINT("info", ("%u: Commit DDL transaction failed: %d", - __LINE__, err)); - } - } - else - { - DBUG_PRINT("info", ("%u: Aborting DDL transaction", __LINE__)); - trans_rollback_stmt(thd); - } - assert(thd->transaction.stmt.is_empty()); - } -#endif - -#ifndef MCP_WL6004_DISTRIBUTION - bool do_distribute= !result; -#endif - if (should_write_to_binlog) result= result | write_bin_log(thd, FALSE, thd->query(), thd->query_length()); - mysql_rwlock_unlock(&LOCK_grant); -#ifndef MCP_WL6004_DISTRIBUTION - if (do_distribute) - { - char *db= table_list->get_db_name(); - char *lex_db= thd->lex->select_lex.db; - ha_binlog_log_query(thd, 0, LOGCOM_GRANT, - thd->query(), thd->query_length(), - (db)?db:((lex_db)?lex_db:"mysql"), ""); - } -#endif - if (!result) /* success */ my_ok(thd); @@ -4256,36 +4131,6 @@ bool mysql_grant(THD *thd, const char *d } mysql_mutex_unlock(&acl_cache->lock); -#ifndef MCP_WL6004_TRANS - if (!thd->transaction.stmt.is_empty()) - { - if (!result) - { - int err= trans_commit_stmt(thd); - if (err == 0) - { - DBUG_PRINT("info", ("%u: Commit DDL transaction ok", __LINE__)); - } - else - { - result= 1; - DBUG_PRINT("info", ("%u: Commit DDL transaction failed: %d", - __LINE__, err)); - } - } - else - { - DBUG_PRINT("info", ("%u: Aborting DDL transaction", __LINE__)); - trans_rollback_stmt(thd); - } - assert(thd->transaction.stmt.is_empty()); - } -#endif - -#ifndef MCP_WL6004_DISTRIBUTION - bool do_distribute= !result; -#endif - if (should_write_to_binlog) { if (thd->rewritten_query.length()) @@ -4300,16 +4145,6 @@ bool mysql_grant(THD *thd, const char *d mysql_rwlock_unlock(&LOCK_grant); -#ifndef MCP_WL6004_DISTRIBUTION - if (do_distribute) - { - char *lex_db= thd->lex->select_lex.db; - ha_binlog_log_query(thd, 0, LOGCOM_GRANT, - thd->query(), thd->query_length(), - (db)?db:((lex_db)?lex_db:"mysql"), ""); - } -#endif - if (!result) my_ok(thd); /* Restore the state of binlog format */ @@ -4591,14 +4426,6 @@ static my_bool grant_reload_procs_priv(T } mysql_rwlock_unlock(&LOCK_grant); -#ifndef MCP_WL6004_TRANS - if (!thd->transaction.stmt.is_empty()) - { - DBUG_PRINT("info", ("%u: Committing read transaction", __LINE__)); - trans_commit_stmt(thd); - assert(thd->transaction.stmt.is_empty()); - } -#endif close_mysql_tables(thd); DBUG_RETURN(return_val); } @@ -4670,14 +4497,6 @@ my_bool grant_reload(THD *thd) free_root(&old_mem,MYF(0)); } mysql_rwlock_unlock(&LOCK_grant); -#ifndef MCP_WL6004_TRANS - if (!thd->transaction.stmt.is_empty()) - { - DBUG_PRINT("info", ("%u: Committing read transaction", __LINE__)); - trans_commit_stmt(thd); - assert(thd->transaction.stmt.is_empty()); - } -#endif close_mysql_tables(thd); /* @@ -6759,25 +6578,6 @@ bool mysql_create_user(THD *thd, List transaction.stmt.is_empty()) - { - int err= trans_commit_stmt(thd); - if (err == 0) - { - DBUG_PRINT("info", ("%u: Commit DDL ok", __LINE__)); - } - else - { - result= 1; - some_users_created= FALSE; - DBUG_PRINT("info", - ("%u: Commit DDL transaction failed: %d", __LINE__, err)); - } - assert(thd->transaction.stmt.is_empty()); - } -#endif - if (some_users_created) { result|= write_bin_log(thd, FALSE, @@ -6786,16 +6586,6 @@ bool mysql_create_user(THD *thd, List query(), thd->query_length(), - "mysql", ""); - } -#endif - /* Restore the state of binlog format */ DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); if (save_binlog_row_based) @@ -6876,47 +6666,10 @@ bool mysql_drop_user(THD *thd, List transaction.stmt.is_empty()) - { - if (!result) - { - int err= trans_commit_stmt(thd); - if (err == 0) - { - DBUG_PRINT("info", ("%u: Commit DDL transaction ok", __LINE__)); - } - else - { - result= 1; - some_users_deleted= FALSE; - DBUG_PRINT("info", ("%u: Commit DDL transaction failed: %d", - __LINE__, err)); - } - } - else - { - DBUG_PRINT("info", ("%u: Aborting DDL transaction", __LINE__)); - trans_rollback_stmt(thd); - } - assert(thd->transaction.stmt.is_empty()); - } -#endif - if (some_users_deleted) result |= write_bin_log(thd, FALSE, thd->query(), thd->query_length()); mysql_rwlock_unlock(&LOCK_grant); - -#ifndef MCP_WL6004_DISTRIBUTION - if (some_users_deleted) - { - ha_binlog_log_query(thd, 0, LOGCOM_DROP_USER, - thd->query(), thd->query_length(), - "mysql", ""); - } -#endif - thd->variables.sql_mode= old_sql_mode; /* Restore the state of binlog format */ DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); @@ -7009,48 +6762,10 @@ bool mysql_rename_user(THD *thd, List transaction.stmt.is_empty()) - { - if (!result) - { - int err= trans_commit_stmt(thd); - if (err == 0) - { - DBUG_PRINT("info", ("%u: Commit DDL transaction ok", __LINE__)); - } - else - { - result= 1; - some_users_renamed= FALSE; - DBUG_PRINT("info", ("%u: Commit DDL transaction failed: %d", - __LINE__, err)); - } - } - else - { - DBUG_PRINT("info", ("%u: Aborting DDL transaction", __LINE__)); - trans_rollback_stmt(thd); - some_users_renamed= FALSE; - } - assert(thd->transaction.stmt.is_empty()); - } -#endif - if (some_users_renamed && mysql_bin_log.is_open()) result |= write_bin_log(thd, FALSE, thd->query(), thd->query_length()); mysql_rwlock_unlock(&LOCK_grant); - -#ifndef MCP_WL6004_DISTRIBUTION - if (some_users_renamed) - { - ha_binlog_log_query(thd, 0, LOGCOM_RENAME_USER, - thd->query(), thd->query_length(), - "mysql", ""); - } -#endif - /* Restore the state of binlog format */ DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); if (save_binlog_row_based) @@ -7078,10 +6793,6 @@ bool mysql_revoke_all(THD *thd, List db; -#endif continue; } result= -1; // Something went wrong @@ -7256,32 +6964,6 @@ bool mysql_revoke_all(THD *thd, List transaction.stmt.is_empty()) - { - if (!result) - { - int err= trans_commit_stmt(thd); - if (err == 0) - { - DBUG_PRINT("info", ("%u: Commit DDL transaction ok", __LINE__)); - } - else - { - result= 1; - DBUG_PRINT("info", ("%u: Commit DDL transaction failed: %d", - __LINE__, err)); - } - } - else - { - DBUG_PRINT("info", ("%u: Aborting DDL transaction", __LINE__)); - trans_rollback_stmt(thd); - } - assert(thd->transaction.stmt.is_empty()); - } -#endif - if (should_write_to_binlog) { result= result | @@ -7289,17 +6971,6 @@ bool mysql_revoke_all(THD *thd, List lex->select_lex.db; - ha_binlog_log_query(thd, 0, LOGCOM_REVOKE, - thd->query(), thd->query_length(), - (db)?db:((lex_db)?lex_db:"mysql"), ""); - } -#endif - /* Restore the state of binlog format */ DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); if (save_binlog_row_based) === modified file 'sql/sql_delete.cc' --- a/sql/sql_delete.cc 2011-09-07 10:08:09 +0000 +++ b/sql/sql_delete.cc 2011-09-28 08:39:40 +0000 @@ -61,9 +61,6 @@ bool mysql_delete(THD *thd, TABLE_LIST * bool const_cond_result; ha_rows deleted= 0; bool reverse= FALSE; -#ifndef MCP_WL5906 - bool read_removal= false; -#endif bool skip_record; bool need_sort= FALSE; bool err= true; @@ -337,34 +334,6 @@ bool mysql_delete(THD *thd, TABLE_LIST * else will_batch= !table->file->start_bulk_delete(); -#ifndef MCP_WL5906 - /* - Read removal is possible if the selected quick read - method is using full unique index - */ - if (select && select->quick && - will_batch && - !using_limit && - table->file->read_before_write_removal_supported()) - { - const uint idx = select->quick->index; - DBUG_PRINT("rbwr", ("checking index: %d", idx)); - const KEY *key= table->key_info + idx; - if ((key->flags & HA_NOSAME) == HA_NOSAME) - { - DBUG_PRINT("rbwr", ("index is unique")); - bitmap_clear_all(&table->tmp_set); - table->mark_columns_used_by_index_no_reset(idx, &table->tmp_set); - if (bitmap_cmp(&table->tmp_set, table->read_set)) - { - DBUG_PRINT("rbwr", ("using whole index, rbwr possible")); - read_removal= - table->file->read_before_write_removal_possible(); - } - } - } -#endif - table->mark_columns_needed_for_delete(); while (!(error=info.read_record(&info)) && !thd->killed && @@ -426,15 +395,6 @@ bool mysql_delete(THD *thd, TABLE_LIST * table->file->print_error(loc_error,MYF(0)); error=1; } -#ifndef MCP_WL5906 - if (read_removal) - { - /* Only handler knows how many records really was written */ - DBUG_PRINT("rbwr", ("old deleted: %ld", (long)deleted)); - deleted= table->file->read_before_write_removal_rows_written(); - DBUG_PRINT("rbwr", ("really deleted: %ld", (long)deleted)); - } -#endif THD_STAGE_INFO(thd, stage_end); end_read_record(&info); if (options & OPTION_QUICK) === modified file 'sql/sql_select.cc' --- a/sql/sql_select.cc 2011-09-27 12:11:16 +0000 +++ b/sql/sql_select.cc 2011-09-28 09:14:07 +0000 @@ -45,10 +45,6 @@ #include "filesort.h" // filesort_free_buffers #include "sql_union.h" // mysql_union #include "debug_sync.h" // DEBUG_SYNC -#ifndef MCP_WL4784 -#include "abstract_query_plan.h" -#endif - #include #include #include @@ -172,10 +168,6 @@ static int join_ft_read_first(JOIN_TAB * static int join_ft_read_next(READ_RECORD *info); int join_read_always_key_or_null(JOIN_TAB *tab); int join_read_next_same_or_null(READ_RECORD *info); -#ifndef MCP_WL4784 -static int join_read_linked_first(JOIN_TAB *tab); -static int join_read_linked_next(READ_RECORD *info); -#endif static Item *make_cond_for_table(Item *cond,table_map table, table_map used_table, bool exclude_expensive_cond); @@ -193,11 +185,9 @@ static bool test_if_cheaper_ordering(con ha_rows *new_select_limit, uint *new_used_key_parts= NULL, uint *saved_best_key_parts= NULL); -#ifdef MCP_WL4784 static bool test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order, ha_rows select_limit, bool no_changes, const key_map *map); -#endif static bool list_contains_unique_index(TABLE *table, bool (*find_func) (Field *, void *), void *data); static bool find_field_in_item_list (Field *field, void *data); @@ -255,10 +245,6 @@ static bool replace_subcondition(JOIN *j static bool test_if_ref(Item *root_cond, Item_field *left_item,Item *right_item); -#ifndef MCP_WL4784 -static int make_pushed_join(THD *thd, JOIN *join); -#endif - void get_partial_join_cost(JOIN *join, uint idx, double *read_time_arg, double *record_count_arg); static int @@ -281,7 +267,7 @@ Item_equal *find_item_equal(COND_EQUAL * /** This class determines the optimal join order for tables within a basic query block, ie a query specification clause, possibly extended - / with semi-joined tables from embedded subqueries. + with semi-joined tables from embedded subqueries. This class takes as prerequisite a join class where all dependencies among tables have been sorted out, all possible access paths have been @@ -2640,11 +2626,6 @@ JOIN::optimize() } } -#ifndef MCP_WL4784 - if (make_pushed_join(thd, this)) - DBUG_RETURN(1); -#endif - tmp_having= having; if (select_options & SELECT_DESCRIBE) { @@ -2813,72 +2794,6 @@ setup_subq_exit: DBUG_RETURN(0); } -#ifndef MCP_WL4784 -static int -make_pushed_join(THD *thd, JOIN *join) -{ - int active_pushed_joins= 0; - - // Let handler extract whatever it might implement of pushed joins - AQP::Join_plan plan(join); - - const int error= ha_make_pushed_joins(thd, &plan); - if (unlikely(error)) - return error; - - // Set up table accessors for child operations of pushed joins - for (uint i=join->const_tables ; i < join->tables ; i++) - { - JOIN_TAB *tab=join->join_tab+i; - - uint pushed_joins= tab->table->file->number_of_pushed_joins(); - if (pushed_joins > 0) - { - if (tab->table->file->root_of_pushed_join() == tab->table) - { - active_pushed_joins += pushed_joins; - } - else - { - // Is child of a pushed join operation: - // Replace 'read_key' access with its linked counterpart - // ... Which is effectively a NOOP as the row is read as part of the linked operation - tab->read_first_record= join_read_linked_first; - DBUG_ASSERT(tab->read_record.read_record != join_read_next_same_or_null); - tab->read_record.read_record= join_read_linked_next; - tab->read_record.unlock_row= rr_unlock_row; // FIXME: likely incorrect - } - active_pushed_joins--; - } - } - - /* If we just pushed a join containing an ORDER BY and/or a GROUP BY clause, - * we have to ensure that we either can skip the sort by scanning an ordered index, - * or write to a temp. table later being filesorted. - */ - if (join->const_tables < join->tables && - join->join_tab[join->const_tables].table->file->number_of_pushed_joins() > 0) - { - const handler *ha=join->join_tab[join->const_tables].table->file; - - if (join->group_list && join->simple_group && - (!plan.group_by_filesort_is_skippable() || ha->test_push_flag(HA_PUSH_NO_ORDERED_INDEX))) - { - join->need_tmp= 1; - join->simple_order= join->simple_group= 0; - } - else if (join->order && join->simple_order && - (!plan.order_by_filesort_is_skippable() || ha->test_push_flag(HA_PUSH_NO_ORDERED_INDEX))) - { - join->need_tmp= 1; - join->simple_order= join->simple_group= 0; - } - } - - DBUG_ASSERT(active_pushed_joins==0); - return 0; -} -#endif /** Restore values in temporary join. @@ -5181,16 +5096,6 @@ make_join_statistics(JOIN *join, TABLE_L */ extract_method= extract_no_table; } -#ifndef MCP_WL4784 - else if (table->file->test_push_flag(HA_PUSH_BLOCK_CONST_TABLE)) - { - /* - Handler implements pushed joins, and prefer const tables to - be pushed together with rest of the pushed query. - */ - extract_method= extract_no_table; - } -#endif else if (*s->on_expr_ref) { /* s is the only inner table of an outer join, extract empty tables */ @@ -5351,17 +5256,11 @@ const_table_extraction_done: Extract const tables with proper key dependencies. Exclude tables that 1. are full-text searched, or - 2. are part of nested outer join, or - 3. are blocked by handler for const table optimize. + 2. are part of nested outer join. */ if (eq_part.is_prefix(table->key_info[key].key_parts) && !table->fulltext_searched && // 1 -#ifndef MCP_WL4784 - !table->pos_in_table_list->in_outer_join_nest() && // 2 - !table->file->test_push_flag(HA_PUSH_BLOCK_CONST_TABLE)) // 3 -#else !table->pos_in_table_list->in_outer_join_nest()) // 2 -#endif { if (table->key_info[key].flags & HA_NOSAME) { @@ -19719,79 +19618,6 @@ join_read_key_unlock_row(st_join_table * tab->ref.use_count--; } -#ifndef MCP_WL4784 -/** - Read a table *assumed* to be included in execution of a pushed join. - This is the counterpart of join_read_key() / join_read_always_key() - for child tables in a pushed join. - - When the table access is performed as part of the pushed join, - all 'linked' child colums are prefetched together with the parent row. - The handler will then only format the row as required by MySQL and set - 'table->status' accordingly. - - However, there may be situations where the prepared pushed join was not - executed as assumed. It is the responsibility of the handler to handle - these situation by letting ::index_read_pushed() then effectively do a - plain old' index_read_map(..., HA_READ_KEY_EXACT); - - @param tab Table to read - - @retval - 0 Row was found - @retval - -1 Row was not found - @retval - 1 Got an error (other than row not found) during read -*/ -static int -join_read_linked_first(JOIN_TAB *tab) -{ - TABLE *table= tab->table; - DBUG_ENTER("join_read_linked_first"); - - DBUG_ASSERT(!tab->sorted); // Pushed child can't be sorted - if (!table->file->inited) - table->file->ha_index_init(tab->ref.key, tab->sorted); - - if (cp_buffer_from_ref(tab->join->thd, table, &tab->ref)) - { - table->status=STATUS_NOT_FOUND; - DBUG_RETURN(-1); - } - - // 'read' itself is a NOOP: - // handler::index_read_pushed() only unpack the prefetched row and set 'status' - int error=table->file->index_read_pushed(table->record[0], - tab->ref.key_buff, - make_prev_keypart_map(tab->ref.key_parts)); - if (unlikely(error && error != HA_ERR_KEY_NOT_FOUND && error != HA_ERR_END_OF_FILE)) - DBUG_RETURN(report_error(table, error)); - - table->null_row=0; - int rc= table->status ? -1 : 0; - DBUG_RETURN(rc); -} - - -static int -join_read_linked_next(READ_RECORD *info) -{ - TABLE *table= info->table; - DBUG_ENTER("join_read_linked_next"); - - int error=table->file->index_next_pushed(table->record[0]); - if (error) - { - if (unlikely(error != HA_ERR_END_OF_FILE)) - DBUG_RETURN(report_error(table, error)); - table->status= STATUS_GARBAGE; - DBUG_RETURN(-1); - } - DBUG_RETURN(error); -} -#endif - /* ref access method implementation: "read_first" function @@ -19889,21 +19715,8 @@ join_read_last_key(JOIN_TAB *tab) /* ARGSUSED */ static int -join_no_more_records(READ_RECORD *info) +join_no_more_records(READ_RECORD *info __attribute__((unused))) { -#ifndef MCP_WL4784 - /** - * When a pushed join completes, and its results did not only depend on - * the key of this root operations: ('tab->ref.key_buff') - * Results from this pushed join can not be reused - * for later queries having the same root key. - * (ref: join_read_key(), join_read_const() & join_read_system() - */ - if (info->table->file->test_push_flag(HA_PUSH_MULTIPLE_DEPENDENCY)) - { - info->table->status= STATUS_GARBAGE; - } -#endif return -1; } @@ -21606,11 +21419,7 @@ find_field_in_item_list (Field *field, v 1 We can use an index. */ -#ifndef MCP_WL4784 -bool -#else static bool -#endif test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit, bool no_changes, const key_map *map) { @@ -24915,11 +24724,6 @@ test_if_cheaper_ordering(const JOIN_TAB If not used with LIMIT, only use keys if the whole query can be resolved with a key; This is because filesort() is usually faster than retrieving all rows through an index. -#ifndef MCP_WL4784 - The exception is if there is a pushed join which we can't filesort(). - This is due to the prefetch of result rows from the pushed join - which filesort() is not able to buffer. -#endif */ if (select_limit >= table_records) { === modified file 'sql/sql_select.h' --- a/sql/sql_select.h 2011-09-07 10:08:09 +0000 +++ b/sql/sql_select.h 2011-09-28 08:33:28 +0000 @@ -2138,12 +2138,6 @@ uint find_shortest_key(TABLE *table, con Field* create_tmp_field_from_field(THD *thd, Field* org_field, const char *name, TABLE *table, Item_field *item, uint convert_blob_length); -#ifndef MCP_WL4784 -bool test_if_skip_sort_order(JOIN_TAB *tab, ORDER *order, - ha_rows select_limit, bool no_changes, - const key_map *map); -#endif - bool is_indexed_agg_distinct(JOIN *join, List *out_args); === modified file 'sql/sql_truncate.cc' --- a/sql/sql_truncate.cc 2011-09-23 13:06:41 +0000 +++ b/sql/sql_truncate.cc 2011-09-28 09:01:08 +0000 @@ -252,7 +252,6 @@ static bool recreate_temporary_table(THD TABLE_SHARE *share= table->s; HA_CREATE_INFO create_info; handlerton *table_type= table->s->db_type(); - DBUG_ENTER("recreate_temporary_table"); memset(&create_info, 0, sizeof(create_info)); === modified file 'sql/sql_update.cc' --- a/sql/sql_update.cc 2011-09-27 12:11:16 +0000 +++ b/sql/sql_update.cc 2011-09-28 09:01:54 +0000 @@ -159,39 +159,6 @@ static bool check_fields(THD *thd, List< } -#ifndef MCP_WL5906 -/* - Check if all expressions in list are constant expressions - - SYNOPSIS - check_constant_expressions() - values List of expressions - - RETURN - TRUE Only constant expressions - FALSE At least one non-constant expression -*/ - -static bool check_constant_expressions(List &values) -{ - Item *value; - List_iterator_fast v(values); - DBUG_ENTER("check_constant_expressions"); - - while ((value= v++)) - { - if (!value->const_item()) - { - DBUG_PRINT("exit", ("expression is not constant")); - DBUG_RETURN(FALSE); - } - } - DBUG_PRINT("exit", ("expression is constant")); - DBUG_RETURN(TRUE); -} -#endif - - /** Re-read record if more columns are needed for error message. @@ -305,9 +272,6 @@ int mysql_update(THD *thd, #ifndef NO_EMBEDDED_ACCESS_CHECKS uint want_privilege; #endif -#ifndef MCP_WL5906 - bool read_removal= false; -#endif uint table_count= 0; ha_rows updated, found; key_map old_covering_keys; @@ -486,37 +450,6 @@ int mysql_update(THD *thd, } } // Ends scope for optimizer trace wrapper -#ifndef MCP_WL5906 - /* - Read removal is possible if the selected quick read - method is using full unique index - - NOTE! table->read_set currently holds the columns which are - used for the WHERE clause(this info is most likely already - available in select->quick, but where?) - */ - if (select && select->quick && select->quick->index != MAX_KEY && - !ignore && - !using_limit && - table->file->read_before_write_removal_supported()) - { - const uint idx= select->quick->index; - DBUG_PRINT("rbwr", ("checking index: %d", idx)); - const KEY *key= table->key_info + idx; - if ((key->flags & HA_NOSAME) == HA_NOSAME) - { - DBUG_PRINT("rbwr", ("index is unique")); - bitmap_clear_all(&table->tmp_set); - table->mark_columns_used_by_index_no_reset(idx, &table->tmp_set); - if (bitmap_cmp(&table->tmp_set, table->read_set)) - { - DBUG_PRINT("rbwr", ("using full index, rbwr possible")); - read_removal= true; - } - } - } -#endif - /* If running in safe sql mode, don't allow updates without keys */ if (table->quick_keys.is_clear_all()) { @@ -699,13 +632,6 @@ int mysql_update(THD *thd, } if (table->key_read) table->restore_column_maps_after_mark_index(); - -#ifndef MCP_WL5906 - /* Rows are already read -> not possible to remove */ - DBUG_PRINT("rbwr", ("rows are already read, turning off rbwr")); - read_removal= false; -#endif - } if (ignore) @@ -745,16 +671,6 @@ int mysql_update(THD *thd, else will_batch= !table->file->start_bulk_update(); -#ifndef MCP_WL5906 - if (read_removal && - will_batch && - check_constant_expressions(values)) - { - assert(select && select->quick); - read_removal= table->file->read_before_write_removal_possible(); - } -#endif - /* Assure that we can use position() if we need to create an error message. @@ -961,22 +877,6 @@ int mysql_update(THD *thd, table->file->end_bulk_update(); table->file->try_semi_consistent_read(0); -#ifndef MCP_WL5906 - if (read_removal) - { - /* Only handler knows how many records really was written */ - DBUG_PRINT("rbwr", ("adjusting updated: %ld, found: %ld", - (long)updated, (long)found)); - - updated= table->file->read_before_write_removal_rows_written(); - if (!records_are_comparable(table)) - found= updated; - - DBUG_PRINT("rbwr", ("really updated: %ld, found: %ld", - (long)updated, (long)found)); - } -#endif - if (!transactional_table && updated > 0) thd->transaction.stmt.mark_modified_non_trans_table(); === modified file 'sql/table.cc' --- a/sql/table.cc 2011-09-23 13:06:41 +0000 +++ b/sql/table.cc 2011-09-28 10:37:45 +0000 @@ -2120,7 +2120,6 @@ int open_table_from_share(THD *thd, TABL { if (work_part_info_used) tmp= fix_partition_func(thd, outparam, is_create_table); - outparam->part_info->item_free_list= part_func_arena.free_list; } outparam->part_info->item_free_list= part_func_arena.free_list; partititon_err: === modified file 'storage/archive/archive_reader.c' --- a/storage/archive/archive_reader.c 2011-09-07 10:08:09 +0000 +++ b/storage/archive/archive_reader.c 2011-09-28 07:08:07 +0000 @@ -1,3 +1,18 @@ +/* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + #include "azlib.h" #include #include === modified file 'support-files/compiler_warnings.supp' --- a/support-files/compiler_warnings.supp 2011-07-05 12:46:07 +0000 +++ b/support-files/compiler_warnings.supp 2011-09-28 10:43:14 +0000 @@ -98,12 +98,3 @@ mi_packrec.c : .*result of 32-bit shift # .* : .*no matching operator delete found; memory will not be freed if initialization throws an exception.* ctype-simple.c : .*unary minus operator applied to unsigned type, result still unsigned.* - -# -# 5.5-mainline -# -extra/perror.c : .*strerror.* -plugin/semisync/semisync_master.cc : .*may be used uninitialized in this function.* -storage/innobase/.* : .* -client/mysqldump.c : .*may be used uninitialized in this function.* - No bundle (reason: useless for push emails).