~paul-mccullagh/perconatools/tpcc-fix-mac-build

« back to all changes in this revision

Viewing changes to src/load.c

  • Committer: Vadim Tkachenko
  • Date: 2008-12-04 02:50:59 UTC
  • Revision ID: vadim@percona.com-20081204025059-7qdugxws565smubk
Initial import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * corresponds to A.6 in appendix A
 
3
 */
 
4
 
 
5
/*
 
6
 * ==================================================================+ | Load
 
7
 * TPCC tables
 
8
 * +==================================================================
 
9
 */
 
10
 
 
11
#include <stdio.h>
 
12
#include <string.h>
 
13
#include <ctype.h>
 
14
#include <stdlib.h>
 
15
#include <time.h>
 
16
#include <fcntl.h>
 
17
 
 
18
#include <mysql.h>
 
19
 
 
20
#include "spt_proc.h"
 
21
#include "tpc.h"
 
22
 
 
23
#define NNULL ((void *)0)
 
24
//#undef NULL
 
25
 
 
26
MYSQL *mysql;
 
27
MYSQL_STMT *stmt[11];
 
28
 
 
29
/* Global SQL Variables */
 
30
char            timestamp[81];
 
31
long            count_ware;
 
32
int             fd, seed;
 
33
 
 
34
int             particle_flg = 0; /* "1" means particle mode */
 
35
int             part_no = 0; /* 1:items 2:warehouse 3:customer 4:orders */
 
36
long            min_ware = 1;
 
37
long            max_ware;
 
38
 
 
39
/* Global Variables */
 
40
int             i;
 
41
int             option_debug = 0;       /* 1 if generating debug output    */
 
42
int             is_local = 1;           /* "1" mean local */
 
43
 
 
44
#define DB_STRING_MAX 51
 
45
 
 
46
/*
 
47
 * ==================================================================+ |
 
48
 * main() | ARGUMENTS |      Warehouses n [Debug] [Help]
 
49
 * +==================================================================
 
50
 */
 
51
void 
 
52
main(argc, argv)
 
53
        int             argc;
 
54
        char           *argv[];
 
55
{
 
56
        char            arg[2];
 
57
        char           *ptr;
 
58
 
 
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];
 
63
 
 
64
        int i;
 
65
 
 
66
        MYSQL* resp;
 
67
 
 
68
        /* initialize */
 
69
        count_ware = 0;
 
70
 
 
71
        printf("*************************************\n");
 
72
        printf("*** ###easy### TPC-C Data Loader  ***\n");
 
73
        printf("*************************************\n");
 
74
 
 
75
        /* Parse args */
 
76
        if (argc != 9) {
 
77
            if (argc != 6) {
 
78
                fprintf(stderr, "\n usage: tpcc_load [server] [DB] [user] [pass] [warehouse]\n");
 
79
                exit(1);
 
80
            }
 
81
        }else{
 
82
            particle_flg = 1;
 
83
        }
 
84
 
 
85
        if ( strlen(argv[1]) >= DB_STRING_MAX ) {
 
86
            fprintf(stderr, "\n server phrase is too long\n");
 
87
            exit(1);
 
88
        }
 
89
        if ( strlen(argv[2]) >= DB_STRING_MAX ) {
 
90
            fprintf(stderr, "\n DBname phrase is too long\n");
 
91
            exit(1);
 
92
        }
 
93
        if ( strlen(argv[3]) >= DB_STRING_MAX ) {
 
94
            fprintf(stderr, "\n user phrase is too long\n");
 
95
            exit(1);
 
96
        }
 
97
        if ( strlen(argv[4]) >= DB_STRING_MAX ) {
 
98
            fprintf(stderr, "\n pass phrase is too long\n");
 
99
            exit(1);
 
100
        }
 
101
        if ((count_ware = atoi(argv[5])) <= 0) {
 
102
            fprintf(stderr, "\n expecting positive number of warehouses\n");
 
103
            exit(1);
 
104
        }
 
105
        strcpy( connect_string, argv[1] );
 
106
        strcpy( db_string, argv[2] );
 
107
        strcpy( db_user, argv[3] );
 
108
        strcpy( db_password, argv[4] );
 
