0.67.1
by Philip Stoev
initial import from internal tree |
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 |
||
0.67.28
by Bernt M. Johnsen
Masking implemented in the .pl-scripts |
15 |
my ($gendata, $help, $grammar_file, $mask, $mask_level, $dsn); |
0.67.1
by Philip Stoev
initial import from internal tree |
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, |
|
0.67.28
by Bernt M. Johnsen
Masking implemented in the .pl-scripts |
27 |
'mask-level=i' => \$mask_level, |
0.67.1
by Philip Stoev
initial import from internal tree |
28 |
'dsn=s' => \$dsn |
29 |
);
|
|
30 |
||
31 |
help() if !$opt_result || $help || not defined $grammar_file; |
|
32 |
||
33 |
my $generator = GenTest::Generator::FromGrammar->new( |
|
34 |
grammar_file => $grammar_file, |
|
35 |
seed => ($seed eq 'time') ? time() : $seed, |
|
0.67.28
by Bernt M. Johnsen
Masking implemented in the .pl-scripts |
36 |
mask => $mask, |
37 |
mask_level => $mask_level |
|
0.67.1
by Philip Stoev
initial import from internal tree |
38 |
);
|
39 |
||
40 |
return STATUS_ENVIRONMENT_FAILURE if not defined $generator; |
|
41 |
||
42 |
my $executor; |
|
43 |
||
44 |
if (defined $dsn) { |
|
45 |
$executor = GenTest::Executor::MySQL->new( |
|
46 |
dsn => $dsn |
|
47 |
);
|
|
48 |
exit (STATUS_ENVIRONMENT_FAILURE) if not defined $executor; |
|
49 |
}
|
|
50 |
||
51 |
if (defined $executor) { |
|
52 |
my $init_result = $executor->init(); |
|
53 |
exit ($init_result) if $init_result > STATUS_OK; |
|
54 |
}
|
|
55 |
||
56 |
foreach my $i (1..$queries) { |
|
57 |
my $queries = $generator->next([$executor]); |
|
58 |
if ( |
|
59 |
(not defined $queries) || |
|
60 |
($queries->[0] eq '') |
|
61 |
) { |
|
62 |
say("Grammar produced an empty query. Terminating."); |
|
63 |
exit(STATUS_ENVIRONMENT_FAILURE); |
|
64 |
}
|
|
65 |
my $sql = join('; ',@$queries); |
|
66 |
print $sql.";\n"; |
|
67 |
}
|
|
68 |
||
69 |
exit(0); |
|
70 |
||
71 |
sub help { |
|
72 |
print <<EOF |
|
0.67.31
by Bernt M. Johnsen
Updated some help function (more to do here) |
73 |
$0 - Generate random queries from an SQL grammar and pipe them to STDOUT
|
74 |
||
75 |
--grammar : Grammar file to use for generating the queries (REQUIRED);
|
|
76 |
--seed : Seed for the pseudo-random generator
|
|
77 |
--queries : Numer of queries to generate (default $default_queries);
|
|
78 |
--dsn : The DSN of the database that will be used to resolve rules such as _table , _field
|
|
79 |
--mask : A 16-bit mask applied to the top levels of the grammar to reduce it.
|
|
80 |
The mask is extended using the original value as a PRNBG seed if needed.
|
|
81 |
--mask-level: How many levels deep the mask is applied (default 1)
|
|
82 |
--help : This help message
|
|
0.67.1
by Philip Stoev
initial import from internal tree |
83 |
EOF
|
84 |
;
|
|
0.67.31
by Bernt M. Johnsen
Updated some help function (more to do here) |
85 |
exit(1); |
0.67.1
by Philip Stoev
initial import from internal tree |
86 |
}
|
87 |