⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbpopulate.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
字号:
/* 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 "userInterface.h"#include "dbPopulate.h"#include <NdbOut.hpp>#include <random.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 void getRandomSubscriberData(int              subscriberNo, 		                    SubscriberNumber number,		                    SubscriberName   name);static void populate(char *title,                     int   count,                     void (*func)(UserHandle*,int),                     UserHandle *uh);static void populateServers(UserHandle *uh, int count);static void populateSubscribers(UserHandle *uh, int count);static void populateGroups(UserHandle *uh, int count);/**************************************************************** L O C A L   D A T A                                          ****************************************************************/static SequenceValues permissionsDefinition[] = {   {90, 1},   {10, 0},   {0,  0}};/**************************************************************** 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 void getRandomSubscriberData(int              subscriberNo, 		                    SubscriberNumber number,		                    SubscriberName   name){   char sbuf[SUBSCRIBER_NUMBER_LENGTH + 1];   sprintf(sbuf, "%.*d", SUBSCRIBER_NUMBER_LENGTH, subscriberNo);   memcpy(number, sbuf, SUBSCRIBER_NUMBER_LENGTH);   memset(name, myRandom48(26)+'A', SUBSCRIBER_NAME_LENGTH);}static void populate(char *title,                     int   count,                     void (*func)(UserHandle*, int),                     UserHandle *uh){   ndbout_c("Populating %d '%s' ... ",count, title);   /* fflush(stdout); */   func(uh,count);   ndbout_c("done");}static void populateServers(UserHandle *uh, int count){   int  i, j;   int len;   char tmp[80];   int suffix_length = 1;   ServerName serverName;   SubscriberSuffix suffix;   int commitCount = 0;   for(i = 0; i < SUBSCRIBER_NUMBER_SUFFIX_LENGTH; i++)     suffix_length *= 10;   for(i = 0; i < count; i++) {      sprintf(tmp, "-Server %d-", i);      len = strlen(tmp);      for(j = 0; j < SERVER_NAME_LENGTH; j++){         serverName[j] = tmp[j % len];      }      /* serverName[j] = 0;	not null-terminated */      for(j = 0; j < suffix_length; j++){	 char sbuf[SUBSCRIBER_NUMBER_SUFFIX_LENGTH + 1];         sprintf(sbuf, "%.*d", SUBSCRIBER_NUMBER_SUFFIX_LENGTH, j);	 memcpy(suffix, sbuf, SUBSCRIBER_NUMBER_SUFFIX_LENGTH);         userDbInsertServer(uh, i, suffix, serverName);	 commitCount ++;	 if((commitCount % OP_PER_TRANS) == 0)	   userDbCommit(uh);      }   }   if((commitCount % OP_PER_TRANS) != 0)     userDbCommit(uh);}static void populateSubscribers(UserHandle *uh, int count){   SubscriberNumber number;   SubscriberName   name;   int i, j, k;   int res;   SequenceValues values[NO_OF_GROUPS+1];   RandomSequence seq;   for(i = 0; i < NO_OF_GROUPS; i++) {      values[i].length = 1;      values[i].value  = i;   }   values[i].length = 0;   values[i].value  = 0;   if( initSequence(&seq, values) != 0 ) {      ndbout_c("could not set the sequence of random groups");      exit(0);   }#define RETRIES 25   for(i = 0; i < count; i+= OP_PER_TRANS) {     for(j = 0; j<RETRIES; j++){       for(k = 0; k<OP_PER_TRANS && i+k < count; k++){	 getRandomSubscriberData(i+k, number, name);	 userDbInsertSubscriber(uh, number, getNextRandom(&seq), name);       }       res = userDbCommit(uh);       if(res == 0)	 break;       if(res != 1){	 ndbout_c("Terminating");	 exit(0);       }     }     if(j == RETRIES){       ndbout_c("Terminating");       exit(0);     }   }}static void populateGroups(UserHandle *uh, int count){   int i;   int j;   int len;   RandomSequence seq;   Permission     allow[NO_OF_GROUPS];   ServerBit      serverBit;   GroupName      groupName;   char           tmp[80];   int commitCount = 0;   if( initSequence(&seq, permissionsDefinition) != 0 ) {      ndbout_c("could not set the sequence of random permissions");      exit(0);   }   for(i = 0; i < NO_OF_GROUPS; i++)      allow[i] = 0;   for(i = 0; i < NO_OF_SERVERS; i++) {      serverBit = 1 << i;      for(j = 0; j < NO_OF_GROUPS; j++ ) {         if( getNextRandom(&seq) )            allow[j] |= serverBit;      }   }   for(i = 0; i < NO_OF_GROUPS; i++) {      sprintf(tmp, "-Group %d-", i);      len = strlen(tmp);      for(j = 0; j < GROUP_NAME_LENGTH; j++) {        groupName[j] = tmp[j % len];      }      /* groupName[j] = 0;	not null-terminated */      userDbInsertGroup(uh,		        i,		        groupName,		        allow[i],		        allow[i],		        allow[i]);      commitCount ++;      if((commitCount % OP_PER_TRANS) == 0)	userDbCommit(uh);   }   if((commitCount % OP_PER_TRANS) != 0)     userDbCommit(uh);}/******************************************************************************************************************************** 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 dbPopulate(UserHandle *uh){   populate("servers", NO_OF_SERVERS, populateServers, uh);   populate("subscribers", NO_OF_SUBSCRIBERS, populateSubscribers, uh);   populate("groups", NO_OF_GROUPS, populateGroups, uh);}

⌨️ 快捷键说明

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