109
 
 
110
        if(strcmp(connect_string,"l")==0){
 
111
          is_local = 1;
 
112
        }else{
 
113
          is_local = 0;
 
114
        }
 
115
 
 
116
        if(particle_flg==1){
 
117
            part_no = atoi(argv[6]);
 
118
            min_ware = atoi(argv[7]);
 
119
            max_ware = atoi(argv[8]);
 
120
        }else{
 
121
            min_ware = 1;
 
122
            max_ware = count_ware;
 
123
        }
 
124
 
 
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);
 
130
 
 
131
        printf("  [warehouse]: %d\n", count_ware);
 
132
 
 
133
        if(particle_flg==1){
 
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);
 
137
        }
 
138
 
 
139
        fd = open("/dev/urandom", O_RDONLY);
 
140
        if (fd == -1) {
 
141
            fd = open("/dev/random", O_RDONLY);
 
142
            if (fd == -1) {
 
143
                struct timeval  tv;
 
144
                gettimeofday(&tv, NNULL);
 
145
                seed = (tv.tv_sec ^ tv.tv_usec) * tv.tv_sec * tv.tv_usec ^ tv.tv_sec;
 
146
            }else{
 
147
                read(fd, &seed, sizeof(seed));
 
148
                close(fd);
 
149
            }
 
150
        }else{
 
151
            read(fd, &seed, sizeof(seed));
 
152
            close(fd);
 
153
        }
 
154
        SetSeed(seed);
 
155
 
 
156
        /* Initialize timestamp (for date columns) */
 
157
        gettimestamp(timestamp, STRFTIME_FORMAT, TIMESTAMP_LEN);
 
158
 
 
159
        /* EXEC SQL WHENEVER SQLERROR GOTO Error_SqlCall; */
 
160
 
 
161
        mysql = mysql_init(NULL);
 
162
        if(!mysql) goto Error_SqlCall;
 
163
 
 
164
        if(is_local==1){
 
165
            /* exec sql connect :connect_string; */
 
166
            resp = mysql_real_connect(mysql, "localhost", db_user, db_password, db_string, 3306, NULL, 0);
 
167
        }else{
 
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);
 
170
        }
 
171
 
 
172
        if(resp) {
 
173
            mysql_autocommit(mysql, 0);
 
174
            mysql_query(mysql, "SET UNIQUE_CHECKS=0");
 
175
            mysql_query(mysql, "SET FOREIGN_KEY_CHECKS=0");
 
176
        } else {
 
177
            goto Error_SqlCall_close;
 
178
        }
 
179
 
 
180
        for( i=0; i<11; i++ ){
 
181
            stmt[i] = mysql_stmt_init(mysql);
 
182
            if(!stmt[i]) goto Error_SqlCall_close;
 
183
        }
 
184
 
 
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;
 
218
 
 
219
 
 
220
        /* exec sql begin transaction; */
 
221
 
 
222
        printf("TPCC Data Load Started...\n");
 
223
 
 
224
        if(particle_flg==0){
 
225
            LoadItems();
 
226
            LoadWare();
 
227
            LoadCust();
 
228
            LoadOrd();
 
229
        }else if(particle_flg==1){
 
230
            switch(part_no){
 
231
                case 1:
 
232
                    LoadItems();
 
233
                    break;
 
234
                case 2:
 
235
                    LoadWare();
 
236
                    break;
 
237
                case 3:
 
238
                    LoadCust();
 
239
                    break;
 
240
                case 4:
 
241
                    LoadOrd();
 
242
                    break;
 
243
                default:
 
244
                    printf("Unknown part_no\n");
 
245
                    printf("1:ITEMS 2:WAREHOUSE 3:CUSTOMER 4:ORDERS\n");
 
246
            }
 
247
        }
 
248
 
 
249
        /* EXEC SQL COMMIT WORK; */
 
250
 
 
251
        if( mysql_commit(mysql) ) goto Error_SqlCall;
 
252
 
 
253
        for( i=0; i<11; i++ ){
 
254
            mysql_stmt_close(stmt[i]);
 
255
        }
 
256
 
 
257
        /* EXEC SQL DISCONNECT; */
 
258
 
 
259
        mysql_close(mysql);
 
260
 
 
261
        printf("\n...DATA LOADING COMPLETED SUCCESSFULLY.\n");
 
