Loading ndb/src/ndbapi/NdbBlob.cpp +20 −19 Original line number Diff line number Diff line Loading @@ -97,21 +97,22 @@ NdbBlob::getBlobTable(NdbTableImpl& bt, const NdbTableImpl* t, const NdbColumnIm bt.setName(btname); bt.setLogging(t->getLogging()); bt.setFragmentType(t->getFragmentType()); { NdbDictionary::Column bc("DIST"); { NdbDictionary::Column bc("PK"); bc.setType(NdbDictionary::Column::Unsigned); assert(t->m_sizeOfKeysInWords != 0); bc.setLength(t->m_sizeOfKeysInWords); bc.setPrimaryKey(true); bc.setDistributionKey(true); bt.addColumn(bc); } { NdbDictionary::Column bc("PART"); { NdbDictionary::Column bc("DIST"); bc.setType(NdbDictionary::Column::Unsigned); bc.setPrimaryKey(true); bc.setDistributionKey(true); bt.addColumn(bc); } { NdbDictionary::Column bc("PK"); { NdbDictionary::Column bc("PART"); bc.setType(NdbDictionary::Column::Unsigned); assert(t->m_sizeOfKeysInWords != 0); bc.setLength(t->m_sizeOfKeysInWords); bc.setPrimaryKey(true); bt.addColumn(bc); } Loading Loading @@ -392,9 +393,9 @@ NdbBlob::setPartKeyValue(NdbOperation* anOp, Uint32 part) Uint32* data = (Uint32*)theKeyBuf.data; unsigned size = theTable->m_sizeOfKeysInWords; DBG("setPartKeyValue dist=" << getDistKey(part) << " part=" << part << " key=" << ndb_blob_debug(data, size)); if (anOp->equal((Uint32)0, getDistKey(part)) == -1 || anOp->equal((Uint32)1, part) == -1 || anOp->equal((Uint32)2, theKeyBuf.data) == -1) { if (anOp->equal((Uint32)0, theKeyBuf.data) == -1 || anOp->equal((Uint32)1, getDistKey(part)) == -1 || anOp->equal((Uint32)2, part) == -1) { setErrorCode(anOp); return -1; } Loading Loading @@ -676,7 +677,6 @@ NdbBlob::readDataPrivate(char* buf, Uint32& bytes) if (readParts(thePartBuf.data, part, 1) == -1) return -1; // need result now DBG("execute pending part reads"); if (executePendingBlobReads() == -1) return -1; Uint32 n = thePartSize - off; Loading Loading @@ -710,7 +710,6 @@ NdbBlob::readDataPrivate(char* buf, Uint32& bytes) if (readParts(thePartBuf.data, part, 1) == -1) return -1; // need result now DBG("execute pending part reads"); if (executePendingBlobReads() == -1) return -1; memcpy(buf, thePartBuf.data, len); Loading Loading @@ -773,14 +772,12 @@ NdbBlob::writeDataPrivate(const char* buf, Uint32 bytes) if (off != 0) { DBG("partial first block pos=" << pos << " len=" << len); // flush writes to guarantee correct read DBG("execute pending part writes"); if (executePendingBlobWrites() == -1) return -1; Uint32 part = (pos - theInlineSize) / thePartSize; if (readParts(thePartBuf.data, part, 1) == -1) return -1; // need result now DBG("execute pending part reads"); if (executePendingBlobReads() == -1) return -1; Uint32 n = thePartSize - off; Loading Loading @@ -824,13 +821,11 @@ NdbBlob::writeDataPrivate(const char* buf, Uint32 bytes) Uint32 part = (pos - theInlineSize) / thePartSize; if (theLength > pos + len) { // flush writes to guarantee correct read DBG("execute pending part writes"); if (executePendingBlobWrites() == -1) return -1; if (readParts(thePartBuf.data, part, 1) == -1) return -1; // need result now DBG("execute pending part reads"); if (executePendingBlobReads() == -1) return -1; memcpy(thePartBuf.data, buf, len); Loading Loading @@ -980,9 +975,11 @@ NdbBlob::deletePartsUnknown(Uint32 part) } tOp->m_abortOption = IgnoreError; n++; } DBG("deletePartsUnknown: executeNoBlobs [in] bat=" << bat); if (theNdbCon->executeNoBlobs(NoCommit) == -1) return -1; } DBG("deletePartsUnknown: executeNoBlobs [out]"); n = 0; while (n < bat) { NdbOperation* tOp = tOpList[n]; Loading Loading @@ -1011,8 +1008,10 @@ NdbBlob::executePendingBlobReads() { Uint8 flags = (1 << NdbOperation::ReadRequest); if (thePendingBlobOps & flags) { DBG("executePendingBlobReads: executeNoBlobs [in]"); if (theNdbCon->executeNoBlobs(NoCommit) == -1) return -1; DBG("executePendingBlobReads: executeNoBlobs [out]"); thePendingBlobOps = 0; theNdbCon->thePendingBlobOps = 0; } Loading @@ -1024,8 +1023,10 @@ NdbBlob::executePendingBlobWrites() { Uint8 flags = 0xFF & ~(1 << NdbOperation::ReadRequest); if (thePendingBlobOps & flags) { DBG("executePendingBlobWrites: executeNoBlobs [in]"); if (theNdbCon->executeNoBlobs(NoCommit) == -1) return -1; DBG("executePendingBlobWrites: executeNoBlobs [out]"); thePendingBlobOps = 0; theNdbCon->thePendingBlobOps = 0; } Loading @@ -1037,10 +1038,10 @@ NdbBlob::executePendingBlobWrites() int NdbBlob::invokeActiveHook() { DBG("invokeActiveHook"); DBG("invokeActiveHook [in]"); assert(theState == Active && theActiveHook != NULL); int ret = (*theActiveHook)(this, theActiveHookArg); DBG("invokeActiveHook ret=" << ret); DBG("invokeActiveHook [out] ret=" << ret); if (ret != 0) { // no error is set on blob level return -1; Loading Loading @@ -1244,7 +1245,7 @@ NdbBlob::preExecute(ExecType anExecType, bool& batch) return -1; } } else { NdbOperation* tOp = theNdbCon->getNdbIndexOperation(theAccessTable->m_index, theTable, theNdbOp); NdbIndexOperation* tOp = theNdbCon->getNdbIndexOperation(theAccessTable->m_index, theTable, theNdbOp); if (tOp == NULL || tOp->readTuple() == -1 || setAccessKeyValue(tOp) == -1 || Loading ndb/test/ndbapi/testBlobs.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -1232,6 +1232,13 @@ deleteScan(bool idx) // main // from here on print always #undef DBG #define DBG(x) \ do { \ ndbout << "line " << __LINE__ << " " << x << endl; \ } while (0) static int testmain() { Loading Loading
ndb/src/ndbapi/NdbBlob.cpp +20 −19 Original line number Diff line number Diff line Loading @@ -97,21 +97,22 @@ NdbBlob::getBlobTable(NdbTableImpl& bt, const NdbTableImpl* t, const NdbColumnIm bt.setName(btname); bt.setLogging(t->getLogging()); bt.setFragmentType(t->getFragmentType()); { NdbDictionary::Column bc("DIST"); { NdbDictionary::Column bc("PK"); bc.setType(NdbDictionary::Column::Unsigned); assert(t->m_sizeOfKeysInWords != 0); bc.setLength(t->m_sizeOfKeysInWords); bc.setPrimaryKey(true); bc.setDistributionKey(true); bt.addColumn(bc); } { NdbDictionary::Column bc("PART"); { NdbDictionary::Column bc("DIST"); bc.setType(NdbDictionary::Column::Unsigned); bc.setPrimaryKey(true); bc.setDistributionKey(true); bt.addColumn(bc); } { NdbDictionary::Column bc("PK"); { NdbDictionary::Column bc("PART"); bc.setType(NdbDictionary::Column::Unsigned); assert(t->m_sizeOfKeysInWords != 0); bc.setLength(t->m_sizeOfKeysInWords); bc.setPrimaryKey(true); bt.addColumn(bc); } Loading Loading @@ -392,9 +393,9 @@ NdbBlob::setPartKeyValue(NdbOperation* anOp, Uint32 part) Uint32* data = (Uint32*)theKeyBuf.data; unsigned size = theTable->m_sizeOfKeysInWords; DBG("setPartKeyValue dist=" << getDistKey(part) << " part=" << part << " key=" << ndb_blob_debug(data, size)); if (anOp->equal((Uint32)0, getDistKey(part)) == -1 || anOp->equal((Uint32)1, part) == -1 || anOp->equal((Uint32)2, theKeyBuf.data) == -1) { if (anOp->equal((Uint32)0, theKeyBuf.data) == -1 || anOp->equal((Uint32)1, getDistKey(part)) == -1 || anOp->equal((Uint32)2, part) == -1) { setErrorCode(anOp); return -1; } Loading Loading @@ -676,7 +677,6 @@ NdbBlob::readDataPrivate(char* buf, Uint32& bytes) if (readParts(thePartBuf.data, part, 1) == -1) return -1; // need result now DBG("execute pending part reads"); if (executePendingBlobReads() == -1) return -1; Uint32 n = thePartSize - off; Loading Loading @@ -710,7 +710,6 @@ NdbBlob::readDataPrivate(char* buf, Uint32& bytes) if (readParts(thePartBuf.data, part, 1) == -1) return -1; // need result now DBG("execute pending part reads"); if (executePendingBlobReads() == -1) return -1; memcpy(buf, thePartBuf.data, len); Loading Loading @@ -773,14 +772,12 @@ NdbBlob::writeDataPrivate(const char* buf, Uint32 bytes) if (off != 0) { DBG("partial first block pos=" << pos << " len=" << len); // flush writes to guarantee correct read DBG("execute pending part writes"); if (executePendingBlobWrites() == -1) return -1; Uint32 part = (pos - theInlineSize) / thePartSize; if (readParts(thePartBuf.data, part, 1) == -1) return -1; // need result now DBG("execute pending part reads"); if (executePendingBlobReads() == -1) return -1; Uint32 n = thePartSize - off; Loading Loading @@ -824,13 +821,11 @@ NdbBlob::writeDataPrivate(const char* buf, Uint32 bytes) Uint32 part = (pos - theInlineSize) / thePartSize; if (theLength > pos + len) { // flush writes to guarantee correct read DBG("execute pending part writes"); if (executePendingBlobWrites() == -1) return -1; if (readParts(thePartBuf.data, part, 1) == -1) return -1; // need result now DBG("execute pending part reads"); if (executePendingBlobReads() == -1) return -1; memcpy(thePartBuf.data, buf, len); Loading Loading @@ -980,9 +975,11 @@ NdbBlob::deletePartsUnknown(Uint32 part) } tOp->m_abortOption = IgnoreError; n++; } DBG("deletePartsUnknown: executeNoBlobs [in] bat=" << bat); if (theNdbCon->executeNoBlobs(NoCommit) == -1) return -1; } DBG("deletePartsUnknown: executeNoBlobs [out]"); n = 0; while (n < bat) { NdbOperation* tOp = tOpList[n]; Loading Loading @@ -1011,8 +1008,10 @@ NdbBlob::executePendingBlobReads() { Uint8 flags = (1 << NdbOperation::ReadRequest); if (thePendingBlobOps & flags) { DBG("executePendingBlobReads: executeNoBlobs [in]"); if (theNdbCon->executeNoBlobs(NoCommit) == -1) return -1; DBG("executePendingBlobReads: executeNoBlobs [out]"); thePendingBlobOps = 0; theNdbCon->thePendingBlobOps = 0; } Loading @@ -1024,8 +1023,10 @@ NdbBlob::executePendingBlobWrites() { Uint8 flags = 0xFF & ~(1 << NdbOperation::ReadRequest); if (thePendingBlobOps & flags) { DBG("executePendingBlobWrites: executeNoBlobs [in]"); if (theNdbCon->executeNoBlobs(NoCommit) == -1) return -1; DBG("executePendingBlobWrites: executeNoBlobs [out]"); thePendingBlobOps = 0; theNdbCon->thePendingBlobOps = 0; } Loading @@ -1037,10 +1038,10 @@ NdbBlob::executePendingBlobWrites() int NdbBlob::invokeActiveHook() { DBG("invokeActiveHook"); DBG("invokeActiveHook [in]"); assert(theState == Active && theActiveHook != NULL); int ret = (*theActiveHook)(this, theActiveHookArg); DBG("invokeActiveHook ret=" << ret); DBG("invokeActiveHook [out] ret=" << ret); if (ret != 0) { // no error is set on blob level return -1; Loading Loading @@ -1244,7 +1245,7 @@ NdbBlob::preExecute(ExecType anExecType, bool& batch) return -1; } } else { NdbOperation* tOp = theNdbCon->getNdbIndexOperation(theAccessTable->m_index, theTable, theNdbOp); NdbIndexOperation* tOp = theNdbCon->getNdbIndexOperation(theAccessTable->m_index, theTable, theNdbOp); if (tOp == NULL || tOp->readTuple() == -1 || setAccessKeyValue(tOp) == -1 || Loading
ndb/test/ndbapi/testBlobs.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -1232,6 +1232,13 @@ deleteScan(bool idx) // main // from here on print always #undef DBG #define DBG(x) \ do { \ ndbout << "line " << __LINE__ << " " << x << endl; \ } while (0) static int testmain() { Loading