2
* corresponds to A.6 in appendix A
6
* ==================================================================+ | Load
8
* +==================================================================
23
#define NNULL ((void *)0)
29
/* Global SQL Variables */
34
int particle_flg = 0; /* "1" means particle mode */
35
int part_no = 0; /* 1:items 2:warehouse 3:customer 4:orders */
39
/* Global Variables */
41
int option_debug = 0; /* 1 if generating debug output */
42
int is_local = 1; /* "1" mean local */
44
#define DB_STRING_MAX 51
47
* ==================================================================+ |
48
* main() | ARGUMENTS | Warehouses n [Debug] [Help]
49
* +==================================================================
59
char connect_string[DB_STRING_MAX];
60
char db_string[DB_STRING_MAX];
61
char db_user[DB_STRING_MAX];
62
char db_password[DB_STRING_MAX];
71
printf("*************************************\n");
72
printf("*** ###easy### TPC-C Data Loader ***\n");
73
printf("*************************************\n");
78
fprintf(stderr, "\n usage: tpcc_load [server] [DB] [user] [pass] [warehouse]\n");
85
if ( strlen(argv[1]) >= DB_STRING_MAX ) {
86
fprintf(stderr, "\n server phrase is too long\n");
89
if ( strlen(argv[2]) >= DB_STRING_MAX ) {
90
fprintf(stderr, "\n DBname phrase is too long\n");
93
if ( strlen(argv[3]) >= DB_STRING_MAX ) {
94
fprintf(stderr, "\n user phrase is too long\n");
97
if ( strlen(argv[4]) >= DB_STRING_MAX ) {
98
fprintf(stderr, "\n pass phrase is too long\n");
101
if ((count_ware = atoi(argv[5])) <= 0) {
102
fprintf(stderr, "\n expecting positive number of warehouses\n");
105
strcpy( connect_string, argv[1] );
106
strcpy( db_string, argv[2] );
107
strcpy( db_user, argv[3] );
108
strcpy( db_password, argv[4] );
110
if(strcmp(connect_string,"l")==0){
117
part_no = atoi(argv[6]);
118
min_ware = atoi(argv[7]);
119
max_ware = atoi(argv[8]);
122
max_ware = count_ware;
125
printf("<Parameters>\n");
126
if(is_local==0)printf(" [server]: %s\n", connect_string);
127
printf(" [DBname]: %s\n", db_string);
128
printf(" [user]: %s\n", db_user);
129
printf(" [pass]: %s\n", db_password);
131
printf(" [warehouse]: %d\n", count_ware);
134
printf(" [part(1-4)]: %d\n", part_no);
135
printf(" [MIN WH]: %d\n", min_ware);
136
printf(" [MAX WH]: %d\n", max_ware);
139
fd = open("/dev/urandom", O_RDONLY);
141
fd = open("/dev/random", O_RDONLY);
144
gettimeofday(&tv, NNULL);
145
seed = (tv.tv_sec ^ tv.tv_usec) * tv.tv_sec * tv.tv_usec ^ tv.tv_sec;
147
read(fd, &seed, sizeof(seed));
151
read(fd, &seed, sizeof(seed));
156
/* Initialize timestamp (for date columns) */
157
gettimestamp(timestamp, STRFTIME_FORMAT, TIMESTAMP_LEN);
159
/* EXEC SQL WHENEVER SQLERROR GOTO Error_SqlCall; */
161
mysql = mysql_init(NULL);
162
if(!mysql) goto Error_SqlCall;
165
/* exec sql connect :connect_string; */
166
resp = mysql_real_connect(mysql, "localhost", db_user, db_password, db_string, 3306, NULL, 0);
168
/* exec sql connect :connect_string USING :db_string; */
169
resp = mysql_real_connect(mysql, connect_string, db_user, db_password, db_string, 3306, NULL, 0);
173
mysql_autocommit(mysql, 0);
174
mysql_query(mysql, "SET UNIQUE_CHECKS=0");
175
mysql_query(mysql, "SET FOREIGN_KEY_CHECKS=0");
177
goto Error_SqlCall_close;
180
for( i=0; i<11; i++ ){
181
stmt[i] = mysql_stmt_init(mysql);
182
if(!stmt[i]) goto Error_SqlCall_close;
185
if( mysql_stmt_prepare(stmt[0],
186
"INSERT INTO item values(?,?,?,?,?)",
187
34) ) goto Error_SqlCall_close;
188
if( mysql_stmt_prepare(stmt[1],
189
"INSERT INTO warehouse values(?,?,?,?,?,?,?,?,?)",
190
47) ) goto Error_SqlCall_close;
191
if( mysql_stmt_prepare(stmt[2],
192
"INSERT INTO stock values(?,?,?,?,?,?,?,?,?,?,?,?,?,0,0,0,?)",
193
59) ) goto Error_SqlCall_close;
194
if( mysql_stmt_prepare(stmt[3],
195
"INSERT INTO district values(?,?,?,?,?,?,?,?,?,?,?)",
196
50) ) goto Error_SqlCall_close;
197
if( mysql_stmt_prepare(stmt[4],
198
"INSERT INTO customer values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, 10.0, 1, 0,?)",
199
76) ) goto Error_SqlCall_close;
200
if( mysql_stmt_prepare(stmt[5],
201
"INSERT INTO history values(?,?,?,?,?,?,?,?)",
202
43) ) goto Error_SqlCall_close;
203
if( mysql_stmt_prepare(stmt[6],
204
"INSERT INTO orders values(?,?,?,?,?,NULL,?, 1)",
205
46) ) goto Error_SqlCall_close;
206
if( mysql_stmt_prepare(stmt[7],
207
"INSERT INTO new_orders values(?,?,?)",
208
36) ) goto Error_SqlCall_close;
209
if( mysql_stmt_prepare(stmt[8],
210
"INSERT INTO orders values(?,?,?,?,?,?,?, 1)",
211
43) ) goto Error_SqlCall_close;
212
if( mysql_stmt_prepare(stmt[9],
213
"INSERT INTO order_line values(?,?,?,?,?,?, NULL,?,?,?)",
214
54) ) goto Error_SqlCall_close;
215
if( mysql_stmt_prepare(stmt[10],
216
"INSERT INTO order_line values(?,?,?,?,?,?,?,?,?,?)",
217
50) ) goto Error_SqlCall_close;
220
/* exec sql begin transaction; */
222
printf("TPCC Data Load Started...\n");
229
}else if(particle_flg==1){
244
printf("Unknown part_no\n");
245
printf("1:ITEMS 2:WAREHOUSE 3:CUSTOMER 4:ORDERS\n");
249
/* EXEC SQL COMMIT WORK; */
251
if( mysql_commit(mysql) ) goto Error_SqlCall;
253
for( i=0; i<11; i++ ){
254
mysql_stmt_close(stmt[i]);
257
/* EXEC SQL DISCONNECT; */
261
printf("\n...DATA LOADING COMPLETED SUCCESSFULLY.\n");
270
* ==================================================================+ |
271
* ROUTINE NAME | LoadItems | DESCRIPTION | Loads the Item table |
273
* +==================================================================
286
int orig[MAXITEMS+1];
292
/* EXEC SQL WHENEVER SQLERROR GOTO sqlerr; */
294
printf("Loading Item \n");
296
for (i = 0; i < MAXITEMS / 10; i++)
298
for (i = 0; i < MAXITEMS / 10; i++) {
300
pos = RandomNumber(0L, MAXITEMS);
304
for (i_id = 1; i_id <= MAXITEMS; i_id++) {
306
/* Generate Item Data */
307
i_im_id = RandomNumber(1L, 10000L);
309
i_name[ MakeAlphaString(14, 24, i_name) ] = 0;
311
i_price = ((int) RandomNumber(100L, 10000L)) / 100.0;
313
idatasiz = MakeAlphaString(26, 50, i_data);
314
i_data[idatasiz] = 0;
317
pos = RandomNumber(0L, idatasiz - 8);
319
i_data[pos + 1] = 'r';
320
i_data[pos + 2] = 'i';
321
i_data[pos + 3] = 'g';
322
i_data[pos + 4] = 'i';
323
i_data[pos + 5] = 'n';
324
i_data[pos + 6] = 'a';
325
i_data[pos + 7] = 'l';
328
printf("IID = %ld, Name= %16s, Price = %5.2f\n",
329
i_id, i_name, i_price);
332
printf("about to exec sql\n");
336
/* EXEC SQL INSERT INTO
338
values(:i_id,:i_im_id,:i_name,:i_price,:i_data); */
340
memset(param, 0, sizeof(MYSQL_BIND) * 5); /* initialize */
341
param[0].buffer_type = MYSQL_TYPE_LONG;
342
param[0].buffer = &i_id;
343
param[1].buffer_type = MYSQL_TYPE_LONG;
344
param[1].buffer = &i_im_id;
345
param[2].buffer_type = MYSQL_TYPE_STRING;
346
param[2].buffer = i_name;
347
param[2].buffer_length = strlen(i_name);
348
param[3].buffer_type = MYSQL_TYPE_FLOAT;
349
param[3].buffer = &i_price;
350
param[4].buffer_type = MYSQL_TYPE_STRING;
351
param[4].buffer = i_data;
352
param[4].buffer_length = strlen(i_data);
353
if( mysql_stmt_bind_param(stmt[0], param) ) goto sqlerr;
354
if( mysql_stmt_execute(stmt[0]) ) goto sqlerr;
357
printf("done executing sql\n");
365
/* EXEC SQL COMMIT WORK; */
366
if( mysql_commit(mysql) ) goto sqlerr;
369
printf(" %ld\n", i_id);
373
/* EXEC SQL COMMIT WORK; */
374
if( mysql_commit(mysql) ) goto sqlerr;
376
printf("Item Done. \n");
383
* ==================================================================+ |
384
* ROUTINE NAME | LoadWare | DESCRIPTION | Loads the Warehouse
385
* table | Loads Stock, District as Warehouses are created | ARGUMENTS |
386
* none +==================================================================
406
/* EXEC SQL WHENEVER SQLERROR GOTO sqlerr; */
408
printf("Loading Warehouse \n");
409
for (w_id = min_ware; w_id <= max_ware; w_id++) {
411
/* Generate Warehouse Data */
413
w_name[ MakeAlphaString(6, 10, w_name) ] = 0;
415
MakeAddress(w_street_1, w_street_2, w_city, w_state, w_zip);
417
w_tax = ((float) RandomNumber(10L, 20L)) / 100.0;
421
printf("WID = %ld, Name= %16s, Tax = %5.2f\n",
422
w_id, w_name, w_tax);
424
/*EXEC SQL INSERT INTO
426
values(:w_id,:w_name,
427
:w_street_1,:w_street_2,:w_city,:w_state,
428
:w_zip,:w_tax,:w_ytd);*/
430
memset(param, 0, sizeof(MYSQL_BIND) * 9); /* initialize */
431
param[0].buffer_type = MYSQL_TYPE_LONG;
432
param[0].buffer = &w_id;
433
param[1].buffer_type = MYSQL_TYPE_STRING;
434
param[1].buffer = w_name;
435
param[1].buffer_length = strlen(w_name);
436
param[2].buffer_type = MYSQL_TYPE_STRING;
437
param[2].buffer = w_street_1;
438
param[2].buffer_length = strlen(w_street_1);
439
param[3].buffer_type = MYSQL_TYPE_STRING;
440
param[3].buffer = w_street_2;
441
param[3].buffer_length = strlen(w_street_2);
442
param[4].buffer_type = MYSQL_TYPE_STRING;
443
param[4].buffer = w_city;
444
param[4].buffer_length = strlen(w_city);
445
param[5].buffer_type = MYSQL_TYPE_STRING;
446
param[5].buffer = w_state;
447
param[5].buffer_length = strlen(w_state);
448
param[6].buffer_type = MYSQL_TYPE_STRING;
449
param[6].buffer = w_zip;
450
param[6].buffer_length = strlen(w_zip);
451
param[7].buffer_type = MYSQL_TYPE_FLOAT;
452
param[7].buffer = &w_tax;
453
param[8].buffer_type = MYSQL_TYPE_FLOAT;
454
param[8].buffer = &w_ytd;
455
if( mysql_stmt_bind_param(stmt[1], param) ) goto sqlerr;
456
if( mysql_stmt_execute(stmt[1]) ) goto sqlerr;
458
/** Make Rows associated with Warehouse **/
462
/* EXEC SQL COMMIT WORK; */
463
if( mysql_commit(mysql) ) goto sqlerr;
473
* ==================================================================+ |
474
* ROUTINE NAME | LoadCust | DESCRIPTION | Loads the Customer Table
476
* +==================================================================
485
/* EXEC SQL WHENEVER SQLERROR GOTO sqlerr; */
487
for (w_id = min_ware; w_id <= max_ware; w_id++)
488
for (d_id = 1L; d_id <= DIST_PER_WARE; d_id++)
489
Customer(d_id, w_id);
491
/* EXEC SQL COMMIT WORK;*/ /* Just in case */
492
if( mysql_commit(mysql) ) goto sqlerr;
500
* ==================================================================+ |
501
* ROUTINE NAME | LoadOrd | DESCRIPTION | Loads the Orders and
502
* Order_Line Tables | ARGUMENTS | none
503
* +==================================================================
514
/* EXEC SQL WHENEVER SQLERROR GOTO sqlerr;*/
516
for (w_id = min_ware; w_id <= max_ware; w_id++)
517
for (d_id = 1L; d_id <= DIST_PER_WARE; d_id++)
520
/* EXEC SQL COMMIT WORK; */ /* Just in case */
521
if( mysql_commit(mysql) ) goto sqlerr;
529
* ==================================================================+ |
530
* ROUTINE NAME | Stock | DESCRIPTION | Loads the Stock table |
531
* ARGUMENTS | w_id - warehouse id
532
* +==================================================================
556
int orig[MAXITEMS+1];
560
MYSQL_BIND param[14];
562
/* EXEC SQL WHENEVER SQLERROR GOTO sqlerr;*/
563
printf("Loading Stock Wid=%ld\n", w_id);
566
for (i = 0; i < MAXITEMS / 10; i++)
568
for (i = 0; i < MAXITEMS / 10; i++) {
570
pos = RandomNumber(0L, MAXITEMS);
575
for (s_i_id = 1; s_i_id <= MAXITEMS; s_i_id++) {
577
/* Generate Stock Data */
578
s_quantity = RandomNumber(10L, 100L);
580
s_dist_01[ MakeAlphaString(24, 24, s_dist_01) ] = 0;
581
s_dist_02[ MakeAlphaString(24, 24, s_dist_02) ] = 0;
582
s_dist_03[ MakeAlphaString(24, 24, s_dist_03) ] = 0;
583
s_dist_04[ MakeAlphaString(24, 24, s_dist_04) ] = 0;
584
s_dist_05[ MakeAlphaString(24, 24, s_dist_05) ] = 0;
585
s_dist_06[ MakeAlphaString(24, 24, s_dist_06) ] = 0;
586
s_dist_07[ MakeAlphaString(24, 24, s_dist_07) ] = 0;
587
s_dist_08[ MakeAlphaString(24, 24, s_dist_08) ] = 0;
588
s_dist_09[ MakeAlphaString(24, 24, s_dist_09) ] = 0;
589
s_dist_10[ MakeAlphaString(24, 24, s_dist_10) ] = 0;
590
sdatasiz = MakeAlphaString(26, 50, s_data);
591
s_data[sdatasiz] = 0;
594
pos = RandomNumber(0L, sdatasiz - 8);
597
s_data[pos + 1] = 'r';
598
s_data[pos + 2] = 'i';
599
s_data[pos + 3] = 'g';
600
s_data[pos + 4] = 'i';
601
s_data[pos + 5] = 'n';
602
s_data[pos + 6] = 'a';
603
s_data[pos + 7] = 'l';
606
/*EXEC SQL INSERT INTO
608
values(:s_i_id,:s_w_id,:s_quantity,
609
:s_dist_01,:s_dist_02,:s_dist_03,:s_dist_04,:s_dist_05,
610
:s_dist_06,:s_dist_07,:s_dist_08,:s_dist_09,:s_dist_10,
613
memset(param, 0, sizeof(MYSQL_BIND) * 14); /* initialize */
614
param[0].buffer_type = MYSQL_TYPE_LONG;
615
param[0].buffer = &s_i_id;
616
param[1].buffer_type = MYSQL_TYPE_LONG;
617
param[1].buffer = &s_w_id;
618
param[2].buffer_type = MYSQL_TYPE_LONG;
619
param[2].buffer = &s_quantity;
620
param[3].buffer_type = MYSQL_TYPE_STRING;
621
param[3].buffer = s_dist_01;
622
param[3].buffer_length = strlen(s_dist_01);
623
param[4].buffer_type = MYSQL_TYPE_STRING;
624
param[4].buffer = s_dist_02;
625
param[4].buffer_length = strlen(s_dist_02);
626
param[5].buffer_type = MYSQL_TYPE_STRING;
627
param[5].buffer = s_dist_03;
628
param[5].buffer_length = strlen(s_dist_03);
629
param[6].buffer_type = MYSQL_TYPE_STRING;
630
param[6].buffer = s_dist_04;
631
param[6].buffer_length = strlen(s_dist_04);
632
param[7].buffer_type = MYSQL_TYPE_STRING;
633
param[7].buffer = s_dist_05;
634
param[7].buffer_length = strlen(s_dist_05);
635
param[8].buffer_type = MYSQL_TYPE_STRING;
636
param[8].buffer = s_dist_06;
637
param[8].buffer_length = strlen(s_dist_06);
638
param[9].buffer_type = MYSQL_TYPE_STRING;
639
param[9].buffer = s_dist_07;
640
param[9].buffer_length = strlen(s_dist_07);
641
param[10].buffer_type = MYSQL_TYPE_STRING;
642
param[10].buffer = s_dist_08;
643
param[10].buffer_length = strlen(s_dist_08);
644
param[11].buffer_type = MYSQL_TYPE_STRING;
645
param[11].buffer = s_dist_09;
646
param[11].buffer_length = strlen(s_dist_09);
647
param[12].buffer_type = MYSQL_TYPE_STRING;
648
param[12].buffer = s_dist_10;
649
param[12].buffer_length = strlen(s_dist_10);
650
param[13].buffer_type = MYSQL_TYPE_STRING;
651
param[13].buffer = s_data;
652
param[13].buffer_length = strlen(s_data);
653
if( mysql_stmt_bind_param(stmt[2], param) ) goto sqlerr;
654
if( mysql_stmt_execute(stmt[2]) ) goto sqlerr;
657
printf("SID = %ld, WID = %ld, Quan = %ld\n",
658
s_i_id, s_w_id, s_quantity);
660
if (!(s_i_id % 100)) {
661
/*EXEC SQL COMMIT WORK; */
662
if( mysql_commit(mysql) ) goto sqlerr;
666
if (!(s_i_id % 5000))
667
printf(" %ld\n", s_i_id);
670
/*EXEC SQL COMMIT WORK;*/
671
if( mysql_commit(mysql) ) goto sqlerr;
673
printf(" Stock Done.\n");
680
* ==================================================================+ |
681
* ROUTINE NAME | District | DESCRIPTION | Loads the District table
682
* | ARGUMENTS | w_id - warehouse id
683
* +==================================================================
704
MYSQL_BIND param[11];
706
/* EXEC SQL WHENEVER SQLERROR GOTO sqlerr;*/
708
printf("Loading District\n");
712
for (d_id = 1; d_id <= DIST_PER_WARE; d_id++) {
714
/* Generate District Data */
716
d_name[ MakeAlphaString(6L, 10L, d_name) ] = 0;
717
MakeAddress(d_street_1, d_street_2, d_city, d_state, d_zip);
719
d_tax = ((float) RandomNumber(10L, 20L)) / 100.0;
721
/*EXEC SQL INSERT INTO
723
values(:d_id,:d_w_id,:d_name,
724
:d_street_1,:d_street_2,:d_city,:d_state,:d_zip,
725
:d_tax,:d_ytd,:d_next_o_id);*/
727
memset(param, 0, sizeof(MYSQL_BIND) * 11); /* initialize */
728
param[0].buffer_type = MYSQL_TYPE_LONG;
729
param[0].buffer = &d_id;
730
param[1].buffer_type = MYSQL_TYPE_LONG;
731
param[1].buffer = &d_w_id;
732
param[2].buffer_type = MYSQL_TYPE_STRING;
733
param[2].buffer = d_name;
734
param[2].buffer_length = strlen(d_name);
735
param[3].buffer_type = MYSQL_TYPE_STRING;
736
param[3].buffer = d_street_1;
737
param[3].buffer_length = strlen(d_street_1);
738
param[4].buffer_type = MYSQL_TYPE_STRING;
739
param[4].buffer = d_street_2;
740
param[4].buffer_length = strlen(d_street_2);
741
param[5].buffer_type = MYSQL_TYPE_STRING;
742
param[5].buffer = d_city;
743
param[5].buffer_length = strlen(d_city);
744
param[6].buffer_type = MYSQL_TYPE_STRING;
745
param[6].buffer = d_state;
746
param[6].buffer_length = strlen(d_state);
747
param[7].buffer_type = MYSQL_TYPE_STRING;
748
param[7].buffer = d_zip;
749
param[7].buffer_length = strlen(d_zip);
750
param[8].buffer_type = MYSQL_TYPE_FLOAT;
751
param[8].buffer = &d_tax;
752
param[9].buffer_type = MYSQL_TYPE_FLOAT;
753
param[9].buffer = &d_ytd;
754
param[10].buffer_type = MYSQL_TYPE_LONG;
755
param[10].buffer = &d_next_o_id;
756
if( mysql_stmt_bind_param(stmt[3], param) ) goto sqlerr;
757
if( mysql_stmt_execute(stmt[3]) ) goto sqlerr;
760
printf("DID = %ld, WID = %ld, Name = %10s, Tax = %5.2f\n",
761
d_id, d_w_id, d_name, d_tax);
764
/*EXEC SQL COMMIT WORK;*/
765
if( mysql_commit(mysql) ) goto sqlerr;
773
* ==================================================================+ |
774
* ROUTINE NAME | Customer | DESCRIPTION | Loads Customer Table |
775
* Also inserts corresponding history record | ARGUMENTS | id -
776
* customer id | d_id - district id | w_id - warehouse id
777
* +==================================================================
809
MYSQL_BIND param[18];
811
/*EXEC SQL WHENEVER SQLERROR GOTO sqlerr;*/
813
printf("Loading Customer for DID=%ld, WID=%ld\n", d_id, w_id);
815
for (c_id = 1; c_id <= CUST_PER_DIST; c_id++) {
817
/* Generate Customer Data */
821
c_first[ MakeAlphaString(8, 16, c_first) ] = 0;
827
Lastname(c_id - 1, c_last);
829
Lastname(NURand(255, 0, 999), c_last);
832
MakeAddress(c_street_1, c_street_2, c_city, c_state, c_zip);
833
c_phone[ MakeNumberString(16, 16, c_phone) ] = 0;
835
if (RandomNumber(0L, 1L))
842
c_credit_lim = 50000;
843
c_discount = ((float) RandomNumber(0L, 50L)) / 100.0;
846
c_data[ MakeAlphaString(300, 500, c_data) ] = 0;
848
/*EXEC SQL INSERT INTO
850
values(:c_id,:c_d_id,:c_w_id,
851
:c_first,:c_middle,:c_last,
852
:c_street_1,:c_street_2,:c_city,:c_state,
854
:c_phone, :timestamp,
856
:c_credit_lim,:c_discount,:c_balance,
857
10.0, 1, 0,:c_data);*/
859
memset(param, 0, sizeof(MYSQL_BIND) * 18); /* initialize */
860
param[0].buffer_type = MYSQL_TYPE_LONG;
861
param[0].buffer = &c_id;
862
param[1].buffer_type = MYSQL_TYPE_LONG;
863
param[1].buffer = &c_d_id;
864
param[2].buffer_type = MYSQL_TYPE_LONG;
865
param[2].buffer = &c_w_id;
866
param[3].buffer_type = MYSQL_TYPE_STRING;
867
param[3].buffer = c_first;
868
param[3].buffer_length = strlen(c_first);
869
param[4].buffer_type = MYSQL_TYPE_STRING;
870
param[4].buffer = c_middle;
871
param[4].buffer_length = strlen(c_middle);
872
param[5].buffer_type = MYSQL_TYPE_STRING;
873
param[5].buffer = c_last;
874
param[5].buffer_length = strlen(c_last);
875
param[6].buffer_type = MYSQL_TYPE_STRING;
876
param[6].buffer = c_street_1;
877
param[6].buffer_length = strlen(c_street_1);
878
param[7].buffer_type = MYSQL_TYPE_STRING;
879
param[7].buffer = c_street_2;
880
param[7].buffer_length = strlen(c_street_2);
881
param[8].buffer_type = MYSQL_TYPE_STRING;
882
param[8].buffer = c_city;
883
param[8].buffer_length = strlen(c_city);
884
param[9].buffer_type = MYSQL_TYPE_STRING;
885
param[9].buffer = c_state;
886
param[9].buffer_length = strlen(c_state);
887
param[10].buffer_type = MYSQL_TYPE_STRING;
888
param[10].buffer = c_zip;
889
param[10].buffer_length = strlen(c_zip);
890
param[11].buffer_type = MYSQL_TYPE_STRING;
891
param[11].buffer = c_phone;
892
param[11].buffer_length = strlen(c_phone);
893
param[12].buffer_type = MYSQL_TYPE_STRING;
894
param[12].buffer = timestamp;
895
param[12].buffer_length = strlen(timestamp);
896
param[13].buffer_type = MYSQL_TYPE_STRING;
897
param[13].buffer = c_credit;
898
param[13].buffer_length = strlen(c_credit);
899
param[14].buffer_type = MYSQL_TYPE_LONG;
900
param[14].buffer = &c_credit_lim;
901
param[15].buffer_type = MYSQL_TYPE_FLOAT;
902
param[15].buffer = &c_discount;
903
param[16].buffer_type = MYSQL_TYPE_FLOAT;
904
param[16].buffer = &c_balance;
905
param[17].buffer_type = MYSQL_TYPE_STRING;
906
param[17].buffer = c_data;
907
param[17].buffer_length = strlen(c_data);
908
if( mysql_stmt_bind_param(stmt[4], param) ) goto sqlerr;
909
if( mysql_stmt_execute(stmt[4]) ) goto sqlerr;
913
h_data[ MakeAlphaString(12, 24, h_data) ] = 0;
915
/*EXEC SQL INSERT INTO
917
values(:c_id,:c_d_id,:c_w_id,
918
:c_d_id,:c_w_id, :timestamp,
919
:h_amount,:h_data);*/
921
memset(param, 0, sizeof(MYSQL_BIND) * 8); /* initialize */
922
param[0].buffer_type = MYSQL_TYPE_LONG;
923
param[0].buffer = &c_id;
924
param[1].buffer_type = MYSQL_TYPE_LONG;
925
param[1].buffer = &c_d_id;
926
param[2].buffer_type = MYSQL_TYPE_LONG;
927
param[2].buffer = &c_w_id;
928
param[3].buffer_type = MYSQL_TYPE_LONG;
929
param[3].buffer = &c_d_id;
930
param[4].buffer_type = MYSQL_TYPE_LONG;
931
param[4].buffer = &c_w_id;
932
param[5].buffer_type = MYSQL_TYPE_STRING;
933
param[5].buffer = timestamp;
934
param[5].buffer_length = strlen(timestamp);
935
param[6].buffer_type = MYSQL_TYPE_FLOAT;
936
param[6].buffer = &h_amount;
937
param[7].buffer_type = MYSQL_TYPE_STRING;
938
param[7].buffer = h_data;
939
param[7].buffer_length = strlen(h_data);
940
if( mysql_stmt_bind_param(stmt[5], param) ) goto sqlerr;
941
if( mysql_stmt_execute(stmt[5]) ) goto sqlerr;
944
printf("CID = %ld, LST = %s, P# = %s\n",
945
c_id, c_last, c_phone);
947
/* EXEC SQL COMMIT WORK; */
948
if( mysql_commit(mysql) ) goto sqlerr;
953
printf(" %ld\n", c_id);
956
printf("Customer Done.\n");
964
* ==================================================================+ |
965
* ROUTINE NAME | Orders | DESCRIPTION | Loads the Orders table |
966
* Also loads the Order_Line table on the fly | ARGUMENTS | w_id -
968
* +==================================================================
986
char ol_dist_info[25];
991
MYSQL_BIND param[10];
993
/* EXEC SQL WHENEVER SQLERROR GOTO sqlerr; */
995
printf("Loading Orders for D=%ld, W= %ld\n", d_id, w_id);
998
InitPermutation(); /* initialize permutation of customer numbers */
999
for (o_id = 1; o_id <= ORD_PER_DIST; o_id++) {
1001
/* Generate Order Data */
1002
o_c_id = GetPermutation();
1003
o_carrier_id = RandomNumber(1L, 10L);
1004
o_ol_cnt = RandomNumber(5L, 15L);
1006
if (o_id > 2100) { /* the last 900 orders have not been
1008
/*EXEC SQL INSERT INTO
1010
values(:o_id,:o_d_id,:o_w_id,:o_c_id,
1012
NULL,:o_ol_cnt, 1);*/
1014
memset(param, 0, sizeof(MYSQL_BIND) * 6); /* initialize */
1015
param[0].buffer_type = MYSQL_TYPE_LONG;
1016
param[0].buffer = &o_id;
1017
param[1].buffer_type = MYSQL_TYPE_LONG;
1018
param[1].buffer = &o_d_id;
1019
param[2].buffer_type = MYSQL_TYPE_LONG;
1020
param[2].buffer = &o_w_id;
1021
param[3].buffer_type = MYSQL_TYPE_LONG;
1022
param[3].buffer = &o_c_id;
1023
param[4].buffer_type = MYSQL_TYPE_STRING;
1024
param[4].buffer = timestamp;
1025
param[4].buffer_length = strlen(timestamp);
1026
param[5].buffer_type = MYSQL_TYPE_LONG;
1027
param[5].buffer = &o_ol_cnt;
1028
if( mysql_stmt_bind_param(stmt[6], param) ) goto sqlerr;
1029
if( mysql_stmt_execute(stmt[6]) ) goto sqlerr;
1031
/*EXEC SQL INSERT INTO
1033
values(:o_id,:o_d_id,:o_w_id);*/
1035
memset(param, 0, sizeof(MYSQL_BIND) * 3); /* initialize */
1036
param[0].buffer_type = MYSQL_TYPE_LONG;
1037
param[0].buffer = &o_id;
1038
param[1].buffer_type = MYSQL_TYPE_LONG;
1039
param[1].buffer = &o_d_id;
1040
param[2].buffer_type = MYSQL_TYPE_LONG;
1041
param[2].buffer = &o_w_id;
1042
if( mysql_stmt_bind_param(stmt[7], param) ) goto sqlerr;
1043
if( mysql_stmt_execute(stmt[7]) ) goto sqlerr;
1046
/*EXEC SQL INSERT INTO
1048
values(:o_id,:o_d_id,:o_w_id,:o_c_id,
1050
:o_carrier_id,:o_ol_cnt, 1);*/
1052
memset(param, 0, sizeof(MYSQL_BIND) * 7); /* initialize */
1053
param[0].buffer_type = MYSQL_TYPE_LONG;
1054
param[0].buffer = &o_id;
1055
param[1].buffer_type = MYSQL_TYPE_LONG;
1056
param[1].buffer = &o_d_id;
1057
param[2].buffer_type = MYSQL_TYPE_LONG;
1058
param[2].buffer = &o_w_id;
1059
param[3].buffer_type = MYSQL_TYPE_LONG;
1060
param[3].buffer = &o_c_id;
1061
param[4].buffer_type = MYSQL_TYPE_STRING;
1062
param[4].buffer = timestamp;
1063
param[4].buffer_length = strlen(timestamp);
1064
param[5].buffer_type = MYSQL_TYPE_LONG;
1065
param[5].buffer = &o_carrier_id;
1066
param[6].buffer_type = MYSQL_TYPE_LONG;
1067
param[6].buffer = &o_ol_cnt;
1068
if( mysql_stmt_bind_param(stmt[8], param) ) goto sqlerr;
1069
if( mysql_stmt_execute(stmt[8]) ) goto sqlerr;
1075
printf("OID = %ld, CID = %ld, DID = %ld, WID = %ld\n",
1076
o_id, o_c_id, o_d_id, o_w_id);
1078
for (ol = 1; ol <= o_ol_cnt; ol++) {
1079
/* Generate Order Line Data */
1080
ol_i_id = RandomNumber(1L, MAXITEMS);
1081
ol_supply_w_id = o_w_id;
1085
ol_dist_info[ MakeAlphaString(24, 24, ol_dist_info) ] = 0;
1087
tmp_float = (float) (RandomNumber(10L, 10000L)) / 100.0;
1090
/*EXEC SQL INSERT INTO
1092
values(:o_id,:o_d_id,:o_w_id,:ol,
1093
:ol_i_id,:ol_supply_w_id, NULL,
1094
:ol_quantity,:ol_amount,:ol_dist_info);*/
1096
memset(param, 0, sizeof(MYSQL_BIND) * 9); /* initialize */
1097
param[0].buffer_type = MYSQL_TYPE_LONG;
1098
param[0].buffer = &o_id;
1099
param[1].buffer_type = MYSQL_TYPE_LONG;
1100
param[1].buffer = &o_d_id;
1101
param[2].buffer_type = MYSQL_TYPE_LONG;
1102
param[2].buffer = &o_w_id;
1103
param[3].buffer_type = MYSQL_TYPE_LONG;
1104
param[3].buffer = &ol;
1105
param[4].buffer_type = MYSQL_TYPE_LONG;
1106
param[4].buffer = &ol_i_id;
1107
param[5].buffer_type = MYSQL_TYPE_LONG;
1108
param[5].buffer = &ol_supply_w_id;
1109
param[6].buffer_type = MYSQL_TYPE_LONG;
1110
param[6].buffer = &ol_quantity;
1111
param[7].buffer_type = MYSQL_TYPE_FLOAT;
1112
param[7].buffer = &ol_amount;
1113
param[8].buffer_type = MYSQL_TYPE_STRING;
1114
param[8].buffer = ol_dist_info;
1115
param[8].buffer_length = strlen(ol_dist_info);
1116
if( mysql_stmt_bind_param(stmt[9], param) ) goto sqlerr;
1117
if( mysql_stmt_execute(stmt[9]) ) goto sqlerr;
1120
/*EXEC SQL INSERT INTO
1122
values(:o_id,:o_d_id,:o_w_id,:ol,
1123
:ol_i_id,:ol_supply_w_id,
1125
:ol_quantity,:tmp_float,:ol_dist_info);*/
1127
memset(param, 0, sizeof(MYSQL_BIND) * 10); /* initialize */
1128
param[0].buffer_type = MYSQL_TYPE_LONG;
1129
param[0].buffer = &o_id;
1130
param[1].buffer_type = MYSQL_TYPE_LONG;
1131
param[1].buffer = &o_d_id;
1132
param[2].buffer_type = MYSQL_TYPE_LONG;
1133
param[2].buffer = &o_w_id;
1134
param[3].buffer_type = MYSQL_TYPE_LONG;
1135
param[3].buffer = &ol;
1136
param[4].buffer_type = MYSQL_TYPE_LONG;
1137
param[4].buffer = &ol_i_id;
1138
param[5].buffer_type = MYSQL_TYPE_LONG;
1139
param[5].buffer = &ol_supply_w_id;
1140
param[6].buffer_type = MYSQL_TYPE_STRING;
1141
param[6].buffer = timestamp;
1142
param[6].buffer_length = strlen(timestamp);
1143
param[7].buffer_type = MYSQL_TYPE_LONG;
1144
param[7].buffer = &ol_quantity;
1145
param[8].buffer_type = MYSQL_TYPE_FLOAT;
1146
param[8].buffer = &tmp_float;
1147
param[9].buffer_type = MYSQL_TYPE_STRING;
1148
param[9].buffer = ol_dist_info;
1149
param[9].buffer_length = strlen(ol_dist_info);
1150
if( mysql_stmt_bind_param(stmt[10], param) ) goto sqlerr;
1151
if( mysql_stmt_execute(stmt[10]) ) goto sqlerr;
1155
printf("OL = %ld, IID = %ld, QUAN = %ld, AMT = %8.2f\n",
1156
ol, ol_i_id, ol_quantity, ol_amount);
1159
if (!(o_id % 100)) {
1162
/*EXEC SQL COMMIT WORK;*/
1163
if( mysql_commit(mysql) ) goto sqlerr;
1166
printf(" %ld\n", o_id);
1169
/*EXEC SQL COMMIT WORK;*/
1170
if( mysql_commit(mysql) ) goto sqlerr;
1172
printf("Orders Done.\n");
1179
* ==================================================================+ |
1180
* ROUTINE NAME | MakeAddress() | DESCRIPTION | Build an Address |
1182
* +==================================================================
1185
MakeAddress(str1, str2, city, state, zip)
1192
str1[ MakeAlphaString(10, 20, str1) ] = 0; /* Street 1 */
1193
str2[ MakeAlphaString(10, 20, str2) ] = 0; /* Street 2 */
1194
city[ MakeAlphaString(10, 20, city) ] = 0; /* City */
1195
state[ MakeAlphaString(2, 2, state) ] = 0; /* State */
1196
zip[ MakeNumberString(9, 9, zip) ] = 0; /* Zip */
1200
* ==================================================================+ |
1201
* ROUTINE NAME | Error() | DESCRIPTION | Handles an error from a
1202
* SQL call. | ARGUMENTS
1203
* +==================================================================
1207
MYSQL_STMT *mysql_stmt;
1210
printf("\n%d, %s, %s", mysql_stmt_errno(mysql_stmt),
1211
mysql_stmt_sqlstate(mysql_stmt), mysql_stmt_error(mysql_stmt) );
1213
printf("\n%d, %s, %s\n", mysql_errno(mysql), mysql_sqlstate(mysql), mysql_error(mysql) );
1215
/*EXEC SQL WHENEVER SQLERROR CONTINUE;*/
1217
/*EXEC SQL ROLLBACK WORK;*/
1218
mysql_rollback(mysql);
1220
/*EXEC SQL DISCONNECT;*/