/* 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 #include "userInterface.h" #include "dbPopulate.h" #include #include /*************************************************************** * 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