199
199
DELETE_TYPE_REQUIRES_PREFIX= 6
200
200
} slap_query_type;
202
typedef struct statement statement;
207
Statement(char *in_string,
209
slap_query_type in_type,
211
size_t in_option_length,
218
option_length(in_option_length),
232
char *getString() const
237
size_t getLength() const
242
slap_query_type getType() const
247
char *getOption() const
252
size_t getOptionLength() const
254
return option_length;
257
Statement *getNext() const
262
void setString(char *in_string)
267
void setString(size_t in_length, char in_char)
269
string[in_length]= in_char;
272
void setLength(size_t in_length)
277
void setType(slap_query_type in_type)
282
void setOption(char *in_option)
287
void setOptionLength(size_t in_option_length)
289
option_length= in_option_length;
292
void setNext(Statement *in_next)
207
300
slap_query_type type;
209
302
size_t option_length;
213
typedef struct option_string option_string;
215
struct option_string {
311
OptionString(char *in_string,
314
size_t in_option_length,
315
OptionString *in_next)
320
option_length(in_option_length),
333
char *getString() const
338
size_t getLength() const
343
char *getOption() const
348
size_t getOptionLength() const
350
return option_length;
353
OptionString *getNext() const
358
void setString(char *in_string)
363
void setOptionLength(size_t in_option_length)
365
option_length= in_option_length;
368
void setLength(size_t in_length)
373
void setOption(char *in_option)
378
void setOption(size_t in_option_length, char in_char)
380
option[in_option_length]= in_char;
383
void setNext(OptionString *in_next)
219
392
size_t option_length;
223
typedef struct stats stats;
401
Stats(long int in_timing,
403
uint32_t in_real_users,
405
long int in_create_timing,
406
uint64_t in_create_count)
410
real_users(in_real_users),
412
create_timing(in_create_timing),
413
create_count(in_create_count)
426
long int getTiming() const
431
uint32_t getUsers() const
436
uint32_t getRealUsers() const
441
uint64_t getRows() const
446
long int getCreateTiming() const
448
return create_timing;
451
uint64_t getCreateCount() const
456
void setTiming(long int in_timing)
461
void setUsers(uint32_t in_users)
466
void setRealUsers(uint32_t in_real_users)
468
real_users= in_real_users;
471
void setRows(uint64_t in_rows)
476
void setCreateTiming(long int in_create_timing)
478
create_timing= in_create_timing;
481
void setCreateCount(uint64_t in_create_count)
483
create_count= in_create_count;
228
489
uint32_t real_users;
231
492
uint64_t create_count;
234
typedef struct thread_context thread_context;
236
struct thread_context {
500
ThreadContext(Statement *in_stmt,
513
Statement *getStmt() const
518
uint64_t getLimit() const
523
void setStmt(Statement *in_stmt)
528
void setLimit(uint64_t in_limit)
241
typedef struct conclusions conclusions;
544
Conclusions(char *in_engine,
545
long int in_avg_timing,
546
long int in_max_timing,
547
long int in_min_timing,
549
uint32_t in_real_users,
550
uint64_t in_avg_rows,
551
long int in_sum_of_time,
553
long int in_create_avg_timing,
554
long int in_create_max_timing,
555
long int in_create_min_timing,
556
uint64_t in_create_count,
557
uint64_t in_max_rows,
558
uint64_t in_min_rows)
561
avg_timing(in_avg_timing),
562
max_timing(in_max_timing),
563
min_timing(in_min_timing),
565
real_users(in_real_users),
566
avg_rows(in_avg_rows),
567
sum_of_time(in_sum_of_time),
569
create_avg_timing(in_create_avg_timing),
570
create_max_timing(in_create_max_timing),
571
create_min_timing(in_create_min_timing),
572
create_count(in_create_count),
573
max_rows(in_max_rows),
574
min_rows(in_min_rows)
588
create_avg_timing(0),
589
create_max_timing(0),
590
create_min_timing(0),
596
char *getEngine() const
601
long int getAvgTiming() const
606
long int getMaxTiming() const
611
long int getMinTiming() const
616
uint32_t getUsers() const
621
uint32_t getRealUsers() const
626
uint64_t getAvgRows() const
631
long int getSumOfTime() const
636
long int getStdDev() const
641
long int getCreateAvgTiming() const
643
return create_avg_timing;
646
long int getCreateMaxTiming() const
648
return create_max_timing;
651
long int getCreateMinTiming() const
653
return create_min_timing;
656
uint64_t getCreateCount() const
661
uint64_t getMinRows() const
666
uint64_t getMaxRows() const
671
void setEngine(char *in_engine)
676
void setAvgTiming(long int in_avg_timing)
678
avg_timing= in_avg_timing;
681
void setMaxTiming(long int in_max_timing)
683
max_timing= in_max_timing;
686
void setMinTiming(long int in_min_timing)
688
min_timing= in_min_timing;
691
void setUsers(uint32_t in_users)
696
void setRealUsers(uint32_t in_real_users)
698
real_users= in_real_users;
701
void setAvgRows(uint64_t in_avg_rows)
703
avg_rows= in_avg_rows;
706
void setSumOfTime(long int in_sum_of_time)
708
sum_of_time= in_sum_of_time;
711
void setStdDev(long int in_std_dev)
716
void setCreateAvgTiming(long int in_create_avg_timing)
718
create_avg_timing= in_create_avg_timing;
721
void setCreateMaxTiming(long int in_create_max_timing)
723
create_max_timing= in_create_max_timing;
726
void setCreateMinTiming(long int in_create_min_timing)
728
create_min_timing= in_create_min_timing;
731
void setCreateCount(uint64_t in_create_count)
733
create_count= in_create_count;
736
void setMinRows(uint64_t in_min_rows)
738
min_rows= in_min_rows;
741
void setMaxRows(uint64_t in_max_rows)
743
max_rows= in_max_rows;
245
748
long int avg_timing;
246
749
long int max_timing;
260
763
uint64_t min_rows;
263
static option_string *engine_options= NULL;
264
static option_string *query_options= NULL;
265
static statement *pre_statements= NULL;
266
static statement *post_statements= NULL;
267
static statement *create_statements= NULL;
269
static statement **query_statements= NULL;
767
static OptionString *engine_options= NULL;
768
static OptionString *query_options= NULL;
769
static Statement *pre_statements= NULL;
770
static Statement *post_statements= NULL;
771
static Statement *create_statements= NULL;
773
static Statement **query_statements= NULL;
270
774
static unsigned int query_statements_count;
274
void print_conclusions(conclusions *con);
275
void print_conclusions_csv(conclusions *con);
276
void generate_stats(conclusions *con, option_string *eng, stats *sptr);
778
void print_conclusions(Conclusions *con);
779
void print_conclusions_csv(Conclusions *con);
780
void generate_stats(Conclusions *con, OptionString *eng, Stats *sptr);
277
781
uint32_t parse_comma(const char *string, uint32_t **range);
278
uint32_t parse_delimiter(const char *script, statement **stmt, char delm);
279
uint32_t parse_option(const char *origin, option_string **stmt, char delm);
782
uint32_t parse_delimiter(const char *script, Statement **stmt, char delm);
783
uint32_t parse_option(const char *origin, OptionString **stmt, char delm);
280
784
static int drop_schema(drizzle_con_st *con, const char *db);
281
785
uint32_t get_random_string(char *buf, size_t size);
282
static statement *build_table_string(void);
283
static statement *build_insert_string(void);
284
static statement *build_update_string(void);
285
static statement * build_select_string(bool key);
286
static int generate_primary_key_list(drizzle_con_st *con, option_string *engine_stmt);
786
static Statement *build_table_string(void);
787
static Statement *build_insert_string(void);
788
static Statement *build_update_string(void);
789
static Statement * build_select_string(bool key);
790
static int generate_primary_key_list(drizzle_con_st *con, OptionString *engine_stmt);
287
791
static int drop_primary_key_list(void);
288
static int create_schema(drizzle_con_st *con, const char *db, statement *stmt,
289
option_string *engine_stmt, stats *sptr);
290
static int run_scheduler(stats *sptr, statement **stmts, uint32_t concur,
792
static int create_schema(drizzle_con_st *con, const char *db, Statement *stmt,
793
OptionString *engine_stmt, Stats *sptr);
794
static int run_scheduler(Stats *sptr, Statement **stmts, uint32_t concur,
292
796
extern "C" pthread_handler_t run_task(void *p);
293
797
extern "C" pthread_handler_t timer_thread(void *p);
294
void statement_cleanup(statement *stmt);
295
void option_cleanup(option_string *stmt);
296
void concurrency_loop(drizzle_con_st *con, uint32_t current, option_string *eptr);
297
static int run_statements(drizzle_con_st *con, statement *stmt);
798
void statement_cleanup(Statement *stmt);
799
void option_cleanup(OptionString *stmt);
800
void concurrency_loop(drizzle_con_st *con, uint32_t current, OptionString *eptr);
801
static int run_statements(drizzle_con_st *con, Statement *stmt);
298
802
void slap_connect(drizzle_con_st *con, bool connect_to_schema);
299
803
void slap_close(drizzle_con_st *con);
300
804
static int run_query(drizzle_con_st *con, drizzle_result_st *result, const char *query, int len);
301
void standard_deviation (conclusions *con, stats *sptr);
805
void standard_deviation (Conclusions *con, Stats *sptr);
303
807
static const char ALPHANUMERICS[]=
304
808
"0123456789ABCDEFGHIJKLMNOPQRSTWXYZabcdefghijklmnopqrstuvwxyz";
938
1442
table_string.append(")");
939
ptr= (statement *)malloc(sizeof(statement));
1443
ptr= (Statement *)malloc(sizeof(Statement));
940
1444
if (ptr == NULL)
942
1446
fprintf(stderr, "Memory Allocation error in creating table\n");
945
memset(ptr, 0, sizeof(statement));
946
ptr->string = (char *)malloc(table_string.length()+1);
947
if (ptr->string == NULL)
1449
memset(ptr, 0, sizeof(Statement));
1450
ptr->setString((char *)malloc(table_string.length()+1));
1451
if (ptr->getString()==NULL)
949
1453
fprintf(stderr, "Memory Allocation error in creating table\n");
952
memset(ptr->string, 0, table_string.length()+1);
953
ptr->length= table_string.length()+1;
954
ptr->type= CREATE_TABLE_TYPE;
955
strcpy(ptr->string, table_string.c_str());
1456
memset(ptr->getString(), 0, table_string.length()+1);
1457
ptr->setLength(table_string.length()+1);
1458
ptr->setType(CREATE_TABLE_TYPE);
1459
strcpy(ptr->getString(), table_string.c_str());
1012
1516
update_string.append(" WHERE id = ");
1015
ptr= (statement *)malloc(sizeof(statement));
1519
ptr= (Statement *)malloc(sizeof(Statement));
1016
1520
if (ptr == NULL)
1018
1522
fprintf(stderr, "Memory Allocation error in creating update\n");
1021
memset(ptr, 0, sizeof(statement));
1525
memset(ptr, 0, sizeof(Statement));
1023
ptr->length= update_string.length()+1;
1024
ptr->string= (char *)malloc(ptr->length);
1025
if (ptr->string == NULL)
1527
ptr->setLength(update_string.length()+1);
1528
ptr->setString((char *)malloc(ptr->getLength()));
1529
if (ptr->getString() == NULL)
1027
1531
fprintf(stderr, "Memory Allocation error in creating update\n");
1030
memset(ptr->string, 0, ptr->length);
1534
memset(ptr->getString(), 0, ptr->getLength());
1031
1535
if (auto_generate_sql_autoincrement || auto_generate_sql_guid_primary)
1032
ptr->type= UPDATE_TYPE_REQUIRES_PREFIX ;
1536
ptr->setType(UPDATE_TYPE_REQUIRES_PREFIX);
1034
ptr->type= UPDATE_TYPE;
1035
strncpy(ptr->string, update_string.c_str(), ptr->length);
1538
ptr->setType(UPDATE_TYPE);
1539
strncpy(ptr->getString(), update_string.c_str(), ptr->getLength());
1158
1662
insert_string.append(")", 1);
1160
if (!(ptr= (statement *)malloc(sizeof(statement))))
1162
fprintf(stderr, "Memory Allocation error in creating select\n");
1165
memset(ptr, 0, sizeof(statement));
1166
ptr->length= insert_string.length()+1;
1167
if (!(ptr->string= (char *)malloc(ptr->length)))
1169
fprintf(stderr, "Memory Allocation error in creating select\n");
1172
memset(ptr->string, 0, ptr->length);
1173
ptr->type= INSERT_TYPE;
1174
strcpy(ptr->string, insert_string.c_str());
1664
if (!(ptr= (Statement *)malloc(sizeof(Statement))))
1666
fprintf(stderr, "Memory Allocation error in creating select\n");
1669
memset(ptr, 0, sizeof(Statement));
1670
ptr->setLength(insert_string.length()+1);
1671
ptr->setString((char *)malloc(ptr->getLength()));
1672
if (ptr->getString()==NULL)
1674
fprintf(stderr, "Memory Allocation error in creating select\n");
1677
memset(ptr->getString(), 0, ptr->getLength());
1678
ptr->setType(INSERT_TYPE);
1679
strcpy(ptr->getString(), insert_string.c_str());
1247
1752
(auto_generate_sql_autoincrement || auto_generate_sql_guid_primary))
1248
1753
query_string.append(" WHERE id = ");
1250
ptr= (statement *)malloc(sizeof(statement));
1755
ptr= (Statement *)malloc(sizeof(Statement));
1251
1756
if (ptr == NULL)
1253
1758
fprintf(stderr, "Memory Allocation error in creating select\n");
1256
memset(ptr, 0, sizeof(statement));
1257
ptr->length= query_string.length()+1;
1258
ptr->string= (char *)malloc(ptr->length);
1259
if (ptr->string == NULL)
1761
memset(ptr, 0, sizeof(Statement));
1762
ptr->setLength(query_string.length()+1);
1763
ptr->setString((char *)malloc(ptr->getLength()));
1764
if (ptr->getString() == NULL)
1261
1766
fprintf(stderr, "Memory Allocation error in creating select\n");
1264
memset(ptr->string, 0, ptr->length);
1769
memset(ptr->getString(), 0, ptr->getLength());
1266
1771
(auto_generate_sql_autoincrement || auto_generate_sql_guid_primary))
1267
ptr->type= SELECT_TYPE_REQUIRES_PREFIX;
1772
ptr->setType(SELECT_TYPE_REQUIRES_PREFIX);
1269
ptr->type= SELECT_TYPE;
1270
strcpy(ptr->string, query_string.c_str());
1774
ptr->setType(SELECT_TYPE);
1775
strcpy(ptr->getString(), query_string.c_str());
1924
2429
drizzle_result_free(&result);
1925
sptr->create_count++;
2430
sptr->setCreateCount(sptr->getCreateCount()+1);
1928
2433
if (engine_stmt)
1930
2435
len= snprintf(query, HUGE_STRING_LENGTH, "set storage_engine=`%s`",
1931
engine_stmt->string);
2436
engine_stmt->getString());
1932
2437
if (run_query(con, NULL, query, len))
1934
2439
fprintf(stderr,"%s: Cannot set default engine: %s\n", internal::my_progname,
1935
2440
drizzle_con_error(con));
1938
sptr->create_count++;
2443
sptr->setCreateCount(sptr->getCreateCount()+1);
1942
2447
after_create= stmt;
1945
for (ptr= after_create; ptr && ptr->length; ptr= ptr->next, count++)
2450
for (ptr= after_create; ptr && ptr->getLength(); ptr= ptr->getNext(), count++)
1947
2452
if (auto_generate_sql && ( auto_generate_sql_number == count))
1950
if (engine_stmt && engine_stmt->option && ptr->type == CREATE_TABLE_TYPE)
2455
if (engine_stmt && engine_stmt->getOption() && ptr->getType() == CREATE_TABLE_TYPE)
1952
2457
char buffer[HUGE_STRING_LENGTH];
1954
snprintf(buffer, HUGE_STRING_LENGTH, "%s %s", ptr->string,
1955
engine_stmt->option);
2459
snprintf(buffer, HUGE_STRING_LENGTH, "%s %s", ptr->getString(),
2460
engine_stmt->getOption());
1956
2461
if (run_query(con, NULL, buffer, strlen(buffer)))
1958
2463
fprintf(stderr,"%s: Cannot run query %.*s ERROR : %s\n",
1959
internal::my_progname, (uint32_t)ptr->length, ptr->string, drizzle_con_error(con));
2464
internal::my_progname, (uint32_t)ptr->getLength(), ptr->getString(), drizzle_con_error(con));
1960
2465
if (!opt_ignore_sql_errors)
1963
sptr->create_count++;
2468
sptr->setCreateCount(sptr->getCreateCount()+1);
1967
if (run_query(con, NULL, ptr->string, ptr->length))
2472
if (run_query(con, NULL, ptr->getString(), ptr->getLength()))
1969
2474
fprintf(stderr,"%s: Cannot run query %.*s ERROR : %s\n",
1970
internal::my_progname, (uint32_t)ptr->length, ptr->string, drizzle_con_error(con));
2475
internal::my_progname, (uint32_t)ptr->getLength(), ptr->getString(), drizzle_con_error(con));
1971
2476
if (!opt_ignore_sql_errors)
1974
sptr->create_count++;
2479
sptr->setCreateCount(sptr->getCreateCount()+1);
1978
2483
if (auto_generate_sql && (auto_generate_sql_number > count ))
1980
2485
/* Special case for auto create, we don't want to create tables twice */
1981
after_create= stmt->next;
2486
after_create= stmt->getNext();
1982
2487
goto limit_not_met;
1985
2490
gettimeofday(&end_time, NULL);
1987
sptr->create_timing= timedif(end_time, start_time);
2492
sptr->setCreateTiming(timedif(end_time, start_time));
2362
2867
/* Move past the : and the first string */
2363
tmp->option_length= strlen(buffer_ptr);
2364
tmp->option= (char *)malloc(tmp->option_length + 1);
2365
if (tmp->option == NULL)
2868
tmp->setOptionLength(strlen(buffer_ptr));
2869
tmp->setOption((char *)malloc(tmp->getOptionLength() + 1));
2870
if (tmp->getOption() == NULL)
2367
2872
fprintf(stderr,"Error allocating memory while parsing options\n");
2370
memcpy(tmp->option, buffer_ptr, tmp->option_length);
2371
tmp->option[tmp->option_length]= 0;
2875
memcpy(tmp->getOption(), buffer_ptr, tmp->getOptionLength());
2876
tmp->setOption(tmp->getOptionLength(),0);
2374
tmp->length= strlen(buffer);
2375
tmp->string= strdup(buffer);
2376
if (tmp->string == NULL)
2879
tmp->setLength(strlen(buffer));
2880
tmp->setString(strdup(buffer));
2881
if (tmp->getString() == NULL)
2378
2883
fprintf(stderr,"Error allocating memory while parsing options\n");
2497
print_conclusions(conclusions *con)
3002
print_conclusions(Conclusions *con)
2499
3004
printf("Benchmark\n");
2501
printf("\tRunning for engine %s\n", con->engine);
3005
if (con->getEngine())
3006
printf("\tRunning for engine %s\n", con->getEngine());
2502
3007
if (opt_label || opt_auto_generate_sql_type)
2504
3009
const char *ptr= opt_auto_generate_sql_type ? opt_auto_generate_sql_type : "query";
2505
3010
printf("\tLoad: %s\n", opt_label ? opt_label : ptr);
2507
3012
printf("\tAverage Time took to generate schema and initial data: %ld.%03ld seconds\n",
2508
con->create_avg_timing / 1000, con->create_avg_timing % 1000);
3013
con->getCreateAvgTiming() / 1000, con->getCreateAvgTiming() % 1000);
2509
3014
printf("\tAverage number of seconds to run all queries: %ld.%03ld seconds\n",
2510
con->avg_timing / 1000, con->avg_timing % 1000);
3015
con->getAvgTiming() / 1000, con->getAvgTiming() % 1000);
2511
3016
printf("\tMinimum number of seconds to run all queries: %ld.%03ld seconds\n",
2512
con->min_timing / 1000, con->min_timing % 1000);
3017
con->getMinTiming() / 1000, con->getMinTiming() % 1000);
2513
3018
printf("\tMaximum number of seconds to run all queries: %ld.%03ld seconds\n",
2514
con->max_timing / 1000, con->max_timing % 1000);
3019
con->getMaxTiming() / 1000, con->getMaxTiming() % 1000);
2515
3020
printf("\tTotal time for tests: %ld.%03ld seconds\n",
2516
con->sum_of_time / 1000, con->sum_of_time % 1000);
2517
printf("\tStandard Deviation: %ld.%03ld\n", con->std_dev / 1000, con->std_dev % 1000);
2518
printf("\tNumber of queries in create queries: %"PRIu64"\n", con->create_count);
3021
con->getSumOfTime() / 1000, con->getSumOfTime() % 1000);
3022
printf("\tStandard Deviation: %ld.%03ld\n", con->getStdDev() / 1000, con->getStdDev() % 1000);
3023
printf("\tNumber of queries in create queries: %"PRIu64"\n", con->getCreateCount());
2519
3024
printf("\tNumber of clients running queries: %u/%u\n",
2520
con->users, con->real_users);
3025
con->getUsers(), con->getRealUsers());
2521
3026
printf("\tNumber of times test was run: %u\n", iterations);
2522
printf("\tAverage number of queries per client: %"PRIu64"\n", con->avg_rows);
3027
printf("\tAverage number of queries per client: %"PRIu64"\n", con->getAvgRows());
2527
print_conclusions_csv(conclusions *con)
3032
print_conclusions_csv(Conclusions *con)
2529
3034
unsigned int x;
2530
3035
char buffer[HUGE_STRING_LENGTH];
2563
3068
snprintf(buffer, HUGE_STRING_LENGTH,
2564
3069
"%s,%s,%ld.%03ld,%ld.%03ld,%ld.%03ld,%ld.%03ld,%ld.%03ld,"
2565
3070
"%u,%u,%u,%"PRIu64"\n",
2566
con->engine ? con->engine : "", /* Storage engine we ran against */
3071
con->getEngine() ? con->getEngine() : "", /* Storage engine we ran against */
2567
3072
label_buffer, /* Load type */
2568
con->avg_timing / 1000, con->avg_timing % 1000, /* Time to load */
2569
con->min_timing / 1000, con->min_timing % 1000, /* Min time */
2570
con->max_timing / 1000, con->max_timing % 1000, /* Max time */
2571
con->sum_of_time / 1000, con->sum_of_time % 1000, /* Total time */
2572
con->std_dev / 1000, con->std_dev % 1000, /* Standard Deviation */
3073
con->getAvgTiming() / 1000, con->getAvgTiming() % 1000, /* Time to load */
3074
con->getMinTiming() / 1000, con->getMinTiming() % 1000, /* Min time */
3075
con->getMaxTiming() / 1000, con->getMaxTiming() % 1000, /* Max time */
3076
con->getSumOfTime() / 1000, con->getSumOfTime() % 1000, /* Total time */
3077
con->getStdDev() / 1000, con->getStdDev() % 1000, /* Standard Deviation */
2573
3078
iterations, /* Iterations */
2574
con->users, /* Children used max_timing */
2575
con->real_users, /* Children used max_timing */
2576
con->avg_rows /* Queries run */
3079
con->getUsers(), /* Children used max_timing */
3080
con->getRealUsers(), /* Children used max_timing */
3081
con->getAvgRows() /* Queries run */
2578
3083
internal::my_write(csv_file, (unsigned char*) buffer, (uint32_t)strlen(buffer), MYF(0));
2582
generate_stats(conclusions *con, option_string *eng, stats *sptr)
3087
generate_stats(Conclusions *con, OptionString *eng, Stats *sptr)
2585
3090
unsigned int x;
2587
con->min_timing= sptr->timing;
2588
con->max_timing= sptr->timing;
2589
con->min_rows= sptr->rows;
2590
con->max_rows= sptr->rows;
3092
con->setMinTiming(sptr->getTiming());
3093
con->setMaxTiming(sptr->getTiming());
3094
con->setMinRows(sptr->getRows());
3095
con->setMaxRows(sptr->getRows());
2592
3097
/* At the moment we assume uniform */
2593
con->users= sptr->users;
2594
con->real_users= sptr->real_users;
2595
con->avg_rows= sptr->rows;
3098
con->setUsers(sptr->getUsers());
3099
con->setRealUsers(sptr->getRealUsers());
3100
con->setAvgRows(sptr->getRows());
2597
3102
/* With no next, we know it is the last element that was malloced */
2598
3103
for (ptr= sptr, x= 0; x < iterations; ptr++, x++)
2600
con->avg_timing+= ptr->timing;
3105
con->setAvgTiming(ptr->getTiming()+con->getAvgTiming());
2602
if (ptr->timing > con->max_timing)
2603
con->max_timing= ptr->timing;
2604
if (ptr->timing < con->min_timing)
2605
con->min_timing= ptr->timing;
3107
if (ptr->getTiming() > con->getMaxTiming())
3108
con->setMaxTiming(ptr->getTiming());
3109
if (ptr->getTiming() < con->getMinTiming())
3110
con->setMinTiming(ptr->getTiming());
2607
con->sum_of_time= con->avg_timing;
2608
con->avg_timing= con->avg_timing/iterations;
3112
con->setSumOfTime(con->getAvgTiming());
3113
con->setAvgTiming(con->getAvgTiming()/iterations);
2610
if (eng && eng->string)
2611
con->engine= eng->string;
3115
if (eng && eng->getString())
3116
con->setEngine(eng->getString());
3118
con->setEngine(NULL);
2615
3120
standard_deviation(con, sptr);
2617
3122
/* Now we do the create time operations */
2618
con->create_min_timing= sptr->create_timing;
2619
con->create_max_timing= sptr->create_timing;
3123
con->setCreateMinTiming(sptr->getCreateTiming());
3124
con->setCreateMaxTiming(sptr->getCreateTiming());
2621
3126
/* At the moment we assume uniform */
2622
con->create_count= sptr->create_count;
3127
con->setCreateCount(sptr->getCreateCount());
2624
3129
/* With no next, we know it is the last element that was malloced */
2625
3130
for (ptr= sptr, x= 0; x < iterations; ptr++, x++)
2627
con->create_avg_timing+= ptr->create_timing;
3132
con->setCreateAvgTiming(ptr->getCreateTiming()+con->getCreateAvgTiming());
2629
if (ptr->create_timing > con->create_max_timing)
2630
con->create_max_timing= ptr->create_timing;
2631
if (ptr->create_timing < con->create_min_timing)
2632
con->create_min_timing= ptr->create_timing;
3134
if (ptr->getCreateTiming() > con->getCreateMaxTiming())
3135
con->setCreateMaxTiming(ptr->getCreateTiming());
3136
if (ptr->getCreateTiming() < con->getCreateMinTiming())
3137
con->setCreateMinTiming(ptr->getCreateTiming());
2634
con->create_avg_timing= con->create_avg_timing/iterations;
3139
con->setCreateAvgTiming(con->getCreateAvgTiming()/iterations);
2638
option_cleanup(option_string *stmt)
3143
option_cleanup(OptionString *stmt)
2640
option_string *ptr, *nptr;
3145
OptionString *ptr, *nptr;
2644
3149
for (ptr= stmt; ptr; ptr= nptr)
3151
nptr= ptr->getNext();
3152
if (ptr->getString())
3153
free(ptr->getString());
3154
if (ptr->getOption())
3155
free(ptr->getOption());
2656
statement_cleanup(statement *stmt)
3161
statement_cleanup(Statement *stmt)
2658
statement *ptr, *nptr;
3163
Statement *ptr, *nptr;
2662
3167
for (ptr= stmt; ptr; ptr= nptr)
3169
nptr= ptr->getNext();
3170
if (ptr->getString())
3171
free(ptr->getString());