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

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 SUMA_IMPL_HPP
  14. #define SUMA_IMPL_HPP
  15. #include "SignalData.hpp"
  16. #include <NodeBitmask.hpp>
  17. class SubCreateReq {
  18.   /**
  19.    * Sender(s)/Reciver(s)
  20.    */
  21.   friend class Grep;
  22.   friend class SumaParticipant;
  23.   
  24.   friend bool printSUB_CREATE_REQ(FILE *, const Uint32 *, Uint32, Uint16);
  25. public:
  26.   STATIC_CONST( SignalLength = 5 );
  27.   
  28.   enum SubscriptionType {
  29.     SingleTableScan  = 1,  // 
  30.     DatabaseSnapshot = 2, // All tables/all data (including new ones)
  31.     TableEvent  = 3,       //
  32.     SelectiveTableSnapshot  = 4,  // User defines tables
  33.     RemoveFlags  = 0xff,
  34.     GetFlags     = 0xff << 16,
  35.     AddTableFlag = 0x1 << 16,
  36.     RestartFlag  = 0x2 << 16
  37.   };
  38.   
  39.   Uint32 subscriberRef;
  40.   Uint32 subscriberData;
  41.   Uint32 subscriptionId;
  42.   Uint32 subscriptionKey;
  43.   Uint32 subscriptionType;
  44.   union {
  45.     Uint32 tableId; // Used when doing SingelTableScan
  46.   };
  47.   SECTION( ATTRIBUTE_LIST = 0); // Used when doing SingelTableScan  
  48.   SECTION( TABLE_LIST = 1 );  
  49.   
  50. };
  51. class SubCreateRef {
  52.   /**
  53.    * Sender(s)/Reciver(s)
  54.    */
  55.   friend class Grep;
  56.   friend class SumaParticipant;
  57.   
  58.   friend bool printSUB_CREATE_REF(FILE *, const Uint32 *, Uint32, Uint16);
  59. public:
  60.   STATIC_CONST( SignalLength = 6 );
  61.   Uint32 subscriberRef;
  62.   Uint32 subscriberData;
  63.   Uint32 subscriptionId;
  64.   Uint32 subscriptionKey;
  65.   Uint32 subscriptionType;
  66.   Uint32 err;
  67.   SECTION( ATTRIBUTE_LIST = 0); // Used when doing SingelTableScan
  68.   union {
  69.     Uint32 tableId; // Used when doing SingelTableScan
  70.   };
  71. };
  72. class SubCreateConf {
  73.   /**
  74.    * Sender(s)/Reciver(s)
  75.    */
  76.   friend class Grep;
  77.   friend class SumaParticipant;
  78.   
  79.   friend bool printSUB_CREATE_CONF(FILE *, const Uint32 *, Uint32, Uint16);
  80. public:
  81.   STATIC_CONST( SignalLength = 3 );
  82.   
  83.   Uint32 subscriberData;
  84.   Uint32 subscriptionId;
  85.   Uint32 subscriptionKey;
  86. };
  87. class SubscriptionData {
  88. public:
  89.   enum Part {
  90.     MetaData = 1,
  91.     TableData = 2
  92.   };
  93. };
  94. class SubStartReq {
  95.   /**
  96.    * Sender(s)/Reciver(s)
  97.    */
  98.   friend class Suma;
  99.   
  100.   friend bool printSUB_START_REQ(FILE *, const Uint32 *, Uint32, Uint16);
  101. public:
  102.   STATIC_CONST( SignalLength = 6 );
  103.   STATIC_CONST( SignalLength2 = SignalLength+1 );
  104.   Uint32 senderRef;
  105.   Uint32 senderData;
  106.   Uint32 subscriptionId;
  107.   Uint32 subscriptionKey;
  108.   Uint32 part;  // SubscriptionData::Part
  109.   Uint32 subscriberData;
  110.   Uint32 subscriberRef;
  111. };
  112. class SubStartRef {
  113.   /**
  114.    * Sender(s)/Reciver(s)
  115.    */
  116.   friend class Suma;
  117.   
  118.   friend bool printSUB_START_REF(FILE *, const Uint32 *, Uint32, Uint16);
  119. public:
  120.   enum ErrorCode {
  121.     Undefined = 0,
  122.     NF_FakeErrorREF = 11,
  123.     Busy = 701,
  124.     Temporary = 0x1 << 16
  125.   };
  126.   bool isTemporary() const;
  127.   void setTemporary();
  128.   ErrorCode setTemporary(ErrorCode ec);
  129.   STATIC_CONST( SignalLength = 7 );
  130.   STATIC_CONST( SignalLength2 = SignalLength+1 );
  131.   
  132.   Uint32 senderRef;
  133.   Uint32 senderData;
  134.   Uint32 subscriptionId;
  135.   Uint32 subscriptionKey;
  136.   Uint32 part;  // SubscriptionData::Part
  137.   Uint32 subscriberData;
  138.   union { // do not change the order here!
  139.     Uint32 err;
  140.     Uint32 errorCode;
  141.   };
  142.   // with SignalLength2
  143.   Uint32 subscriberRef;
  144. };
  145. inline bool SubStartRef::isTemporary() const
  146. { return (errorCode &  SubStartRef::Temporary) > 0; }
  147. inline void SubStartRef::setTemporary()
  148. { errorCode |=  SubStartRef::Temporary; }
  149. inline SubStartRef::ErrorCode SubStartRef::setTemporary(ErrorCode ec)
  150. { return (SubStartRef::ErrorCode) 
  151.     (errorCode = ((Uint32) ec | (Uint32)SubStartRef::Temporary)); }
  152. class SubStartConf {
  153.   /**
  154.    * Sender(s)/Reciver(s)
  155.    */
  156.   friend class Grep;
  157.   
  158.   friend bool printSUB_START_CONF(FILE *, const Uint32 *, Uint32, Uint16);
  159. public:
  160.   STATIC_CONST( SignalLength = 7 );
  161.   STATIC_CONST( SignalLength2 = SignalLength+1 );
  162.   Uint32 senderRef;
  163.   Uint32 senderData;
  164.   Uint32 subscriptionId;
  165.   Uint32 subscriptionKey;
  166.   Uint32 firstGCI;
  167.   Uint32 part;  // SubscriptionData::Part
  168.   Uint32 subscriberData;
  169.   // with SignalLength2
  170.   Uint32 subscriberRef;
  171. };
  172. class SubStopReq {
  173.   /**
  174.    * Sender(s)/Reciver(s)
  175.    */
  176.   friend class Suma;
  177.   
  178.   friend bool printSUB_STOP_REQ(FILE *, const Uint32 *, Uint32, Uint16);
  179. public:
  180.   STATIC_CONST( SignalLength = 7 );
  181.   Uint32 senderRef;
  182.   Uint32 senderData;
  183.   Uint32 subscriptionId;
  184.   Uint32 subscriptionKey;
  185.   Uint32 part;  // SubscriptionData::Part
  186.   Uint32 subscriberData;
  187.   Uint32 subscriberRef;
  188. };
  189. class SubStopRef {
  190.   /**
  191.    * Sender(s)/Reciver(s)
  192.    */
  193.   friend class Suma;
  194.   
  195.   friend bool printSUB_STOP_REF(FILE *, const Uint32 *, Uint32, Uint16);
  196. public:
  197.   enum ErrorCode {
  198.     Undefined = 0,
  199.     NF_FakeErrorREF = 11,
  200.     Busy = 701,
  201.     Temporary = 0x1 << 16
  202.   };
  203.   bool isTemporary() const;
  204.   void setTemporary();
  205.   ErrorCode setTemporary(ErrorCode ec);
  206.   STATIC_CONST( SignalLength = 8 );
  207.   
  208.   Uint32 senderRef;
  209.   Uint32 senderData;
  210.   Uint32 subscriptionId;
  211.   Uint32 subscriptionKey;
  212.   Uint32 part;  // SubscriptionData::Part
  213.   Uint32 subscriberData;
  214.   Uint32 subscriberRef;
  215.   union {
  216.     Uint32 err;
  217.     Uint32 errorCode;
  218.   };
  219. };
  220. inline bool SubStopRef::isTemporary() const
  221. { return (errorCode &  SubStopRef::Temporary) > 0; }
  222. inline void SubStopRef::setTemporary()
  223. { errorCode |=  SubStopRef::Temporary; }
  224. inline SubStopRef::ErrorCode SubStopRef::setTemporary(ErrorCode ec)
  225. { return (SubStopRef::ErrorCode) 
  226.     (errorCode = ((Uint32) ec | (Uint32)SubStopRef::Temporary)); }
  227. class SubStopConf {
  228.   /**
  229.    * Sender(s)/Reciver(s)
  230.    */
  231.   friend class Grep;
  232.   
  233.   friend bool printSUB_STOP_CONF(FILE *, const Uint32 *, Uint32, Uint16);
  234. public:
  235.   STATIC_CONST( SignalLength = 7 );
  236.   Uint32 senderRef;
  237.   Uint32 senderData;
  238.   Uint32 subscriptionId;
  239.   Uint32 subscriptionKey;
  240.   Uint32 part;  // SubscriptionData::Part
  241.   Uint32 subscriberData;
  242.   Uint32 subscriberRef;
  243. };
  244. class SubSyncReq {
  245.   /**
  246.    * Sender(s)/Reciver(s)
  247.    */
  248.   friend class Suma;
  249.   friend class Grep;
  250.   
  251.   friend bool printSUB_SYNC_REQ(FILE *, const Uint32 *, Uint32, Uint16);
  252. public:
  253.   STATIC_CONST( SignalLength = 4 );
  254.   
  255. public:
  256.   Uint32 subscriptionId;
  257.   Uint32 subscriptionKey;
  258.   Uint32 subscriberData;
  259.   Uint32 part; // SubscriptionData::Part
  260. };
  261. class SubSyncRef {
  262.   /**
  263.    * Sender(s)/Reciver(s)
  264.    */
  265.   friend class Suma;
  266.   friend class Grep;
  267.   
  268.   friend bool printSUB_SYNC_REF(FILE *, const Uint32 *, Uint32, Uint16);
  269. public:
  270.   enum ErrorCode {
  271.     Undefined = 0,
  272.     Temporary = 0x1 << 16
  273.   };
  274.   STATIC_CONST( SignalLength = 5 );
  275.   
  276.   Uint32 subscriptionId;
  277.   Uint32 subscriptionKey;
  278.   Uint32 part; // SubscriptionData::Part
  279.   Uint32 subscriberData;
  280.   union {
  281.     Uint32 errorCode;
  282.     Uint32 err;
  283.   };
  284. };
  285. class SubSyncConf {
  286.   /**
  287.    * Sender(s)/Reciver(s)
  288.    */
  289.   friend class Suma;
  290.   friend class Grep;
  291.   
  292.   friend bool printSUB_SYNC_CONF(FILE *, const Uint32 *, Uint32, Uint16);
  293. public:
  294.   STATIC_CONST( SignalLength = 4 );
  295.   
  296.   Uint32 subscriptionId;
  297.   Uint32 subscriptionKey;
  298.   Uint32 part;  // SubscriptionData::Part
  299.   Uint32 subscriberData;
  300. };
  301. class SubMetaData {
  302.   /**
  303.    * Sender(s)/Reciver(s)
  304.    */
  305.   friend class SumaParticipant;
  306.   friend class Grep;
  307.   
  308.   friend bool printSUB_META_DATA(FILE *, const Uint32 *, Uint32, Uint16);
  309. public:
  310.   STATIC_CONST( SignalLength = 3 );
  311.   SECTION( DICT_TAB_INFO = 0 );
  312.   
  313.   Uint32 gci;
  314.   union { // Haven't decide what to call it
  315.     Uint32 senderData;
  316.     Uint32 subscriberData;
  317.   };
  318.   union {
  319.     Uint32 tableId;
  320.   };
  321. };
  322. class SubTableData {
  323.   /**
  324.    * Sender(s)/Reciver(s)
  325.    */
  326.   friend class SumaParticipant;
  327.   friend class Grep;
  328.   
  329.   friend bool printSUB_TABLE_DATA(FILE *, const Uint32 *, Uint32, Uint16);
  330. public:
  331.   STATIC_CONST( SignalLength = 7 );
  332.   
  333.   enum LogType {
  334.     SCAN = 1, 
  335.     LOG  = 2,
  336.     REMOVE_FLAGS = 0xff,
  337.     GCINOTCONSISTENT = 0x1 << 16
  338.   };
  339.   
  340.   void setGCINotConsistent() { logType |= (Uint32)GCINOTCONSISTENT; };
  341.   bool isGCIConsistent()
  342.   { return (logType & (Uint32)GCINOTCONSISTENT) == 0 ? true : false; };
  343.   union { // Haven't decide what to call it
  344.     Uint32 senderData;
  345.     Uint32 subscriberData;
  346.   };
  347.   Uint32 gci;
  348.   Uint32 tableId;
  349.   Uint32 operation;
  350.   Uint32 noOfAttributes;
  351.   Uint32 dataSize; 
  352.   Uint32 logType;
  353. };
  354. class SubSyncContinueReq {
  355.   /**
  356.    * Sender(s)/Reciver(s)
  357.    */
  358.   friend class SumaParticipant;
  359.   friend class Grep;
  360.   friend class Trix;
  361.   
  362.   friend bool printSUB_SYNC_CONTINUE_REQ(FILE *, const Uint32 *, Uint32, Uint16);
  363. public:
  364.   STATIC_CONST( SignalLength = 2 );
  365.   union { // Haven't decide what to call it
  366.     Uint32 senderData;
  367.     Uint32 subscriberData;
  368.   };
  369.   Uint32 noOfRowsSent;
  370. };
  371. class SubSyncContinueRef {
  372.   /**
  373.    * Sender(s)/Reciver(s)
  374.    */
  375.   friend class SumaParticipant;
  376.   friend class Grep;
  377.   friend class Trix;
  378.   
  379.   friend bool printSUB_SYNC_CONTINUE_REF(FILE *, const Uint32 *, Uint32, Uint16);
  380. public:
  381.   STATIC_CONST( SignalLength = 2 );
  382.   Uint32 subscriptionId;
  383.   Uint32 subscriptionKey;
  384. };
  385. class SubSyncContinueConf {
  386.   /**
  387.    * Sender(s)/Reciver(s)
  388.    */
  389.   friend class SumaParticipant;
  390.   friend class Grep;
  391.   friend class Trix;
  392.   
  393.   friend bool printSUB_SYNC_CONTINUE_CONF(FILE *, const Uint32 *, Uint32, Uint16);
  394. public:
  395.   STATIC_CONST( SignalLength = 2 );
  396.   Uint32 subscriptionId;
  397.   Uint32 subscriptionKey;
  398. };
  399. class SubGcpCompleteRep {
  400.   /**
  401.    * Sender(s)/Reciver(s)
  402.    */
  403.   friend class Dbdih;
  404.   friend class SumaParticipant;
  405.   friend class Grep;
  406.   friend class Trix;
  407.   
  408.   friend bool printSUB_GCP_COMPLETE_REP(FILE *, const Uint32 *, Uint32, Uint16);
  409. public:
  410.   STATIC_CONST( SignalLength = 3 );
  411.   
  412.   Uint32 gci;
  413.   Uint32 senderRef;
  414.   union { // Haven't decide what to call it
  415.     Uint32 senderData;
  416.     Uint32 subscriberData;
  417.   };
  418. };
  419. class SubGcpCompleteAcc {
  420.   /**
  421.    * Sender(s)/Reciver(s)
  422.    */
  423. public:
  424.   STATIC_CONST( SignalLength = SubGcpCompleteRep::SignalLength );
  425.   SubGcpCompleteRep rep;
  426. };
  427. class SubRemoveReq {
  428.   /**
  429.    * Sender(s)/Reciver(s)
  430.    */
  431.   friend class Grep;
  432.   friend class SumaParticipant;
  433.   
  434.   friend bool printSUB_REMOVE_REQ(FILE *, const Uint32 *, Uint32, Uint16);
  435. public:
  436.   STATIC_CONST( SignalLength = 4 );
  437.   
  438.   Uint32 senderRef;
  439.   Uint32 senderData;
  440.   Uint32 subscriptionId;
  441.   Uint32 subscriptionKey;
  442. };
  443. class SubRemoveRef {
  444.   /**
  445.    * Sender(s)/Reciver(s)
  446.    */
  447.   friend class Grep;
  448.   friend class SumaParticipant;
  449.   
  450.   friend bool printSUB_REMOVE_REF(FILE *, const Uint32 *, Uint32, Uint16);
  451. public:
  452.   STATIC_CONST( SignalLength = 5 );
  453.   enum ErrorCode {
  454.     Undefined = 0,
  455.     NF_FakeErrorREF = 11,
  456.     Busy = 701,
  457.     Temporary = 0x1 << 16
  458.   };
  459.   bool isTemporary() const;
  460.   void setTemporary();
  461.   ErrorCode setTemporary(ErrorCode ec);
  462.   Uint32 senderRef;
  463.   Uint32 subscriptionId;
  464.   Uint32 subscriptionKey;
  465.   union {
  466.     Uint32 err;
  467.     Uint32 errorCode;
  468.   };
  469.   union { // Haven't decide what to call it
  470.     Uint32 senderData;
  471.     Uint32 subscriberData;
  472.   };
  473. };
  474. inline bool SubRemoveRef::isTemporary() const
  475. { return (err &  SubRemoveRef::Temporary) > 0; }
  476. inline void SubRemoveRef::setTemporary()
  477. { err |=  SubRemoveRef::Temporary; }
  478. inline SubRemoveRef::ErrorCode SubRemoveRef::setTemporary(ErrorCode ec)
  479. { return (SubRemoveRef::ErrorCode) 
  480.     (errorCode = ((Uint32) ec | (Uint32)SubRemoveRef::Temporary)); }
  481. class SubRemoveConf {
  482.   /**
  483.    * Sender(s)/Reciver(s)
  484.    */
  485.   friend class Grep;
  486.   friend class SumaParticipant;
  487.   
  488.   friend bool printSUB_REMOVE_CONF(FILE *, const Uint32 *, Uint32, Uint16);
  489. public:
  490.   STATIC_CONST( SignalLength = 5 );
  491.   
  492.   Uint32 senderRef;
  493.   Uint32 subscriptionId;
  494.   Uint32 subscriptionKey;
  495.   Uint32 err;
  496.   union { // Haven't decide what to call it
  497.     Uint32 senderData;
  498.     Uint32 subscriberData;
  499.   };
  500. };
  501. class CreateSubscriptionIdReq {
  502.   friend class Grep;
  503.   friend class SumaParticipant;
  504.   
  505.   friend bool printCREATE_SUBSCRIPTION_ID_REQ(FILE *, const Uint32 *, 
  506.        Uint32, Uint16);
  507. public:
  508.   STATIC_CONST( SignalLength = 3 );
  509.   
  510.   Uint32 subscriptionId;
  511.   Uint32 subscriptionKey;
  512.   union { // Haven't decide what to call it
  513.     Uint32 senderData;
  514.     Uint32 subscriberData;
  515.   };
  516. };
  517. class CreateSubscriptionIdConf {
  518.   friend class Grep;
  519.   friend class SumaParticipant;
  520.   
  521.   friend bool printCREATE_SUBSCRIPTION_ID_CONF(FILE *, const Uint32 *, 
  522.        Uint32, Uint16);
  523. public:
  524.   STATIC_CONST( SignalLength = 3 );
  525.   
  526.   Uint32 subscriptionId;
  527.   Uint32 subscriptionKey;
  528.   union { // Haven't decide what to call it
  529.     Uint32 senderData;
  530.     Uint32 subscriberData;
  531.   };
  532. };
  533. class CreateSubscriptionIdRef {
  534.   friend class Grep;
  535.   friend class SumaParticipant;
  536.   
  537.   friend bool printCREATE_SUBSCRIPTION_ID_REF(FILE *, const Uint32 *, 
  538.        Uint32, Uint16);
  539. public:
  540.   STATIC_CONST( SignalLength = 4 );
  541.   
  542.   Uint32 subscriptionId;
  543.   Uint32 subscriptionKey;
  544.   Uint32 err;
  545.   union { // Haven't decide what to call it
  546.     Uint32 senderData;
  547.     Uint32 subscriberData;
  548.   };
  549. };
  550. class SumaStartMe {
  551. public:
  552.   STATIC_CONST( SignalLength = 1 );
  553.   Uint32 unused;
  554. };
  555. class SumaHandoverReq {
  556. public:
  557.   STATIC_CONST( SignalLength = 1 );
  558.   Uint32 gci;
  559. };
  560. class SumaHandoverConf {
  561. public:
  562.   STATIC_CONST( SignalLength = 1 );
  563.   Uint32 gci;
  564. };
  565. #endif