~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to client/drizzleslap.cc

  • Committer: lbieber at stabletransit
  • Date: 2010-10-15 22:03:32 UTC
  • mfrom: (1856.1.5 build)
  • Revision ID: lbieber@drizzle-build-n02.wc1.dfw1.stabletransit.com-20101015220332-yzt1trfuff2gxkwv
Merge Andrew - Bug #654269: drizzledump doesn't handle foriegn keys 
Merge Andrew - Bug #659103: drizzledump could grab the wrong indexes
Merge Barry - Fixed memory leak in event observer plugin.
Merge Lee - Fix test output for haildb test, instead of No database selected, the message is now No schema selected

Show diffs side-by-side

added added

removed removed

Lines of Context:
72
72
*/
73
73
 
74
74
#include "config.h"
75
 
 
76
75
#include "client_priv.h"
 
76
 
 
77
#include "option_string.h"
 
78
#include "stats.h"
 
79
#include "thread_context.h"
 
80
#include "conclusions.h"
 
81
 
77
82
#include <signal.h>
78
83
#include <stdarg.h>
79
84
#include <sys/types.h>
192
197
static int process_options(void);
193
198
static uint32_t opt_drizzle_port= 0;
194
199
 
195
 
 
196
 
/* Types */
197
 
enum slap_query_t {
198
 
  SELECT_TYPE= 0,
199
 
  UPDATE_TYPE= 1,
200
 
  INSERT_TYPE= 2,
201
 
  UPDATE_TYPE_REQUIRES_PREFIX= 3,
202
 
  CREATE_TABLE_TYPE= 4,
203
 
  SELECT_TYPE_REQUIRES_PREFIX= 5,
204
 
  DELETE_TYPE_REQUIRES_PREFIX= 6
205
 
};
206
 
 
207
 
class Statement;
208
 
 
209
 
class Statement 
210
 
{
211
 
public:
212
 
  Statement(char *in_string,
213
 
            size_t in_length,
214
 
            slap_query_t in_type,
215
 
            Statement *in_next) :
216
 
    string(in_string),
217
 
    length(in_length),
218
 
    type(in_type),
219
 
    next(in_next)
220
 
  { }
221
 
 
222
 
  Statement() :
223
 
    string(NULL),
224
 
    length(0),
225
 
    type(),
226
 
    next(NULL)
227
 
  { }
228
 
 
229
 
  ~Statement()
230
 
  {
231
 
    if (string)
232
 
      free(string);
233
 
  }
234
 
   
235
 
  char *getString() const
236
 
  {
237
 
    return string;
238
 
  }
239
 
 
240
 
  size_t getLength() const
241
 
  {
242
 
    return length;
243
 
  }
244
 
 
245
 
  slap_query_t getType() const
246
 
  {
247
 
    return type;
248
 
  }
249
 
 
250
 
  Statement *getNext() const
251
 
  {
252
 
    return next;
253
 
  }
254
 
 
255
 
  void setString(char *in_string)
256
 
  {
257
 
    string= in_string;
258
 
  }
259
 
 
260
 
  void setString(size_t length_arg)
261
 
  {
262
 
    string= (char *)calloc(length_arg + 1, sizeof(char));
263
 
    length= length_arg;
264
 
  }
265
 
 
266
 
  void setString(size_t in_length, char in_char)
267
 
  {
268
 
    string[in_length]= in_char;
269
 
  }
270
 
 
271
 
  void setLength(size_t in_length)
272
 
  {
273
 
    length= in_length;
274
 
  }
275
 
 
276
 
  void setType(slap_query_t in_type)
277
 
  {
278
 
    type= in_type;
279
 
  }
280
 
 
281
 
  void setNext(Statement *in_next)
282
 
  {
283
 
    next= in_next;
284
 
  }
285
 
 
286
 
private:
287
 
  char *string;
288
 
  size_t length;
289
 
  slap_query_t type;
290
 
  Statement *next;
291
 
};
292
 
 
293
 
class OptionString;
294
 
 
295
 
class OptionString 
296
 
