=== modified file 'storage/ndb/include/kernel/signaldata/CopyData.hpp' --- storage/ndb/include/kernel/signaldata/CopyData.hpp 2008-06-05 20:29:13 +0000 +++ storage/ndb/include/kernel/signaldata/CopyData.hpp 2010-10-29 16:50:08 +0000 @@ -29,6 +29,10 @@ struct CopyDataReq // AlterTableCopy }; + enum Flags { + TupOrder = 1 + }; + union { Uint32 clientRef; Uint32 senderRef; === modified file 'storage/ndb/include/kernel/signaldata/SumaImpl.hpp' --- storage/ndb/include/kernel/signaldata/SumaImpl.hpp 2010-08-26 12:33:33 +0000 +++ storage/ndb/include/kernel/signaldata/SumaImpl.hpp 2010-10-29 15:38:05 +0000 @@ -264,6 +264,7 @@ struct SubSyncReq { enum { LM_Exclusive = 0x1 ,Reorg = 0x2 + ,TupOrder = 0x8 }; SECTION( ATTRIBUTE_LIST = 0); // Used when doing SingelTableScan === modified file 'storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp' --- storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp 2010-09-21 07:36:08 +0000 +++ storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp 2010-10-29 17:33:45 +0000 @@ -13675,6 +13675,7 @@ Dbdict::copyData_prepare(Signal* signal, Uint32 cnt =0; Uint32 tmp[MAX_ATTRIBUTES_IN_TABLE]; + bool tabHasDiskCols = false; TableRecordPtr tabPtr; c_tableRecordPool.getPtr(tabPtr, impl_req->srcTableId); { @@ -13689,10 +13690,22 @@ Dbdict::copyData_prepare(Signal* signal, for (alist.first(attrPtr); !attrPtr.isNull(); alist.next(attrPtr)) { if (!AttributeDescriptor::getPrimaryKey(attrPtr.p->attributeDescriptor)) + { tmp[cnt++] = attrPtr.p->attributeId; + + if (AttributeDescriptor::getDiskBased(attrPtr.p->attributeDescriptor)) + tabHasDiskCols = true; + } } } + /* Request Tup-ordered copy when we have disk columns for efficiency */ + if (tabHasDiskCols) + { + jam(); + req->requestInfo |= CopyDataReq::TupOrder; + } + LinearSectionPtr ls_ptr[3]; ls_ptr[0].sz = cnt; ls_ptr[0].p = tmp; @@ -13763,6 +13776,7 @@ Dbdict::copyData_complete(Signal* signal Uint32 cnt =0; Uint32 tmp[MAX_ATTRIBUTES_IN_TABLE]; + bool tabHasDiskCols = false; TableRecordPtr tabPtr; c_tableRecordPool.getPtr(tabPtr, impl_req->srcTableId); { @@ -13773,9 +13787,21 @@ Dbdict::copyData_complete(Signal* signal { if (AttributeDescriptor::getPrimaryKey(attrPtr.p->attributeDescriptor)) tmp[cnt++] = attrPtr.p->attributeId; + else + { + if (AttributeDescriptor::getDiskBased(attrPtr.p->attributeDescriptor)) + tabHasDiskCols = true; + } } } + /* Request Tup-ordered delete when we have disk columns for efficiency */ + if (tabHasDiskCols) + { + jam(); + req->requestInfo |= CopyDataReq::TupOrder; + } + LinearSectionPtr ls_ptr[3]; ls_ptr[0].sz = cnt; ls_ptr[0].p = tmp; === modified file 'storage/ndb/src/kernel/blocks/suma/Suma.cpp' --- storage/ndb/src/kernel/blocks/suma/Suma.cpp 2010-09-06 08:20:33 +0000 +++ storage/ndb/src/kernel/blocks/suma/Suma.cpp 2010-10-29 15:39:01 +0000 @@ -2525,6 +2525,11 @@ Suma::SyncRecord::nextScan(Signal* signa ScanFragReq::setReorgFlag(req->requestInfo, ScanFragReq::REORG_MOVED); } + if (m_requestInfo & SubSyncReq::TupOrder) + { + ScanFragReq::setTupScanFlag(req->requestInfo, 1); + } + req->fragmentNoKeyLen = fd.m_fragDesc.m_fragmentNo; req->schemaVersion = tabPtr.p->m_schemaVersion; req->transId1 = 0; === modified file 'storage/ndb/src/kernel/blocks/trix/Trix.cpp' --- storage/ndb/src/kernel/blocks/trix/Trix.cpp 2010-08-17 11:47:55 +0000 +++ storage/ndb/src/kernel/blocks/trix/Trix.cpp 2010-10-29 17:03:08 +0000 @@ -947,6 +947,12 @@ void Trix::startTableScan(Signal* signal subSyncReq->requestInfo = 0; subSyncReq->fragCount = subRec->fragCount; + if (subRec->m_flags & SubscriptionRecord::RF_TUP_ORDER) + { + jam(); + subSyncReq->requestInfo |= SubSyncReq::TupOrder; + } + if (subRec->requestType == REORG_COPY) { jam(); @@ -1394,6 +1400,12 @@ Trix::execCOPY_DATA_IMPL_REQ(Signal* sig ndbrequire(false); } + if (req->requestInfo & CopyDataReq::TupOrder) + { + jam(); + subRec->m_flags |= SubscriptionRecord::RF_TUP_ORDER; + } + // Get column order segments Uint32 noOfSections = handle.m_cnt; if (noOfSections > 0) { === modified file 'storage/ndb/src/kernel/blocks/trix/Trix.hpp' --- storage/ndb/src/kernel/blocks/trix/Trix.hpp 2009-10-08 12:40:36 +0000 +++ storage/ndb/src/kernel/blocks/trix/Trix.hpp 2010-10-29 16:59:51 +0000 @@ -108,6 +108,7 @@ private: {} enum RequestFlags { RF_WAIT_GCP = 0x1 + ,RF_TUP_ORDER = 0x4 }; Uint32 m_flags; RequestType requestType;