From: Alexander Nozdrin Date: February 10 2009 8:50am Subject: bzr push into mysql-6.0 branch (alik:2720 to 2721) List-Archive: http://lists.mysql.com/commits/65704 Message-Id: <20090210085036.85F257FDBE@quad> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7BIT 2721 Alexander Nozdrin 2009-02-10 [merge] Merge from 6.0 modified: mysql-test/r/subselect3.result mysql-test/r/subselect3_jcl6.result mysql-test/t/subselect3.test sql/handler.cc sql/handler.h storage/innobase/handler/ha_innodb.cc storage/maria/ha_maria.cc storage/myisam/ha_myisam.cc 2720 Dmitry Lenev 2009-02-05 [merge] Merge. removed: mysql-test/std_data/server-cert-des.pem mysql-test/std_data/server-key-des.pem mysql-test/t/wait_timeout-master.opt sql/backup/debug.h added: mysql-test/include/blackhole.inc mysql-test/r/join_optimizer.result mysql-test/r/myisam_keycache_coverage.result mysql-test/suite/backup/r/backup_datatypes.result mysql-test/suite/backup/r/backup_myisam.result mysql-test/suite/backup/r/backup_myisam_coverage.result mysql-test/suite/backup/r/backup_stream_errors.result mysql-test/suite/backup/t/backup_datatypes.test mysql-test/suite/backup/t/backup_myisam.test mysql-test/suite/backup/t/backup_myisam_coverage.test mysql-test/suite/backup/t/backup_stream_errors.test mysql-test/suite/backup_engines/r/backup_partitioning.result mysql-test/suite/backup_engines/t/backup_partitioning.test mysql-test/suite/binlog/r/binlog_tmp_table.result mysql-test/suite/binlog/t/binlog_tmp_table.test mysql-test/suite/bugs/r/rpl_bug36391.result mysql-test/suite/bugs/t/rpl_bug36391-master.opt mysql-test/suite/bugs/t/rpl_bug36391.test mysql-test/suite/rpl/r/rpl_cross_version.result mysql-test/suite/rpl/t/rpl_cross_version-master.opt mysql-test/suite/rpl/t/rpl_cross_version.test mysql-test/t/join_optimizer.test mysql-test/t/myisam_keycache_coverage.test renamed: mysql-test/suite/backup/r/backup_myisam1.result => mysql-test/suite/backup/r/backup_myisam_extlocking.result mysql-test/suite/backup/r/backup_myisam2.result => mysql-test/suite/backup/r/backup_myisam_sync.result mysql-test/suite/backup/t/backup_myisam1-master.opt => mysql-test/suite/backup/t/backup_myisam_extlocking-master.opt mysql-test/suite/backup/t/backup_myisam1.test => mysql-test/suite/backup/t/backup_myisam_extlocking.test mysql-test/suite/backup/t/backup_myisam2.test => mysql-test/suite/backup/t/backup_myisam_sync.test modified: .bzr-mysql/default.conf .bzrignore client/mysql.cc client/mysqltest.cc include/m_string.h include/my_pthread.h include/myisam.h mysql-test/Makefile.am mysql-test/extra/rpl_tests/rpl_log.test mysql-test/include/concurrent.inc mysql-test/include/mrr_tests.inc mysql-test/include/mtr_check.sql mysql-test/include/setup_fake_relay_log.inc mysql-test/lib/mtr_report.pm mysql-test/mysql-test-run.pl mysql-test/r/archive_aio_posix.result mysql-test/r/comment_index.result mysql-test/r/concurrent_innodb_safelog.result mysql-test/r/concurrent_innodb_unsafelog.result mysql-test/r/ctype_ldml.result mysql-test/r/func_compress.result mysql-test/r/grant4.result mysql-test/r/have_outfile.require mysql-test/r/implicit_commit.result mysql-test/r/init_file.result mysql-test/r/innodb_bug34300.result mysql-test/r/innodb_mrr.result mysql-test/r/join_cache.result mysql-test/r/join_nested_jcl6.result mysql-test/r/maria_mrr.result mysql-test/r/myisam_mrr.result mysql-test/r/myisampack.result mysql-test/r/not_embedded_server.result mysql-test/r/null_key.result mysql-test/r/openssl_1.result mysql-test/r/order_by.result mysql-test/r/outfile.result mysql-test/r/status.result mysql-test/r/subselect.result mysql-test/r/subselect3.result mysql-test/r/subselect3_jcl6.result mysql-test/r/subselect_no_mat.result mysql-test/r/subselect_no_opts.result mysql-test/r/subselect_no_semijoin.result mysql-test/r/subselect_sj.result mysql-test/r/subselect_sj2_jcl6.result mysql-test/r/subselect_sj_jcl6.result mysql-test/r/type_timestamp.result mysql-test/r/user_var.result mysql-test/r/variables.result mysql-test/r/view.result mysql-test/r/wait_timeout.result mysql-test/std_data/cacert.pem mysql-test/std_data/client-cert.pem mysql-test/std_data/client-key.pem mysql-test/std_data/server-cert.pem mysql-test/std_data/server-key.pem mysql-test/std_data/server8k-cert.pem mysql-test/std_data/server8k-key.pem mysql-test/suite/backup/r/backup_errors.result mysql-test/suite/backup/r/backup_logs.result mysql-test/suite/backup/r/backup_logs_purge.result mysql-test/suite/backup/r/backup_vp_nontx.result mysql-test/suite/backup/t/backup.test mysql-test/suite/backup/t/backup_errors.test mysql-test/suite/backup/t/backup_logs.test mysql-test/suite/backup/t/backup_logs_purge.test mysql-test/suite/backup/t/backup_vp_nontx.test mysql-test/suite/backup/t/disabled.def mysql-test/suite/binlog/r/binlog_stm_row.result mysql-test/suite/binlog/t/binlog_stm_row.test mysql-test/suite/federated/federated.inc mysql-test/suite/federated/federated.result mysql-test/suite/federated/federated_archive.result mysql-test/suite/federated/federated_bug_13118.result mysql-test/suite/federated/federated_bug_25714.result mysql-test/suite/federated/federated_bug_25714.test mysql-test/suite/federated/federated_cleanup.inc mysql-test/suite/federated/federated_innodb.result mysql-test/suite/federated/federated_server.result mysql-test/suite/funcs_1/datadict/charset_collation.inc mysql-test/suite/funcs_1/datadict/is_key_column_usage.inc mysql-test/suite/funcs_1/datadict/is_routines.inc mysql-test/suite/funcs_1/datadict/is_schemata.inc mysql-test/suite/funcs_1/datadict/is_tables.inc mysql-test/suite/funcs_1/datadict/is_triggers.inc mysql-test/suite/funcs_1/datadict/is_views.inc mysql-test/suite/funcs_1/datadict/statistics.inc mysql-test/suite/funcs_1/datadict/table_constraints.inc mysql-test/suite/funcs_1/datadict/tables.inc mysql-test/suite/funcs_1/datadict/tables1.inc mysql-test/suite/funcs_1/include/falcon_tb1.inc mysql-test/suite/funcs_1/include/falcon_tb2.inc mysql-test/suite/funcs_1/include/falcon_tb3.inc mysql-test/suite/funcs_1/include/falcon_tb4.inc mysql-test/suite/funcs_1/include/innodb_tb1.inc mysql-test/suite/funcs_1/include/innodb_tb2.inc mysql-test/suite/funcs_1/include/innodb_tb3.inc mysql-test/suite/funcs_1/include/innodb_tb4.inc mysql-test/suite/funcs_1/include/memory_tb1.inc mysql-test/suite/funcs_1/include/memory_tb2.inc mysql-test/suite/funcs_1/include/memory_tb3.inc mysql-test/suite/funcs_1/include/memory_tb4.inc mysql-test/suite/funcs_1/include/myisam_tb1.inc mysql-test/suite/funcs_1/include/myisam_tb2.inc mysql-test/suite/funcs_1/include/myisam_tb3.inc mysql-test/suite/funcs_1/include/myisam_tb4.inc mysql-test/suite/funcs_1/include/ndb_tb1.inc mysql-test/suite/funcs_1/include/ndb_tb2.inc mysql-test/suite/funcs_1/include/ndb_tb3.inc mysql-test/suite/funcs_1/include/ndb_tb4.inc mysql-test/suite/funcs_1/include/sp_tb.inc mysql-test/suite/funcs_1/include/tb3.inc mysql-test/suite/funcs_1/r/charset_collation_1.result mysql-test/suite/funcs_1/r/charset_collation_2.result mysql-test/suite/funcs_1/r/charset_collation_3.result mysql-test/suite/funcs_1/r/falcon_func_view.result mysql-test/suite/funcs_1/r/falcon_storedproc_02.result mysql-test/suite/funcs_1/r/falcon_storedproc_03.result mysql-test/suite/funcs_1/r/falcon_storedproc_06.result mysql-test/suite/funcs_1/r/falcon_storedproc_07.result mysql-test/suite/funcs_1/r/falcon_storedproc_08.result mysql-test/suite/funcs_1/r/falcon_storedproc_10.result mysql-test/suite/funcs_1/r/falcon_trig_0102.result mysql-test/suite/funcs_1/r/falcon_trig_0407.result mysql-test/suite/funcs_1/r/falcon_trig_09.result mysql-test/suite/funcs_1/r/falcon_trig_1011ext.result mysql-test/suite/funcs_1/r/falcon_views.result mysql-test/suite/funcs_1/r/innodb_func_view.result mysql-test/suite/funcs_1/r/innodb_storedproc_02.result mysql-test/suite/funcs_1/r/innodb_storedproc_03.result mysql-test/suite/funcs_1/r/innodb_storedproc_06.result mysql-test/suite/funcs_1/r/innodb_storedproc_07.result mysql-test/suite/funcs_1/r/innodb_storedproc_08.result mysql-test/suite/funcs_1/r/innodb_storedproc_10.result mysql-test/suite/funcs_1/r/innodb_trig_0102.result mysql-test/suite/funcs_1/r/innodb_trig_0407.result mysql-test/suite/funcs_1/r/innodb_trig_09.result mysql-test/suite/funcs_1/r/innodb_trig_1011ext.result mysql-test/suite/funcs_1/r/innodb_views.result mysql-test/suite/funcs_1/r/is_columns_falcon.result mysql-test/suite/funcs_1/r/is_columns_innodb.result mysql-test/suite/funcs_1/r/is_columns_is_embedded.result mysql-test/suite/funcs_1/r/is_columns_memory.result mysql-test/suite/funcs_1/r/is_columns_myisam.result mysql-test/suite/funcs_1/r/is_columns_myisam_embedded.result mysql-test/suite/funcs_1/r/is_columns_mysql_embedded.result mysql-test/suite/funcs_1/r/is_columns_ndb.result mysql-test/suite/funcs_1/r/is_statistics_mysql_embedded.result mysql-test/suite/funcs_1/r/is_table_constraints_mysql_embedded.result mysql-test/suite/funcs_1/r/is_tables_myisam_embedded.result mysql-test/suite/funcs_1/r/is_tables_mysql_embedded.result mysql-test/suite/funcs_1/r/memory_func_view.result mysql-test/suite/funcs_1/r/memory_storedproc_02.result mysql-test/suite/funcs_1/r/memory_storedproc_03.result mysql-test/suite/funcs_1/r/memory_storedproc_06.result mysql-test/suite/funcs_1/r/memory_storedproc_07.result mysql-test/suite/funcs_1/r/memory_storedproc_08.result mysql-test/suite/funcs_1/r/memory_storedproc_10.result mysql-test/suite/funcs_1/r/memory_trig_0102.result mysql-test/suite/funcs_1/r/memory_trig_0407.result mysql-test/suite/funcs_1/r/memory_trig_09.result mysql-test/suite/funcs_1/r/memory_trig_1011ext.result mysql-test/suite/funcs_1/r/memory_views.result mysql-test/suite/funcs_1/r/myisam_func_view.result mysql-test/suite/funcs_1/r/myisam_storedproc_02.result mysql-test/suite/funcs_1/r/myisam_storedproc_03.result mysql-test/suite/funcs_1/r/myisam_storedproc_06.result mysql-test/suite/funcs_1/r/myisam_storedproc_07.result mysql-test/suite/funcs_1/r/myisam_storedproc_08.result mysql-test/suite/funcs_1/r/myisam_storedproc_10.result mysql-test/suite/funcs_1/r/myisam_trig_0102.result mysql-test/suite/funcs_1/r/myisam_trig_0407.result mysql-test/suite/funcs_1/r/myisam_trig_09.result mysql-test/suite/funcs_1/r/myisam_trig_1011ext.result mysql-test/suite/funcs_1/r/myisam_views.result mysql-test/suite/funcs_1/r/ndb_func_view.result mysql-test/suite/funcs_1/r/ndb_storedproc_02.result mysql-test/suite/funcs_1/r/ndb_storedproc_03.result mysql-test/suite/funcs_1/r/ndb_storedproc_06.result mysql-test/suite/funcs_1/r/ndb_storedproc_07.result mysql-test/suite/funcs_1/r/ndb_storedproc_08.result mysql-test/suite/funcs_1/r/ndb_storedproc_10.result mysql-test/suite/funcs_1/r/ndb_trig_0102.result mysql-test/suite/funcs_1/r/ndb_trig_0407.result mysql-test/suite/funcs_1/r/ndb_trig_09.result mysql-test/suite/funcs_1/r/ndb_trig_1011ext.result mysql-test/suite/funcs_1/r/ndb_views.result mysql-test/suite/funcs_1/r/storedproc.result mysql-test/suite/funcs_1/storedproc/load_sp_tb.inc mysql-test/suite/funcs_1/storedproc/storedproc_06.inc mysql-test/suite/funcs_1/storedproc/storedproc_10.inc mysql-test/suite/funcs_1/t/disabled.def mysql-test/suite/funcs_1/t/is_basics_mixed.test mysql-test/suite/funcs_1/t/is_column_privileges.test mysql-test/suite/funcs_1/t/is_column_privileges_is_mysql_test.test mysql-test/suite/funcs_1/t/is_columns.test mysql-test/suite/funcs_1/t/is_schema_privileges.test mysql-test/suite/funcs_1/t/is_schema_privileges_is_mysql_test.test mysql-test/suite/funcs_1/t/is_schemata_is_mysql_test.test mysql-test/suite/funcs_1/t/is_statistics.test mysql-test/suite/funcs_1/t/is_table_constraints.test mysql-test/suite/funcs_1/t/is_table_privileges.test mysql-test/suite/funcs_1/t/is_user_privileges.test mysql-test/suite/funcs_1/t/storedproc.test mysql-test/suite/funcs_1/triggers/triggers_03.inc mysql-test/suite/funcs_1/triggers/triggers_03e_columns.inc mysql-test/suite/funcs_1/triggers/triggers_03e_db_level.inc mysql-test/suite/funcs_1/triggers/triggers_03e_db_table_mix.inc mysql-test/suite/funcs_1/triggers/triggers_03e_definer.inc mysql-test/suite/funcs_1/triggers/triggers_03e_global_db_mix.inc mysql-test/suite/funcs_1/triggers/triggers_03e_prepare.inc mysql-test/suite/funcs_1/triggers/triggers_03e_table_level.inc mysql-test/suite/funcs_1/triggers/triggers_03e_transaction.inc mysql-test/suite/funcs_1/triggers/triggers_0407.inc mysql-test/suite/funcs_1/triggers/triggers_08.inc mysql-test/suite/funcs_1/triggers/triggers_09.inc mysql-test/suite/funcs_1/triggers/triggers_1011ext.inc mysql-test/suite/funcs_1/views/func_view.inc mysql-test/suite/jp/r/jp_create_db_sjis.result mysql-test/suite/jp/r/jp_create_db_ucs2.result mysql-test/suite/jp/r/jp_create_db_ujis.result mysql-test/suite/jp/r/jp_create_db_utf8.result mysql-test/suite/jp/t/jp_create_db_sjis.test mysql-test/suite/jp/t/jp_create_db_ucs2.test mysql-test/suite/jp/t/jp_create_db_ujis.test mysql-test/suite/jp/t/jp_create_db_utf8.test mysql-test/suite/parts/inc/partition_key_32col.inc mysql-test/suite/parts/inc/partition_layout_check1.inc mysql-test/suite/parts/inc/partition_layout_check2.inc mysql-test/suite/parts/r/ndb_dd_backuprestore.result mysql-test/suite/parts/r/partition_special_innodb.result mysql-test/suite/parts/r/partition_special_myisam.result mysql-test/suite/parts/r/rpl_partition.result mysql-test/suite/parts/t/disabled.def mysql-test/suite/parts/t/partition_recover_myisam.test mysql-test/suite/parts/t/partition_repair_myisam.test mysql-test/suite/parts/t/rpl_partition.test mysql-test/suite/rpl/r/rpl_backup.result mysql-test/suite/rpl/r/rpl_blackhole.result mysql-test/suite/rpl/r/rpl_row_log.result mysql-test/suite/rpl/r/rpl_row_log_innodb.result mysql-test/suite/rpl/r/rpl_stm_log.result mysql-test/suite/rpl/r/rpl_trigger.result mysql-test/suite/rpl/t/disabled.def mysql-test/suite/rpl/t/rpl_backup.test mysql-test/suite/rpl/t/rpl_blackhole.test mysql-test/suite/rpl/t/rpl_heartbeat.test mysql-test/suite/rpl/t/rpl_trigger.test mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_2ch.result mysql-test/suite/rpl_ndb/r/rpl_ndb_mixed_tables.result mysql-test/suite/rpl_ndb/t/disabled.def mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.cnf mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.test mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_tables.test mysql-test/suite/sys_vars/inc/key_buffer_size_basic.inc mysql-test/suite/sys_vars/inc/query_cache_size_basic.inc mysql-test/suite/sys_vars/inc/query_prealloc_size_basic.inc mysql-test/suite/sys_vars/inc/timestamp_basic.inc mysql-test/suite/sys_vars/r/character_set_database_func.result mysql-test/suite/sys_vars/r/innodb_max_dirty_pages_pct_func.result mysql-test/suite/sys_vars/r/key_buffer_size_basic_32.result mysql-test/suite/sys_vars/r/key_buffer_size_basic_64.result mysql-test/suite/sys_vars/r/query_alloc_block_size_basic_32.result mysql-test/suite/sys_vars/r/query_cache_size_basic_32.result mysql-test/suite/sys_vars/r/query_cache_size_basic_64.result mysql-test/suite/sys_vars/r/query_prealloc_size_basic_32.result mysql-test/suite/sys_vars/t/character_set_database_func.test mysql-test/suite/sys_vars/t/disabled.def mysql-test/suite/sys_vars/t/innodb_max_dirty_pages_pct_func.test mysql-test/suite/sys_vars/t/rpl_max_binlog_size_func.test mysql-test/t/archive_aio_posix.test mysql-test/t/comment_index.test mysql-test/t/ctype_ldml.test mysql-test/t/disabled.def mysql-test/t/func_compress.test mysql-test/t/grant4.test mysql-test/t/implicit_commit.test mysql-test/t/init_file.test mysql-test/t/innodb_bug34300.test mysql-test/t/innodb_mrr.test mysql-test/t/join_cache.test mysql-test/t/maria_mrr.test mysql-test/t/myisam_mrr.test mysql-test/t/myisampack.test mysql-test/t/not_embedded_server.test mysql-test/t/openssl_1.test mysql-test/t/query_cache_notembedded.test mysql-test/t/status.test mysql-test/t/subselect.test mysql-test/t/subselect3.test mysql-test/t/subselect_sj.test mysql-test/t/system_mysql_db_fix30020.test mysql-test/t/type_timestamp.test mysql-test/t/user_limits.test mysql-test/t/user_var.test mysql-test/t/variables.test mysql-test/t/wait_timeout.test mysys/charset.c mysys/mf_keycache.c mysys/my_delete.c mysys/my_init.c mysys/my_thr_init.c sql/backup/Doxyfile sql/backup/api_types.h sql/backup/backup_aux.h sql/backup/backup_engine.h sql/backup/backup_info.cc sql/backup/backup_info.h sql/backup/backup_kernel.h sql/backup/backup_test.cc sql/backup/be_default.cc sql/backup/be_default.h sql/backup/be_logical.h sql/backup/be_native.h sql/backup/be_nodata.cc sql/backup/be_nodata.h sql/backup/be_snapshot.cc sql/backup/be_snapshot.h sql/backup/be_thread.cc sql/backup/be_thread.h sql/backup/buffer_iterator.cc sql/backup/buffer_iterator.h sql/backup/data_backup.cc sql/backup/error.h sql/backup/image_info.cc sql/backup/image_info.h sql/backup/kernel.cc sql/backup/logger.cc sql/backup/logger.h sql/backup/restore_info.h sql/backup/stream.cc sql/backup/stream.h sql/backup/stream_v1.c sql/backup/stream_v1.h sql/backup/stream_v1_transport.c sql/handler.cc sql/handler.h sql/item.cc sql/item_cmpfunc.cc sql/item_func.cc sql/item_func.h sql/log_event.cc sql/mysql_priv.h sql/mysqld.cc sql/opt_range.cc sql/opt_range.h sql/parse_file.cc sql/set_var.cc sql/share/errmsg.txt sql/si_objects.cc sql/si_objects.h sql/sql_cache.cc sql/sql_class.cc sql/sql_delete.cc sql/sql_join_cache.cc sql/sql_lex.cc sql/sql_lex.h sql/sql_parse.cc sql/sql_repl.cc sql/sql_repl.h sql/sql_select.cc sql/sql_select.h sql/sql_table.cc sql/unireg.cc storage/falcon/ha_falcon.cpp storage/maria/ha_maria.h storage/maria/ma_key.c storage/myisam/ft_parser.c storage/myisam/ftdefs.h storage/myisam/ha_myisam.cc storage/myisam/ha_myisam.h storage/myisam/mi_check.c storage/myisam/mi_close.c storage/myisam/mi_key.c storage/myisam/mi_open.c storage/myisam/myisam_backup_engine.cc storage/myisam/myisamdef.h mysql-test/suite/backup/r/backup_myisam_extlocking.result mysql-test/suite/backup/r/backup_myisam_sync.result mysql-test/suite/backup/t/backup_myisam_extlocking.test mysql-test/suite/backup/t/backup_myisam_sync.test === modified file 'mysql-test/r/subselect3.result' --- a/mysql-test/r/subselect3.result 2009-01-30 14:13:39 +0000 +++ b/mysql-test/r/subselect3.result 2009-02-04 11:27:06 +0000 @@ -1219,6 +1219,21 @@ id select_type table type possible_keys 1 PRIMARY Z ALL NULL NULL NULL NULL 6 End materialize; Using join buffer drop table t0,t1,t2; +BUG#37842: Assertion in DsMrr_impl::dsmrr_init, at handler.cc:4307 + +CREATE TABLE t1 ( +`pk` int(11) NOT NULL AUTO_INCREMENT, +`int_key` int(11) DEFAULT NULL, +PRIMARY KEY (`pk`), +KEY `int_key` (`int_key`) +) ENGINE=MyISAM; +INSERT INTO t1 VALUES (1,9),(2,3),(3,8),(4,6),(5,9),(6,5),(7,5),(8,9),(9,1),(10,10); +SELECT `pk` FROM t1 AS OUTR WHERE `int_key` = ALL ( +SELECT `int_key` FROM t1 AS INNR WHERE INNR . `pk` >= 9 +); +pk +DROP TABLE t1; + BUG#40118 Crash when running Batched Key Access and requiring one match for each key create table t0(a int); === modified file 'mysql-test/r/subselect3_jcl6.result' --- a/mysql-test/r/subselect3_jcl6.result 2009-02-03 09:16:53 +0000 +++ b/mysql-test/r/subselect3_jcl6.result 2009-02-04 11:27:06 +0000 @@ -1224,6 +1224,21 @@ id select_type table type possible_keys 1 PRIMARY Z ALL NULL NULL NULL NULL 6 End materialize; Using join buffer drop table t0,t1,t2; +BUG#37842: Assertion in DsMrr_impl::dsmrr_init, at handler.cc:4307 + +CREATE TABLE t1 ( +`pk` int(11) NOT NULL AUTO_INCREMENT, +`int_key` int(11) DEFAULT NULL, +PRIMARY KEY (`pk`), +KEY `int_key` (`int_key`) +) ENGINE=MyISAM; +INSERT INTO t1 VALUES (1,9),(2,3),(3,8),(4,6),(5,9),(6,5),(7,5),(8,9),(9,1),(10,10); +SELECT `pk` FROM t1 AS OUTR WHERE `int_key` = ALL ( +SELECT `int_key` FROM t1 AS INNR WHERE INNR . `pk` >= 9 +); +pk +DROP TABLE t1; + BUG#40118 Crash when running Batched Key Access and requiring one match for each key create table t0(a int); === modified file 'mysql-test/t/subselect3.test' --- a/mysql-test/t/subselect3.test 2009-01-30 14:13:39 +0000 +++ b/mysql-test/t/subselect3.test 2009-02-04 11:27:06 +0000 @@ -989,6 +989,21 @@ explain select * from t1 where (a,b,c) i drop table t0,t1,t2; +--echo +--echo BUG#37842: Assertion in DsMrr_impl::dsmrr_init, at handler.cc:4307 +--echo +CREATE TABLE t1 ( + `pk` int(11) NOT NULL AUTO_INCREMENT, + `int_key` int(11) DEFAULT NULL, + PRIMARY KEY (`pk`), + KEY `int_key` (`int_key`) +) ENGINE=MyISAM; +INSERT INTO t1 VALUES (1,9),(2,3),(3,8),(4,6),(5,9),(6,5),(7,5),(8,9),(9,1),(10,10); +SELECT `pk` FROM t1 AS OUTR WHERE `int_key` = ALL ( + SELECT `int_key` FROM t1 AS INNR WHERE INNR . `pk` >= 9 +); +DROP TABLE t1; + --echo --echo BUG#40118 Crash when running Batched Key Access and requiring one match for each key --echo === modified file 'sql/handler.cc' --- a/sql/handler.cc 2009-02-04 10:49:16 +0000 +++ b/sql/handler.cc 2009-02-05 08:22:22 +0000 @@ -4362,17 +4362,20 @@ scan_it_again: @retval other Error */ -int DsMrr_impl::dsmrr_init(handler *h, KEY *key, - RANGE_SEQ_IF *seq_funcs, void *seq_init_param, - uint n_ranges, uint mode, HANDLER_BUFFER *buf) +int DsMrr_impl::dsmrr_init(handler *h_arg, RANGE_SEQ_IF *seq_funcs, + void *seq_init_param, uint n_ranges, uint mode, + HANDLER_BUFFER *buf) { uint elem_size; - uint keyno; Item *pushed_cond= NULL; handler *new_h2= 0; DBUG_ENTER("DsMrr_impl::dsmrr_init"); - keyno= h->active_index; + /* + index_merge may invoke a scan on an object for which dsmrr_info[_const] + has not been called, so set the owner handler here as well. + */ + h= h_arg; if (mode & HA_MRR_USE_DEFAULT_IMPL || mode & HA_MRR_SORTED) { use_default_impl= TRUE; @@ -4393,17 +4396,28 @@ int DsMrr_impl::dsmrr_init(handler *h, K elem_size; rowids_buf_end= rowids_buf_last; + /* + There can be two cases: + - This is the first call since index_init(), h2==NULL + Need to setup h2 then. + - This is not the first call, h2 is initalized and set up appropriately. + The caller might have called h->index_init(), need to switch h to + rnd_pos calls. + */ if (!h2) { /* Create a separate handler object to do rndpos() calls. */ THD *thd= current_thd; + /* + ::clone() takes up a lot of stack, especially on 64 bit platforms. + The constant 5 is an empiric result. + */ + if (check_stack_overrun(thd, 5*STACK_MIN_SIZE, (uchar*) &new_h2)) + DBUG_RETURN(1); + DBUG_ASSERT(h->active_index != MAX_KEY); + uint mrr_keyno= h->active_index; - /* - ::clone() takes up a lot of stack, especially on 64 bit platforms. - The constant 5 is an empiric result. - */ - if (check_stack_overrun(thd, 5*STACK_MIN_SIZE, (uchar*) &new_h2)) - DBUG_RETURN(1); + /* Create a separate handler object to do rndpos() calls. */ if (!(new_h2= h->clone(thd->mem_root)) || new_h2->ha_external_lock(thd, F_RDLCK)) { @@ -4411,31 +4425,55 @@ int DsMrr_impl::dsmrr_init(handler *h, K DBUG_RETURN(1); } - if (keyno == h->pushed_idx_cond_keyno) + if (mrr_keyno == h->pushed_idx_cond_keyno) pushed_cond= h->pushed_idx_cond; + + /* + Caution: this call will invoke this->dsmrr_close(). Do not put the + created secondary table handler into this->h2 or it will delete it. + */ if (h->ha_index_end()) { - new_h2= h2; + h2=new_h2; goto error; } - h2= new_h2; + h2= new_h2; /* Ok, now can put it into h2 */ table->prepare_for_position(); - new_h2->extra(HA_EXTRA_KEYREAD); + h2->extra(HA_EXTRA_KEYREAD); - if (h2->ha_index_init(keyno, FALSE)) + if (h2->ha_index_init(mrr_keyno, FALSE)) + goto error; + + use_default_impl= FALSE; + if (pushed_cond) + h2->idx_cond_push(mrr_keyno, pushed_cond); + } + else + { + /* + We get here when the access alternates betwen MRR scan(s) and non-MRR + scans. + + Calling h->index_end() will invoke dsmrr_close() for this object, + which will delete h2. We need to keep it, so save put it away and dont + let it be deleted: + */ + handler *save_h2= h2; + h2= NULL; + int res= (h->inited == handler::INDEX && h->ha_index_end()); + h2= save_h2; + use_default_impl= FALSE; + if (res) goto error; } if (h2->handler::multi_range_read_init(seq_funcs, seq_init_param, n_ranges, - mode, buf)) - goto error; - - if (pushed_cond) - h2->idx_cond_push(keyno, pushed_cond); - if (dsmrr_fill_buffer(new_h2)) + mode, buf) || + dsmrr_fill_buffer()) + { goto error; - + } /* If the above call has scanned through all intervals in *seq, then adjust *buf to indicate that the remaining buffer space will not be used. @@ -4504,7 +4542,7 @@ static int rowid_cmp(void *h, uchar *a, @retval other Error */ -int DsMrr_impl::dsmrr_fill_buffer(handler *unused) +int DsMrr_impl::dsmrr_fill_buffer() { char *range_info; int res; @@ -4551,7 +4589,7 @@ int DsMrr_impl::dsmrr_fill_buffer(handle DS-MRR implementation: multi_range_read_next() function */ -int DsMrr_impl::dsmrr_next(handler *h, char **range_info) +int DsMrr_impl::dsmrr_next(char **range_info) { int res; uchar *cur_range_info= 0; @@ -4569,8 +4607,7 @@ int DsMrr_impl::dsmrr_next(handler *h, c res= HA_ERR_END_OF_FILE; goto end; } - - res= dsmrr_fill_buffer(h); + res= dsmrr_fill_buffer(); if (res) goto end; } === modified file 'sql/handler.h' --- a/sql/handler.h 2009-01-29 21:17:59 +0000 +++ b/sql/handler.h 2009-02-02 14:12:27 +0000 @@ -2461,14 +2461,15 @@ public: DsMrr_impl() : h2(NULL) {}; - - handler *h; /* The "owner" handler object. It is used for scanning the index */ - TABLE *table; /* Always equal to h->table */ -private: + /* - Secondary handler object. It is used to retrieve full table rows by - calling rnd_pos(). + The "owner" handler object (the one that calls dsmrr_XXX functions. + It is used to retrieve full table rows by calling rnd_pos(). */ + handler *h; + TABLE *table; /* Always equal to h->table */ +private: + /* Secondary handler object. It is used for scanning the index */ handler *h2; /* Buffer to store rowids, or (rowid, range_id) pairs */ @@ -2489,12 +2490,11 @@ public: h= h_arg; table= table_arg; } - int dsmrr_init(handler *h, KEY *key, RANGE_SEQ_IF *seq_funcs, - void *seq_init_param, uint n_ranges, uint mode, - HANDLER_BUFFER *buf); + int dsmrr_init(handler *h, RANGE_SEQ_IF *seq_funcs, void *seq_init_param, + uint n_ranges, uint mode, HANDLER_BUFFER *buf); void dsmrr_close(); - int dsmrr_fill_buffer(handler *h); - int dsmrr_next(handler *h, char **range_info); + int dsmrr_fill_buffer(); + int dsmrr_next(char **range_info); ha_rows dsmrr_info(uint keyno, uint n_ranges, uint keys, uint *bufsz, uint *flags, COST_VECT *cost); === modified file 'storage/innobase/handler/ha_innodb.cc' --- a/storage/innobase/handler/ha_innodb.cc 2009-01-31 16:21:19 +0000 +++ b/storage/innobase/handler/ha_innodb.cc 2009-02-05 08:22:22 +0000 @@ -3468,7 +3468,6 @@ skip_field: prebuilt->idx_cond_func= NULL; prebuilt->n_index_fields= n_requested_fields; } - // file->in_range_read= FALSE; if (index != clust_index && prebuilt->need_to_access_clustered) { /* Change rec_field_no's to correspond to the clustered index @@ -6675,7 +6674,6 @@ ha_innobase::extra( /* Reset index condition pushdown state */ pushed_idx_cond= FALSE; pushed_idx_cond_keyno= MAX_KEY; - //in_range_read= FALSE; prebuilt->idx_cond_func= NULL; break; case HA_EXTRA_NO_KEYREAD: @@ -8497,13 +8495,12 @@ mysql_declare_plugin_end; int ha_innobase::multi_range_read_init(RANGE_SEQ_IF *seq, void *seq_init_param, uint n_ranges, uint mode, HANDLER_BUFFER *buf) { - return ds_mrr.dsmrr_init(this, &table->key_info[active_index], - seq, seq_init_param, n_ranges, mode, buf); + return ds_mrr.dsmrr_init(this, seq, seq_init_param, n_ranges, mode, buf); } int ha_innobase::multi_range_read_next(char **range_info) { - return ds_mrr.dsmrr_next(this, range_info); + return ds_mrr.dsmrr_next(range_info); } ha_rows ha_innobase::multi_range_read_info_const(uint keyno, RANGE_SEQ_IF *seq, @@ -8539,7 +8536,7 @@ C_MODE_START static my_bool index_cond_func_innodb(void *arg) { ha_innobase *h= (ha_innobase*)arg; - if (h->end_range) //was: h->in_range_read + if (h->end_range) { if (h->compare_key2(h->end_range) > 0) return 2; /* caller should return HA_ERR_END_OF_FILE already */ @@ -8569,11 +8566,7 @@ int ha_innobase::read_range_first(const bool sorted /* ignored */) { int res; - //if (!eq_range_arg) - //in_range_read= TRUE; res= handler::read_range_first(start_key, end_key, eq_range_arg, sorted); - //if (res) - // in_range_read= FALSE; return res; } @@ -8581,8 +8574,6 @@ int ha_innobase::read_range_first(const int ha_innobase::read_range_next() { int res= handler::read_range_next(); - //if (res) - // in_range_read= FALSE; return res; } === modified file 'storage/maria/ha_maria.cc' --- a/storage/maria/ha_maria.cc 2009-02-02 13:57:39 +0000 +++ b/storage/maria/ha_maria.cc 2009-02-05 08:22:22 +0000 @@ -3198,13 +3198,12 @@ int ha_maria::multi_range_read_init(RANG uint n_ranges, uint mode, HANDLER_BUFFER *buf) { - return ds_mrr.dsmrr_init(this, &table->key_info[active_index], - seq, seq_init_param, n_ranges, mode, buf); + return ds_mrr.dsmrr_init(this, seq, seq_init_param, n_ranges, mode, buf); } int ha_maria::multi_range_read_next(char **range_info) { - return ds_mrr.dsmrr_next(this, range_info); + return ds_mrr.dsmrr_next(range_info); } ha_rows ha_maria::multi_range_read_info_const(uint keyno, RANGE_SEQ_IF *seq, === modified file 'storage/myisam/ha_myisam.cc' --- a/storage/myisam/ha_myisam.cc 2009-02-04 10:49:16 +0000 +++ b/storage/myisam/ha_myisam.cc 2009-02-05 08:22:22 +0000 @@ -2013,13 +2013,12 @@ int ha_myisam::multi_range_read_init(RAN uint n_ranges, uint mode, HANDLER_BUFFER *buf) { - return ds_mrr.dsmrr_init(this, &table->key_info[active_index], - seq, seq_init_param, n_ranges, mode, buf); + return ds_mrr.dsmrr_init(this, seq, seq_init_param, n_ranges, mode, buf); } int ha_myisam::multi_range_read_next(char **range_info) { - return ds_mrr.dsmrr_next(this, range_info); + return ds_mrr.dsmrr_next(range_info); } ha_rows ha_myisam::multi_range_read_info_const(uint keyno, RANGE_SEQ_IF *seq,