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

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 "records.hpp"
  14. void printOut(const char *string, Uint32 value) {
  15.   ndbout_c("%-30s%-12u%-12x", string, value, value);
  16. }
  17. //----------------------------------------------------------------
  18. // 
  19. //----------------------------------------------------------------
  20. bool AbortTransactionRecord::check() {
  21.   // Not implemented yet.
  22.   return true;
  23. }
  24. Uint32 AbortTransactionRecord::getLogRecordSize() {
  25.   return ABORTTRANSACTIONRECORDSIZE;
  26. }
  27. NdbOut& operator<<(NdbOut& no, const AbortTransactionRecord& atr) {
  28.   no << "----------ABORT TRANSACTION RECORD-------------" << endl << endl;
  29.   printOut("Record type:", atr.m_recordType);
  30.   printOut("TransactionId1:", atr.m_transactionId1);
  31.   printOut("TransactionId2:", atr.m_transactionId2);
  32.   no << endl;
  33.   return no;
  34. }
  35. //----------------------------------------------------------------
  36. // 
  37. //----------------------------------------------------------------
  38. bool NextMbyteRecord::check() {
  39.   // Not implemented yet.
  40.   return true;
  41. }
  42. Uint32 NextMbyteRecord::getLogRecordSize() {
  43.   return NEXTMBYTERECORDSIZE;
  44. }
  45. NdbOut& operator<<(NdbOut& no, const NextMbyteRecord& nmr) {
  46.   no << "----------NEXT MBYTE RECORD--------------------" << endl << endl;
  47.   printOut("Record type:", nmr.m_recordType);
  48.   no << endl;
  49.   return no;
  50. }
  51. //----------------------------------------------------------------
  52. // 
  53. //----------------------------------------------------------------
  54. bool CommitTransactionRecord::check() {
  55.   // Not implemented yet.
  56.   return true;
  57. }
  58. Uint32 CommitTransactionRecord::getLogRecordSize() {
  59.   return COMMITTRANSACTIONRECORDSIZE;
  60. }
  61. NdbOut& operator<<(NdbOut& no, const CommitTransactionRecord& ctr) {
  62.   no << "----------COMMIT TRANSACTION RECORD------------" << endl << endl;
  63.   printOut("Record type:", ctr.m_recordType);
  64.   printOut("TableId", ctr.m_tableId);
  65.   printOut("SchemaVersion:", ctr.m_schemaVersion);
  66.   printOut("FfragmentId", ctr.m_fragmentId);
  67.   printOut("File no. of Prep. Op.", ctr.m_fileNumberOfPrepareOperation);
  68.   printOut("Start page no. of Prep. Op.", ctr.m_startPageNumberOfPrepareOperation);
  69.   printOut("Start page index of Prep. Op.", ctr.m_startPageIndexOfPrepareOperation);
  70.   printOut("Stop page no. of Prep. Op.", ctr.m_stopPageNumberOfPrepareOperation);
  71.   printOut("GlobalCheckpoint", ctr.m_globalCheckpoint);
  72.   no << endl;
  73.   return no;
  74. }
  75. //----------------------------------------------------------------
  76. // 
  77. //----------------------------------------------------------------
  78. bool InvalidCommitTransactionRecord::check() {
  79.   // Not implemented yet.
  80.   return true;
  81. }
  82. Uint32 InvalidCommitTransactionRecord::getLogRecordSize() {
  83.   return COMMITTRANSACTIONRECORDSIZE;
  84. }
  85. NdbOut& operator<<(NdbOut& no, const InvalidCommitTransactionRecord& ictr) {
  86.   no << "------INVALID COMMIT TRANSACTION RECORD--------" << endl << endl;
  87.   printOut("Record type:", ictr.m_recordType);
  88.   printOut("TableId", ictr.m_tableId);
  89.   printOut("FfragmentId", ictr.m_fragmentId);
  90.   printOut("File no. of Prep. Op.", ictr.m_fileNumberOfPrepareOperation);
  91.   printOut("Start page no. of Prep. Op.", ictr.m_startPageNumberOfPrepareOperation);
  92.   printOut("Start page index of Prep. Op.", ictr.m_startPageIndexOfPrepareOperation);
  93.   printOut("Stop page no. of Prep. Op.", ictr.m_stopPageNumberOfPrepareOperation);
  94.   printOut("GlobalCheckpoint", ictr.m_globalCheckpoint);
  95.   no << endl;
  96.   return no;
  97. }
  98. //----------------------------------------------------------------
  99. // 
  100. //----------------------------------------------------------------
  101. bool PrepareOperationRecord::check() {
  102.   // Not fully implemented.
  103.   if (m_operationType == 3 && m_attributeLength != 0)
  104.     return false;
  105.   if (m_logRecordSize != (m_attributeLength + m_keyLength + 6))
  106.     return false;
  107.   return true;
  108. }
  109. Uint32 PrepareOperationRecord::getLogRecordSize(Uint32 wordsRead) {
  110.   if (wordsRead < 2)
  111.     return 2; // make sure we read more
  112.   return m_logRecordSize;
  113. }
  114. NdbOut& operator<<(NdbOut& no, const PrepareOperationRecord& por) {
  115.   no << "-----------PREPARE OPERATION RECORD------------" << endl << endl;
  116.   printOut("Record type:", por.m_recordType);
  117.   printOut("logRecordSize:", por.m_logRecordSize);
  118.   printOut("hashValue:", por.m_hashValue);
  119.   switch (por.m_operationType) {
  120.   case 0:
  121.     ndbout_c("%-30s%-12u%-6s", "operationType:", 
  122.      por.m_operationType, "read");
  123.     break;
  124.   case 1:
  125.     ndbout_c("%-30s%-12u%-6s", "operationType:", 
  126.      por.m_operationType, "update");
  127.     break;
  128.   case 2:
  129.     ndbout_c("%-30s%-12u%-6s", "operationType:", 
  130.      por.m_operationType, "insert");
  131.     break;
  132.   case 3:
  133.     ndbout_c("%-30s%-12u%-6s", "operationType:", 
  134.      por.m_operationType, "delete");
  135.     break;
  136.   default:
  137.     printOut("operationType:", por.m_operationType);
  138.   }
  139.   printOut("attributeLength:", por.m_attributeLength);
  140.   printOut("keyLength:", por.m_keyLength);
  141. #if 1
  142.   // Print keydata
  143.   Uint32* p = (Uint32*)&por.m_keyInfo;
  144.   for(Uint32 i=0; i < por.m_keyLength; i++){    
  145.     printOut("keydata:", *p);
  146.     p++;
  147.   }
  148.   // Print attrdata
  149.   for(Uint32 i=0; i < por.m_attributeLength; i++){    
  150.     printOut("attrdata:", *p);
  151.     p++;
  152.   }
  153. #endif
  154.   no << endl;
  155.   return no;
  156. }
  157. //----------------------------------------------------------------
  158. // 
  159. //----------------------------------------------------------------
  160. bool CompletedGCIRecord::check() {
  161.   // Not implemented yet.
  162.   return true;
  163. }
  164. Uint32 CompletedGCIRecord::getLogRecordSize() {
  165.   return COMPLETEDGCIRECORDSIZE;
  166. }
  167. NdbOut& operator<<(NdbOut& no, const CompletedGCIRecord& cGCIr) {
  168.   no << "-----------COMPLETED GCI RECORD----------------" << endl << endl;
  169.   printOut("Record type:", cGCIr.m_recordType);
  170.   printOut("Completed GCI:", cGCIr.m_theCompletedGCI);
  171.   no << endl;
  172.   return no;
  173. }
  174. //----------------------------------------------------------------
  175. // 
  176. //----------------------------------------------------------------
  177. bool NextLogRecord::check() {
  178.   // Not implemented yet.
  179.   return true;
  180. }
  181. Uint32 NextLogRecord::getLogRecordSize(Uint32 pageIndex) {
  182.   return PAGESIZE - pageIndex;
  183. }
  184. NdbOut& operator<<(NdbOut& no, const NextLogRecord& nl) {
  185.   no << "-----------NEXT LOG RECORD --------------------" << endl << endl;
  186.   printOut("Record type:", nl.m_recordType);
  187.   no << endl;
  188.   return no;
  189. }
  190. //----------------------------------------------------------------
  191. // 
  192. //----------------------------------------------------------------
  193. Uint32 PageHeader::getLogRecordSize() {
  194.   return PAGEHEADERSIZE;
  195. }
  196. bool PageHeader::check() {
  197.   // Not implemented yet.
  198.   return true;
  199. }
  200. bool PageHeader::lastPage()
  201. {
  202.   return m_next_page == 0xffffff00;
  203. }
  204. Uint32 PageHeader::lastWord()
  205. {
  206.   return m_current_page_index;
  207. }
  208. NdbOut& operator<<(NdbOut& no, const PageHeader& ph) {
  209.   no << "------------PAGE HEADER------------------------" << endl << endl;
  210.   ndbout_c("%-30s%-12s%-12sn", "", "Decimal", "Hex");
  211.   printOut("Checksum:", ph.m_checksum);
  212.   printOut("Laps since initial start:",  ph.m_lap);
  213.   printOut("Max gci completed:",  ph.m_max_gci_completed);
  214.   printOut("Max gci started:",  ph.m_max_gci_started);
  215.   printOut("Ptr to next page:", ph.m_next_page);  
  216.   printOut("Ptr to previous page:",  ph.m_previous_page);  
  217.   printOut("Ndb version:",  ph.m_ndb_version);
  218.   printOut("Number of log files:", ph.m_number_of_logfiles);
  219.   printOut("Current page index:",  ph.m_current_page_index);
  220.   printOut("Oldest prepare op. file No.:", ph.m_old_prepare_file_number);  
  221.   printOut("Oldest prepare op. page ref.:",  ph.m_old_prepare_page_reference);  
  222.   printOut("Dirty flag:", ph.m_dirty_flag);
  223.   printOut("Write Timer:", ph.m_log_timer);
  224.   printOut("Page i-val:", ph.m_page_i_value);
  225.   printOut("Place written:", ph.m_place_written_from);
  226.   printOut("Page No in File:", ph.m_page_no);
  227.   printOut("File No:", ph.m_file_no);
  228.   printOut("Word Written:", ph.m_word_written);
  229.   printOut("In Writing (should be 1)", ph.m_in_writing_flag);
  230.   printOut("Prev Page No (can be garbage)", ph.m_prev_page_no);
  231.   printOut("In Free List (should be 0):", ph.m_in_free_list);
  232.   no << endl;
  233.   return no;
  234. }
  235. //----------------------------------------------------------------
  236. // 
  237. //----------------------------------------------------------------
  238. Uint32 FileDescriptor::getLogRecordSize() {
  239.   return  FILEDESCRIPTORHEADERSIZE
  240.     + m_fdHeader.m_noOfDescriptors * FILEDESCRIPTORRECORDSIZE;
  241. }
  242. NdbOut& operator<<(NdbOut& no, const FileDescriptor& fd) {
  243.   no << "-------FILE DESCRIPTOR HEADER------------------" << endl << endl;
  244.   printOut("Record type:", fd.m_fdHeader.m_recordType);
  245.   printOut("Number of file descriptors:", fd.m_fdHeader.m_noOfDescriptors);
  246.   printOut("File number:", fd.m_fdHeader.m_fileNo);
  247.   ndbout << endl;
  248.   for(Uint32 i = 0; i < fd.m_fdHeader.m_noOfDescriptors; i++) {
  249.     fd.printARecord(i);
  250.   }
  251.   return no;
  252. }
  253. void FileDescriptor::printARecord( Uint32 recordIndex ) const {
  254.   ndbout << "------------------FILE DESCRIPTOR " << recordIndex 
  255.  <<" ---------------------" << endl << endl;
  256.   ndbout_c("%-30s%-12s%-12sn", "", "Decimal", "Hex"); 
  257.   for(int i = 1; i <= NO_MBYTE_IN_FILE; i++) {
  258.     ndbout_c("%s%2d%s%-12u%-12x", "Max GCI completed, mbyte ", i, ":  ", 
  259.      m_fdRecord[recordIndex].m_maxGciCompleted[i-1],
  260.      m_fdRecord[recordIndex].m_maxGciCompleted[i-1]);
  261.   }
  262.   for(int i = 1; i <= NO_MBYTE_IN_FILE; i++) {
  263.     ndbout_c("%s%2d%s%-12u%-12x", "Max GCI started,  mbyte ", i, ":   ", 
  264.      m_fdRecord[recordIndex].m_maxGciStarted[i-1],
  265.      m_fdRecord[recordIndex].m_maxGciStarted[i-1]);
  266.   }
  267.   for(int i = 1; i <= NO_MBYTE_IN_FILE; i++) {
  268.     ndbout_c("%s%2d%s%-12u%-12x", "Last prepared ref, mbyte ", i, ":  ", 
  269.      m_fdRecord[recordIndex].m_lastPreparedReference[i-1],
  270.      m_fdRecord[recordIndex].m_lastPreparedReference[i-1]);
  271.   }
  272.   ndbout << endl;
  273. }
  274. bool FileDescriptor::check() {
  275.   // Not implemented yet.
  276.   return true;
  277. }
  278. //----------------------------------------------------------------
  279. // 
  280. //----------------------------------------------------------------