Commit ae3ded6e authored by unknown's avatar unknown

Merge perch.ndb.mysql.com:/home/jonas/src/51-telco-gca

into  perch.ndb.mysql.com:/home/jonas/src/51-ndb


storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp:
  merge
parents 78ac242f eff09110
......@@ -54,7 +54,14 @@ Dbtup::execACC_SCANREQ(Signal* signal)
// flags
Uint32 bits = 0;
if (!AccScanReq::getLcpScanFlag(req->requestInfo))
if (AccScanReq::getLcpScanFlag(req->requestInfo))
{
jam();
bits |= ScanOp::SCAN_LCP;
c_scanOpPool.getPtr(scanPtr, c_lcp_scan_op);
}
else
{
// seize from pool and link to per-fragment list
LocalDLList<ScanOp> list(c_scanOpPool, frag.m_scanList);
......@@ -62,6 +69,7 @@ Dbtup::execACC_SCANREQ(Signal* signal)
jam();
break;
}
}
if (!AccScanReq::getNoDiskScanFlag(req->requestInfo)
&& tablePtr.p->m_no_of_disk_attributes)
......@@ -82,18 +90,6 @@ Dbtup::execACC_SCANREQ(Signal* signal)
else
bits |= ScanOp::SCAN_LOCK_EX;
}
} else {
jam();
// LCP scan and disk
ndbrequire(frag.m_lcp_scan_op == c_lcp_scan_op);
c_scanOpPool.getPtr(scanPtr, frag.m_lcp_scan_op);
ndbrequire(scanPtr.p->m_fragPtrI == fragPtr.i);
bits |= ScanOp::SCAN_LCP;
if (tablePtr.p->m_attributes[MM].m_no_of_varsize > 0) {
bits |= ScanOp::SCAN_VS;
}
}
if (AccScanReq::getNRScanFlag(req->requestInfo))
{
......@@ -113,6 +109,13 @@ Dbtup::execACC_SCANREQ(Signal* signal)
scanPtr.p->m_endPage = RNIL;
}
if (AccScanReq::getLcpScanFlag(req->requestInfo))
{
jam();
ndbrequire((bits & ScanOp::SCAN_DD) == 0);
ndbrequire((bits & ScanOp::SCAN_LOCK) == 0);
}
// set up scan op
new (scanPtr.p) ScanOp();
ScanOp& scan = *scanPtr.p;
......@@ -1159,16 +1162,17 @@ Dbtup::releaseScanOp(ScanOpPtr& scanPtr)
fragPtr.i = scanPtr.p->m_fragPtrI;
ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
if(! (scanPtr.p->m_bits & ScanOp::SCAN_LCP))
if(scanPtr.p->m_bits & ScanOp::SCAN_LCP)
{
LocalDLList<ScanOp> list(c_scanOpPool, fragPtr.p->m_scanList);
list.release(scanPtr);
jam();
fragPtr.p->m_lcp_scan_op = RNIL;
scanPtr.p->m_fragPtrI = RNIL;
}
else
{
ndbrequire(fragPtr.p->m_lcp_scan_op == scanPtr.i);
fragPtr.p->m_lcp_scan_op = RNIL;
scanPtr.p->m_fragPtrI = RNIL;
jam();
LocalDLList<ScanOp> list(c_scanOpPool, fragPtr.p->m_scanList);
list.release(scanPtr);
}
}
......@@ -1181,6 +1185,8 @@ Dbtup::execLCP_FRAG_ORD(Signal* signal)
tablePtr.i = req->tableId;
ptrCheckGuard(tablePtr, cnoOfTablerec, tablerec);
if (tablePtr.p->m_no_of_disk_attributes)
{
jam();
FragrecordPtr fragPtr;
Uint32 fragId = req->fragmentId;
......@@ -1198,4 +1204,5 @@ Dbtup::execLCP_FRAG_ORD(Signal* signal)
scanFirst(signal, scanPtr);
scanPtr.p->m_state = ScanOp::First;
}
}
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