ndb_user_transaction6.cpp

来自「MySQL数据库开发源码 值得一看哦」· C++ 代码 · 共 562 行 · 第 1/2 页

CPP
562
字号
  pNDB->closeTransaction(MyTransaction);    DEBUG("done\n");}/** * Transaction 4 - T4 *  * Create session * * Input: *   SubscriberNumber *   ServerId *   ServerBit *   SessionDetails, *   DoRollback * Output: *   ChangedBy *   ChangedTime *   Location *   BranchExecuted */voiduserTransaction_T4(UserHandle * uh,		   SubscriberNumber   inNumber,		   ServerId           inServerId,		   ServerBit          inServerBit,		   SessionDetails     inSessionDetails,		   DoRollback         inDoRollback,		   BranchExecuted   * outBranchExecuted){    Ndb * pNDB = uh->pNDB;    char               outChangedBy   [sizeof(ChangedBy)  +(4-(sizeof(ChangedBy)   & 3))];  char               outChangedTime [sizeof(ChangedTime)+(4-(sizeof(ChangedTime) & 3))];  Location         outLocation;  GroupId          groupId;  ActiveSessions   sessions;  Permission       permission;  SubscriberSuffix inSuffix;  DEBUG3("T4(%.*s, %.2d): ", SUBSCRIBER_NUMBER_LENGTH, inNumber, inServerId);  int check;  NdbRecAttr * check2;  NdbConnection * MyTransaction = startTransaction(pNDB, inServerId, inNumber);  if (MyTransaction == NULL)	      error_handler("T4-1: startTranscation", pNDB->getNdbErrorString(), pNDB->getNdbError());  NdbOperation *MyOperation= MyTransaction->getNdbOperation(SUBSCRIBER_TABLE);  CHECK_NULL(MyOperation, "T4-1: getNdbOperation", 	     MyTransaction);    MyOperation->interpretedUpdateTuple();  MyOperation->equal(IND_SUBSCRIBER_NUMBER, 		     inNumber);  MyOperation->getValue(IND_SUBSCRIBER_LOCATION, 			(char *)&outLocation);  MyOperation->getValue(IND_SUBSCRIBER_CHANGED_BY, 		        outChangedBy);  MyOperation->getValue(IND_SUBSCRIBER_CHANGED_TIME,                         outChangedTime);  MyOperation->getValue(IND_SUBSCRIBER_GROUP,			(char *)&groupId);  MyOperation->getValue(IND_SUBSCRIBER_SESSIONS,			(char *)&sessions);   MyOperation->incValue(IND_SUBSCRIBER_SESSIONS, 			(uint32)inServerBit);  check = MyTransaction->execute( NoCommit );     /* Operation 2 */  MyOperation = MyTransaction->getNdbOperation(GROUP_TABLE);  CHECK_NULL(MyOperation, "T4-2: getNdbOperation", 	     MyTransaction);    MyOperation->readTuple();  MyOperation->equal(IND_GROUP_ID,		     (char*)&groupId);  MyOperation->getValue(IND_GROUP_ALLOW_INSERT, 			(char *)&permission);  check = MyTransaction->execute( NoCommit );   CHECK_MINUS_ONE(check, "T4-2: NoCommit", 		  MyTransaction);    if(((permission & inServerBit) == inServerBit) &&     ((sessions   & inServerBit) == 0)){      memcpy(inSuffix,	   &inNumber[SUBSCRIBER_NUMBER_LENGTH-SUBSCRIBER_NUMBER_SUFFIX_LENGTH], SUBSCRIBER_NUMBER_SUFFIX_LENGTH);    DEBUG2("inserting(%.*s) - ", SUBSCRIBER_NUMBER_SUFFIX_LENGTH, inSuffix);      /* Operation 3 */        MyOperation = MyTransaction->getNdbOperation(SESSION_TABLE);    CHECK_NULL(MyOperation, "T4-3: getNdbOperation", 	       MyTransaction);        MyOperation->insertTuple();    MyOperation->equal(IND_SESSION_SUBSCRIBER,		      (char*)inNumber);    MyOperation->equal(IND_SESSION_SERVER,		       (char*)&inServerId);    MyOperation->setValue(SESSION_DATA, 			  (char *)inSessionDetails);    /* Operation 4 */    /* Operation 5 */    MyOperation = MyTransaction->getNdbOperation(SERVER_TABLE);    CHECK_NULL(MyOperation, "T4-5: getNdbOperation", 	       MyTransaction);        MyOperation->interpretedUpdateTuple();    MyOperation->equal(IND_SERVER_ID,		       (char*)&inServerId);    MyOperation->equal(IND_SERVER_SUBSCRIBER_SUFFIX,		       (char*)inSuffix);    MyOperation->incValue(IND_SERVER_INSERTS, (uint32)1);    (* outBranchExecuted) = 1;  } else {    (* outBranchExecuted) = 0;    DEBUG1("%s", ((permission & inServerBit) ? "permission - " : "no permission - "));    DEBUG1("%s", ((sessions   & inServerBit) ? "in session - " : "no in session - "));  }  if(!inDoRollback && (* outBranchExecuted)){    DEBUG("commit\n");    check = MyTransaction->execute( Commit );     CHECK_MINUS_ONE(check, "T4: Commit", 		    MyTransaction);  } else {    DEBUG("rollback\n");    check = MyTransaction->execute(Rollback);    CHECK_MINUS_ONE(check, "T4:Rollback", 		    MyTransaction);      }    pNDB->closeTransaction(MyTransaction);}/** * Transaction 5 - T5 *  * Delete session * * Input: *   SubscriberNumber *   ServerId *   ServerBit *   DoRollback * Output: *   ChangedBy *   ChangedTime *   Location *   BranchExecuted */voiduserTransaction_T5(UserHandle * uh,		   SubscriberNumber   inNumber,		   ServerId           inServerId,		   ServerBit          inServerBit,		   DoRollback         inDoRollback,		   BranchExecuted   * outBranchExecuted){  Ndb * pNDB = uh->pNDB;  DEBUG3("T5(%.*s, %.2d): ", SUBSCRIBER_NUMBER_LENGTH, inNumber, inServerId);  NdbConnection * MyTransaction = 0;  NdbOperation  * MyOperation = 0;  char             outChangedBy   [sizeof(ChangedBy)  +(4-(sizeof(ChangedBy)   & 3))];  char             outChangedTime [sizeof(ChangedTime)+(4-(sizeof(ChangedTime) & 3))];  Location         outLocation;  GroupId          groupId;  ActiveSessions   sessions;  Permission       permission;  SubscriberSuffix inSuffix;  int check;  NdbRecAttr * check2;  MyTransaction = pNDB->startTransaction();  if (MyTransaction == NULL)	      error_handler("T5-1: startTranscation", pNDB->getNdbErrorString(), pNDB->getNdbError());    MyOperation= MyTransaction->getNdbOperation(SUBSCRIBER_TABLE);  CHECK_NULL(MyOperation, "T5-1: getNdbOperation", 	     MyTransaction);    MyOperation->interpretedUpdateTuple();  MyOperation->equal(IND_SUBSCRIBER_NUMBER, 		     inNumber);  MyOperation->getValue(IND_SUBSCRIBER_LOCATION, 		        (char *)&outLocation);  MyOperation->getValue(IND_SUBSCRIBER_CHANGED_BY, 			&outChangedBy[0]);  MyOperation->getValue(IND_SUBSCRIBER_CHANGED_TIME,                         &outChangedTime[0]);  MyOperation->getValue(IND_SUBSCRIBER_GROUP,		        (char *)&groupId);  MyOperation->getValue(IND_SUBSCRIBER_SESSIONS,		        (char *)&sessions);  MyOperation->subValue(IND_SUBSCRIBER_SESSIONS, 		        (uint32)inServerBit);  MyTransaction->execute( NoCommit );     /* Operation 2 */  MyOperation = MyTransaction->getNdbOperation(GROUP_TABLE);  CHECK_NULL(MyOperation, "T5-2: getNdbOperation", 	     MyTransaction);      MyOperation->readTuple();  MyOperation->equal(IND_GROUP_ID,		     (char*)&groupId);  MyOperation->getValue(IND_GROUP_ALLOW_DELETE, 			(char *)&permission);  check = MyTransaction->execute( NoCommit );   CHECK_MINUS_ONE(check, "T5-2: NoCommit", 		  MyTransaction);    if(((permission & inServerBit) == inServerBit) &&     ((sessions   & inServerBit) == inServerBit)){      memcpy(inSuffix,	   &inNumber[SUBSCRIBER_NUMBER_LENGTH-SUBSCRIBER_NUMBER_SUFFIX_LENGTH], SUBSCRIBER_NUMBER_SUFFIX_LENGTH);        DEBUG2("deleting(%.*s) - ", SUBSCRIBER_NUMBER_SUFFIX_LENGTH, inSuffix);    /* Operation 3 */    MyOperation = MyTransaction->getNdbOperation(SESSION_TABLE);    CHECK_NULL(MyOperation, "T5-3: getNdbOperation", 	       MyTransaction);        MyOperation->deleteTuple();    MyOperation->equal(IND_SESSION_SUBSCRIBER,		       (char*)inNumber);    MyOperation->equal(IND_SESSION_SERVER,		       (char*)&inServerId);    /* Operation 4 */            /* Operation 5 */    MyOperation = MyTransaction->getNdbOperation(SERVER_TABLE);    CHECK_NULL(MyOperation, "T5-5: getNdbOperation", 	       MyTransaction);            MyOperation->interpretedUpdateTuple();    MyOperation->equal(IND_SERVER_ID,		       (char*)&inServerId);    MyOperation->equal(IND_SERVER_SUBSCRIBER_SUFFIX,		       (char*)inSuffix);    MyOperation->incValue(IND_SERVER_DELETES, (uint32)1);    (* outBranchExecuted) = 1;  } else {    (* outBranchExecuted) = 0;    DEBUG1("%s", ((permission & inServerBit) ? "permission - " : "no permission - "));    DEBUG1("%s", ((sessions   & inServerBit) ? "in session - " : "no in session - "));  }  if(!inDoRollback && (* outBranchExecuted)){    DEBUG("commit\n");    check = MyTransaction->execute( Commit );     CHECK_MINUS_ONE(check, "T5: Commit", 		    MyTransaction);  } else {    DEBUG("rollback\n");    check = MyTransaction->execute(Rollback);    CHECK_MINUS_ONE(check, "T5:Rollback", 		    MyTransaction);      }    pNDB->closeTransaction(MyTransaction);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?