Bank.hpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #ifndef BANK_HPP
  14. #define BANK_HPP
  15. #include <NdbOut.hpp>
  16. #include <NdbApi.hpp>
  17. #include <NDBT.hpp>
  18. #include <NdbTick.h>
  19. #include <random.h>
  20. class Bank {
  21. public:  
  22.   Bank(bool init = true);
  23.   int createAndLoadBank(bool overWrite, int num_accounts=10);
  24.   int dropBank();
  25.   
  26.   int performTransactions(int maxSleepBetweenTrans = 20, int yield=0);
  27.   int performMakeGLs(int yield=0);
  28.   int performValidateAllGLs();
  29.   int performSumAccounts(int maxSleepBetweenSums = 2000, int yield=0);
  30.   int performIncreaseTime(int maxSleepBetweenDays = 30, int yield=0);
  31. private:
  32.   int init();
  33.   enum TransactionTypes{
  34.     WithDrawal = 2000,
  35.     Deposit = 3000
  36.   };
  37.   
  38.   static const int NOT_ENOUGH_FUNDS = 1000;
  39.   static const int VERIFICATION_FAILED = 1001;  
  40.   int performTransaction();
  41.   int performTransaction(int fromAccountId,
  42.  int toAccountId,
  43.  int amount );
  44.   int performTransactionImpl1(int fromAccountId,
  45.       int toAccountId,
  46.       int amount );
  47.   int performValidateGLs(Uint64 age = 20);
  48.   int performValidateGL(Uint64 GLTime);
  49.   int performValidatePurged();
  50.   int performMakeGL(int time);
  51.   int performMakeGLForAccountType(NdbConnection* pTrans, 
  52.   Uint64 time,
  53.   Uint32 accountTypeId);
  54.   int sumTransactionsForGL(const Uint64 time, 
  55.    const Uint32 accountType,
  56.    Uint32& balance,
  57.    Uint32& withdrawalCount,
  58.    Uint32& withdrawalSum,
  59.    Uint32& depositSum,
  60.    Uint32& depositCount,
  61.    Uint32& transactionsCount,
  62.    NdbConnection* pTrans);
  63.   int getBalanceForAccountType(const Uint32 accountType,
  64.        Uint32& balance);
  65.   int getBalanceForGL(const Uint64 glTime,
  66.       const Uint32 accountType,
  67.       Uint32 &balance);
  68.     
  69.   int checkNoTransactionsOlderThan(const Uint32 accountType,
  70.    const Uint64 oldest);
  71.   int getOldestPurgedGL(const Uint32 accountType,
  72. Uint64 &oldest);
  73.   int getOldestNotPurgedGL(Uint64 &oldest,
  74.    Uint32 &accountTypeId,
  75.    bool &found);
  76.   int findLastGL(Uint64 &lastTime);
  77.   int purgeOldGLTransactions(Uint64 currTime, Uint32 age);
  78.   int purgeTransactions(const Uint64 glTime, 
  79. const Uint32 accountTypeId);
  80.   int findTransactionsToPurge(const Uint64 glTime, 
  81.      const Uint32 accountType,
  82.      NdbConnection* pTrans);
  83.   int getSumAccounts(Uint32 &sumAccounts, 
  84.      Uint32 &numAccounts);
  85.   int getNumAccounts();
  86.   int getNumAccountTypes();
  87.   int getMaxAmount();
  88.   enum SystemValueId {
  89.     LastTransactionId = 0,
  90.     CurrentTime = 1
  91.   };
  92.   int readSystemValue(SystemValueId sysValId, Uint64 & value);
  93.   int increaseSystemValue(SystemValueId sysValId, Uint64 &value);
  94.   int increaseSystemValue2(SystemValueId sysValId, Uint64 &value);
  95.   int writeSystemValue(SystemValueId sysValId, Uint64 value);
  96.   int getNextTransactionId(Uint64 &value);
  97.   int incCurrTime(Uint64 &value);
  98.   int getCurrTime(Uint64 &time);
  99.   int prepareReadSystemValueOp(NdbConnection*, SystemValueId sysValId, Uint64 &time);
  100.   int prepareGetCurrTimeOp(NdbConnection*, Uint64 &time);
  101.   int createTables();
  102.   int createTable(const char* tabName);
  103.   int dropTables();
  104.   int dropTable(const char* tabName);
  105.   int clearTables();
  106.   int clearTable(const char* tabName);
  107.   int loadGl();
  108.   int loadAccountType();
  109.   int loadAccount (int numAccounts);
  110.   int loadSystemValues();
  111. private:
  112.   Ndb m_ndb;
  113.   int m_maxAccount;
  114.   bool m_initialized;
  115. };
  116. #endif