262
        exit(0);
 
263
Error_SqlCall_close:
 
264
        mysql_close(mysql);
 
265
Error_SqlCall:
 
266
        Error(0);
 
267
}
 
268
 
 
269
/*
 
270
 * ==================================================================+ |
 
271
 * ROUTINE NAME |      LoadItems | DESCRIPTION |      Loads the Item table |
 
272
 * ARGUMENTS |      none
 
273
 * +==================================================================
 
274
 */
 
275
void 
 
276
LoadItems()
 
277
{
 
278
 
 
279
        int             i_id;
 
280
        int             i_im_id;
 
281
        char            i_name[25];
 
282
        float           i_price;
 
283
        char            i_data[51];
 
284
 
 
285
        int             idatasiz;
 
286
        int             orig[MAXITEMS+1];
 
287
        int             pos;
 
288
        int             i;
 
289
 
 
290
        MYSQL_BIND    param[5];
 
291
 
 
292
        /* EXEC SQL WHENEVER SQLERROR GOTO sqlerr; */
 
293
 
 
294
        printf("Loading Item \n");
 
295
 
 
296
        for (i = 0; i < MAXITEMS / 10; i++)
 
297
                orig[i] = 0;
 
298
        for (i = 0; i < MAXITEMS / 10; i++) {
 
299
                do {
 
300
                        pos = RandomNumber(0L, MAXITEMS);
 
301
                } while (orig[pos]);
 
302
                orig[pos] = 1;
 
303
        }
 
304
        for (i_id = 1; i_id <= MAXITEMS; i_id++) {
 
305
 
 
306
                /* Generate Item Data */
 
307
                i_im_id = RandomNumber(1L, 10000L);
 
308
 
 
309
                i_name[ MakeAlphaString(14, 24, i_name) ] = 0;
 
310
 
 
311
                i_price = ((int) RandomNumber(100L, 10000L)) / 100.0;
 
312
 
 
313
                idatasiz = MakeAlphaString(26, 50, i_data);
 
314
                i_data[idatasiz] = 0;
 
315
 
 
316
                if (orig[i_id]) {
 
317
                        pos = RandomNumber(0L, idatasiz - 8);
 
318
                        i_data[pos] = 'o';
 
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';
 
326
                }
 
327
                if (option_debug)
 
328
                        printf("IID = %ld, Name= %16s, Price = %5.2f\n",
 
329
                               i_id, i_name, i_price);
 
330
 
 
331
#if 0
 
332
                printf("about to exec sql\n");
 
333
                fflush(stdout);
 
334
#endif
 
335
 
 
336
                /* EXEC SQL INSERT INTO
 
337
                                item
 
338
                                values(:i_id,:i_im_id,:i_name,:i_price,:i_data); */
 
339
 
 
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;
 
355
 
 
356
#if 0
 
357
                printf("done executing sql\n");
 
358
                fflush(stdout);
 
359
#endif
 
360
 
 
361
                if (!(i_id % 100)) {
 
362
                        printf(".");
 
363
                        fflush(stdout);
 
364
 
 
365
                        /* EXEC SQL COMMIT WORK; */
 
366
                        if( mysql_commit(mysql) ) goto sqlerr;
 
367
 
 
368
                        if (!(i_id % 5000))
 
369
                                printf(" %ld\n", i_id);
 
370
                }
 
371
        }
 
372
 
 
373
        /* EXEC SQL COMMIT WORK; */
 
374
        if( mysql_commit(mysql) ) goto sqlerr;
 
375
 
 
376
        printf("Item Done. \n");
 
377
        return;
 
378
sqlerr:
 
379
        Error(stmt[0]);
 
380
}
 
381
 
 
382
/*
 
383
 * ==================================================================+ |
 
384
 * ROUTINE NAME |      LoadWare | DESCRIPTION |      Loads the Warehouse
 
385
 * table |      Loads Stock, District as Warehouses are created | ARGUMENTS |
 
386
 * none +==================================================================
 
387
 */
 
388
void 
 
389
LoadWare()
 
