tpcc_current (1034761), страница 26
Текст из файла (страница 26)
\ n");return;sqlerr:Error();}/ *==================================================================+| ROUTIN E N AME|Load Ware| DESCRIPTION|Load s the Warehouse table|Load s Stock, District as Warehouses are created| ARGUMEN TS|none+================================================================== */void Load Ware(){EXEC SQL BEGIN DECLARE SECTION ;long w _id ;char w _nam e[10];char w _street_1[20];char w _street_2[20];char w _city[20];char w _state[2];char w _zip[9];float w _tax;float w _ytd ;EXEC SQL EN D DECLARE SECTION ;EXEC SQL WH EN EVER SQLERROR GOTO sqlerr;printf("Load ing Warehouse \ n");for (w _id =1L; w _id <=count_w are; w _id ++) {/ * Generate Warehouse Data */MakeAlp haString( 6, 10, w _nam e);MakeAd dress( w _street_1, w _street_2, w _city, w _state, w _zip );w _tax=((float)Rand om N um ber(10L,20L))/ 100.0;w _ytd =3000000.00;if ( option_d ebug )printf( "WID = %ld , Nam e= %16s, Tax = %5.2f\ n",w _id, w _nam e, w _tax );EXEC SQL IN SERT IN TOw arehouse (w _id , w _name,w _street_1, w _street_2, w _city, w _state, w _zip,w _tax, w _ytd )TPC Benchm ark™C - Stand ard Sp ecification, Revision 5.11 - Page 120 of 130values (:w _id , :w _nam e,:w _street_1, :w _street_2, :w _city, :w _state,:w _zip, :w _tax, :w _ytd );/ ** Make Row s associated w ith Warehouse **/Stock(w _id );District(w _id );EXEC SQL COMMIT WORK;}return;sqlerr:Error();}/ *==================================================================+| ROUTIN E N AME|Load Cust| DESCRIPTION|Load s the Custom er Table| ARGUMEN TS|none+==================================================================*/void Load Cust(){EXEC SQL BEGIN DECLARE SECTION ;EXEC SQL EN D DECLARE SECTION ;long w _id ;long d _id;EXEC SQL WH EN EVER SQLERROR GOTO sqlerr;for (w _id =1L; w _id <=count_w are; w _id ++)for (d_id =1L; d _id <=DIST_PER_WARE; d _id ++)Cu stom er(d _id ,w _id );EXEC SQL COMMIT WORK; / * Just in case */return;sqlerr:Error();}/ *==================================================================+| ROUTIN E N AME|Load Ord| DESCRIPTION|Load s the Ord ers and Ord er_Line Tables| ARGUMEN TS|none+==================================================================*/void Load Ord (){EXEC SQL BEGIN DECLARE SECTION ;long w _id ;float w _tax;long d _id;float d _tax;EXEC SQL EN D DECLARE SECTION ;EXEC SQL WH EN EVER SQLERROR GOTO sqlerr;for (w _id =1L; w _id <=count_w are; w _id ++)for (d_id =1L; d _id <=DIST_PER_WARE; d _id ++)Ord ers(d_id , w _id );EXEC SQL COMMIT WORK; / * Just in case */return;TPC Benchm ark™C - Stand ard Sp ecification, Revision 5.11 - Page 121 of 130sqlerr:Error();}/ *==================================================================+| ROUTIN E N AME|Stock| DESCRIPTION|Load s the Stock table| ARGUMEN TS|w _id - w arehouse id+==================================================================*/void Stock(w _id )long w _id ;{EXEC SQL BEGIN DECLARE SECTION ;long s_i_id;long s_w _id ;long s_quantity;char s_d ist_01[24];char s_d ist_02[24];char s_d ist_03[24];char s_d ist_04[24];char s_d ist_05[24];char s_d ist_06[24];char s_d ist_07[24];char s_d ist_08[24];char s_d ist_09[24];char s_d ist_10[24];char s_d ata[50];EXEC SQL EN D DECLARE SECTION ;int sd atasiz;long orig[MAXITEMS];long pos;int i;EXEC SQL WH EN EVER SQLERROR GOTO sqlerr;printf("Load ing Stock Wid =%ld \ n",w _id );s_w _id =w _id ;for (i=0; i<MAXITEMS/ 10; i++) orig[i]=0;for (i=0; i<MAXITEMS/ 10; i++){do{pos=Rand om N um ber(0L,MAXITEMS);} w hile (orig[pos]);orig[pos] = 1;}for (s_i_id =1; s_i_id <=MAXITEMS; s_i_id ++) {/ * Generate Stock Data */s_quantity=Rand om N um ber(10L,100L);MakeAlphaString(24,24,s_d ist_01);MakeAlphaString(24,24,s_d ist_02);MakeAlphaString(24,24,s_d ist_03);MakeAlphaString(24,24,s_d ist_04);MakeAlphaString(24,24,s_d ist_05);MakeAlphaString(24,24,s_d ist_06);MakeAlphaString(24,24,s_d ist_07);TPC Benchm ark™C - Stand ard Sp ecification, Revision 5.11 - Page 122 of 130MakeAlphaString(24,24,s_d ist_08);MakeAlphaString(24,24,s_d ist_09);MakeAlphaString(24,24,s_d ist_10);sd atasiz=MakeAlphaString(26,50,s_data);if (orig[s_i_id ]){pos=Rand om N um ber(0L,sd atasiz-8);s_d ata[pos]='o';s_d ata[pos+1]='r';s_d ata[pos+2]='i';s_d ata[pos+3]='g';s_d ata[pos+4]='i';s_d ata[pos+5]='n';s_d ata[pos+6]='a';s_d ata[pos+7]='l';}EXEC SQL IN SERT IN TOstock (s_i_id , s_w _id , s_quantity,s_dist_01, s_d ist_02, s_d ist_03, s_d ist_04, s_d ist_05,s_dist_06, s_d ist_07, s_d ist_08, s_d ist_09, s_d ist_10,s_data, s_ytd , s_cnt_ord er, s_cnt_rem ote)values (:s_i_id, :s_w _id , :s_quantity,:s_d ist_01, :s_d ist_02, :s_d ist_03, :s_d ist_04, :s_d ist_05,:s_d ist_06, :s_d ist_07, :s_d ist_08, :s_d ist_09, :s_d ist_10,:s_d ata, 0, 0, 0);if ( option_d ebug )printf( "SID = %ld , WID = %ld , Quan = %ld \ n",s_i_id , s_w _id , s_quantity );if ( !(s_i_id % 100) ) {EXEC SQL COMMIT WORK;printf(".");if ( !(s_i_id % 5000) ) printf(" %ld \ n",s_i_id );}}EXEC SQL COMMIT WORK;printf(" Stock Done.\ n");return;sqlerr:Error();}/ *==================================================================+| ROUTIN E N AME|District| DESCRIPTION|Load s the District table| ARGUMEN TS|w _id - w arehouse id+==================================================================*/void District(w _id )long w _id ;{EXEC SQL BEGIN DECLARE SECTION ;long d _id ;long d _w _id ;char d _nam e[10];char d _street_1[20];TPC Benchm ark™C - Stand ard Sp ecification, Revision 5.11 - Page 123 of 130char d _street_2[20];char d _city[20];char d _state[2];char d _zip[9];float d_tax;float d_ytd ;long d _next_o_id ;EXEC SQL EN D DECLARE SECTION ;EXEC SQL WH EN EVER SQLERROR GOTO sqlerr;printf("Load ing District\ n");d_w _id =w _id ;d_ytd =30000.0;d_next_o_id =3001L;for (d _id =1; d_id <=DIST_PER_WARE; d _id ++) {/ * Generate District Data */MakeAlphaString(6L,10L,d_nam e);MakeAd dress( d _street_1, d _street_2, d _city, d _state, d _zip );d _tax=((float)Rand om N um ber(10L,20L))/ 100.0;EXEC SQL IN SERT IN TOd istrict (d _id , d _w _id, d_nam e,d_street_1, d_street_2, d_city, d _state, d _zip,d_tax, d _ytd , d _next_o_id )values (:d _id , :d _w _id, :d_nam e,:d_street_1, :d_street_2, :d_city, :d_state, :d _zip,:d_tax, :d _ytd , :d_next_o_id );if ( option_d ebug )printf( "DID = %ld , WID = %ld , N am e = %10s, Tax = %5.2f\ n",d _id , d_w _id , d _name, d _tax );}EXEC SQL COMMIT WORK;return;sqlerr:Error();}/ *==================================================================+| ROUTIN E N AME|Custom er| DESCRIPTION|Load s Custom er Table|Also inserts correspond ing history record| ARGUMEN TS|id - custom er id|d_id - d istrict id|w _id - w arehouse id+==================================================================*/void Custom er( d _id , w _id )long d_id ;long w _id ;{EXEC SQL BEGIN DECLARE SECTION ;long c_id ;TPC Benchm ark™C - Stand ard Sp ecification, Revision 5.11 - Page 124 of 130long c_d_id ;long c_w _id ;char c_first[16];char c_m id d le[2];char c_last[16];char c_street_1[20];char c_street_2[20];char c_city[20];char c_state[2];char c_zip[9];char c_phone[16];char c_since[11];char c_cred it[2];long c_cred it_lim ;float c_d iscount;float c_balance;char c_data[500];float h_am ount;char h_d ata[24];EXEC SQL EN D DECLARE SECTION ;EXEC SQL WH EN EVER SQLERROR GOTO sqlerr;printf("Load ing Custom er for DID=%ld , WID=%ld \ n",d _id ,w _id );for (c_id =1; c_id <=CUST_PER_DIST; c_id ++) {/ * Generate Custom er Data */c_d _id =d _id ;c_w _id =w _id ;MakeAlphaString( 8, 16, c_first );c_m id d le[0]='O'; c_m id d le[1]='E';if (c_id <= 1000)Lastnam e(c_id -1,c_last);elseLastnam e(N URand (255,0,999),c_last);MakeAd dress( c_street_1, c_street_2, c_city, c_state, c_zip );MakeN um berString( 16, 16, c_phone );if (Rand om N um ber(0L,1L))c_credit[0]='G';elsec_credit[0]='B';c_cred it[1]='C';c_cred it_lim =50000;c_d iscount=((float)Rand om N um ber(0L,50L))/ 100.0;c_balance= -10.0;MakeAlphaString(300,500,c_d ata);EXEC SQL IN SERT IN TOcustom er (c_id , c_d_id, c_w _id ,c_first, c_m id d le, c_last,c_street_1, c_street_2, c_city, c_state, c_zip,c_phone, c_since, c_cred it,c_cred it_lim , c_discount, c_balance, c_d ata,c_ytd _paym ent, c_cnt_paym ent, c_cnt_d elivery)values (:c_id , :c_d _id , :c_w _id,:c_first, :c_m id d le, :c_last,:c_street_1, :c_street_2, :c_city, :c_state, :c_zip,:c_phone, :tim estam p , :c_cred it,TPC Benchm ark™C - Stand ard Sp ecification, Revision 5.11 - Page 125 of 130:c_cred it_lim , :c_d iscount, :c_balance, :c_data,10.0, 1, 0) ;h_am ount=10.0;MakeAlphaString(12,24,h_d ata);EXEC SQL IN SERT IN TOhistory (h_c_id , h_c_d _id , h_c_w _id ,h_w _id , h_d_id , h_d ate, h_am ount, h_d ata)values (:c_id , :c_d _id , :c_w _id,:c_w _id , :c_d_id , :tim estam p , :h_am ount, :h_d ata);if ( option_d ebug )printf( "CID = %ld , LST = %s, P# = %s\ n",c_id , c_last, c_phone );if ( !(c_id % 100) ) {EXEC SQL COMMIT WORK;printf(".");if ( !(c_id % 1000) ) printf(" %ld \ n",c_id );}}printf("Custom er Done.\ n");return;sqlerr:Error();}/ *==================================================================+| ROUTIN E N AME|Ord ers| DESCRIPTION|Load s the Ord ers table|Also loads the Ord er_Line table on the fly| ARGUMEN TS|w _id - w arehouse id+================================================ ==================*/void Ord ers(d _id, w _id )long d _id , w _id ;{EXEC SQL BEGIN DECLARE SECTION ;long o_id ;long o_c_id ;long o_d_id ;long o_w _id ;long o_carrier_id ;long o_ol_cnt;long ol;long ol_i_id;long ol_supply_w _id;long ol_quantity;long ol_am ount;char ol_d ist_info[24];float i_price;float c_d iscount;EXEC SQL EN D DECLARE SECTION ;EXEC SQL WH EN EVER SQLERROR GOTO sqlerr;TPC Benchm ark™C - Stand ard Sp ecification, Revision 5.11 - Page 126 of 130printf("Load ing Ord ers for D=%ld , W= %ld \ n", d_id , w _id );o_d _id =d_id ;o_w _id =w _id ;InitPerm utation();/ * initialize perm utation of custom er num bers */for (o_id =1; o_id <=ORD_PER_DIST; o_id ++) {/ * Generate Order Data */o_c_id =GetPerm utation();o_carrier_id =Rand om N um ber(1L,10L);o_ol_cnt=Rand om N um ber(5L,15L);if (o_id > 2100)/ * the last 900 ord ers have not been delivered ) */{EXEC SQL IN SERT IN TOord ers (o_id , o_c_id, o_d_id , o_w _id ,o_entry_d , o_carrier_id , o_ol_cnt, o_all_local)values (:o_id , :o_c_id , :o_d _id , :o_w _id ,:tim estam p , N ULL, :o_ol_cnt, 1);EXEC SQL IN SERT IN TOnew _ord er (no_o_id , no_d _id , no_w _id )values (:o_id , :o_d _id, :o_w _id );}elseEXEC SQL IN SERT IN TOord ers (o_id , o_c_id, o_d_id , o_w _id ,o_entry_d , o_carrier_id , o_ol_cnt, o_all_local)values (:o_id , :o_c_id , :o_d _id , :o_w _id ,:tim estam p , :o_carrier_id , :o_ol_cnt, 1);if ( option_d ebug )printf( "OID = %ld , CID = %ld , DID = %ld , WID = %ld \ n",o_id , o_c_id, o_d_id, o_w _id );for (ol=1; ol<=o_ol_cnt; ol++) {/ * Generate Order Line Data */ol_i_id =Rand om N um ber(1L,MAXITEMS);ol_supply_w _id =o_w _id ;ol_quantity=5;ol_am ount=0.0;MakeAlphaString(24,24,ol_d ist_info);if (o_id > 2100)EXEC SQL IN SERT IN TOorder_line (ol_o_id , ol_d _id , ol_w _id, ol_num ber,ol_i_id, ol_supply_w _id , ol_quantity, ol_am ount,ol_d ist_info, ol_d elivery_d )values (:o_id , :o_d _id , :o_w _id , :ol,:ol_i_id , :ol_supply_w _id , :ol_quantity, :ol_am ount,:ol_d ist_info, N ULL);elseEXEC SQL IN SERT IN TOorder_line (ol_o_id , ol_d _id , ol_w _id, ol_num ber,ol_i_id, ol_supply_w _id , ol_quantity,((float)(Rand omN um ber(10L, 10000L))/ 100.0,ol_d ist_info, ol_d elivery_d )values (:o_id , :o_d _id , :o_w _id , :ol,TPC Benchm ark™C - Stand ard Sp ecification, Revision 5.11 - Page 127 of 130:ol_i_id , :ol_supply_w _id , :ol_quantity,:ol_am ount,:ol_d ist_info, d atetim e);if ( option_d ebug )printf( "OL = %ld , IID = %ld , QUAN = %ld , AMT = %8.2f\ n",ol, ol_i_id , ol_quantity, ol_am ount);}if ( !(o_id % 100) ) {printf(".");EXEC SQL COMMIT WORK;if ( !(o_id % 1000) ) printf(" %ld \ n",o_id );}}EXEC SQL COMMIT WORK;printf("Ord ers Done.\ n");return;sqlerr:Error();}/ *==================================================================+| ROUTIN E N AME|MakeAd d ress()| DESCRIPTION|Build an Ad d ress| ARGUMEN TS+==================================================================*/void MakeAd d ress(str1,str2,city,state,zip)char *str1;char *str2;char *city;char *state;char *zip;{MakeAlphaString(10,20,str1); / * Street 1*/MakeAlphaString(10,20,str2); / * Street 2*/MakeAlphaString(10,20,city); / * City */MakeAlphaString(2,2,state); / * State */MakeN um berString(9,9,zip); / * Zip */}/ *==================================================================+| ROUTIN E N AME|Error()| DESCRIPTION|H and les an error from a SQL call.| ARGUMEN TS+==================================================================*/void Error(){printf( "SQL Error %d \ n", sqlca.sqlcod e);EXEC SQL WH EN EVER SQLERROR CON TIN UE;EXEC SQL ROLLBACK WORK RELEASE;exit( -1 );TPC Benchm ark™C - Stand ard Sp ecification, Revision 5.11 - Page 128 of 130}/ *==================================================================+| ROUTIN E N AME|Lastnam e| DESCRIPTION|TPC-C Lastnam e Function.| ARGUMEN TS|num - non-uniform random num ber|nam e - last nam e string+==================================================================*/void Lastnam e(num , nam e)int num ;char *nam e;{int i;static char *n[] ={"BAR", "OUGH T", "ABLE", "PRI", "PRES","ESE", "AN TI", "CALLY", "ATION ", "EIN G"};strcpy(nam e,n[num / 100]);strcat(nam e,n[(num / 10)%10]);strcat(nam e,n[num %10]);return;}TPC Benchm ark™C - Stand ard Sp ecification, Revision 5.11 - Page 129 of 130Appendix B: EXECUTIVE SUMMARY STATEMEN TThe tables on the follow ing p age illu strate the form at of the TPC Execu tive Su m m ary Statem ent that m u st be u sed torep ort the su m m ary benchm ark resu lts.