summaryrefslogtreecommitdiff
path: root/storage/ndb/src/kernel
diff options
context:
space:
mode:
authorunknown <jonas@perch.ndb.mysql.com>2008-01-24 15:13:42 +0100
committerunknown <jonas@perch.ndb.mysql.com>2008-01-24 15:13:42 +0100
commitae3ded6ee2bfd17f7657dc4a2fdb11466fb2af83 (patch)
tree880451634976713ca65582161e0c32c51fcd7bae /storage/ndb/src/kernel
parent78ac242f2bae276bf9cb72617e70d7ca7b9e829f (diff)
parenteff091100d8813259b7c2408d2f0ebd7f0b4814e (diff)
downloadmariadb-git-ae3ded6ee2bfd17f7657dc4a2fdb11466fb2af83.tar.gz
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
Diffstat (limited to 'storage/ndb/src/kernel')
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp115
1 files changed, 61 insertions, 54 deletions
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp
index 00c8f108234..4c5fb7b645f 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp
@@ -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,37 +69,26 @@ Dbtup::execACC_SCANREQ(Signal* signal)
jam();
break;
}
-
- if (!AccScanReq::getNoDiskScanFlag(req->requestInfo)
- && tablePtr.p->m_no_of_disk_attributes)
- {
- bits |= ScanOp::SCAN_DD;
- }
-
- bool mm = (bits & ScanOp::SCAN_DD);
- if (tablePtr.p->m_attributes[mm].m_no_of_varsize > 0) {
- bits |= ScanOp::SCAN_VS;
-
- // disk pages have fixed page format
- ndbrequire(! (bits & ScanOp::SCAN_DD));
- }
- if (! AccScanReq::getReadCommittedFlag(req->requestInfo)) {
- if (AccScanReq::getLockMode(req->requestInfo) == 0)
- bits |= ScanOp::SCAN_LOCK_SH;
- else
- bits |= ScanOp::SCAN_LOCK_EX;
- }
- } else {
- jam();
- // LCP scan and disk
+ }
+
+ if (!AccScanReq::getNoDiskScanFlag(req->requestInfo)
+ && tablePtr.p->m_no_of_disk_attributes)
+ {
+ bits |= ScanOp::SCAN_DD;
+ }
+
+ bool mm = (bits & ScanOp::SCAN_DD);
+ if (tablePtr.p->m_attributes[mm].m_no_of_varsize > 0) {
+ bits |= ScanOp::SCAN_VS;
- 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;
- }
+ // disk pages have fixed page format
+ ndbrequire(! (bits & ScanOp::SCAN_DD));
+ }
+ if (! AccScanReq::getReadCommittedFlag(req->requestInfo)) {
+ if (AccScanReq::getLockMode(req->requestInfo) == 0)
+ bits |= ScanOp::SCAN_LOCK_SH;
+ else
+ bits |= ScanOp::SCAN_LOCK_EX;
}
if (AccScanReq::getNRScanFlag(req->requestInfo))
@@ -112,6 +108,13 @@ Dbtup::execACC_SCANREQ(Signal* signal)
jam();
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();
@@ -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,21 +1185,24 @@ Dbtup::execLCP_FRAG_ORD(Signal* signal)
tablePtr.i = req->tableId;
ptrCheckGuard(tablePtr, cnoOfTablerec, tablerec);
- jam();
- FragrecordPtr fragPtr;
- Uint32 fragId = req->fragmentId;
- fragPtr.i = RNIL;
- getFragmentrec(fragPtr, fragId, tablePtr.p);
- ndbrequire(fragPtr.i != RNIL);
- Fragrecord& frag = *fragPtr.p;
-
- ndbrequire(frag.m_lcp_scan_op == RNIL && c_lcp_scan_op != RNIL);
- frag.m_lcp_scan_op = c_lcp_scan_op;
- ScanOpPtr scanPtr;
- c_scanOpPool.getPtr(scanPtr, frag.m_lcp_scan_op);
- ndbrequire(scanPtr.p->m_fragPtrI == RNIL);
- scanPtr.p->m_fragPtrI = fragPtr.i;
-
- scanFirst(signal, scanPtr);
- scanPtr.p->m_state = ScanOp::First;
+ if (tablePtr.p->m_no_of_disk_attributes)
+ {
+ jam();
+ FragrecordPtr fragPtr;
+ Uint32 fragId = req->fragmentId;
+ fragPtr.i = RNIL;
+ getFragmentrec(fragPtr, fragId, tablePtr.p);
+ ndbrequire(fragPtr.i != RNIL);
+ Fragrecord& frag = *fragPtr.p;
+
+ ndbrequire(frag.m_lcp_scan_op == RNIL && c_lcp_scan_op != RNIL);
+ frag.m_lcp_scan_op = c_lcp_scan_op;
+ ScanOpPtr scanPtr;
+ c_scanOpPool.getPtr(scanPtr, frag.m_lcp_scan_op);
+ ndbrequire(scanPtr.p->m_fragPtrI == RNIL);
+ scanPtr.p->m_fragPtrI = fragPtr.i;
+
+ scanFirst(signal, scanPtr);
+ scanPtr.p->m_state = ScanOp::First;
+ }
}