usertransaction.c

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

C
474
字号
/* Copyright (C) 2003 MySQL AB   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2 of the License, or   (at your option) any later version.   This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with this program; if not, write to the Free Software   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA *//**************************************************************** I N C L U D E D   F I L E S                                  ****************************************************************/#include <ndb_global.h>#include <time.h>#include "sql.h"#include "sqlext.h"#include "userInterface.h"#include "userHandle.h"/**************************************************************** L O C A L   C O N S T A N T S                                ****************************************************************//**************************************************************** L O C A L   D A T A   S T R U C T U R E S                    ****************************************************************//**************************************************************** L O C A L   F U N C T I O N S                                ****************************************************************/static int readSubscriberSessions(UserHandle        *uh,                                  SubscriberNumber number,                                  char            *transactionType);/**************************************************************** L O C A L   D A T A                                          ****************************************************************/extern void handle_error(SQLHDBC  hdbc,                  SQLHENV  henv,                   SQLHSTMT hstmt,                   SQLRETURN rc,                  char *filename,                  int lineno);/**************************************************************** P U B L I C   D A T A                                        ****************************************************************//******************************************************************************************************************************** L O C A L   F U N C T I O N S   C O D E   S E C T I O N      ********************************************************************************************************************************/static int readSubscriberSessions(UserHandle      *uh,                                  SubscriberNumber number,                                  char            *transactionType){   SQLRETURN rc;   /*-----------------------------------------------------*/   /* SELECT activeSessions,groupId,changedBy,changedTime */   /* FROM SUBSCRIBER                                     */   /* WHERE subscriberNumber=x;                           */   /*-----------------------------------------------------*/   strcpy(uh->readSubscriberSession.values.number,number);   rc = SQLExecute(uh->readSubscriberSession.stmt);   if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {      printf("%s %s\n",             transactionType,              "Unable to execute read subscriber session");      return(-1);   }   rc = SQLFetch(uh->readSubscriberSession.stmt);   if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {      printf("%s %s\n",             transactionType,              "Unable to fetch read subscriber session");      return(-1);   }   return(0);}/******************************************************************************************************************************** P U B L I C   F U N C T I O N S   C O D E   S E C T I O N    ********************************************************************************************************************************/void userTransaction_T1(UserHandle        *uh,                        SubscriberNumber number,                        Location         new_location,                        ChangedBy        changed_by,                        ChangedTime      changed_time){   SQLRETURN rc;   if(!uh) return;   /*---------------------------------------------*/   /* Update the subscriber information           */   /*                                             */   /* UPDATE SUBSCRIBER                           */   /* SET location=x, changedBy=x, changedTime=x  */   /* WHERE subscriberNumber=x;                   */                /*---------------------------------------------*/   strcpy(uh->updateSubscriber.values.number, number);   uh->updateSubscriber.values.location = new_location;   strcpy(uh->updateSubscriber.values.changedBy, changed_by);   strcpy(uh->updateSubscriber.values.changedTime, changed_time);   rc = SQLExecute(uh->updateSubscriber.stmt);   if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {      printf("T1 Unable to execute update subscriber\n");      return;   }   userDbCommit(uh);}void userTransaction_T2(UserHandle        *uh,                        SubscriberNumber  number,                        Location         *new_location,                        ChangedBy         changed_by,                        ChangedTime       changed_time,                        SubscriberName    subscriberName){   SQLRETURN rc;   if(!uh) return;   /*------------------------------------------------------*/   /* Read the information from the subscriber table       */   /*                                                      */   /* SELECT location,subscriberName,changedBy,changedTime */   /* FROM SUBSCRIBER                                      */   /* WHERE subscriberNumber=x;                            */   /*------------------------------------------------------*/   strcpy(uh->readSubscriber.values.number,number);   rc = SQLExecute(uh->readSubscriber.stmt);   if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {      printf("T2 Unable to execute read subscriber\n");      return;   }   rc = SQLFetch(uh->readSubscriber.stmt);   if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {      printf("T2 Unable to fetch read subscriber\n");      return;   }   userDbCommit(uh);   strcpy(subscriberName, uh->readSubscriber.values.name);   *new_location = uh->readSubscriber.values.location;   strcpy(changed_by, uh->readSubscriber.values.changedBy);   strcpy(changed_time, uh->readSubscriber.values.changedTime);}void userTransaction_T3(UserHandle        *uh,                        SubscriberNumber number,                        ServerId         server_id,                        ServerBit        server_bit,                        SessionDetails   session_details,                        unsigned int    *branch_executed){   SQLRETURN rc;   if(!uh) return;   *branch_executed = 0;   /*--------------------------------------*/   /* Read active sessions from subscriber */   /*--------------------------------------*/   if( readSubscriberSessions(uh, number, "T3") < 0 )      return;   /*-----------------------------------------------*/   /* Read the 'read' Permissions for the userGroup */   /*                                               */   /* SELECT allowRead                              */   /* FROM USERGROUP                                */   /* WHERE groupId=x                               */   /*-----------------------------------------------*/   uh->readGroupAllowRead.values.groupId = uh->readSubscriberSession.values.groupId;   rc = SQLExecute(uh->readGroupAllowRead.stmt);   if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {      printf("T3 Unable to execute read group allow read\n");      return;   }   rc = SQLFetch(uh->readGroupAllowRead.stmt);   if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {      printf("T3 Unable to fetch read group allow read\n");      return;   }   if( uh->readGroupAllowRead.values.allowRead & server_bit &&       uh->readSubscriberSession.values.activeSessions & server_bit ) {      /*----------------------------------------------------*/      /* Read the sessionDetails from the userSession table */      /*                                                    */      /* SELECT sessionData                                 */      /* FROM userSession                                   */      /* WHERE subscriberNumber=x, serverId=x               */      /*----------------------------------------------------*/      strcpy(uh->readSessionDetails.values.number,number);      uh->readSessionDetails.values.serverId = server_id;      rc = SQLExecute(uh->readSessionDetails.stmt);      if( rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {         printf("T3 Unable to execute read session details\n");         return;      }      rc = SQLFetch(uh->readSessionDetails.stmt);

⌨️ 快捷键说明

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