Commit a82f6781 authored by unknown's avatar unknown

ndb - bug#20446: test case and cleanups (not fix)


ndb/test/ndbapi/testOIBasic.cpp:
  test -case h for parallel ordered update (bug#20446)
ndb/test/run-test/daily-basic-tests.txt:
  test -case h for parallel ordered update (bug#20446)
ndb/src/kernel/blocks/dbtux/Dbtux.hpp:
  remove stupid Data abstraction which is not completely transparent
ndb/src/kernel/blocks/dbtux/DbtuxCmp.cpp:
  remove stupid Data abstraction which is not completely transparent
ndb/src/kernel/blocks/dbtux/DbtuxGen.cpp:
  remove stupid Data abstraction which is not completely transparent
parent 81526834
...@@ -121,41 +121,17 @@ private: ...@@ -121,41 +121,17 @@ private:
// forward declarations // forward declarations
struct DescEnt; struct DescEnt;
/* // Pointer to array of Uint32 represents attribute data and bounds
* Pointer to array of Uint32.
*/
struct Data {
private:
Uint32* m_data;
public:
Data();
Data(Uint32* data);
Data& operator=(Uint32* data);
operator Uint32*() const;
Data& operator+=(size_t n);
AttributeHeader& ah() const;
};
friend class Data;
/* typedef Uint32 *Data;
* Pointer to array of constant Uint32. inline AttributeHeader& ah(Data data) {
*/ return *reinterpret_cast<AttributeHeader*>(data);
struct ConstData; }
friend struct ConstData;
struct ConstData { typedef const Uint32* ConstData;
private: inline const AttributeHeader& ah(ConstData data) {
const Uint32* m_data; return *reinterpret_cast<const AttributeHeader*>(data);
public: }
ConstData();
ConstData(const Uint32* data);
ConstData& operator=(const Uint32* data);
operator const Uint32*() const;
ConstData& operator+=(size_t n);
const AttributeHeader& ah() const;
// non-const pointer can be cast to const pointer
ConstData(Data data);
ConstData& operator=(Data data);
};
// AttributeHeader size is assumed to be 1 word // AttributeHeader size is assumed to be 1 word
STATIC_CONST( AttributeHeaderSize = 1 ); STATIC_CONST( AttributeHeaderSize = 1 );
...@@ -737,99 +713,6 @@ private: ...@@ -737,99 +713,6 @@ private:
static unsigned max(unsigned x, unsigned y); static unsigned max(unsigned x, unsigned y);
}; };
// Dbtux::Data
inline
Dbtux::Data::Data() :
m_data(0)
{
}
inline
Dbtux::Data::Data(Uint32* data) :
m_data(data)
{
}
inline Dbtux::Data&
Dbtux::Data::operator=(Uint32* data)
{
m_data = data;
return *this;
}
inline
Dbtux::Data::operator Uint32*() const
{
return m_data;
}
inline Dbtux::Data&
Dbtux::Data::operator+=(size_t n)
{
m_data += n;
return *this;
}
inline AttributeHeader&
Dbtux::Data::ah() const
{
return *reinterpret_cast<AttributeHeader*>(m_data);
}
// Dbtux::ConstData
inline
Dbtux::ConstData::ConstData() :
m_data(0)
{
}
inline
Dbtux::ConstData::ConstData(const Uint32* data) :
m_data(data)
{
}
inline Dbtux::ConstData&
Dbtux::ConstData::operator=(const Uint32* data)
{
m_data = data;
return *this;
}
inline
Dbtux::ConstData::operator const Uint32*() const
{
return m_data;
}
inline Dbtux::ConstData&
Dbtux::ConstData::operator+=(size_t n)
{
m_data += n;
return *this;
}
inline const AttributeHeader&
Dbtux::ConstData::ah() const
{
return *reinterpret_cast<const AttributeHeader*>(m_data);
}
inline
Dbtux::ConstData::ConstData(Data data) :
m_data(static_cast<Uint32*>(data))
{
}
inline Dbtux::ConstData&
Dbtux::ConstData::operator=(Data data)
{
m_data = static_cast<Uint32*>(data);
return *this;
}
// Dbtux::TupLoc // Dbtux::TupLoc
inline inline
......
...@@ -34,7 +34,7 @@ Dbtux::cmpSearchKey(const Frag& frag, unsigned& start, ConstData searchKey, Cons ...@@ -34,7 +34,7 @@ Dbtux::cmpSearchKey(const Frag& frag, unsigned& start, ConstData searchKey, Cons
// skip to right position in search key only // skip to right position in search key only
for (unsigned i = 0; i < start; i++) { for (unsigned i = 0; i < start; i++) {
jam(); jam();
searchKey += AttributeHeaderSize + searchKey.ah().getDataSize(); searchKey += AttributeHeaderSize + ah(searchKey).getDataSize();
} }
// number of words of entry data left // number of words of entry data left
unsigned len2 = maxlen; unsigned len2 = maxlen;
...@@ -46,16 +46,16 @@ Dbtux::cmpSearchKey(const Frag& frag, unsigned& start, ConstData searchKey, Cons ...@@ -46,16 +46,16 @@ Dbtux::cmpSearchKey(const Frag& frag, unsigned& start, ConstData searchKey, Cons
break; break;
} }
len2 -= AttributeHeaderSize; len2 -= AttributeHeaderSize;
if (! searchKey.ah().isNULL()) { if (! ah(searchKey).isNULL()) {
if (! entryData.ah().isNULL()) { if (! ah(entryData).isNULL()) {
jam(); jam();
// verify attribute id // verify attribute id
const DescAttr& descAttr = descEnt.m_descAttr[start]; const DescAttr& descAttr = descEnt.m_descAttr[start];
ndbrequire(searchKey.ah().getAttributeId() == descAttr.m_primaryAttrId); ndbrequire(ah(searchKey).getAttributeId() == descAttr.m_primaryAttrId);
ndbrequire(entryData.ah().getAttributeId() == descAttr.m_primaryAttrId); ndbrequire(ah(entryData).getAttributeId() == descAttr.m_primaryAttrId);
// sizes // sizes
const unsigned size1 = searchKey.ah().getDataSize(); const unsigned size1 = ah(searchKey).getDataSize();
const unsigned size2 = min(entryData.ah().getDataSize(), len2); const unsigned size2 = min(ah(entryData).getDataSize(), len2);
len2 -= size2; len2 -= size2;
// compare // compare
NdbSqlUtil::Cmp* const cmp = c_sqlCmp[start]; NdbSqlUtil::Cmp* const cmp = c_sqlCmp[start];
...@@ -74,15 +74,15 @@ Dbtux::cmpSearchKey(const Frag& frag, unsigned& start, ConstData searchKey, Cons ...@@ -74,15 +74,15 @@ Dbtux::cmpSearchKey(const Frag& frag, unsigned& start, ConstData searchKey, Cons
break; break;
} }
} else { } else {
if (! entryData.ah().isNULL()) { if (! ah(entryData).isNULL()) {
jam(); jam();
// NULL < not NULL // NULL < not NULL
ret = -1; ret = -1;
break; break;
} }
} }
searchKey += AttributeHeaderSize + searchKey.ah().getDataSize(); searchKey += AttributeHeaderSize + ah(searchKey).getDataSize();
entryData += AttributeHeaderSize + entryData.ah().getDataSize(); entryData += AttributeHeaderSize + ah(entryData).getDataSize();
start++; start++;
} }
return ret; return ret;
...@@ -130,17 +130,17 @@ Dbtux::cmpScanBound(const Frag& frag, unsigned idir, ConstData boundInfo, unsign ...@@ -130,17 +130,17 @@ Dbtux::cmpScanBound(const Frag& frag, unsigned idir, ConstData boundInfo, unsign
// get and skip bound type (it is used after the loop) // get and skip bound type (it is used after the loop)
type = boundInfo[0]; type = boundInfo[0];
boundInfo += 1; boundInfo += 1;
if (! boundInfo.ah().isNULL()) { if (! ah(boundInfo).isNULL()) {
if (! entryData.ah().isNULL()) { if (! ah(entryData).isNULL()) {
jam(); jam();
// verify attribute id // verify attribute id
const Uint32 index = boundInfo.ah().getAttributeId(); const Uint32 index = ah(boundInfo).getAttributeId();
ndbrequire(index < frag.m_numAttrs); ndbrequire(index < frag.m_numAttrs);
const DescAttr& descAttr = descEnt.m_descAttr[index]; const DescAttr& descAttr = descEnt.m_descAttr[index];
ndbrequire(entryData.ah().getAttributeId() == descAttr.m_primaryAttrId); ndbrequire(ah(entryData).getAttributeId() == descAttr.m_primaryAttrId);
// sizes // sizes
const unsigned size1 = boundInfo.ah().getDataSize(); const unsigned size1 = ah(boundInfo).getDataSize();
const unsigned size2 = min(entryData.ah().getDataSize(), len2); const unsigned size2 = min(ah(entryData).getDataSize(), len2);
len2 -= size2; len2 -= size2;
// compare // compare
NdbSqlUtil::Cmp* const cmp = c_sqlCmp[index]; NdbSqlUtil::Cmp* const cmp = c_sqlCmp[index];
...@@ -159,14 +159,14 @@ Dbtux::cmpScanBound(const Frag& frag, unsigned idir, ConstData boundInfo, unsign ...@@ -159,14 +159,14 @@ Dbtux::cmpScanBound(const Frag& frag, unsigned idir, ConstData boundInfo, unsign
} }
} else { } else {
jam(); jam();
if (! entryData.ah().isNULL()) { if (! ah(entryData).isNULL()) {
jam(); jam();
// NULL < not NULL // NULL < not NULL
return -1; return -1;
} }
} }
boundInfo += AttributeHeaderSize + boundInfo.ah().getDataSize(); boundInfo += AttributeHeaderSize + ah(boundInfo).getDataSize();
entryData += AttributeHeaderSize + entryData.ah().getDataSize(); entryData += AttributeHeaderSize + ah(entryData).getDataSize();
boundCount -= 1; boundCount -= 1;
} }
// all attributes were equal // all attributes were equal
......
...@@ -221,7 +221,7 @@ Dbtux::setKeyAttrs(const Frag& frag) ...@@ -221,7 +221,7 @@ Dbtux::setKeyAttrs(const Frag& frag)
const DescAttr& descAttr = descEnt.m_descAttr[i]; const DescAttr& descAttr = descEnt.m_descAttr[i];
Uint32 size = AttributeDescriptor::getSizeInWords(descAttr.m_attrDesc); Uint32 size = AttributeDescriptor::getSizeInWords(descAttr.m_attrDesc);
// set attr id and fixed size // set attr id and fixed size
keyAttrs.ah() = AttributeHeader(descAttr.m_primaryAttrId, size); ah(keyAttrs) = AttributeHeader(descAttr.m_primaryAttrId, size);
keyAttrs += 1; keyAttrs += 1;
// set comparison method pointer // set comparison method pointer
const NdbSqlUtil::Type& sqlType = NdbSqlUtil::getTypeBinary(descAttr.m_typeId); const NdbSqlUtil::Type& sqlType = NdbSqlUtil::getTypeBinary(descAttr.m_typeId);
...@@ -251,8 +251,8 @@ Dbtux::readKeyAttrs(const Frag& frag, TreeEnt ent, unsigned start, Data keyData) ...@@ -251,8 +251,8 @@ Dbtux::readKeyAttrs(const Frag& frag, TreeEnt ent, unsigned start, Data keyData)
ConstData data = keyData; ConstData data = keyData;
Uint32 totalSize = 0; Uint32 totalSize = 0;
for (Uint32 i = start; i < frag.m_numAttrs; i++) { for (Uint32 i = start; i < frag.m_numAttrs; i++) {
Uint32 attrId = data.ah().getAttributeId(); Uint32 attrId = ah(data).getAttributeId();
Uint32 dataSize = data.ah().getDataSize(); Uint32 dataSize = ah(data).getDataSize();
debugOut << i << " attrId=" << attrId << " size=" << dataSize; debugOut << i << " attrId=" << attrId << " size=" << dataSize;
data += 1; data += 1;
for (Uint32 j = 0; j < dataSize; j++) { for (Uint32 j = 0; j < dataSize; j++) {
...@@ -290,7 +290,7 @@ Dbtux::copyAttrs(const Frag& frag, ConstData data1, Data data2, unsigned maxlen2 ...@@ -290,7 +290,7 @@ Dbtux::copyAttrs(const Frag& frag, ConstData data1, Data data2, unsigned maxlen2
unsigned len2 = maxlen2; unsigned len2 = maxlen2;
while (n != 0) { while (n != 0) {
jam(); jam();
const unsigned dataSize = data1.ah().getDataSize(); const unsigned dataSize = ah(data1).getDataSize();
// copy header // copy header
if (len2 == 0) if (len2 == 0)
return; return;
......
This diff is collapsed.
...@@ -607,7 +607,15 @@ args: ...@@ -607,7 +607,15 @@ args:
max-time: 5000 max-time: 5000
cmd: testOIBasic cmd: testOIBasic
args: args: -case abcdefz
max-time: 2000
cmd: testOIBasic
args: -case gz
max-time: 2000
cmd: testOIBasic
args: -case hz
max-time: 2500 max-time: 2500
cmd: testBitfield cmd: testBitfield
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment