diff options
author | unknown <mskold/marty@linux.site> | 2007-02-06 23:42:24 +0100 |
---|---|---|
committer | unknown <mskold/marty@linux.site> | 2007-02-06 23:42:24 +0100 |
commit | fd2c17db94e59e8b3a84c4844a95e7bd7262810e (patch) | |
tree | e55ecea94295fde0e0eea35eeca866650b41de23 | |
parent | 4e2ebb9d37dff419f516d4cffb49336bafa17c63 (diff) | |
parent | ba8a684dcb8204eac3e376989bc3f680166941f9 (diff) | |
download | mariadb-git-fd2c17db94e59e8b3a84c4844a95e7bd7262810e.tar.gz |
Merge mysql.com:/windows/Linux_space/MySQL/mysql-5.0
into mysql.com:/windows/Linux_space/MySQL/mysql-5.1
mysql-test/r/ndb_read_multi_range.result:
Auto merged
mysql-test/t/ndb_read_multi_range.test:
Auto merged
sql/ha_ndbcluster.cc:
Auto merged
storage/ndb/include/ndbapi/NdbIndexScanOperation.hpp:
Auto merged
storage/ndb/src/ndbapi/NdbScanOperation.cpp:
Auto merged
storage/ndb/include/ndbapi/NdbScanOperation.hpp:
SCCS merged
-rw-r--r-- | mysql-test/r/ndb_read_multi_range.result | 7 | ||||
-rw-r--r-- | mysql-test/t/ndb_read_multi_range.test | 9 | ||||
-rw-r--r-- | sql/ha_ndbcluster.cc | 2 | ||||
-rw-r--r-- | storage/ndb/include/ndbapi/NdbIndexScanOperation.hpp | 6 | ||||
-rw-r--r-- | storage/ndb/include/ndbapi/NdbScanOperation.hpp | 5 | ||||
-rw-r--r-- | storage/ndb/src/ndbapi/NdbScanOperation.cpp | 5 |
6 files changed, 28 insertions, 6 deletions
diff --git a/mysql-test/r/ndb_read_multi_range.result b/mysql-test/r/ndb_read_multi_range.result index eed76cc81f8..26e8f0a0d6f 100644 --- a/mysql-test/r/ndb_read_multi_range.result +++ b/mysql-test/r/ndb_read_multi_range.result @@ -459,3 +459,10 @@ INSERT INTO t1 VALUES (1,1),(2,2),(3,3); UPDATE t1 SET var2 = 9 WHERE var1 IN(1,2,3); DROP TRIGGER testtrigger; DROP TABLE t1, t2; +create table t2 (a int, b int, primary key (a), key ab (a,b)) engine=ndbcluster; +insert into t2 values (1,1), (10,10); +select * from t2 use index (ab) where a in(1,10) order by a; +a b +1 1 +10 10 +drop table t2; diff --git a/mysql-test/t/ndb_read_multi_range.test b/mysql-test/t/ndb_read_multi_range.test index 4d93c07f9be..f8c1f40a6e5 100644 --- a/mysql-test/t/ndb_read_multi_range.test +++ b/mysql-test/t/ndb_read_multi_range.test @@ -301,3 +301,12 @@ UPDATE t1 SET var2 = 9 WHERE var1 IN(1,2,3); DROP TRIGGER testtrigger; DROP TABLE t1, t2; + +#bug#25821 +create table t2 (a int, b int, primary key (a), key ab (a,b)) engine=ndbcluster; + +insert into t2 values (1,1), (10,10); + +select * from t2 use index (ab) where a in(1,10) order by a; + +drop table t2; diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index a9fc74e8343..18fd49b4115 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -8066,7 +8066,7 @@ ha_ndbcluster::read_multi_range_first(KEY_MULTI_RANGE **found_range_p, } else if ((scanOp= m_active_trans->getNdbIndexScanOperation(idx, tab)) &&!scanOp->readTuples(lm, 0, parallelism, sorted, - FALSE, TRUE, need_pk) + FALSE, TRUE, need_pk, TRUE) &&!generate_scan_filter(m_cond_stack, scanOp) &&!define_read_attrs(end_of_buffer-reclength, scanOp)) { diff --git a/storage/ndb/include/ndbapi/NdbIndexScanOperation.hpp b/storage/ndb/include/ndbapi/NdbIndexScanOperation.hpp index 07eea0bfbfb..38f353010a9 100644 --- a/storage/ndb/include/ndbapi/NdbIndexScanOperation.hpp +++ b/storage/ndb/include/ndbapi/NdbIndexScanOperation.hpp @@ -64,12 +64,14 @@ public: bool order_by, bool order_desc = false, bool read_range_no = false, - bool keyinfo = false) { + bool keyinfo = false, + bool multi_range = false) { Uint32 scan_flags = (SF_OrderBy & -(Int32)order_by) | (SF_Descending & -(Int32)order_desc) | (SF_ReadRangeNo & -(Int32)read_range_no) | - (SF_KeyInfo & -(Int32)keyinfo); + (SF_KeyInfo & -(Int32)keyinfo) | + (SF_MultiRange & -(Int32)multi_range); return readTuples(lock_mode, scan_flags, parallel, batch); } diff --git a/storage/ndb/include/ndbapi/NdbScanOperation.hpp b/storage/ndb/include/ndbapi/NdbScanOperation.hpp index c957e3780cc..91c3a910197 100644 --- a/storage/ndb/include/ndbapi/NdbScanOperation.hpp +++ b/storage/ndb/include/ndbapi/NdbScanOperation.hpp @@ -46,6 +46,7 @@ public: SF_OrderBy = (1 << 24), // index scan in order SF_Descending = (2 << 24), // index scan in descending order SF_ReadRangeNo = (4 << 24), // enable @ref get_range_no + SF_MultiRange = (8 << 24), // scan is part of multi-range scan SF_KeyInfo = 1 // request KeyInfo to be sent back }; @@ -72,7 +73,8 @@ public: */ #ifdef ndb_readtuples_impossible_overload int readTuples(LockMode lock_mode = LM_Read, - Uint32 batch = 0, Uint32 parallel = 0, bool keyinfo = false); + Uint32 batch = 0, Uint32 parallel = 0, + bool keyinfo = false, bool multi_range); #endif inline int readTuples(int parallell){ @@ -264,6 +266,7 @@ protected: bool m_descending; Uint32 m_read_range_no; NdbRecAttr *m_curr_row; // Pointer to last returned row + bool m_multi_range; // Mark if operation is part of multi-range scan bool m_executed; // Marker if operation should be released at close }; diff --git a/storage/ndb/src/ndbapi/NdbScanOperation.cpp b/storage/ndb/src/ndbapi/NdbScanOperation.cpp index 9b26ba6f0ab..1575a1bc19e 100644 --- a/storage/ndb/src/ndbapi/NdbScanOperation.cpp +++ b/storage/ndb/src/ndbapi/NdbScanOperation.cpp @@ -1219,7 +1219,7 @@ NdbIndexScanOperation::setBound(const NdbColumnImpl* tAttrInfo, * so it's safe to use [tIndexAttrId] * (instead of looping as is NdbOperation::equal_impl) */ - if(type == BoundEQ && tDistrKey) + if(type == BoundEQ && tDistrKey && !m_multi_range) { theNoOfTupKeyLeft--; return handle_distribution_key((Uint64*)aValue, sizeInWords); @@ -1305,7 +1305,8 @@ NdbIndexScanOperation::readTuples(LockMode lm, const bool order_by = scan_flags & SF_OrderBy; const bool order_desc = scan_flags & SF_Descending; const bool read_range_no = scan_flags & SF_ReadRangeNo; - + m_multi_range = scan_flags & SF_MultiRange; + int res = NdbScanOperation::readTuples(lm, scan_flags, parallel, batch); if(!res && read_range_no) { |