390
{
 
391
 
 
392
        int             w_id;
 
393
        char            w_name[11];
 
394
        char            w_street_1[21];
 
395
        char            w_street_2[21];
 
396
        char            w_city[21];
 
397
        char            w_state[3];
 
398
        char            w_zip[10];
 
399
        float           w_tax;
 
400
        float           w_ytd;
 
401
 
 
402
        int             tmp;
 
403
 
 
404
        MYSQL_BIND    param[9];
 
405
 
 
406
        /* EXEC SQL WHENEVER SQLERROR GOTO sqlerr; */
 
407
 
 
408
        printf("Loading Warehouse \n");
 
409
        for (w_id = min_ware; w_id <= max_ware; w_id++) {
 
410
 
 
411
                /* Generate Warehouse Data */
 
412
 
 
413
                w_name[ MakeAlphaString(6, 10, w_name) ] = 0;
 
414
 
 
415
                MakeAddress(w_street_1, w_street_2, w_city, w_state, w_zip);
 
416
 
 
417
                w_tax = ((float) RandomNumber(10L, 20L)) / 100.0;
 
418
                w_ytd = 3000000.00;
 
419
 
 
420
                if (option_debug)
 
421
                        printf("WID = %ld, Name= %16s, Tax = %5.2f\n",
 
422
                               w_id, w_name, w_tax);
 
423
 
 
424
                /*EXEC SQL INSERT INTO
 
425
                                warehouse
 
426
                                values(:w_id,:w_name,
 
427
                                       :w_street_1,:w_street_2,:w_city,:w_state,
 
428
                                       :w_zip,:w_tax,:w_ytd);*/
 
429
 
 
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;
 
457
 
 
458
                /** Make Rows associated with Warehouse **/
 
459
                Stock(w_id);
 
460
                District(w_id);
 
461
 
 
462
                /* EXEC SQL COMMIT WORK; */
 
463
                if( mysql_commit(mysql) ) goto sqlerr;
 
464
 
 
465
        }
 
466
 
 
467
        return;
 
468
sqlerr:
 
469
        Error(0);
 
470
}
 
471
 
 
472
/*
 
473
 * ==================================================================+ |
 
474
 * ROUTINE NAME |      LoadCust | DESCRIPTION |      Loads the Customer Table
 
475
 * | ARGUMENTS |      none
 
476
 * +==================================================================
 
477
 */
 
478
void 
 
479
LoadCust()
 
480
{
 
481
 
 
482
        int             w_id;
 
483
        int             d_id;
 
484
 
 
485
        /* EXEC SQL WHENEVER SQLERROR GOTO sqlerr; */
 
486
 
 
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);
 
490
 
 
491
        /* EXEC SQL COMMIT WORK;*/      /* Just in case */
 
492
        if( mysql_commit(mysql) ) goto sqlerr;
 
493
 
 
494
        return;
 
495
sqlerr:
 
496
        Error(0);
 
497
}
 
498
 
 
499
/*
 
500
 * ==================================================================+ |
 
501
 * ROUTINE NAME |      LoadOrd | DESCRIPTION |      Loads the Orders and
 
502
 * Order_Line Tables | ARGUMENTS |      none
 
503
 * +==================================================================
 
504
 */
 
505
void 
 
506
LoadOrd()
 
507
{
 
508
 
 
509
        int             w_id;
 
510
        float           w_tax;
 
511
        int             d_id;
 
512
        float           d_tax;
 
513
 
 
514
        /* EXEC SQL WHENEVER SQLERROR GOTO sqlerr;*/
 
515
 
 
516
        for (w_id = min_ware; w_id <= max_ware; w_id++)
 
517
                for (d_id = 1L; d_id <= DIST_PER_WARE; d_id++)
 
518
                        Orders(d_id, w_id);
 
519
 
 
520
        /* EXEC SQL COMMIT WORK; */     /* Just in case */
 
521
        if( mysql_commit(mysql) ) goto sqlerr;
 
522
 
 
523
        return;
 
524
sqlerr:
 
525
        Error(0);
 
526
}
 
527
 
 
528
/*
 
529
 * ==================================================================+ |
 
530
 * ROUTINE NAME |      Stock | DESCRIPTION |      Loads the Stock table |
 
531
 * ARGUMENTS |      w_id - warehouse id
 
532
 * +==================================================================
 
533
 */
 
534
void 
 