{
297
 
public:
298
 
  OptionString(char *in_string,
299
 
               size_t in_length,
300
 
               char *in_option,
301
 
               size_t in_option_length,
302
 
               OptionString *in_next) :
303
 
    string(in_string),
304
 
    length(in_length),
305
 
    option(in_option),
306
 
    option_length(in_option_length),
307
 
    next(in_next)
308
 
  { }  
309
 
 
310
 
  OptionString() :
311
 
    string(NULL),
312
 
    length(0),
313
 
    option(NULL),
314
 
    option_length(0),
315
 
    next(NULL)
316
 
  { }
317
 
 
318
 
  ~OptionString()
319
 
  {
320
 
    if (getString())
321
 
      free(getString());
322
 
    if (getOption())
323
 
      free(getOption());
324
 
  }
325
 
 
326
 
  char *getString() const
327
 
  {
328
 
    return string;
329
 
  }
330
 
 
331
 
  size_t getLength() const
332
 
  {
333
 
    return length;
334
 
  }
335
 
 
336
 
  char *getOption() const
337
 
  {
338
 
  return option;
339
 
  }
340
 
 
341
 
  size_t getOptionLength() const
342
 
  {
343
 
    return option_length;
344
 
  }
345
 
 
346
 
  OptionString *getNext() const
347
 
  {
348
 
    return next;
349
 
  }
350
 
 
351
 
  void setString(char *in_string)
352
 
  {
353
 
    string= in_string;
354
 
    length= strlen(in_string);
355
 
  }
356
 
 
357
 
  void setOption(char *in_option)
358
 
  {
359
 
    option= strdup(in_option);
360
 
    option_length= strlen(in_option);
361
 
  }
362
 
 
363
 
  void setNext(OptionString *in_next)
364
 
  {
365
 
    next= in_next;
366
 
  }
367
 
  
368
 
private:
369
 
  char *string;
370
 
  size_t length;
371
 
  char *option;
372
 
  size_t option_length;
373
 
  OptionString *next;
374
 
};
375
 
 
376
 
class Stats;
377
 
 
378
 
class Stats 
379
 
{
380
 
public:
381
 
  Stats(long int in_timing,
382
 
        uint32_t in_users,
383
 
        uint32_t in_real_users,
384
 
        uint32_t in_rows,
385
 
        long int in_create_timing,
386
 
        uint64_t in_create_count) :
387
 
    timing(in_timing),
388
 
    users(in_users),
389
 
    real_users(in_real_users),
390
 
    rows(in_rows),
391
 
    create_timing(in_create_timing),
392
 
    create_count(in_create_count)
393
 
  { }
394
 
 
395
 
  Stats() :
396
 
    timing(0),
397
 
    users(0),
398
 
    real_users(0),
399
 
    rows(0),
400
 
    create_timing(0),
401
 
    create_count(0)
402
 
  { }
403
 
 
404
 
  long int getTiming() const
405
 
  {
406
 
    return timing;
407
 
  }
408
 
 
409
 
  uint32_t getUsers() const
410
 
  {
411
 
    return users;
412
 
  }   
413
 
 
414
 
  uint32_t getRealUsers() const
415
 
  {
416
 
    return real_users;
417
 
  }
418
 
 
419
 
  uint64_t getRows() const
420
 
  {
421
 
    return rows;
422
 
  }
423
 
 
424
 
  long int getCreateTiming() const
425
 
  {
426
 
    return create_timing;
427
 
  }
428
 
 
429
 
  uint64_t getCreateCount() const
430
 
  {
431
 
    return create_count;
432
 
  }
433
 
 
434
 
  void setTiming(long int in_timing)
435
 
  {
436
 
  timing= in_timing;
437
 
  }
438
 
 
439
 
  void setUsers(uint32_t in_users)
440
 
  {
441
 
    users= in_users;
442
 
  }
443
 
 
444
 
  void setRealUsers(uint32_t in_real_users)
445
 
  {
446
 
    real_users= in_real_users;
447
 
  }
448
 
 
449
 
  void setRows(uint64_t in_rows)
450
 
  {
451
 
    rows= in_rows;
452
 
  }
453
 
   
454
 
  void setCreateTiming(long int in_create_timing)
455
 
  {
456
 
    create_timing= in_create_timing;
457
 
  }
458
 
 
459
 
  void setCreateCount(uint64_t in_create_count)
460
 
  {
461
 
  create_count= in_create_count;
462
 
  }
463
 
  
464
 
private:
465
 
  long int timing;
466
 
  uint32_t users;
467
 
  uint32_t real_users;
468
 
  uint64_t rows;
469
 
  long int create_timing;
470
 
  uint64_t create_count;
471
 
};
472
 
 
473
 
