summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <mskold/marty@linux.site>2007-02-06 23:42:24 +0100
committerunknown <mskold/marty@linux.site>2007-02-06 23:42:24 +0100
commitfd2c17db94e59e8b3a84c4844a95e7bd7262810e (patch)
treee55ecea94295fde0e0eea35eeca866650b41de23
parent4e2ebb9d37dff419f516d4cffb49336bafa17c63 (diff)
parentba8a684dcb8204eac3e376989bc3f680166941f9 (diff)
downloadmariadb-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.result7
-rw-r--r--mysql-test/t/ndb_read_multi_range.test9
-rw-r--r--sql/ha_ndbcluster.cc2
-rw-r--r--storage/ndb/include/ndbapi/NdbIndexScanOperation.hpp6
-rw-r--r--storage/ndb/include/ndbapi/NdbScanOperation.hpp5
-rw-r--r--storage/ndb/src/ndbapi/NdbScanOperation.cpp5
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)
{