Browse Source

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
pull/374/head
unknown 19 years ago
parent
commit
c8f470eaa6
  1. 3
      ndb/include/ndbapi/NdbScanOperation.hpp
  2. 10
      ndb/src/ndbapi/NdbScanOperation.cpp
  3. 6
      sql/ha_ndbcluster.cc
  4. 1
      sql/ha_ndbcluster.h

3
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

10
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

6
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));
}
/*

1
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);

Loading…
Cancel
Save