⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bank.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
📖 第 1 页 / 共 4 页
字号:
  check = pOp->interpret_exit_ok();  if( check == -1 ) {    ERR(pScanTrans->getNdbError());    m_ndb.closeTransaction(pScanTrans);    return NDBT_FAILED;  }  NdbRecAttr* timeRec = pOp->getValue("TIME");  if( timeRec ==NULL ) {    ERR(pScanTrans->getNdbError());    m_ndb.closeTransaction(pScanTrans);    return NDBT_FAILED;  }  NdbRecAttr* accountTypeRec = pOp->getValue("ACCOUNT_TYPE");  if( accountTypeRec ==NULL ) {    ERR(pScanTrans->getNdbError());    m_ndb.closeTransaction(pScanTrans);    return NDBT_FAILED;  }  check = pScanTrans->execute(NoCommit);     if( check == -1 ) {    ERR(pScanTrans->getNdbError());    m_ndb.closeTransaction(pScanTrans);    return NDBT_FAILED;  }      int eof;  int rows = 0;  int rowsFound = 0;  eof = pOp->nextResult();      while(eof == 0){    rows++;    Uint64 t = timeRec->u_64_value();    Uint32 a = accountTypeRec->u_32_value();    if (a == accountType && t == glTime){      rowsFound++;      // One record found      check = pOp->deleteCurrentTuple(pTrans);      if (check == -1){	ERR(m_ndb.getNdbError());	m_ndb.closeTransaction(pScanTrans);	return NDBT_FAILED;      }            // Execute transaction          check = pTrans->execute(NoCommit);      if( check == -1 ) {	ERR(pTrans->getNdbError());	m_ndb.closeTransaction(pScanTrans);	return NDBT_FAILED;      }           }    eof = pOp->nextResult();  }  if (eof == -1) {    ERR(pScanTrans->getNdbError());    m_ndb.closeTransaction(pScanTrans);    return NDBT_FAILED;  }      m_ndb.closeTransaction(pScanTrans);  //  ndbout << rowsFound << " TRANSACTIONS have been deleted" << endl;  return NDBT_OK;}  int Bank::performIncreaseTime(int maxSleepBetweenDays, int yield){  int yieldCounter = 0;    while(1){        Uint64 currTime;    if (incCurrTime(currTime) != NDBT_OK)      break;        g_info << "Current time is " << currTime << endl;    if (maxSleepBetweenDays > 0){      int val = myRandom48(maxSleepBetweenDays);      NdbSleep_SecSleep(val);    }        yieldCounter++;    if (yield != 0 && yieldCounter >= yield)      return NDBT_OK;      }  return NDBT_FAILED;}int Bank::readSystemValue(SystemValueId sysValId, Uint64 & value){  int check;      NdbConnection* pTrans = m_ndb.startTransaction();  if (pTrans == NULL){    ERR(m_ndb.getNdbError());    if(m_ndb.getNdbError().status == NdbError::TemporaryError)      return NDBT_TEMPORARY;    return NDBT_FAILED;  }  int result;  if ((result= prepareReadSystemValueOp(pTrans, sysValId, value)) != NDBT_OK) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    return result;  }  check = pTrans->execute(Commit);  if( check == -1 ) {    ERR(pTrans->getNdbError());    if(pTrans->getNdbError().status == NdbError::TemporaryError)    {      m_ndb.closeTransaction(pTrans);      return NDBT_TEMPORARY;    }    m_ndb.closeTransaction(pTrans);    return NDBT_FAILED;  }    m_ndb.closeTransaction(pTrans);        return NDBT_OK;}int Bank::prepareReadSystemValueOp(NdbConnection* pTrans, SystemValueId sysValId, Uint64 & value){  int check;      NdbOperation* pOp = pTrans->getNdbOperation("SYSTEM_VALUES");  if (pOp == NULL) {    return NDBT_FAILED;  }      check = pOp->readTuple();  if( check == -1 ) {    return NDBT_FAILED;  }      check = pOp->equal("SYSTEM_VALUES_ID", sysValId);  if( check == -1 ) {    return NDBT_FAILED;  }      NdbRecAttr* valueRec = pOp->getValue("VALUE", (char *)&value);  if( valueRec == NULL ) {    return NDBT_FAILED;  }      return NDBT_OK;}int Bank::writeSystemValue(SystemValueId sysValId, Uint64 value){  int check;      NdbConnection* pTrans = m_ndb.startTransaction();  if (pTrans == NULL){    ERR(m_ndb.getNdbError());    return NDBT_FAILED;  }      NdbOperation* pOp = pTrans->getNdbOperation("SYSTEM_VALUES");  if (pOp == NULL) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    return NDBT_FAILED;  }      check = pOp->insertTuple();  if( check == -1 ) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    return NDBT_FAILED;  }        check = pOp->equal("SYSTEM_VALUES_ID", sysValId);  if( check == -1 ) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    return NDBT_FAILED;  }  check = pOp->setValue("VALUE", value);  if( check == -1 ) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    return NDBT_FAILED;  }  check = pTrans->execute(Commit);  if( check == -1 ) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    return NDBT_FAILED;  }      m_ndb.closeTransaction(pTrans);        return NDBT_OK;}int Bank::getNextTransactionId(Uint64 &value){  return increaseSystemValue2(LastTransactionId, value);}int Bank::incCurrTime(Uint64 &value){  return increaseSystemValue(CurrentTime, value);}  int Bank::increaseSystemValue(SystemValueId sysValId, Uint64 &value){  /**   * Increase value with one and return   * updated value   *   */  DBUG_ENTER("Bank::increaseSystemValue");  int check;      NdbConnection* pTrans = m_ndb.startTransaction();  if (pTrans == NULL){    ERR(m_ndb.getNdbError());    if (m_ndb.getNdbError().status == NdbError::TemporaryError)      DBUG_RETURN(NDBT_TEMPORARY);    DBUG_RETURN(NDBT_FAILED);  }      NdbOperation* pOp = pTrans->getNdbOperation("SYSTEM_VALUES");  if (pOp == NULL) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    DBUG_RETURN(NDBT_FAILED);  }      check = pOp->readTupleExclusive();  //  check = pOp->readTuple();  if( check == -1 ) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    DBUG_RETURN(NDBT_FAILED);  }      check = pOp->equal("SYSTEM_VALUES_ID", sysValId);  if( check == -1 ) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    DBUG_RETURN(NDBT_FAILED);  }      NdbRecAttr* valueRec = pOp->getValue("VALUE");  if( valueRec ==NULL ) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    DBUG_RETURN(NDBT_FAILED);  }      check = pTrans->execute(NoCommit);  if( check == -1 ) {    ERR(pTrans->getNdbError());    if (pTrans->getNdbError().status == NdbError::TemporaryError)    {      m_ndb.closeTransaction(pTrans);      DBUG_RETURN(NDBT_TEMPORARY);    }    m_ndb.closeTransaction(pTrans);    DBUG_RETURN(NDBT_FAILED);  }      value = valueRec->u_64_value();  value++;      NdbOperation* pOp2 = pTrans->getNdbOperation("SYSTEM_VALUES");  if (pOp2 == NULL) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    DBUG_RETURN(NDBT_FAILED);  }      check = pOp2->updateTuple();  if( check == -1 ) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    DBUG_RETURN(NDBT_FAILED);  }      check = pOp2->equal("SYSTEM_VALUES_ID", sysValId);  if( check == -1 ) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    DBUG_RETURN(NDBT_FAILED);  }      check = pOp2->setValue("VALUE", value);  if( check == -1 ) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    DBUG_RETURN(NDBT_FAILED);  }  check = pTrans->execute(NoCommit);  if( check == -1 ) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    DBUG_RETURN(NDBT_FAILED);  }  NdbOperation* pOp3 = pTrans->getNdbOperation("SYSTEM_VALUES");  if (pOp3 == NULL) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    DBUG_RETURN(NDBT_FAILED);  }  check = pOp3->readTuple();  if( check == -1 ) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    DBUG_RETURN(NDBT_FAILED);  }      check = pOp3->equal("SYSTEM_VALUES_ID", sysValId);  if( check == -1 ) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    DBUG_RETURN(NDBT_FAILED);  }  // Read new value  NdbRecAttr* valueNewRec = pOp3->getValue("VALUE");  if( valueNewRec ==NULL ) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    DBUG_RETURN(NDBT_FAILED);  }  check = pTrans->execute(Commit);  if( check == -1 ) {    ERR(pTrans->getNdbError());    if (pTrans->getNdbError().status == NdbError::TemporaryError)    {      m_ndb.closeTransaction(pTrans);      DBUG_RETURN(NDBT_TEMPORARY);    }    m_ndb.closeTransaction(pTrans);    DBUG_RETURN(NDBT_FAILED);  }  // Check that value updated equals the value we read after the update  if (valueNewRec->u_64_value() != value){        printf("value actual=%lld\n", valueNewRec->u_64_value());    printf("value expected=%lld actual=%lld\n", value, valueNewRec->u_64_value());        DBUG_PRINT("info", ("value expected=%ld actual=%ld", value, valueNewRec->u_64_value()));    g_err << "getNextTransactionId: value was not updated" << endl;    m_ndb.closeTransaction(pTrans);    DBUG_RETURN(NDBT_FAILED);  }  m_ndb.closeTransaction(pTrans);    DBUG_RETURN(0);}int Bank::increaseSystemValue2(SystemValueId sysValId, Uint64 &value){  /**   * Increase value with one and return   * updated value   * A more optimized version using interpreted update!   *   */  int check;      NdbConnection* pTrans = m_ndb.startTransaction();  if (pTrans == NULL){    ERR(m_ndb.getNdbError());    if(m_ndb.getNdbError().status == NdbError::TemporaryError)      return NDBT_TEMPORARY;    return NDBT_FAILED;  }      NdbOperation* pOp = pTrans->getNdbOperation("SYSTEM_VALUES");  if (pOp == NULL) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    return NDBT_FAILED;  }  check = pOp->interpretedUpdateTuple();  if( check == -1 ) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    return NDBT_FAILED;  }  check = pOp->equal("SYSTEM_VALUES_ID", sysValId );  if( check == -1 ) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    return NDBT_FAILED;  }  Uint32 valToIncWith = 1;  check = pOp->incValue("VALUE", valToIncWith);  if( check == -1 ) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    return NDBT_FAILED;  }  NdbRecAttr* valueRec = pOp->getValue("VALUE");  if( valueRec == NULL ) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pTrans);    return NDBT_FAILED;  }    check = pTrans->execute(Commit);  if( check == -1 ) {    ERR(pTrans->getNdbError());    if(pTrans->getNdbError().status == NdbError::TemporaryError)    {      m_ndb.closeTransaction(pTrans);      return NDBT_TEMPORARY;    }    m_ndb.closeTransaction(pTrans);    return NDBT_FAILED;  }  value = valueRec->u_64_value();      m_ndb.closeTransaction(pTrans);  return 0;}int Bank::getCurrTime(Uint64 &time){  return readSystemValue(CurrentTime, time);}int Bank::prepareGetCurrTimeOp(NdbConnection *pTrans, Uint64 &time){  return prepareReadSystemValueOp(pTrans, CurrentTime, time);}int Bank::performSumAccounts(int maxSleepBetweenSums, int yield){    int yieldCounter = 0;  while (1){    Uint32 sumAccounts = 0;    Uint32 numAccounts = 0;    if (getSumAccounts(sumAccounts, numAccounts) != NDBT_OK){      g_err << "getSumAccounts FAILED" << endl;    } else {          g_info << "num="<<numAccounts<<", sum=" << sumAccounts << endl;            if (sumAccounts != (10000000 + (10000*(numAccounts-1)))){	g_err << "performSumAccounts  FAILED" << endl	      << "   sumAccounts="<<sumAccounts<<endl	      << "   expected   ="<<(10000000 + (10000*(numAccounts-1)))<<endl	      << "   numAccounts="<<numAccounts<<endl;	return NDBT_FAILED;      }           if (maxSleepBetweenSums > 0){	int val = myRandom48(maxSleepBetweenSums);	NdbSleep_MilliSleep(val);            }    }    yieldCounter++;    if (yield != 0 && yieldCounter >= yield)      return NDBT_OK;  }  return NDBT_FAILED;}int Bank::getSumAccounts(Uint32 &sumAccounts, 			 Uint32 &numAccounts){  // SELECT SUM(balance) FROM ACCOUNT  int check;      NdbConnection* pScanTrans = m_ndb.startTransaction();  if (pScanTrans == NULL) {    ERR(m_ndb.getNdbError());    return NDBT_FAILED;  }  NdbScanOperation* pOp = pScanTrans->getNdbScanOperation("ACCOUNT");	  if (pOp == NULL) {    ERR(pScanTrans->getNdbError());    m_ndb.closeTransaction(pScanTrans);    return NDBT_FAILED;  }  if( pOp->readTuplesExclusive() ) {    ERR(pScanTrans->getNdbError());    m_ndb.closeTransaction(pScanTrans);    return NDBT_FAILED;  }  check = pOp->interpret_exit_ok();  if( check == -1 ) {    ERR(pScanTrans->getNdbError());    m_ndb.closeTransaction(pScanTrans);    return NDBT_FAILED;  }  NdbRecAttr* balanceRec = pOp->getValue("BALANCE");  if( balanceRec ==NULL ) {    ERR(pScanTrans->getNdbError());    m_ndb.closeTransaction(pScanTrans);    return NDBT_FAILED;  }  check = pScanTrans->execute(NoCommit);     if( check == -1 ) {    ERR(pScanTrans->getNdbError());    m_ndb.closeTransaction(pScanTrans);    return NDBT_FAILED;  }  NdbConnection* pTrans = m_ndb.startTransaction();  if (pTrans == NULL) {    ERR(m_ndb.getNdbError());    m_ndb.closeTransaction(pScanTrans);    return NDBT_FAILED;  }     int eof;  eof = pOp->nextResult();      while(eof == 0){    Uint32 b = balanceRec->u_32_value();        sumAccounts += b;    numAccounts++;    //    ndbout << numAccounts << ": balance =" << b     //	   << ", sum="<< sumAccounts << endl;    // Take over the operation so that the lock is kept in db    NdbOperation* pLockOp = pOp->updateCurrentTuple(pTrans);    if (pLockOp == NULL){      ERR(m_ndb.getNdbError());      m_ndb.closeTransaction(pScanTrans);      m_ndb.closeTransaction(pTrans);      return NDBT_FAILED;    }        Uint32 illegalBalance = 99;    check = pLockOp->setValue("BALANCE", illegalBalance);    if( check == -1 ) {      ERR(pTrans->getNdbError());      m_ndb.closeTransaction(pTrans);      m_ndb.closeTransaction(pScanTrans);      return NDBT_FAILED;    }        // Execute transaction        check = pTrans->execute(NoCommit);    if( check == -1 ) {      ERR(pTrans->getNdbError());      m_ndb.closeTransaction(pScanTrans);      m_ndb.closeTransaction(pTrans);      return NDBT_FAILED;    }           eof = pOp->nextResult();  }  if (eof == -1) {    ERR(pScanTrans->getNdbError());    m_ndb.closeTransaction(pScanTrans);    m_ndb.closeTransaction(pTrans);    return NDBT_FAILED;  }  // TODO Forget about rolling back, just close pTrans!!  // Rollback transaction      check = pTrans->execute(Rollback);  if( check == -1 ) {    ERR(pTrans->getNdbError());    m_ndb.closeTransaction(pScanTrans);    m_ndb.closeTransaction(pTrans);    return NDBT_FAILED;  }             m_ndb.closeTransaction(pScanTrans);  m_ndb.closeTransaction(pTrans);  return NDBT_OK;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -