Commit b316b97b authored by unknown's avatar unknown

Merge bk-internal.mysql.com:/home/bk/mysql-4.1

into neptunus.(none):/home/msvensson/mysql/mysql-4.1
parents f650e086 ed44321d
......@@ -542,6 +542,7 @@ private:
// Release all cursor operations in connection
void releaseOps(NdbOperation*);
void releaseScanOperations(NdbIndexScanOperation*);
void releaseExecutedScanOperation(NdbIndexScanOperation*);
// Set the transaction identity of the transaction
void setTransactionId(Uint64 aTransactionId);
......
......@@ -93,7 +93,7 @@ protected:
int nextResult(bool fetchAllowed = true, bool forceSend = false);
virtual void release();
void closeScan(bool forceSend = false);
void closeScan(bool forceSend = false, bool releaseOp = false);
int close_impl(class TransporterFacade*, bool forceSend = false);
// Overloaded methods from NdbCursorOperation
......
......@@ -963,6 +963,37 @@ NdbConnection::releaseScanOperations(NdbIndexScanOperation* cursorOp)
}
}//NdbConnection::releaseScanOperations()
/*****************************************************************************
void releaseExecutedScanOperation();
Remark: Release scan op when hupp'ed trans closed (save memory)
******************************************************************************/
void
NdbConnection::releaseExecutedScanOperation(NdbIndexScanOperation* cursorOp)
{
DBUG_ENTER("NdbConnection::releaseExecutedScanOperation");
DBUG_PRINT("enter", ("this=0x%x op=0x%x", (UintPtr)this, (UintPtr)cursorOp))
// here is one reason to make op lists doubly linked
if (m_firstExecutedScanOp == cursorOp) {
m_firstExecutedScanOp = (NdbIndexScanOperation*)cursorOp->theNext;
cursorOp->release();
theNdb->releaseScanOperation(cursorOp);
} else if (m_firstExecutedScanOp != NULL) {
NdbIndexScanOperation* tOp = m_firstExecutedScanOp;
while (tOp->theNext != NULL) {
if (tOp->theNext == cursorOp) {
tOp->theNext = cursorOp->theNext;
cursorOp->release();
theNdb->releaseScanOperation(cursorOp);
break;
}
tOp = (NdbIndexScanOperation*)tOp->theNext;
}
}
DBUG_VOID_RETURN;
}//NdbConnection::releaseExecutedScanOperation()
/*****************************************************************************
NdbOperation* getNdbOperation(const char* aTableName);
......
......@@ -69,7 +69,7 @@ int NdbResultSet::nextResult(bool fetchAllowed, bool forceSend)
void NdbResultSet::close(bool forceSend)
{
m_operation->closeScan(forceSend);
m_operation->closeScan(forceSend, true);
}
NdbOperation*
......
......@@ -674,7 +674,7 @@ NdbScanOperation::doSend(int ProcessorId)
return 0;
}
void NdbScanOperation::closeScan(bool forceSend)
void NdbScanOperation::closeScan(bool forceSend, bool releaseOp)
{
if(m_transConnection){
if(DEBUG_NEXT_RESULT)
......@@ -691,13 +691,20 @@ void NdbScanOperation::closeScan(bool forceSend)
Guard guard(tp->theMutexPtr);
close_impl(tp, forceSend);
} while(0);
theNdbCon->theScanningOp = 0;
theNdb->closeTransaction(theNdbCon);
}
theNdbCon = 0;
NdbConnection* tCon = theNdbCon;
NdbConnection* tTransCon = m_transConnection;
theNdbCon = NULL;
m_transConnection = NULL;
if (releaseOp && tTransCon) {
NdbIndexScanOperation* tOp = (NdbIndexScanOperation*)this;
tTransCon->releaseExecutedScanOperation(tOp);
}
tCon->theScanningOp = 0;
theNdb->closeTransaction(tCon);
}
void
......
......@@ -89,7 +89,7 @@ int main(int argc, char** argv){
unsigned j;
for (j= 0; (int)j < pTab->getNoOfPrimaryKeys(); j++)
{
const NdbDictionary::Column * col = pTab->getColumn(j);
const NdbDictionary::Column * col = pTab->getColumn(pTab->getPrimaryKey(j));
ndbout << col->getName();
if ((int)j < pTab->getNoOfPrimaryKeys()-1)
ndbout << ", ";
......
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