535
Stock(w_id)
 
536
        int             w_id;
 
537
{
 
538
 
 
539
        int             s_i_id;
 
540
        int             s_w_id;
 
541
        int             s_quantity;
 
542
 
 
543
        char            s_dist_01[25];
 
544
        char            s_dist_02[25];
 
545
        char            s_dist_03[25];
 
546
        char            s_dist_04[25];
 
547
        char            s_dist_05[25];
 
548
        char            s_dist_06[25];
 
549
        char            s_dist_07[25];
 
550
        char            s_dist_08[25];
 
551
        char            s_dist_09[25];
 
552
        char            s_dist_10[25];
 
553
        char            s_data[51];
 
554
 
 
555
        int             sdatasiz;
 
556
        int             orig[MAXITEMS+1];
 
557
        int             pos;
 
558
        int             i;
 
559
 
 
560
        MYSQL_BIND    param[14];
 
561
 
 
562
        /* EXEC SQL WHENEVER SQLERROR GOTO sqlerr;*/
 
563
        printf("Loading Stock Wid=%ld\n", w_id);
 
564
        s_w_id = w_id;
 
565
 
 
566
        for (i = 0; i < MAXITEMS / 10; i++)
 
567
                orig[i] = 0;
 
568
        for (i = 0; i < MAXITEMS / 10; i++) {
 
569
                do {
 
570
                        pos = RandomNumber(0L, MAXITEMS);
 
571
                } while (orig[pos]);
 
572
                orig[pos] = 1;
 
573
        }
 
574
 
 
575
        for (s_i_id = 1; s_i_id <= MAXITEMS; s_i_id++) {
 
576
 
 
577
                /* Generate Stock Data */
 
578
                s_quantity = RandomNumber(10L, 100L);
 
579
 
 
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;
 
592
 
 
593
                if (orig[s_i_id]) {
 
594
                        pos = RandomNumber(0L, sdatasiz - 8);
 
595
 
 
596
                        s_data[pos] = 'o';
 
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';
 
604
 
 
605
                }
 
606
                /*EXEC SQL INSERT INTO
 
607
                                stock
 
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,
 
611
                                       0, 0, 0,:s_data);*/
 
612
 
 
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;
 
655
 
 
656
                if (option_debug)
 
657
                        printf("SID = %ld, WID = %ld, Quan = %ld\n",
 
658
                               s_i_id, s_w_id, s_quantity);
 
659
 
 
660
                if (!(s_i_id % 100)) {
 
661
                    /*EXEC SQL COMMIT WORK; */
 
662
                    if( mysql_commit(mysql) ) goto sqlerr;
 
663
 
 
664
                        printf(".");
 
665
                        fflush(stdout);
 
666
                        if (!(s_i_id % 5000))
 
667
                                printf(" %ld\n", s_i_id);
 
668
                }
 
669
        }
 
670
        /*EXEC SQL COMMIT WORK;*/
 
671
        if( mysql_commit(mysql) ) goto sqlerr;
 
672
 
 
673
        printf(" Stock Done.\n");
 
674
        return;
 
675
sqlerr:
 
676
        Error(0);
 
677
}
 
678
 
 
679
/*
 
680
 * ==================================================================+ |
 
681
 * ROUTINE NAME |      District | DESCRIPTION |      Loads the District table
 
682
 * | ARGUMENTS |      w_id - warehouse id
 
683
 * +==================================================================
 
684
 */
 
685
void 
 
686
District(w_id)
 
687
        int             w_id;
 