class ThreadContext;
474
 
 
475
 
class ThreadContext 
476
 
{
477
 
public:
478
 
  ThreadContext(Statement *in_stmt,
479
 
                uint64_t in_limit) :
480
 
    stmt(in_stmt),
481
 
    limit(in_limit)
482
 
  { }
483
 
 
484
 
  ThreadContext() :
485
 
    stmt(),
486
 
    limit(0)
487
 
  { }
488
 
 
489
 
  Statement *getStmt() const
490
 
  {
491
 
    return stmt;
492
 
  }
493
 
 
494
 
  uint64_t getLimit() const
495
 
  {
496
 
    return limit;
497
 
  }
498
 
 
499
 
  void setStmt(Statement *in_stmt)
500
 
  {
501
 
    stmt= in_stmt;
502
 
  }
503
 
 
504
 
  void setLimit(uint64_t in_limit)
505
 
  {
506
 
    limit= in_limit;
507
 
  }  
508
 
 
509
 
private:
510
 
  Statement *stmt;
511
 
  uint64_t limit;
512
 
};
513
 
 
514
 
class Conclusions;
515
 
 
516
 
class Conclusions 
517
 
{
518
 
 
519
 
public:
520
 
  Conclusions(char *in_engine,
521
 
              long int in_avg_timing,
522
 
              long int in_max_timing,
523
 
              long int in_min_timing,
524
 
              uint32_t in_users,
525
 
              uint32_t in_real_users,
526
 
              uint64_t in_avg_rows,
527
 
              long int in_sum_of_time,
528
 
              long int in_std_dev,
529
 
              long int in_create_avg_timing,
530
 
              long int in_create_max_timing,
531
 
              long int in_create_min_timing,
532
 
              uint64_t in_create_count,
533
 
              uint64_t in_max_rows,
534
 
              uint64_t in_min_rows) :
535
 
    engine(in_engine),
536
 
    avg_timing(in_avg_timing),
537
 
    max_timing(in_max_timing),
538
 
    min_timing(in_min_timing),
539
 
    users(in_users),
540
 
    real_users(in_real_users),
541
 
    avg_rows(in_avg_rows),
542
 
    sum_of_time(in_sum_of_time),
543
 
    std_dev(in_std_dev),
544
 
    create_avg_timing(in_create_avg_timing),
545
 
    create_max_timing(in_create_max_timing),
546
 
    create_min_timing(in_create_min_timing),
547
 
    create_count(in_create_count),
548
 
    max_rows(in_max_rows),
549
 
    min_rows(in_min_rows)
550
 
  { }
551
 
 
552
 
  Conclusions() :
553
 
    engine(NULL),
554
 
    avg_timing(0),
555
 
    max_timing(0),
556
 
    min_timing(0),
557
 
    users(0),
558
 
    real_users(0),
559
 
    avg_rows(0),
560
 
    sum_of_time(0),
561
 
    std_dev(0),
562
 
    create_avg_timing(0),
563
 
    create_max_timing(0),
564
 
    create_min_timing(0),
565
 
    create_count(0),
566
 
    max_rows(0),
567
 
    min_rows(0)
568
 
  { }
569
 
 
570
 
  char *getEngine() const
571
 
  {
572
 
    return engine;
573
 
  }
574
 
  
575
 
  long int getAvgTiming() const
576
 
  {
577
 
    return avg_timing;
578
 
  }
579
 
 
580
 
  long int getMaxTiming() const
581
 
  {
582
 
    return max_timing;
583
 
  }
584
 
 
585
 
  long int getMinTiming() const
586
 
  {
587
 
    return min_timing;
588
 
  }
589
 
 
590
 
  uint32_t getUsers() const
591
 
  {
592
 
    return users;
593
 
  }
594
 
 
595
 
  uint32_t getRealUsers() const
596
 
  {
597
 
    return real_users;
598
 
  }
599
 
 
600
 
  uint64_t getAvgRows() const
601
 
  {
602
 
    return avg_rows;
603
 
  }   
604
 
 
605
 
  long int getSumOfTime() const
606
 
  {
607
 
    return sum_of_time;
608
 
  }
609
 
 
610
 
  long int getStdDev() const
611
 
  {
612
 
    return std_dev;
613
 
  }
614
 
 
615
 
  long int getCreateAvgTiming() const
616
 
  {
617
 
    return create_avg_timing;
618
 
  }
619
 
 
620
 
  long int getCreateMaxTiming() const
621
 
  {
622
 
    return create_max_timing;
623
 
  }
624
 
 
625
 
  long int getCreateMinTiming() const
626
 
  {
627
 
    return create_min_timing;
628
 
  }
629
 
   
630
 
  uint64_t getCreateCount() const
631
 
  {
632
 
    return create_count;
633
 
  }
634
 
 
635
 
  uint64_t getMinRows() const
636
 
  {
637
 
    return min_rows;
638
 
  }
639
 
 
640
 
  uint64_t getMaxRows() const
641
 
  {
642
 
    return max_rows;
643
 
  }
644
 
 
645
 
  void setEngine(char *in_engine) 
646
 
  {
647
 
    engine= in_engine;
648
 
  }
649
 
  
650
 
  void setAvgTiming(long int in_avg_timing) 
651
 
  {
652
 
    avg_timing= in_avg_timing;
653
 
  }
654
 
 
655
 
  void setMaxTiming(long int in_max_timing) 
656
 
  {
657
 
    max_timing= in_max_timing;
658
 
  }
659
 
 
660
 
  void setMinTiming(long int in_min_timing) 
661
 
  {
662
 
    min_timing= in_min_timing;
663
 
  }
664
 
 
665
 
  void setUsers(uint32_t in_users) 
666
 
  {
667
 
    users= in_users;
668
 
  }
669
 
 
670
 
  void setRealUsers(uint32_t in_real_users) 
671
 
  {
672
 
    real_users= in_real_users;
673
 
  }
674
 
 
675
 
  void setAvgRows(uint64_t in_avg_rows) 
676
 
  {
677
 
    avg_rows= in_avg_rows;
678
 
  }   
679
 
 
680
 
  void setSumOfTime(long int in_sum_of_time) 
681
 
  {
682
 
    sum_of_time= in_sum_of_time;
683
 
  }
684
 
 
685
 
  void setStdDev(long int in_std_dev) 
686
 
  {
687
 
    std_dev= in_std_dev;
688
 
  }
689
 
 
690
 
  void setCreateAvgTiming(long int in_create_avg_timing) 
691
 
  {
692
 
    create_avg_timing= in_create_avg_timing;
693
 
  }
694
 
 
695
 
  void setCreateMaxTiming(long int in_create_max_timing) 
696
 
  {
697
 
    create_max_timing= in_create_max_timing;
698
 
  }
699
 
 
700
 
  void setCreateMinTiming(long int in_create_min_timing) 
701
 
  {
702
 
    create_min_timing= in_create_min_timing;
703
 
  }
704
 
   
705
 
  void setCreateCount(uint64_t in_create_count) 
706
 
  {
707
 
    create_count= in_create_count;
708
 
  }
709
 
 
710
 
  void setMinRows(uint64_t in_min_rows) 
711
 
  {
712
 
    min_rows= in_min_rows;
713
 
  }
714
 
 
715
 
  void setMaxRows(uint64_t in_max_rows) 
716
 
  {
717
 
    max_rows= in_max_rows;
718
 
  }
719
 
 
720
 
private:
721
 
  char *engine;
722
 
  long int avg_timing;
723
 
  long int max_timing;
724
 
  long int min_timing;
725
 
  uint32_t users;
726
 
  uint32_t real_users;
727
 
  uint64_t avg_rows;
728
 
  long int sum_of_time;
729
 
  long int std_dev;
730
 
  /* These are just for create time stats */
731
 
  long int create_avg_timing;
732
 
  long int create_max_timing;
733
 
  long int create_min_timing;
734
 
  uint64_t create_count;
735
 
  /* The following are not used yet */
736
 
  uint64_t max_rows;
737
 
  uint64_t min_rows;
738
 
};
739
 
 
740
 
 
741
200
static OptionString *engine_options= NULL;
742
201
static OptionString *query_options= NULL;
743
202
static Statement *pre_statements= NULL;