summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <mskold/marty@mysql.com/linux.site>2007-02-07 11:36:34 +0100
committerunknown <mskold/marty@mysql.com/linux.site>2007-02-07 11:36:34 +0100
commitc8f470eaa6e09f674f1d5fe17a7bb5e582431055 (patch)
treefdaacca593dda8e2077afd8aba9d36491637a5db
parentf3463a8c8299deb484884823dd38d6f3cd0e1937 (diff)
downloadmariadb-git-c8f470eaa6e09f674f1d5fe17a7bb5e582431055.tar.gz
NdbScanOperation.hpp, NdbScanOperation.cpp, ha_ndbcluster.cc:
bug#25821 Excessive partition pruning for multi-range index scan in NDB API: added multi_range error checking in end_of_bound ha_ndbcluster.h: Removed stray mthod declaration sql/ha_ndbcluster.h: Removed stray mthod declaration ndb/include/ndbapi/NdbScanOperation.hpp: bug#25821 Excessive partition pruning for multi-range index scan in NDB API: added multi_range error checking in end_of_bound ndb/src/ndbapi/NdbScanOperation.cpp: bug#25821 Excessive partition pruning for multi-range index scan in NDB API: added multi_range error checking in end_of_bound sql/ha_ndbcluster.cc: bug#25821 Excessive partition pruning for multi-range index scan in NDB API: added multi_range error checking in end_of_bound
-rw-r--r--ndb/include/ndbapi/NdbScanOperation.hpp3
-rw-r--r--ndb/src/ndbapi/NdbScanOperation.cpp10
-rw-r--r--sql/ha_ndbcluster.cc6
-rw-r--r--sql/ha_ndbcluster.h1
4 files changed, 12 insertions, 8 deletions
diff --git a/ndb/include/ndbapi/NdbScanOperation.hpp b/ndb/include/ndbapi/NdbScanOperation.hpp
index d1af4732525..88f96c88031 100644
--- a/ndb/include/ndbapi/NdbScanOperation.hpp
+++ b/ndb/include/ndbapi/NdbScanOperation.hpp
@@ -38,7 +38,8 @@ class NdbScanOperation : public NdbOperation {
public:
/**
* Scan flags. OR-ed together and passed as second argument to
- * readTuples.
+ * readTuples. Note that SF_MultiRange has to be set if several
+ * ranges (bounds) are to be passed.
*/
enum ScanFlag {
SF_TupScan = (1 << 16), // scan TUP
diff --git a/ndb/src/ndbapi/NdbScanOperation.cpp b/ndb/src/ndbapi/NdbScanOperation.cpp
index bccf391acef..e30e9cb66e9 100644
--- a/ndb/src/ndbapi/NdbScanOperation.cpp
+++ b/ndb/src/ndbapi/NdbScanOperation.cpp
@@ -1718,6 +1718,12 @@ NdbIndexScanOperation::reset_bounds(bool forceSend){
int
NdbIndexScanOperation::end_of_bound(Uint32 no)
{
+ DBUG_ENTER("end_of_bound");
+ DBUG_PRINT("info", ("Range number %u", no));
+ /* Check that SF_MultiRange has been specified if more
+ than one range is specified */
+ if (no > 0 && !m_multi_range)
+ DBUG_RETURN(-1);
if(no < (1 << 13)) // Only 12-bits no of ranges
{
Uint32 bound_head = * m_first_bound_word;
@@ -1726,9 +1732,9 @@ NdbIndexScanOperation::end_of_bound(Uint32 no)
m_first_bound_word = theKEYINFOptr + theTotalNrOfKeyWordInSignal;;
m_this_bound_start = theTupKeyLen;
- return 0;
+ DBUG_RETURN(0);
}
- return -1;
+ DBUG_RETURN(-1);
}
int
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc
index f53e1673a16..514d4b83a04 100644
--- a/sql/ha_ndbcluster.cc
+++ b/sql/ha_ndbcluster.cc
@@ -1996,8 +1996,7 @@ int ha_ndbcluster::set_bounds(NdbIndexScanOperation *op,
DBUG_PRINT("error", ("key %d unknown flag %d", j, p.key->flag));
DBUG_ASSERT(FALSE);
// Stop setting bounds but continue with what we have
- op->end_of_bound(range_no);
- DBUG_RETURN(0);
+ DBUG_RETURN(op->end_of_bound(range_no));
}
}
}
@@ -2044,8 +2043,7 @@ int ha_ndbcluster::set_bounds(NdbIndexScanOperation *op,
tot_len+= part_store_len;
}
- op->end_of_bound(range_no);
- DBUG_RETURN(0);
+ DBUG_RETURN(op->end_of_bound(range_no));
}
/*
diff --git a/sql/ha_ndbcluster.h b/sql/ha_ndbcluster.h
index eeca67d506a..5d66a7920f9 100644
--- a/sql/ha_ndbcluster.h
+++ b/sql/ha_ndbcluster.h
@@ -661,7 +661,6 @@ private:
const NdbOperation *first,
const NdbOperation *last,
uint errcode);
- bool key_fields_not_in_write_set(THD *thd, const KEY* key_info);
int peek_indexed_rows(const byte *record, bool check_pk);
int unique_index_read(const byte *key, uint key_len,
byte *buf);