688
{
 
689
 
 
690
        int             d_id;
 
691
        int             d_w_id;
 
692
 
 
693
        char            d_name[11];
 
694
        char            d_street_1[21];
 
695
        char            d_street_2[21];
 
696
        char            d_city[21];
 
697
        char            d_state[3];
 
698
        char            d_zip[10];
 
699
 
 
700
        float           d_tax;
 
701
        float           d_ytd;
 
702
        int             d_next_o_id;
 
703
 
 
704
        MYSQL_BIND    param[11];
 
705
 
 
706
        /* EXEC SQL WHENEVER SQLERROR GOTO sqlerr;*/
 
707
 
 
708
        printf("Loading District\n");
 
709
        d_w_id = w_id;
 
710
        d_ytd = 30000.0;
 
711
        d_next_o_id = 3001L;
 
712
        for (d_id = 1; d_id <= DIST_PER_WARE; d_id++) {
 
713
 
 
714
                /* Generate District Data */
 
715
 
 
716
                d_name[ MakeAlphaString(6L, 10L, d_name) ] = 0;
 
717
                MakeAddress(d_street_1, d_street_2, d_city, d_state, d_zip);
 
718
 
 
719
                d_tax = ((float) RandomNumber(10L, 20L)) / 100.0;
 
720
 
 
721
                /*EXEC SQL INSERT INTO
 
722
                                district
 
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);*/
 
726
 
 
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;
 
758
 
 
759
                if (option_debug)
 
760
                        printf("DID = %ld, WID = %ld, Name = %10s, Tax = %5.2f\n",
 
761
                               d_id, d_w_id, d_name, d_tax);
 
762
 
 
763
        }
 
764
        /*EXEC SQL COMMIT WORK;*/
 
765
        if( mysql_commit(mysql) ) goto sqlerr;
 
766
 
 
767
        return;
 
768
sqlerr:
 
769
        Error(0);
 
770
}
 
771
 
 
772
/*
 
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
 * +==================================================================
 
778
 */
 
779
void 
 
780
Customer(d_id, w_id)
 
781
        int             d_id;
 
782
        int             w_id;
 
783
{
 
784
        int             c_id;
 
785
        int             c_d_id;
 
786
        int             c_w_id;
 
787
 
 
788
        char            c_first[17];
 
789
        char            c_middle[3];
 
790
        char            c_last[17];
 
791
        char            c_street_1[21];
 
792
        char            c_street_2[21];
 
793
        char            c_city[21];
 
794
        char            c_state[3];
 
795
        char            c_zip[10];
 
796
        char            c_phone[17];
 
797
        char            c_since[12];
 
798
        char            c_credit[3];
 
799
 
 
800
        int             c_credit_lim;
 
801
        float           c_discount;
 
802
        float           c_balance;
 
803
        char            c_data[501];
 
804
 
 
805
        float           h_amount;
 
806
 
 
807
        char            h_data[25];
 
808
 
 
809
        MYSQL_BIND    param[18];
 
810
 
 
811
        /*EXEC SQL WHENEVER SQLERROR GOTO sqlerr;*/
 
812
 
 
813
        printf("Loading Customer for DID=%ld, WID=%ld\n", d_id, w_id);
 
814
 
 
815
        for (c_id = 1; c_id <= CUST_PER_DIST; c_id++) {
 
816
 
 
817
                /* Generate Customer Data */
 
818
                c_d_id = d_id;
 
819
                c_w_id = w_id;
 
820
 
 
821
                c_first[ MakeAlphaString(8, 16, c_first) ] = 0;
 
822
                c_middle[0] = 'O';
 
823
                c_middle[1] = 'E';
 
824
                c_middle[2] = 0;
 
825
 
 
826
                if (c_id <= 1000) {
 
827
                        Lastname(c_id - 1, c_last);
 
828
                } else {
 
829
                        Lastname(NURand(255, 0, 999), c_last);
 
830
                }
 
831
 
 
832
                MakeAddress(c_street_1, c_street_2, c_city, c_state, c_zip);
 
833
                c_phone[ MakeNumberString(16, 16, c_phone) ] = 0;
 
834
 
 
835
                if (RandomNumber(0L, 1L))
 
836
                        c_credit[0] = 'G';
 
837
                else
 
838
                        c_credit[0] = 'B';
 
839
                c_credit[1] = 'C';
 
840
                c_credit[2] = 0;
 
841
 
 
842
                c_credit_lim = 50000;
 
843
                c_discount = ((float) RandomNumber(0L, 50L)) / 100.0;
 
844
                c_balance = -10.0;
 
845
 
 
846
                c_data[ MakeAlphaString(300, 500, c_data) ] = 0;
 
847
 
 
848
                /*EXEC SQL INSERT INTO
 
849
                                customer
 
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,
 
853
                                  :c_zip,
 
854
                                  :c_phone, :timestamp,
 
855
                                  :c_credit,
 
856
                                  :c_credit_lim,:c_discount,:c_balance,
 
857
                                  10.0, 1, 0,:c_data);*/
 
858
 
 
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;
 
910
 
 
911
                h_amount = 10.0;
 
912
 
 
913
                h_data[ MakeAlphaString(12, 24, h_data) ] = 0;
 
914
 
 
915
                /*EXEC SQL INSERT INTO
 
916
                                history
 
917
                                values(:c_id,:c_d_id,:c_w_id,
 
918
                                       :c_d_id,:c_w_id, :timestamp,
 
919
                                       :h_amount,:h_data);*/
 
920
 
 
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;
 
942
 
 
943
                if (option_debug)
 
944
                        printf("CID = %ld, LST = %s, P# = %s\n",
 
945
                               c_id, c_last, c_phone);
 
946
                if (!(c_id % 100)) {
 
947
                    /* EXEC SQL COMMIT WORK; */
 
948
                    if( mysql_commit(mysql) ) goto sqlerr;
 
949
 
 
950
                        printf(".");
 
951
                        fflush(stdout);
 
952
                        if (!(c_id % 1000))
 
953
                                printf(" %ld\n", c_id);
 
954
                }
 
955
        }
 
956
        printf("Customer Done.\n");
 
957
 
 
958
        return;
 
959
sqlerr:
 
960
        Error(0);
 
961
}
 
