~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to gensql.pl

initial import from internal tree

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/perl
 
2
use lib 'lib';
 
3
use lib "$ENV{RQG_HOME}/lib";
 
4
use strict;
 
5
 
 
6
use GenTest;
 
7
use GenTest::Constants;
 
8
use GenTest::Generator::FromGrammar;
 
9
use GenTest::Executor::MySQL;
 
10
 
 
11
use Getopt::Long;
 
12
 
 
13
$| = 1;
 
14
 
 
15
my ($gendata, $help, $grammar_file, $mask, $dsn);
 
16
my $queries = my $default_queries = 1000;
 
17
my $seed = 1;
 
18
 
 
19
my @ARGV_saved = @ARGV;
 
20
 
 
21
my $opt_result = GetOptions(
 
22
        'grammar=s' => \$grammar_file,
 
23
        'queries=i' => \$queries,
 
24
        'help' => \$help,
 
25
        'seed=s' => \$seed,
 
26
        'mask=i' => \$mask,
 
27
        'dsn=s' => \$dsn
 
28
);
 
29
 
 
30
help() if !$opt_result || $help || not defined $grammar_file;
 
31
 
 
32
my $generator = GenTest::Generator::FromGrammar->new(
 
33
        grammar_file => $grammar_file,
 
34
        seed => ($seed eq 'time') ? time() : $seed,
 
35
        mask => $mask
 
36
);
 
37
 
 
38
return STATUS_ENVIRONMENT_FAILURE if not defined $generator;
 
39
 
 
40
my $executor;
 
41
 
 
42
if (defined $dsn) {
 
43
        $executor = GenTest::Executor::MySQL->new(
 
44
                dsn => $dsn
 
45
        );
 
46
        exit (STATUS_ENVIRONMENT_FAILURE) if not defined $executor;
 
47
}
 
48
 
 
49
if (defined $executor) {
 
50
        my $init_result = $executor->init();
 
51
        exit ($init_result) if $init_result > STATUS_OK;
 
52
}
 
53
 
 
54
foreach my $i (1..$queries) {
 
55
        my $queries = $generator->next([$executor]);
 
56
        if (
 
57
                (not defined $queries) ||
 
58
                ($queries->[0] eq '')
 
59
        ) {
 
60
                say("Grammar produced an empty query. Terminating.");
 
61
                exit(STATUS_ENVIRONMENT_FAILURE);
 
62
        }
 
63
        my $sql = join('; ',@$queries);
 
64
        print $sql.";\n";
 
65
}
 
66
 
 
67
exit(0);
 
68
 
 
69
sub help {
 
70
        print <<EOF
 
71
 
 
72
        $0 - Generate random queries from an SQL grammar and pipe them to STDOUT
 
73
 
 
74
        --grammar       : Grammar file to use for generating the queries (REQUIRED);
 
75
        --seed          : Seed for the pseudo-random generator
 
76
        --queries       : Numer of queries to generate (default $default_queries);
 
77
        --dsn           : The DSN of the database that will be used to resolve rules such as _table , _field
 
78
        --help          : This help message
 
79
EOF
 
80
        ;
 
81
        exit(1);
 
82
}
 
83