From: Ole John Aske Date: October 11 2010 9:44am Subject: bzr commit into mysql-5.1-telco-7.0-spj-scan-vs-scan branch (ole.john.aske:3306) List-Archive: http://lists.mysql.com/commits/120476 Message-Id: <20101011094407.2140721D@fimafeng09.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1161409444037301293==" --===============1161409444037301293== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///net/fimafeng09/export/home/tmp/oleja/mysql/mysql-5.1-telco-7.0-spj-scan-scan/ based on revid:jonas@stripped 3306 Ole John Aske 2010-10-11 Fixed incorrect usage of info in NdbRecord to find the NdbQueryOperand* which defined the value for a specific column in the partition key. Bug caused 'out of bound' read in m_bound.low[] and an assert when compiled with DEBUG. Includes testcase for the above. modified: mysql-test/suite/ndb/r/ndb_join_pushdown.result mysql-test/suite/ndb/t/ndb_join_pushdown.test storage/ndb/src/ndbapi/NdbQueryBuilder.cpp === modified file 'mysql-test/suite/ndb/r/ndb_join_pushdown.result' --- a/mysql-test/suite/ndb/r/ndb_join_pushdown.result 2010-09-30 14:20:12 +0000 +++ b/mysql-test/suite/ndb/r/ndb_join_pushdown.result 2010-10-11 09:44:00 +0000 @@ -3875,6 +3875,14 @@ d e f a b c d e f a b c 1 2 3 6 7 8 1 2 3 1 2 4 1 2 3 7 8 9 1 2 3 1 2 3 1 2 3 7 8 9 1 2 3 1 2 4 +alter table t1 drop primary key, add primary key using hash (d,b,a,c); +alter table t1 partition by key (b); +create index ix1 on t1(b,d,a); +explain +select straight_join * from t1 x, t1 y where y.a=x.d and y.b=x.e; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE x ALL PRIMARY NULL NULL NULL 8 Parent of 2 pushed join@1 +1 SIMPLE y ref ix1 ix1 4 test.x.e 1 Child of pushed join@1; Using where pruned 12 const_pruned @@ -4014,13 +4022,13 @@ LOCAL+REMOTE READS_SENT drop table spj_counts_at_startup; drop table spj_counts_at_end; scan_count -1975 +1985 pruned_scan_count 7 sorted_scan_count 44 pushed_queries_defined -333 +334 pushed_queries_dropped 11 pushed_queries_executed === modified file 'mysql-test/suite/ndb/t/ndb_join_pushdown.test' --- a/mysql-test/suite/ndb/t/ndb_join_pushdown.test 2010-09-30 14:20:12 +0000 +++ b/mysql-test/suite/ndb/t/ndb_join_pushdown.test 2010-10-11 09:44:00 +0000 @@ -2771,6 +2771,18 @@ select straight_join * from t1 x, t1 y w --sorted_result select straight_join * from t1 x, t1 y where y.a=x.d and y.b=2; +########## +# Test pruned scan using an index: +# Declaring PK as 'using hash' will prevent that PK is used as index +# Declare PK / ix1 with mismatching column order will test correct +# usage of NdbRecord::distkey_indexes[] +########## +alter table t1 drop primary key, add primary key using hash (d,b,a,c); +alter table t1 partition by key (b); +create index ix1 on t1(b,d,a); + +explain +select straight_join * from t1 x, t1 y where y.a=x.d and y.b=x.e; # Verify pruned execution by comparing the NDB$INFO counters --disable_query_log === modified file 'storage/ndb/src/ndbapi/NdbQueryBuilder.cpp' --- a/storage/ndb/src/ndbapi/NdbQueryBuilder.cpp 2010-09-24 07:29:43 +0000 +++ b/storage/ndb/src/ndbapi/NdbQueryBuilder.cpp 2010-10-11 09:44:00 +0000 @@ -2102,10 +2102,12 @@ NdbQueryIndexScanOperationDefImpl::appen for (unsigned i = 0; i < indexRecord->distkey_index_length; i++) { - unsigned keyNo = indexRecord->distkey_indexes[i]; - assert(keyNocolumns[keyNo].flags & NdbRecord::IsDistributionKey); - const NdbQueryOperandImpl* key = m_bound.low[keyNo]; + const unsigned keyNo = indexRecord->distkey_indexes[i]; + assert(keyNonoOfColumns); + const NdbRecord::Attr& indexAttr = indexRecord->columns[keyNo]; + assert(indexAttr.flags & NdbRecord::IsDistributionKey); + assert(indexAttr.index_attrIdgetKind()) { --===============1161409444037301293== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/ole.john.aske@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: ole.john.aske@stripped\ # pt7f5v8qf8b2jx60 # target_branch: file:///net/fimafeng09/export/home/tmp/oleja/mysql\ # /mysql-5.1-telco-7.0-spj-scan-scan/ # testament_sha1: a476771f5287b761f233c8096f58ea79e3c2fac3 # timestamp: 2010-10-11 11:44:07 +0200 # source_branch: bzr+ssh://oaske@stripped/bzrroot/server\ # /mysql-5.1-telco-7.0-spj/ # base_revision_id: jonas@stripped # # Begin bundle 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 ItTtfwEC4NTMTrdDAWXvP8XckU4UJBufn7LA --===============1161409444037301293==--