diff options
author | unknown <joreland@mysql.com> | 2004-12-09 16:19:24 +0100 |
---|---|---|
committer | unknown <joreland@mysql.com> | 2004-12-09 16:19:24 +0100 |
commit | 4cf675a21d5210f62a7907f464a06406e33468ba (patch) | |
tree | d9ef04dc36abf7977389f7b36d8332809e0a8b69 /ndb | |
parent | a67ee81ebd638025194fa8a980e2768c2e584689 (diff) | |
download | mariadb-git-4cf675a21d5210f62a7907f464a06406e33468ba.tar.gz |
ndb - Fix printout/bugs for bit column
ndb/include/kernel/AttributeHeader.hpp:
Add pseudo column for row size
ndb/include/ndbapi/NdbDictionary.hpp:
Add pseudo column for row size
ndb/include/util/Bitmask.hpp:
Remove assert which was not needed
ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp:
Missing break
ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp:
1) New pseudo column ROW_SIZE
2) Fix bug in Bit columns
ndb/src/ndbapi/NdbDictionary.cpp:
Fix prinout of bit column
ndb/src/ndbapi/NdbDictionaryImpl.cpp:
Bug fix Bit column
ndb/src/ndbapi/NdbRecAttr.cpp:
Fix prinout of bit column
ndb/test/src/HugoCalculator.cpp:
Bit enable Hugo
ndb/test/src/HugoOperations.cpp:
Bit enable Hugo
ndb/test/src/NDBT_Tables.cpp:
Bit enable Hugo
Diffstat (limited to 'ndb')
-rw-r--r-- | ndb/include/kernel/AttributeHeader.hpp | 2 | ||||
-rw-r--r-- | ndb/include/ndbapi/NdbDictionary.hpp | 1 | ||||
-rw-r--r-- | ndb/include/util/Bitmask.hpp | 2 | ||||
-rw-r--r-- | ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp | 1 | ||||
-rw-r--r-- | ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp | 46 | ||||
-rw-r--r-- | ndb/src/ndbapi/NdbDictionary.cpp | 5 | ||||
-rw-r--r-- | ndb/src/ndbapi/NdbDictionaryImpl.cpp | 11 | ||||
-rw-r--r-- | ndb/src/ndbapi/NdbRecAttr.cpp | 3 | ||||
-rw-r--r-- | ndb/test/src/HugoCalculator.cpp | 32 | ||||
-rw-r--r-- | ndb/test/src/HugoOperations.cpp | 14 | ||||
-rw-r--r-- | ndb/test/src/NDBT_Tables.cpp | 2 |
11 files changed, 57 insertions, 62 deletions
diff --git a/ndb/include/kernel/AttributeHeader.hpp b/ndb/include/kernel/AttributeHeader.hpp index b807b4ef4f1..035b31f14e0 100644 --- a/ndb/include/kernel/AttributeHeader.hpp +++ b/ndb/include/kernel/AttributeHeader.hpp @@ -38,6 +38,8 @@ public: STATIC_CONST( ROW_COUNT = 0xFFFD ); STATIC_CONST( COMMIT_COUNT = 0xFFFC ); + STATIC_CONST( ROW_SIZE = 0xFFFA ); + /** Initialize AttributeHeader at location aHeaderPtr */ static AttributeHeader& init(void* aHeaderPtr, Uint32 anAttributeId, Uint32 aDataSize); diff --git a/ndb/include/ndbapi/NdbDictionary.hpp b/ndb/include/ndbapi/NdbDictionary.hpp index 3efedbfcda7..5f855ac06de 100644 --- a/ndb/include/ndbapi/NdbDictionary.hpp +++ b/ndb/include/ndbapi/NdbDictionary.hpp @@ -388,6 +388,7 @@ public: static const Column * FRAGMENT; static const Column * ROW_COUNT; static const Column * COMMIT_COUNT; + static const Column * ROW_SIZE; #endif private: diff --git a/ndb/include/util/Bitmask.hpp b/ndb/include/util/Bitmask.hpp index 2cd95190ed7..a88c48b4cb3 100644 --- a/ndb/include/util/Bitmask.hpp +++ b/ndb/include/util/Bitmask.hpp @@ -814,7 +814,6 @@ inline void BitmaskImpl::getField(unsigned size, const Uint32 src[], unsigned pos, unsigned len, Uint32 dst[]) { - assert(len > 0); assert(pos + len < (size << 5)); src += (pos >> 5); @@ -834,7 +833,6 @@ inline void BitmaskImpl::setField(unsigned size, Uint32 dst[], unsigned pos, unsigned len, const Uint32 src[]) { - assert(len > 0); assert(pos + len < (size << 5)); dst += (pos >> 5); diff --git a/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp b/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp index fc27cca9cda..943f1ab02c4 100644 --- a/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp +++ b/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp @@ -344,6 +344,7 @@ void Dbtup::execTUP_ADD_ATTRREQ(Signal* signal) ljam(); Uint32 bitCount = AttributeDescriptor::getArraySize(attrDescriptor); fragOperPtr.p->currNullBit += bitCount; + break; } } default: diff --git a/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp b/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp index 4c872e62cef..fc0982d96b8 100644 --- a/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp +++ b/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp @@ -1000,11 +1000,14 @@ Dbtup::read_psuedo(Uint32 attrId, Uint32* outBuffer){ case AttributeHeader::FRAGMENT: * outBuffer = operPtr.p->fragId >> 1; // remove "hash" bit return 1; + case AttributeHeader::ROW_SIZE: + * outBuffer = tabptr.p->tupheadsize << 2; + return 1; case AttributeHeader::ROW_COUNT: case AttributeHeader::COMMIT_COUNT: signal->theData[0] = operPtr.p->userpointer; signal->theData[1] = attrId; - + EXECUTE_DIRECT(DBLQH, GSN_READ_PSUEDO_REQ, signal, 2); outBuffer[0] = signal->theData[0]; outBuffer[1] = signal->theData[1]; @@ -1021,14 +1024,8 @@ Dbtup::readBitsNotNULL(Uint32* outBuffer, Uint32 attrDes2) { Tablerec* const regTabPtr = tabptr.p; + Uint32 pos = AttributeOffset::getNullFlagPos(attrDes2); Uint32 bitCount = AttributeDescriptor::getArraySize(attrDescriptor); - Uint32 offsetInTuple = AttributeOffset::getNullFlagOffset(attrDes2); - Uint32 offsetInWord = AttributeOffset::getNullFlagBitOffset(attrDes2); - ndbrequire(offsetInTuple < regTabPtr->tupNullWords); - offsetInTuple += regTabPtr->tupNullIndex; - ndbrequire(offsetInTuple < tCheckOffset); - - Uint32 pos = offsetInTuple << 5 + offsetInWord; Uint32 indexBuf = tOutBufIndex; Uint32 newIndexBuf = indexBuf + ((bitCount + 31) >> 5); Uint32 maxRead = tMaxRead; @@ -1059,17 +1056,12 @@ Dbtup::readBitsNULLable(Uint32* outBuffer, Uint32 attrDes2) { Tablerec* const regTabPtr = tabptr.p; + Uint32 pos = AttributeOffset::getNullFlagPos(attrDes2); Uint32 bitCount = AttributeDescriptor::getArraySize(attrDescriptor); - Uint32 offsetInTuple = AttributeOffset::getNullFlagOffset(attrDes2); - Uint32 offsetInWord = AttributeOffset::getNullFlagBitOffset(attrDes2); - ndbrequire(offsetInTuple < regTabPtr->tupNullWords); - offsetInTuple += regTabPtr->tupNullIndex; - ndbrequire(offsetInTuple < tCheckOffset); - + Uint32 indexBuf = tOutBufIndex; - Uint32 newIndexBuf = indexBuf + (bitCount + 31) >> 5; + Uint32 newIndexBuf = indexBuf + ((bitCount + 31) >> 5); Uint32 maxRead = tMaxRead; - Uint32 pos = offsetInWord << 5 + offsetInTuple; if(BitmaskImpl::get(regTabPtr->tupNullWords, tTupleHeader+regTabPtr->tupNullIndex, @@ -1108,15 +1100,9 @@ Dbtup::updateBitsNotNULL(Uint32* inBuffer, Uint32 inBufLen = tInBufLen; AttributeHeader ahIn(inBuffer[indexBuf]); Uint32 nullIndicator = ahIn.isNULL(); + Uint32 pos = AttributeOffset::getNullFlagPos(attrDes2); Uint32 bitCount = AttributeDescriptor::getArraySize(attrDescriptor); Uint32 newIndex = indexBuf + 1 + ((bitCount + 31) >> 5); - Uint32 nullFlagOffset = AttributeOffset::getNullFlagOffset(attrDes2); - Uint32 nullFlagBitOffset = AttributeOffset::getNullFlagBitOffset(attrDes2); - Uint32 nullWordOffset = nullFlagOffset + regTabPtr->tupNullIndex; - ndbrequire((nullFlagOffset < regTabPtr->tupNullWords) && - (nullWordOffset < tCheckOffset)); - Uint32 nullBits = tTupleHeader[nullWordOffset]; - Uint32 pos = (nullFlagOffset << 5) + nullFlagBitOffset; if (newIndex <= inBufLen) { if (!nullIndicator) { @@ -1149,15 +1135,9 @@ Dbtup::updateBitsNULLable(Uint32* inBuffer, AttributeHeader ahIn(inBuffer[tInBufIndex]); Uint32 indexBuf = tInBufIndex; Uint32 nullIndicator = ahIn.isNULL(); - Uint32 nullFlagOffset = AttributeOffset::getNullFlagOffset(attrDes2); - Uint32 nullFlagBitOffset = AttributeOffset::getNullFlagBitOffset(attrDes2); - Uint32 nullWordOffset = nullFlagOffset + regTabPtr->tupNullIndex; - ndbrequire((nullFlagOffset < regTabPtr->tupNullWords) && - (nullWordOffset < tCheckOffset)); - Uint32 nullBits = tTupleHeader[nullWordOffset]; - Uint32 bitCount = AttributeDescriptor::getArraySize(attrDescriptor); - Uint32 pos = (nullFlagOffset << 5) + nullFlagBitOffset; - + Uint32 pos = AttributeOffset::getNullFlagPos(attrDes2); + Uint32 bitCount = AttributeDescriptor::getArraySize(attrDescriptor); + if (!nullIndicator) { BitmaskImpl::clear(regTabPtr->tupNullWords, tTupleHeader+regTabPtr->tupNullIndex, @@ -1167,7 +1147,7 @@ Dbtup::updateBitsNULLable(Uint32* inBuffer, pos+1, bitCount, inBuffer+indexBuf+1); - + Uint32 newIndex = indexBuf + 1 + ((bitCount + 31) >> 5); tInBufLen = newIndex; return true; diff --git a/ndb/src/ndbapi/NdbDictionary.cpp b/ndb/src/ndbapi/NdbDictionary.cpp index 462f04acb88..6916eaf4ee0 100644 --- a/ndb/src/ndbapi/NdbDictionary.cpp +++ b/ndb/src/ndbapi/NdbDictionary.cpp @@ -922,6 +922,9 @@ operator<<(NdbOut& out, const NdbDictionary::Column& col) case NdbDictionary::Column::Undefined: out << "Undefined"; break; + case NdbDictionary::Column::Bit: + out << "Bit(" << col.getLength() << ")"; + break; default: out << "Type" << (Uint32)col.getType(); break; @@ -942,4 +945,4 @@ operator<<(NdbOut& out, const NdbDictionary::Column& col) const NdbDictionary::Column * NdbDictionary::Column::FRAGMENT = 0; const NdbDictionary::Column * NdbDictionary::Column::ROW_COUNT = 0; const NdbDictionary::Column * NdbDictionary::Column::COMMIT_COUNT = 0; - +const NdbDictionary::Column * NdbDictionary::Column::ROW_SIZE = 0; diff --git a/ndb/src/ndbapi/NdbDictionaryImpl.cpp b/ndb/src/ndbapi/NdbDictionaryImpl.cpp index 37dea73838f..b066469bb9e 100644 --- a/ndb/src/ndbapi/NdbDictionaryImpl.cpp +++ b/ndb/src/ndbapi/NdbDictionaryImpl.cpp @@ -218,6 +218,11 @@ NdbColumnImpl::create_psuedo(const char * name){ col->m_impl.m_attrId = AttributeHeader::COMMIT_COUNT; col->m_impl.m_attrSize = 8; col->m_impl.m_arraySize = 1; + } else if(!strcmp(name, "NDB$ROW_SIZE")){ + col->setType(NdbDictionary::Column::Unsigned); + col->m_impl.m_attrId = AttributeHeader::ROW_SIZE; + col->m_impl.m_attrSize = 4; + col->m_impl.m_arraySize = 1; } else { abort(); } @@ -1157,6 +1162,7 @@ columnTypeMapping[] = { { DictTabInfo::ExtTimespec, NdbDictionary::Column::Timespec }, { DictTabInfo::ExtBlob, NdbDictionary::Column::Blob }, { DictTabInfo::ExtText, NdbDictionary::Column::Text }, + { DictTabInfo::ExtBit, NdbDictionary::Column::Bit }, { -1, -1 } }; @@ -1266,6 +1272,11 @@ NdbDictInterface::parseTableInfo(NdbTableImpl ** ret, col->m_attrType =attrDesc.AttributeType; col->m_attrSize = (1 << attrDesc.AttributeSize) / 8; col->m_arraySize = attrDesc.AttributeArraySize; + if(attrDesc.AttributeSize == 0) + { + col->m_attrSize = 4; + col->m_arraySize = (attrDesc.AttributeArraySize + 31) >> 5; + } col->m_pk = attrDesc.AttributeKeyFlag; col->m_distributionKey = attrDesc.AttributeDKey; diff --git a/ndb/src/ndbapi/NdbRecAttr.cpp b/ndb/src/ndbapi/NdbRecAttr.cpp index bcd91292fcd..e6e97ab60b1 100644 --- a/ndb/src/ndbapi/NdbRecAttr.cpp +++ b/ndb/src/ndbapi/NdbRecAttr.cpp @@ -169,6 +169,9 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r) case NdbDictionary::Column::Bigunsigned: out << r.u_64_value(); break; + case NdbDictionary::Column::Bit: + out << hex << "H'" << r.u_32_value() << dec; + break; case NdbDictionary::Column::Unsigned: out << r.u_32_value(); break; diff --git a/ndb/test/src/HugoCalculator.cpp b/ndb/test/src/HugoCalculator.cpp index 62c35c54a7a..7ae6985a840 100644 --- a/ndb/test/src/HugoCalculator.cpp +++ b/ndb/test/src/HugoCalculator.cpp @@ -137,13 +137,16 @@ HugoCalculator::verifyRowValues(NDBT_ResultRow* const pRow) const{ if (i != m_updatesCol && id != m_idCol) { const NdbDictionary::Column* attr = m_tab.getColumn(i); + Uint32 len = attr->getLength(); switch (attr->getType()){ + case NdbDictionary::Column::Bit: + len = 4 * ((len + 31) >> 5); case NdbDictionary::Column::Char: case NdbDictionary::Column::Varchar: case NdbDictionary::Column::Binary: case NdbDictionary::Column::Varbinary:{ int result = 0; - char* buf = new char[attr->getLength()+1]; + char* buf = new char[len+1]; const char* res = calcValue(id, i, updates, buf); if (res == NULL){ if (!pRow->attributeStore(i)->isNULL()){ @@ -171,17 +174,16 @@ HugoCalculator::verifyRowValues(NDBT_ResultRow* const pRow) const{ g_err << endl; g_err << "|- Invalid data found in attribute " << i << ": \"" << pRow->attributeStore(i)->aRef() - << "\" != \"" << res << "\"" << endl - << "Length of expected=" << (unsigned)strlen(res) << endl - << "Lenght of read=" - << (unsigned)strlen(pRow->attributeStore(i)->aRef()) << endl; + << "\" != \"" << res << "\"" << endl + << "Length of expected=" << (unsigned)strlen(res) << endl + << "Lenght of read=" + << (unsigned)strlen(pRow->attributeStore(i)->aRef()) << endl; g_err << "|- The row: \"" << (* pRow) << "\"" << endl; result = -1; } } delete []buf; - if (result != 0) - return result; + return result; } break; case NdbDictionary::Column::Int: @@ -190,11 +192,11 @@ HugoCalculator::verifyRowValues(NDBT_ResultRow* const pRow) const{ Int32 val = pRow->attributeStore(i)->int32_value(); if (val != cval){ g_err << "|- Invalid data found: \"" << val << "\" != \"" - << cval << "\"" << endl; + << cval << "\"" << endl; g_err << "|- The row: \"" << (* pRow) << "\"" << endl; return -1; } - break; + return 0; } case NdbDictionary::Column::Bigint: case NdbDictionary::Column::Bigunsigned:{ @@ -202,11 +204,12 @@ HugoCalculator::verifyRowValues(NDBT_ResultRow* const pRow) const{ Uint64 val = pRow->attributeStore(i)->u_64_value(); if (val != cval){ g_err << "|- Invalid data found: \"" << val << "\" != \"" - << cval << "\"" - << endl; + << cval << "\"" + << endl; g_err << "|- The row: \"" << (* pRow) << "\"" << endl; return -1; } + return 0; } break; case NdbDictionary::Column::Float:{ @@ -218,17 +221,16 @@ HugoCalculator::verifyRowValues(NDBT_ResultRow* const pRow) const{ g_err << "|- The row: \"" << (* pRow) << "\"" << endl; return -1; } + return 0; } break; case NdbDictionary::Column::Undefined: - default: - assert(false); break; } - } } - return 0; + assert(0); + return -1; } int diff --git a/ndb/test/src/HugoOperations.cpp b/ndb/test/src/HugoOperations.cpp index d3da8ae4ba2..546f0107499 100644 --- a/ndb/test/src/HugoOperations.cpp +++ b/ndb/test/src/HugoOperations.cpp @@ -407,7 +407,7 @@ HugoOperations::~HugoOperations(){ int HugoOperations::equalForAttr(NdbOperation* pOp, int attrId, int rowId){ - int check = 0; + int check = -1; const NdbDictionary::Column* attr = tab.getColumn(attrId); if (attr->getPrimaryKey() == false){ g_info << "Can't call equalForAttr on non PK attribute" << endl; @@ -415,6 +415,7 @@ int HugoOperations::equalForAttr(NdbOperation* pOp, } switch (attr->getType()){ + case NdbDictionary::Column::Bit: case NdbDictionary::Column::Char: case NdbDictionary::Column::Varchar: case NdbDictionary::Column::Binary: @@ -440,11 +441,6 @@ int HugoOperations::equalForAttr(NdbOperation* pOp, g_info << "Float not allowed as PK value" << endl; check = -1; break; - - default: - g_info << "default" << endl; - check = -1; - break; } return check; } @@ -453,10 +449,11 @@ int HugoOperations::setValueForAttr(NdbOperation* pOp, int attrId, int rowId, int updateId){ - int check = 0; + int check = -1; const NdbDictionary::Column* attr = tab.getColumn(attrId); switch (attr->getType()){ + case NdbDictionary::Column::Bit: case NdbDictionary::Column::Char: case NdbDictionary::Column::Varchar: case NdbDictionary::Column::Binary: @@ -492,9 +489,6 @@ int HugoOperations::setValueForAttr(NdbOperation* pOp, check = pOp->setValue( attr->getName(), (float)calc.calcValue(rowId, attrId, updateId)); break; - default: - check = -1; - break; } return check; } diff --git a/ndb/test/src/NDBT_Tables.cpp b/ndb/test/src/NDBT_Tables.cpp index b61d48b216c..5a5fecd85c1 100644 --- a/ndb/test/src/NDBT_Tables.cpp +++ b/ndb/test/src/NDBT_Tables.cpp @@ -48,7 +48,7 @@ const NDBT_Attribute T2Attribs[] = { NDBT_Attribute("KOL1", NdbDictionary::Column::Bigunsigned, 1, true), NDBT_Attribute("KOL2", NdbDictionary::Column::Unsigned), - NDBT_Attribute("KOL3", NdbDictionary::Column::Unsigned), + NDBT_Attribute("KOL3", NdbDictionary::Column::Bit, 23), NDBT_Attribute("KOL4", NdbDictionary::Column::Unsigned, 1, false, true), // Nullable NDBT_Attribute("KOL5", NdbDictionary::Column::Unsigned) |