Loading mysql-test/suite/ndb/r/ndb_partition_key.result +17 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,23 @@ a b c 1 10 3 1 11 3 1 12 3 select max(b) from t1 where a = 1; max(b) 12 select b from t1 where a = 1 order by b desc; b 12 11 10 9 8 7 6 5 4 3 2 1 DROP TABLE t1; CREATE TABLE t1 (a INT, b CHAR(10) COLLATE latin1_bin, c INT, d INT, PRIMARY KEY (a,b,c) USING HASH) Loading mysql-test/suite/ndb/r/ndb_partition_range.result +8 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,14 @@ a b c 1 1 1 6 1 1 10 1 1 INSERT into t1 values (1, 2, 2); select max(b) from t1 where a = 1; max(b) 2 select b from t1 where a = 1 order by b desc; b 2 1 drop table t1; CREATE TABLE t1 ( a int not null, Loading mysql-test/suite/ndb/t/ndb_partition_key.test +4 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,10 @@ insert into t1 values select * from t1 order by b; # BUG#33061: ORDER BY DESC becomes ASC in NDB partition pruning to one partition select max(b) from t1 where a = 1; select b from t1 where a = 1 order by b desc; DROP TABLE t1; # Loading mysql-test/suite/ndb/t/ndb_partition_range.test +5 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,11 @@ select * from t1 where a=21 order by a; select * from t1 where a in (1,6,10,21) order by a; select * from t1 where b=1 and a in (1,6,10,21) order by a; # BUG#33061: ORDER BY DESC becomes ASC in NDB partition pruning to one partition INSERT into t1 values (1, 2, 2); select max(b) from t1 where a = 1; select b from t1 where a = 1 order by b desc; drop table t1; # Loading storage/ndb/src/ndbapi/NdbScanOperation.cpp +27 −15 Original line number Diff line number Diff line Loading @@ -1340,13 +1340,24 @@ NdbIndexScanOperation::readTuples(LockMode lm, if(insertATTRINFO(word) == -1) res = -1; } if(!res && order_by){ m_ordered = true; if (!res) { /** * Note that it is valid to have order_desc true and order_by false. * * This means that there will be no merge sort among partitions, but * each partition will still be returned in descending sort order. * * This is useful eg. if it is known that the scan spans only one * partition. */ if (order_desc) { m_descending = true; ScanTabReq * req = CAST_PTR(ScanTabReq, theSCAN_TABREQ->getDataPtrSend()); ScanTabReq::setDescendingFlag(req->requestInfo, true); } if (order_by) { m_ordered = true; Uint32 cnt = m_accessTable->getNoOfColumns() - 1; m_sort_columns = cnt; // -1 for NDB$NODE m_current_api_receiver = m_sent_receivers_count; Loading @@ -1365,6 +1376,7 @@ NdbIndexScanOperation::readTuples(LockMode lm, #endif } } } m_this_bound_start = 0; m_first_bound_word = theKEYINFOptr; Loading Loading
mysql-test/suite/ndb/r/ndb_partition_key.result +17 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,23 @@ a b c 1 10 3 1 11 3 1 12 3 select max(b) from t1 where a = 1; max(b) 12 select b from t1 where a = 1 order by b desc; b 12 11 10 9 8 7 6 5 4 3 2 1 DROP TABLE t1; CREATE TABLE t1 (a INT, b CHAR(10) COLLATE latin1_bin, c INT, d INT, PRIMARY KEY (a,b,c) USING HASH) Loading
mysql-test/suite/ndb/r/ndb_partition_range.result +8 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,14 @@ a b c 1 1 1 6 1 1 10 1 1 INSERT into t1 values (1, 2, 2); select max(b) from t1 where a = 1; max(b) 2 select b from t1 where a = 1 order by b desc; b 2 1 drop table t1; CREATE TABLE t1 ( a int not null, Loading
mysql-test/suite/ndb/t/ndb_partition_key.test +4 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,10 @@ insert into t1 values select * from t1 order by b; # BUG#33061: ORDER BY DESC becomes ASC in NDB partition pruning to one partition select max(b) from t1 where a = 1; select b from t1 where a = 1 order by b desc; DROP TABLE t1; # Loading
mysql-test/suite/ndb/t/ndb_partition_range.test +5 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,11 @@ select * from t1 where a=21 order by a; select * from t1 where a in (1,6,10,21) order by a; select * from t1 where b=1 and a in (1,6,10,21) order by a; # BUG#33061: ORDER BY DESC becomes ASC in NDB partition pruning to one partition INSERT into t1 values (1, 2, 2); select max(b) from t1 where a = 1; select b from t1 where a = 1 order by b desc; drop table t1; # Loading
storage/ndb/src/ndbapi/NdbScanOperation.cpp +27 −15 Original line number Diff line number Diff line Loading @@ -1340,13 +1340,24 @@ NdbIndexScanOperation::readTuples(LockMode lm, if(insertATTRINFO(word) == -1) res = -1; } if(!res && order_by){ m_ordered = true; if (!res) { /** * Note that it is valid to have order_desc true and order_by false. * * This means that there will be no merge sort among partitions, but * each partition will still be returned in descending sort order. * * This is useful eg. if it is known that the scan spans only one * partition. */ if (order_desc) { m_descending = true; ScanTabReq * req = CAST_PTR(ScanTabReq, theSCAN_TABREQ->getDataPtrSend()); ScanTabReq::setDescendingFlag(req->requestInfo, true); } if (order_by) { m_ordered = true; Uint32 cnt = m_accessTable->getNoOfColumns() - 1; m_sort_columns = cnt; // -1 for NDB$NODE m_current_api_receiver = m_sent_receivers_count; Loading @@ -1365,6 +1376,7 @@ NdbIndexScanOperation::readTuples(LockMode lm, #endif } } } m_this_bound_start = 0; m_first_bound_word = theKEYINFOptr; Loading