diff options
author | unknown <mskold/marty@mysql.com/linux.site> | 2007-02-07 11:36:34 +0100 |
---|---|---|
committer | unknown <mskold/marty@mysql.com/linux.site> | 2007-02-07 11:36:34 +0100 |
commit | c8f470eaa6e09f674f1d5fe17a7bb5e582431055 (patch) | |
tree | fdaacca593dda8e2077afd8aba9d36491637a5db | |
parent | f3463a8c8299deb484884823dd38d6f3cd0e1937 (diff) | |
download | mariadb-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.hpp | 3 | ||||
-rw-r--r-- | ndb/src/ndbapi/NdbScanOperation.cpp | 10 | ||||
-rw-r--r-- | sql/ha_ndbcluster.cc | 6 | ||||
-rw-r--r-- | sql/ha_ndbcluster.h | 1 |
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); |