From: Jan Wedvik Date: May 26 2011 3:13pm Subject: bzr push into mysql-5.1-telco-7.0-spj-scan-vs-scan branch (jan.wedvik:3498 to 3499) List-Archive: http://lists.mysql.com/commits/138232 Message-Id: <20110526151353.6D0AF223@fimafeng09.norway.sun.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 3499 Jan Wedvik 2011-05-26 This commit adds a regression test for http://lists.mysql.com/commits/138223, which is: "This is a fix for an error that would occur when pushing an index scan that is sorted on a string field. The problem was an assumption that compare_ndbrecord() would always return 0,-1 or 1, when it can in fact return any number. This could cause results to be sorted in the wrong order, or mysqld to loop for ever." modified: mysql-test/suite/ndb/r/ndb_join_pushdown.result mysql-test/suite/ndb/t/ndb_join_pushdown.test 3498 Jan Wedvik 2011-05-26 [merge] Merge telco-7.0 -> SPJ added: mysql-test/suite/ndb/r/ndb_dd_bug12581213.result mysql-test/suite/ndb/t/ndb_dd_bug12581213.cnf mysql-test/suite/ndb/t/ndb_dd_bug12581213.test storage/ndb/cmake/os/ storage/ndb/cmake/os/Windows.cmake storage/ndb/cmake/os/WindowsCache.cmake modified: CMakeLists.txt configure.in mysql-test/suite/ndb/r/ndbinfo.result mysql-test/suite/ndb/t/ndbinfo.test sql/ha_ndbinfo.cc sql/ha_ndbinfo.h storage/ndb/include/kernel/kernel_types.h storage/ndb/include/kernel/ndb_limits.h storage/ndb/include/kernel/signaldata/DiGetNodes.hpp storage/ndb/include/kernel/signaldata/FireTrigOrd.hpp storage/ndb/include/kernel/signaldata/SumaImpl.hpp storage/ndb/include/kernel/signaldata/TupCommit.hpp storage/ndb/include/ndb_version.h.in storage/ndb/include/ndbapi/NdbEventOperation.hpp storage/ndb/include/ndbapi/NdbOperation.hpp storage/ndb/include/ndbapi/NdbTransaction.hpp storage/ndb/include/ndbapi/ndb_cluster_connection.hpp storage/ndb/ndb_configure.cmake storage/ndb/ndb_configure.m4 storage/ndb/src/common/debugger/signaldata/SumaImpl.cpp storage/ndb/src/common/debugger/signaldata/TcKeyReq.cpp storage/ndb/src/kernel/blocks/LocalProxy.cpp storage/ndb/src/kernel/blocks/dbacc/Dbacc.hpp storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp storage/ndb/src/kernel/blocks/dbspj/DbspjMain.cpp storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp storage/ndb/src/kernel/blocks/dbtc/DbtcProxy.cpp storage/ndb/src/kernel/blocks/dbtc/DbtcProxy.hpp storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp storage/ndb/src/kernel/blocks/ndbfs/AsyncIoThread.cpp storage/ndb/src/kernel/blocks/ndbfs/AsyncIoThread.hpp storage/ndb/src/kernel/blocks/ndbfs/Ndbfs.cpp storage/ndb/src/kernel/blocks/ndbfs/Ndbfs.hpp storage/ndb/src/kernel/blocks/ndbfs/Pool.hpp storage/ndb/src/kernel/blocks/qmgr/QmgrInit.cpp storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp storage/ndb/src/kernel/blocks/suma/Suma.cpp storage/ndb/src/mgmsrv/Config.hpp storage/ndb/src/ndbapi/NdbEventOperation.cpp storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp storage/ndb/src/ndbapi/NdbEventOperationImpl.hpp storage/ndb/src/ndbapi/NdbInfo.cpp storage/ndb/src/ndbapi/NdbInfo.hpp storage/ndb/src/ndbapi/NdbInfoRecAttr.hpp storage/ndb/src/ndbapi/NdbInfoScanOperation.cpp storage/ndb/src/ndbapi/NdbOperationExec.cpp storage/ndb/src/ndbapi/NdbQueryOperation.cpp storage/ndb/src/ndbapi/NdbTransaction.cpp storage/ndb/src/ndbapi/TransporterFacade.hpp storage/ndb/src/ndbapi/ndb_cluster_connection.cpp storage/ndb/src/ndbapi/ndb_cluster_connection_impl.hpp storage/ndb/src/ndbapi/ndberror.c storage/ndb/test/include/HugoOperations.hpp storage/ndb/test/include/HugoTransactions.hpp storage/ndb/test/ndbapi/testBasic.cpp storage/ndb/test/ndbapi/testIndex.cpp storage/ndb/test/ndbapi/testRestartGci.cpp storage/ndb/test/ndbapi/test_event.cpp storage/ndb/test/run-test/daily-devel-tests.txt storage/ndb/test/src/HugoOperations.cpp storage/ndb/test/src/HugoTransactions.cpp storage/ndb/test/tools/hugoPkUpdate.cpp storage/ndb/tools/CMakeLists.txt storage/ndb/tools/Makefile.am storage/ndb/tools/ndb_config.cpp storage/ndb/tools/ndbinfo_sql.cpp === modified file 'mysql-test/suite/ndb/r/ndb_join_pushdown.result' --- a/mysql-test/suite/ndb/r/ndb_join_pushdown.result 2011-05-13 08:47:06 +0000 +++ b/mysql-test/suite/ndb/r/ndb_join_pushdown.result 2011-05-26 15:13:05 +0000 @@ -5120,6 +5120,27 @@ on x0.d=x1.a; count(*) 2052 drop table t1; +create table t1 (pk char(10) primary key, u int not null) engine=ndb; +create table t2 (pk int primary key, u int not null) engine=ndb; +insert into t1 values ('wh',1); +insert into t1 values ('ik',2); +insert into t1 values ('cu',3); +insert into t1 values ('pw',4); +insert into t1 values ('cq',4); +insert into t2 values (1,2), (2,3), (3,4), (4,5); +explain select * from t1 join t2 on t1.u = t2.pk order by t1.pk; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL PRIMARY 10 NULL 5 Parent of 2 pushed join@1 +1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.u 1 Child of 't1' in pushed join@1 +select * from t1 join t2 on t1.u = t2.pk order by t1.pk; +pk u pk u +cq 4 4 5 +cu 3 3 4 +ik 2 2 3 +pw 4 4 5 +wh 1 1 2 +drop table t1; +drop table t2; create temporary table spj_counts_at_end select counter_name, sum(val) as val from ndbinfo.counters @@ -5137,10 +5158,10 @@ counter_name spj_counts_at_end.val - spj CONST_PRUNED_RANGE_SCANS_RECEIVED 6 LOCAL_TABLE_SCANS_SENT 232 PRUNED_RANGE_SCANS_RECEIVED 17 -RANGE_SCANS_RECEIVED 718 +RANGE_SCANS_RECEIVED 720 READS_NOT_FOUND 6616 READS_RECEIVED 52 -SCAN_ROWS_RETURNED 94223 +SCAN_ROWS_RETURNED 94233 TABLE_SCANS_RECEIVED 232 select sum(spj_counts_at_end.val - spj_counts_at_startup.val) as 'LOCAL+REMOTE READS_SENT' from spj_counts_at_end, spj_counts_at_startup @@ -5148,19 +5169,19 @@ where spj_counts_at_end.counter_name = s and (spj_counts_at_end.counter_name = 'LOCAL_READS_SENT' or spj_counts_at_end.counter_name = 'REMOTE_READS_SENT'); LOCAL+REMOTE READS_SENT -35283 +35288 drop table spj_counts_at_startup; drop table spj_counts_at_end; scan_count -2551 +2555 pruned_scan_count 8 sorted_scan_count -9 +10 pushed_queries_defined -377 +379 pushed_queries_dropped 11 pushed_queries_executed -531 +532 set ndb_join_pushdown = @save_ndb_join_pushdown; === modified file 'mysql-test/suite/ndb/t/ndb_join_pushdown.test' --- a/mysql-test/suite/ndb/t/ndb_join_pushdown.test 2011-05-13 08:47:06 +0000 +++ b/mysql-test/suite/ndb/t/ndb_join_pushdown.test 2011-05-26 15:13:05 +0000 @@ -3295,6 +3295,24 @@ select count(*) from t1 as x0 drop table t1; +## Test scan sorted on string field. +create table t1 (pk char(10) primary key, u int not null) engine=ndb; +create table t2 (pk int primary key, u int not null) engine=ndb; + +insert into t1 values ('wh',1); +insert into t1 values ('ik',2); +insert into t1 values ('cu',3); +insert into t1 values ('pw',4); +insert into t1 values ('cq',4); + +insert into t2 values (1,2), (2,3), (3,4), (4,5); + +explain select * from t1 join t2 on t1.u = t2.pk order by t1.pk; +select * from t1 join t2 on t1.u = t2.pk order by t1.pk; + +drop table t1; +drop table t2; + ######################################## # Verify DBSPJ counters for entire test: No bundle (reason: useless for push emails).