962
 
 
963
/*
 
964
 * ==================================================================+ |
 
965
 * ROUTINE NAME |      Orders | DESCRIPTION |      Loads the Orders table |
 
966
 * Also loads the Order_Line table on the fly | ARGUMENTS |      w_id -
 
967
 * warehouse id
 
968
 * +==================================================================
 
969
 */
 
970
void 
 
971
Orders(d_id, w_id)
 
972
        int             d_id, w_id;
 
973
{
 
974
 
 
975
        int             o_id;
 
976
        int             o_c_id;
 
977
        int             o_d_id;
 
978
        int             o_w_id;
 
979
        int             o_carrier_id;
 
980
        int             o_ol_cnt;
 
981
        int             ol;
 
982
        int             ol_i_id;
 
983
        int             ol_supply_w_id;
 
984
        int             ol_quantity;
 
985
        float           ol_amount;
 
986
        char            ol_dist_info[25];
 
987
        float           i_price;
 
988
        float           c_discount;
 
989
        float           tmp_float;
 
990
 
 
991
        MYSQL_BIND    param[10];
 
992
 
 
993
        /* EXEC SQL WHENEVER SQLERROR GOTO sqlerr; */
 
994
 
 
995
        printf("Loading Orders for D=%ld, W= %ld\n", d_id, w_id);
 
996
        o_d_id = d_id;
 
997
        o_w_id = w_id;
 
998
        InitPermutation();      /* initialize permutation of customer numbers */
 
999
        for (o_id = 1; o_id <= ORD_PER_DIST; o_id++) {
 
1000
 
 
1001
                /* Generate Order Data */
 
1002
                o_c_id = GetPermutation();
 
1003
                o_carrier_id = RandomNumber(1L, 10L);
 
1004
                o_ol_cnt = RandomNumber(5L, 15L);
 
1005
 
 
1006
                if (o_id > 2100) {      /* the last 900 orders have not been
 
1007
                                         * delivered) */
 
1008
                    /*EXEC SQL INSERT INTO
 
1009
                                        orders
 
1010
                                        values(:o_id,:o_d_id,:o_w_id,:o_c_id,
 
1011
                                               :timestamp,
 
1012
                                               NULL,:o_ol_cnt, 1);*/
 
1013
 
 
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;
 
1030
 
 
1031
                    /*EXEC SQL INSERT INTO
 
1032
                                        new_orders
 
1033
                                        values(:o_id,:o_d_id,:o_w_id);*/
 
1034
 
 
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;
 
1044
 
 
1045
                } else {
 
1046
                    /*EXEC SQL INSERT INTO
 
1047
                            orders
 
1048
                            values(:o_id,:o_d_id,:o_w_id,:o_c_id,
 
1049
                                   :timestamp,
 
1050
                                   :o_carrier_id,:o_ol_cnt, 1);*/
 
1051
 
 
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;
 
1070
 
 
1071
                }
 
1072
 
 
1073
 
 
1074
                if (option_debug)
 
1075
                        printf("OID = %ld, CID = %ld, DID = %ld, WID = %ld\n",
 
1076
                               o_id, o_c_id, o_d_id, o_w_id);
 
1077
 
 
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;
 
1082
                        ol_quantity = 5;
 
1083
                        ol_amount = 0.0;
 
1084
 
 
1085
                        ol_dist_info[ MakeAlphaString(24, 24, ol_dist_info) ] = 0;
 
1086
 
 
1087
                        tmp_float = (float) (RandomNumber(10L, 10000L)) / 100.0;
 
1088
 
 
1089
                        if (o_id > 2100) {
 
1090
                            /*EXEC SQL INSERT INTO
 
1091
                                                order_line
 
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);*/
 
1095
 
 
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;
 
1118
 
 
1119
                        } else {
 
1120
                            /*EXEC SQL INSERT INTO
 
1121
                                    order_line
 
1122
                                    values(:o_id,:o_d_id,:o_w_id,:ol,
 
1123
                                           :ol_i_id,:ol_supply_w_id, 
 
1124
                                           :timestamp,
 
1125
                                           :ol_quantity,:tmp_float,:ol_dist_info);*/
 
1126
 
 
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;
 
1152
                        }
 
1153
 
 
1154
                        if (option_debug)
 
1155
                                printf("OL = %ld, IID = %ld, QUAN = %ld, AMT = %8.2f\n",
 
1156
                                       ol, ol_i_id, ol_quantity, ol_amount);
 
1157
 
 
1158
                }
 
1159
                if (!(o_id % 100)) {
 
1160
                        printf(".");
 
1161
                        fflush(stdout);
 
1162
                        /*EXEC SQL COMMIT WORK;*/
 
1163
                        if( mysql_commit(mysql) ) goto sqlerr;
 
1164
 
 
1165
                        if (!(o_id % 1000))
 
1166
                                printf(" %ld\n", o_id);
 
1167
                }
 
1168
        }
 
