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

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. #include <NdbApi.hpp>
  14. #include <NdbOut.hpp>
  15. #include <NdbMutex.h>
  16. #include "TraceNdbApi.hpp"
  17. int g_nParamTrace;
  18. NdbMutex* g_pNdbMutexTrace = 0;
  19. void TraceBegin(void)
  20. {
  21.   if(!g_pNdbMutexTrace)
  22.   {
  23.     g_pNdbMutexTrace = NdbMutex_Create();
  24.   }
  25.   NdbMutex_Lock(g_pNdbMutexTrace);
  26.   g_nParamTrace = 0;
  27. }
  28. void TraceEnd(void)
  29. {
  30.   ndbout << endl;
  31.   g_nParamTrace = 0;
  32.   NdbMutex_Unlock(g_pNdbMutexTrace);
  33. }
  34. void TraceMethod(const char* szMethod)
  35. {
  36.   ndbout << "->" << szMethod << "(";
  37.   g_nParamTrace = 0;
  38. }
  39. void TraceParamComma(void)
  40. {
  41.   if(g_nParamTrace)
  42.   {
  43.     ndbout << ", ";
  44.   }
  45.   ++g_nParamTrace;
  46. }
  47. void TraceNdb(Ndb* pNdb)
  48. {
  49.   TraceParamComma();
  50.   ndbout << "((Ndb*)" << hex << (Uint32)pNdb << ")";
  51. }
  52. void TraceNdbSchemaCon(NdbSchemaCon* pNdbSchemaCon)
  53. {
  54.   TraceParamComma();
  55.   ndbout << "((NdbSchemaCon*)" << hex << (Uint32)pNdbSchemaCon << ")";
  56. }
  57. void TraceNdbSchemaOp(NdbSchemaOp* pNdbSchemaOp)
  58. {
  59.   TraceParamComma();
  60.   ndbout << "((NdbSchemaOp*)" << hex << (Uint32)pNdbSchemaOp << ")";
  61. }
  62. void TraceNdbConnection(const NdbConnection* pNdbConnection)
  63. {
  64.   TraceParamComma();
  65.   ndbout << "((NdbConnection*)" << hex << (Uint32)pNdbConnection << ")";
  66. }
  67. void TraceNdbOperation(NdbOperation* pNdbOperation)
  68. {
  69.   TraceParamComma();
  70.   ndbout << "((NdbOperation*)" << hex << (Uint32)pNdbOperation << ")";
  71. }
  72. void TraceNdbIndexOperation(NdbIndexOperation* pNdbIndexOperation)
  73. {
  74.   TraceParamComma();
  75.   ndbout << "((NdbIndexOperation*)" << hex << (Uint32)pNdbIndexOperation << ")";
  76. }
  77. void TraceNdbRecAttr(NdbRecAttr* pNdbRecAttr)
  78. {
  79.   TraceParamComma();
  80.   ndbout << "((NdbRecAttr*)" << hex << (Uint32)pNdbRecAttr << ")";
  81. }
  82. void TraceTable(Table* pTable)
  83. {
  84.   TraceParamComma();
  85.   ndbout << "((Table*)" << hex << (Uint32)pTable << ")";
  86. }
  87. void TraceString(const char* szParam)
  88. {
  89.   TraceParamComma();
  90.   ndbout << """ << szParam << """;
  91. }
  92. void TraceInt(const int i)
  93. {
  94.   TraceParamComma();
  95.   ndbout << "(int)" << dec << i;
  96. }
  97. void TraceUint32(const Uint32 n)
  98. {
  99.   TraceParamComma();
  100.   ndbout << "(Uint32)" << dec << n;
  101. }
  102. void TraceKeyType(const KeyType aKeyType)
  103. {
  104.   TraceParamComma();
  105.   switch(aKeyType)
  106.   {
  107.   case Undefined: ndbout << "Undefined"; break;
  108.   case NoKey: ndbout << "NoKey"; break;
  109.   case TupleKey: ndbout << "TupleKey"; break;
  110.   case TupleId: ndbout << "TupleId"; break;
  111.   default:  ndbout << "(KeyType)" << aKeyType; break;
  112.   }
  113. }
  114. void TraceExecType(const ExecType aExecType)
  115. {
  116.   switch(aExecType)
  117.   {
  118.   case NoExecTypeDef: ndbout << "NoExecTypeDef"; break;
  119.   case Prepare: ndbout << "Prepare"; break;
  120.   case NoCommit: ndbout << "NoCommit"; break;
  121.   case Commit: ndbout << "Commit"; break;
  122.   case Rollback: ndbout << "Rollback"; break;
  123.   default: ndbout << "(ExecType)" << aExecType; break;
  124.   }
  125. }
  126. void TraceNdbError(const NdbError& err)
  127. {
  128.   TraceParamComma();
  129.   ndbout << "(NdbError)" << err;
  130. }
  131. void TraceVoid(void)
  132. {
  133.   ndbout << "void";
  134. }
  135. void TraceReturn(void)
  136. {
  137.   ndbout << "); // return ";
  138.   g_nParamTrace = 0;
  139. }
  140. // TraceNdbSchemaOp
  141. int CTraceNdbSchemaOp::createTable(const char* aTableName)
  142. {
  143.   int i = NdbSchemaOp::createTable(aTableName);
  144.   TraceBegin();
  145.   TraceNdbSchemaOp(this);
  146.   TraceMethod("createTable");
  147.   TraceString(aTableName);
  148.   TraceReturn();
  149.   TraceInt(i);
  150.   TraceEnd();
  151.   return i;
  152. }
  153. int CTraceNdbSchemaOp::createAttribute(const char* aAttrName, KeyType aTupleyKey)
  154. {
  155.   int i = NdbSchemaOp::createAttribute(aAttrName, aTupleyKey);
  156.   TraceBegin();
  157.   TraceNdbSchemaOp(this);
  158.   TraceMethod("createAttribute");
  159.   TraceString(aAttrName);
  160.   TraceKeyType(aTupleyKey);
  161.   TraceReturn();
  162.   TraceInt(i);
  163.   TraceEnd();
  164.   return i;
  165. }
  166. // TraceNdbSchemaCon
  167. CTraceNdbSchemaOp* CTraceNdbSchemaCon::getNdbSchemaOp()
  168.   NdbSchemaOp* pNdbSchemaOp = NdbSchemaCon::getNdbSchemaOp();
  169.   TraceBegin();
  170.   TraceNdbSchemaCon(this);
  171.   TraceMethod("getNdbSchemaOp");
  172.   TraceReturn();
  173.   TraceNdbSchemaOp(pNdbSchemaOp);
  174.   TraceEnd();
  175.   return (CTraceNdbSchemaOp*)pNdbSchemaOp; 
  176. }
  177. int CTraceNdbSchemaCon::execute()
  178. {
  179.   int i = NdbSchemaCon::execute();
  180.   TraceBegin();
  181.   TraceNdbSchemaCon(this);
  182.   TraceMethod("execute");
  183.   TraceReturn();
  184.   TraceInt(i);
  185.   TraceEnd();
  186.   return i;
  187. }
  188. // TraceNdbRecAttr
  189. Uint32 CTraceNdbRecAttr::u_32_value()
  190. {
  191.   Uint32 n = NdbRecAttr::u_32_value();
  192.   TraceBegin();
  193.   TraceNdbRecAttr(this);
  194.   TraceMethod("u_32_value");
  195.   TraceReturn();
  196.   TraceUint32(n);
  197.   TraceEnd();
  198.   return n;
  199. }
  200. // TraceNdbOperation
  201. int CTraceNdbOperation::insertTuple()
  202. {
  203.   int i = NdbOperation::insertTuple();
  204.   TraceBegin();
  205.   TraceNdbOperation(this);
  206.   TraceMethod("insertTuple");
  207.   TraceReturn();
  208.   TraceInt(i);
  209.   TraceEnd();
  210.   return i;
  211. }
  212. int CTraceNdbOperation::updateTuple()
  213. {
  214.   int i = NdbOperation::updateTuple();
  215.   TraceBegin();
  216.   TraceNdbOperation(this);
  217.   TraceMethod("updateTuple");
  218.   TraceReturn();
  219.   TraceInt(i);
  220.   TraceEnd();
  221.   return i;
  222. }
  223. int CTraceNdbOperation::interpretedUpdateTuple()
  224. {
  225.   int i = NdbOperation::interpretedUpdateTuple();
  226.   TraceBegin();
  227.   TraceNdbOperation(this);
  228.   TraceMethod("interpretedUpdateTuple");
  229.   TraceReturn();
  230.   TraceInt(i);
  231.   TraceEnd();
  232.   return i;
  233. }
  234. int CTraceNdbOperation::readTuple()
  235. {
  236.   int i = NdbOperation::readTuple();
  237.   TraceBegin();
  238.   TraceNdbOperation(this);
  239.   TraceMethod("readTuple");
  240.   TraceReturn();
  241.   TraceInt(i);
  242.   TraceEnd();
  243.   return i;
  244. }
  245. int CTraceNdbOperation::readTupleExclusive()
  246. {
  247.   int i = NdbOperation::readTupleExclusive();
  248.   TraceBegin();
  249.   TraceNdbOperation(this);
  250.   TraceMethod("readTupleExclusive");
  251.   TraceReturn();
  252.   TraceInt(i);
  253.   TraceEnd();
  254.   return i;
  255. }
  256. int CTraceNdbOperation::deleteTuple()
  257. {
  258.   int i = NdbOperation::deleteTuple();
  259.   TraceBegin();
  260.   TraceNdbOperation(this);
  261.   TraceMethod("deleteTuple");
  262.   TraceReturn();
  263.   TraceInt(i);
  264.   TraceEnd();
  265.   return i;
  266. }
  267. int CTraceNdbOperation::equal(const char* anAttrName, Uint32 aValue)
  268. {
  269.   int i = NdbOperation::equal(anAttrName, aValue);
  270.   TraceBegin();
  271.   TraceNdbOperation(this);
  272.   TraceMethod("equal");
  273.   TraceString(anAttrName);
  274.   TraceUint32(aValue);
  275.   TraceReturn();
  276.   TraceInt(i);
  277.   TraceEnd();
  278.   return i;
  279. }
  280. int CTraceNdbOperation::setValue(const char* anAttrName, Uint32 aValue)
  281. {
  282.   int i = NdbOperation::setValue(anAttrName, aValue);
  283.   TraceBegin();
  284.   TraceNdbOperation(this);
  285.   TraceMethod("setValue");
  286.   TraceString(anAttrName);
  287.   TraceUint32(aValue);
  288.   TraceReturn();
  289.   TraceInt(i);
  290.   TraceEnd();
  291.   return i;
  292. }
  293. int CTraceNdbOperation::incValue(const char* anAttrName, Uint32 aValue)
  294. {
  295.   int i = NdbOperation::incValue(anAttrName, aValue);
  296.   TraceBegin();
  297.   TraceNdbOperation(this);
  298.   TraceMethod("incValue");
  299.   TraceString(anAttrName);
  300.   TraceUint32(aValue);
  301.   TraceReturn();
  302.   TraceInt(i);
  303.   TraceEnd();
  304.   return i;
  305. }
  306. CTraceNdbRecAttr* CTraceNdbOperation::getValue(const char* anAttrName)
  307. {
  308.   NdbRecAttr* pNdbRecAttr = NdbOperation::getValue(anAttrName);
  309.   TraceBegin();
  310.   TraceNdbOperation(this);
  311.   TraceMethod("getValue");
  312.   TraceString(anAttrName);
  313.   TraceReturn();
  314.   TraceNdbRecAttr(pNdbRecAttr);
  315.   TraceEnd();
  316.   return (CTraceNdbRecAttr*)pNdbRecAttr;
  317. }
  318. // TraceNdbIndexOperation
  319. int CTraceNdbIndexOperation::equal(const char* anAttrName, Uint32 aValue)
  320. {
  321.   int i = NdbIndexOperation::equal(anAttrName, aValue);
  322.   TraceBegin();
  323.   TraceNdbIndexOperation(this);
  324.   TraceMethod("equal");
  325.   TraceString(anAttrName);
  326.   TraceUint32(aValue);
  327.   TraceReturn();
  328.   TraceInt(i);
  329.   TraceEnd();
  330.   return i;
  331. }
  332. int CTraceNdbIndexOperation::incValue(const char* anAttrName, Uint32 aValue)
  333. {
  334.   int i = NdbIndexOperation::incValue(anAttrName, aValue);
  335.   TraceBegin();
  336.   TraceNdbIndexOperation(this);
  337.   TraceMethod("incValue");
  338.   TraceString(anAttrName);
  339.   TraceUint32(aValue);
  340.   TraceReturn();
  341.   TraceInt(i);
  342.   TraceEnd();
  343.   return i;
  344. }
  345. CTraceNdbRecAttr* CTraceNdbIndexOperation::getValue(const char* anAttrName)
  346. {
  347.   NdbRecAttr* pNdbRecAttr = NdbIndexOperation::getValue(anAttrName);
  348.   TraceBegin();
  349.   TraceNdbIndexOperation(this);
  350.   TraceMethod("getValue");
  351.   TraceString(anAttrName);
  352.   TraceReturn();
  353.   TraceNdbRecAttr(pNdbRecAttr);
  354.   TraceEnd();
  355.   return (CTraceNdbRecAttr*)pNdbRecAttr;
  356. }
  357. // TraceNdbConnection
  358. CTraceNdbOperation* CTraceNdbConnection::getNdbOperation(const char* aTableName)
  359. {
  360.   NdbOperation* pNdbOperation = NdbConnection::getNdbOperation(aTableName);
  361.   TraceBegin();
  362.   TraceNdbConnection(this);
  363.   TraceMethod("getNdbOperation");
  364.   TraceString(aTableName);
  365.   TraceReturn();
  366.   TraceNdbOperation(pNdbOperation);
  367.   TraceEnd();
  368.   return (CTraceNdbOperation*)pNdbOperation; 
  369. }
  370. CTraceNdbIndexOperation* CTraceNdbConnection::getNdbIndexOperation(const char* anIndexName, const char* aTableName)
  371. {
  372.   NdbIndexOperation* pNdbIndexOperation = NdbConnection::getNdbIndexOperation(anIndexName, aTableName);
  373.   TraceBegin();
  374.   TraceNdbConnection(this);
  375.   TraceMethod("getNdbIndexOperation");
  376.   TraceString(anIndexName);
  377.   TraceString(aTableName);
  378.   TraceReturn();
  379.   TraceNdbIndexOperation(pNdbIndexOperation);
  380.   TraceEnd();
  381.   return (CTraceNdbIndexOperation*)pNdbIndexOperation; 
  382. }
  383. int CTraceNdbConnection::execute(ExecType aTypeOfExec)
  384. {
  385.   int i = NdbConnection::execute(aTypeOfExec);
  386.   TraceBegin();
  387.   TraceNdbConnection(this);
  388.   TraceMethod("execute");
  389.   TraceExecType(aTypeOfExec);
  390.   TraceReturn();
  391.   TraceInt(i);
  392.   TraceEnd();
  393.   return i;
  394. }
  395. const NdbError & CTraceNdbConnection::getNdbError(void) const
  396. {
  397.   const NdbError& err = NdbConnection::getNdbError();
  398.   TraceBegin();
  399.   TraceNdbConnection(this);
  400.   TraceMethod("getNdbError");
  401.   TraceReturn();
  402.   TraceNdbError(err);
  403.   TraceEnd();
  404.   return err;
  405. }
  406. // TraceNdb
  407. CTraceNdb::CTraceNdb(const char* aDataBase)
  408. : Ndb(aDataBase) 
  409. {
  410.   TraceBegin();
  411.   TraceNdb(this);
  412.   TraceMethod("Ndb");
  413.   TraceString(aDataBase);
  414.   TraceReturn();
  415.   TraceVoid();
  416.   TraceEnd();
  417. }
  418. CTraceNdbSchemaCon* CTraceNdb::startSchemaTransaction() 
  419.   NdbSchemaCon* pNdbSchemaCon = Ndb::startSchemaTransaction();
  420.   TraceBegin();
  421.   TraceNdb(this);
  422.   TraceMethod("startSchemaTransaction");
  423.   TraceReturn();
  424.   TraceNdbSchemaCon(pNdbSchemaCon);
  425.   TraceEnd();
  426.   return (CTraceNdbSchemaCon*)pNdbSchemaCon;
  427. }
  428. void CTraceNdb::closeSchemaTransaction(CTraceNdbSchemaCon* aSchemaCon)
  429. {
  430.   Ndb::closeSchemaTransaction(aSchemaCon);
  431.   TraceBegin();
  432.   TraceNdb(this);
  433.   TraceMethod("closeSchemaTransaction");
  434.   TraceReturn();
  435.   TraceVoid();
  436.   TraceEnd();
  437. }
  438. CTraceNdbConnection* CTraceNdb::startTransaction()
  439.   NdbConnection* pNdbConnection = Ndb::startTransaction();
  440.   TraceBegin();
  441.   TraceNdb(this);
  442.   TraceMethod("startTransaction");
  443.   TraceReturn();
  444.   TraceNdbConnection(pNdbConnection);
  445.   TraceEnd();
  446.   return (CTraceNdbConnection*)pNdbConnection;
  447. }
  448. void CTraceNdb::closeTransaction(CTraceNdbConnection* aConnection)
  449. {
  450.   Ndb::closeTransaction(aConnection);
  451.   TraceBegin();
  452.   TraceNdb(this);
  453.   TraceMethod("closeTransaction");
  454.   TraceNdbConnection(aConnection);
  455.   TraceReturn();
  456.   TraceVoid();
  457.   TraceEnd();
  458. }