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

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 <BlockNumbers.h>
  14. #include <signaldata/ScanTab.hpp>
  15. #include <signaldata/ScanFrag.hpp>
  16. bool
  17. printSCANTABREQ(FILE * output, const Uint32 * theData, Uint32 len, Uint16 receiverBlockNo){
  18.   
  19.   const ScanTabReq * const sig = (ScanTabReq *) theData;
  20.   
  21.   const UintR requestInfo = sig->requestInfo;
  22.   fprintf(output, " apiConnectPtr: H'%.8x", 
  23.   sig->apiConnectPtr);
  24.   fprintf(output, " requestInfo: H'%.8x:n",  requestInfo);
  25.   fprintf(output, "  Parallellism: %u, Batch: %u LockMode: %u, Keyinfo: %u Holdlock: %u, RangeScan: %u ReadCommitted: %un",
  26.   sig->getParallelism(requestInfo), 
  27.   sig->getScanBatch(requestInfo), 
  28.   sig->getLockMode(requestInfo), 
  29.   sig->getKeyinfoFlag(requestInfo),
  30.   sig->getHoldLockFlag(requestInfo), 
  31.   sig->getRangeScanFlag(requestInfo),
  32.   sig->getReadCommittedFlag(requestInfo));
  33.   
  34.   Uint32 keyLen = (sig->attrLenKeyLen >> 16);
  35.   Uint32 attrLen = (sig->attrLenKeyLen & 0xFFFF);
  36.   fprintf(output, " attrLen: %d, keyLen: %d tableId: %d, tableSchemaVer: %dn",
  37.   attrLen, keyLen, sig->tableId, sig->tableSchemaVersion);
  38.     
  39.   fprintf(output, " transId(1, 2): (H'%.8x, H'%.8x) storedProcId: H'%.8xn",
  40.   sig->transId1, sig->transId2, sig->storedProcId);
  41.   fprintf(output, " batch_byte_size: %d, first_batch_size: %dn",
  42.           sig->batch_byte_size, sig->first_batch_size);
  43.   return false;
  44. }
  45. bool
  46. printSCANTABCONF(FILE * output, const Uint32 * theData, Uint32 len, Uint16 receiverBlockNo){
  47.   
  48.   const ScanTabConf * const sig = (ScanTabConf *) theData;
  49.   
  50.   const UintR requestInfo = sig->requestInfo;
  51.   fprintf(output, " apiConnectPtr: H'%.8xn", 
  52.   sig->apiConnectPtr);
  53.   fprintf(output, " transId(1, 2): (H'%.8x, H'%.8x)n",
  54.   sig->transId1, sig->transId2);
  55.   fprintf(output, " requestInfo: Eod: %d OpCount: %dn", 
  56.   (requestInfo & ScanTabConf::EndOfData == ScanTabConf::EndOfData),
  57.   (requestInfo & (~ScanTabConf::EndOfData)));
  58.   size_t op_count= requestInfo & (~ScanTabConf::EndOfData);
  59.   if(op_count){
  60.     fprintf(output, " Operation(s) [api tc rows len]:n");
  61.     ScanTabConf::OpData * op = (ScanTabConf::OpData*)
  62.       (theData + ScanTabConf::SignalLength);
  63.     for(size_t i = 0; i<op_count; i++){
  64.       if(op->info != ScanTabConf::EndOfData)
  65. fprintf(output, " [0x%x 0x%x %d %d]",
  66. op->apiPtrI, op->tcPtrI,
  67. ScanTabConf::getRows(op->info),
  68. ScanTabConf::getLength(op->info));
  69.       else
  70. fprintf(output, " [0x%x 0x%x eod]",
  71. op->apiPtrI, op->tcPtrI);
  72.       
  73.       op++;
  74.     }
  75.     fprintf(output, "n");
  76.   }
  77.   return false;
  78. }
  79. bool
  80. printSCANTABREF(FILE * output, const Uint32 * theData, Uint32 len, Uint16 receiverBlockNo){
  81.   
  82.   const ScanTabRef * const sig = (ScanTabRef *) theData;
  83.   
  84.   fprintf(output, " apiConnectPtr: H'%.8xn", 
  85.   sig->apiConnectPtr);
  86.   fprintf(output, " transId(1, 2): (H'%.8x, H'%.8x)n",
  87.   sig->transId1, sig->transId2);
  88.   
  89.   fprintf(output, " Errorcode: %un", sig->errorCode);
  90.   
  91.   fprintf(output, " closeNeeded: %un", sig->closeNeeded);
  92.   return false;
  93. }
  94. bool
  95. printSCANFRAGNEXTREQ(FILE * output, const Uint32 * theData, Uint32 len, Uint16 receiverBlockNo){
  96.   const ScanFragNextReq * const sig = (ScanFragNextReq *) theData;
  97.   
  98.   fprintf(output, " senderData: H'%.8xn", 
  99.   sig->senderData);
  100.   
  101.   fprintf(output, " transId(1, 2): (H'%.8x, H'%.8x)n",
  102.   sig->transId1, sig->transId2);
  103.   
  104.   fprintf(output, " Close scan: %un", sig->closeFlag);
  105.   return false;
  106. }
  107. bool
  108. printSCANNEXTREQ(FILE * output, const Uint32 * theData, Uint32 len, Uint16 receiverBlockNo){
  109.   if(receiverBlockNo == DBTC){
  110.     const ScanNextReq * const sig = (ScanNextReq *) theData;
  111.     
  112.     fprintf(output, " apiConnectPtr: H'%.8xn", 
  113.     sig->apiConnectPtr);
  114.     
  115.     fprintf(output, " transId(1, 2): (H'%.8x, H'%.8x) ",
  116.     sig->transId1, sig->transId2);
  117.     
  118.     fprintf(output, " Stop this scan: %un", sig->stopScan);
  119.     const Uint32 * ops = theData + ScanNextReq::SignalLength;
  120.     if(len > ScanNextReq::SignalLength){
  121.       fprintf(output, " tcFragPtr(s): ");
  122.       for(size_t i = ScanNextReq::SignalLength; i<len; i++)
  123. fprintf(output, " 0x%x", * ops++);
  124.       fprintf(output, "n");
  125.     }
  126.   }
  127.   if (receiverBlockNo == DBLQH){
  128.     return printSCANFRAGNEXTREQ(output, theData, len, receiverBlockNo);
  129.   }
  130.   return false;
  131. }