1169
        /*EXEC SQL COMMIT WORK;*/
 
1170
        if( mysql_commit(mysql) ) goto sqlerr;
 
1171
 
 
1172
        printf("Orders Done.\n");
 
1173
        return;
 
1174
sqlerr:
 
1175
        Error(0);
 
1176
}
 
1177
 
 
1178
/*
 
1179
 * ==================================================================+ |
 
1180
 * ROUTINE NAME |      MakeAddress() | DESCRIPTION |      Build an Address |
 
1181
 * ARGUMENTS
 
1182
 * +==================================================================
 
1183
 */
 
1184
void 
 
1185
MakeAddress(str1, str2, city, state, zip)
 
1186
        char           *str1;
 
1187
        char           *str2;
 
1188
        char           *city;
 
1189
        char           *state;
 
1190
        char           *zip;
 
1191
{
 
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 */
 
1197
}
 
1198
 
 
1199
/*
 
1200
 * ==================================================================+ |
 
1201
 * ROUTINE NAME |      Error() | DESCRIPTION |      Handles an error from a
 
1202
 * SQL call. | ARGUMENTS
 
1203
 * +==================================================================
 
1204
 */
 
1205
void 
 
1206
Error(mysql_stmt)
 
1207
        MYSQL_STMT   *mysql_stmt;
 
1208
{
 
1209
    if(mysql_stmt) {
 
1210
        printf("\n%d, %s, %s", mysql_stmt_errno(mysql_stmt),
 
1211
               mysql_stmt_sqlstate(mysql_stmt), mysql_stmt_error(mysql_stmt) );
 
1212
    }
 
1213
    printf("\n%d, %s, %s\n", mysql_errno(mysql), mysql_sqlstate(mysql), mysql_error(mysql) );
 
1214
 
 
1215
    /*EXEC SQL WHENEVER SQLERROR CONTINUE;*/
 
1216
 
 
1217
    /*EXEC SQL ROLLBACK WORK;*/
 
1218
    mysql_rollback(mysql);
 
1219
 
 
1220
    /*EXEC SQL DISCONNECT;*/
 
1221
    mysql_close(mysql);
 
1222
 
 
1223
        exit(-1);
 
1224
}