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; |
|
0.73.6
by Bernt M. Johnsen
Added simple script testing. Made gensql.pl usable against other databases |
9 |
use GenTest::Executor; |
0.67.1
by Philip Stoev
initial import from internal tree |
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) { |
|
0.73.6
by Bernt M. Johnsen
Added simple script testing. Made gensql.pl usable against other databases |
45 |
$executor = GenTest::Executor->newFromDSN($dsn); |
0.67.1
by Philip Stoev
initial import from internal tree |
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 |
|
0.67.31
by Bernt M. Johnsen
Updated some help function (more to do here) |
71 |
$0 - Generate random queries from an SQL grammar and pipe them to STDOUT
|
72 |
||
73 |
--grammar : Grammar file to use for generating the queries (REQUIRED);
|
|
74 |
--seed : Seed for the pseudo-random generator
|
|
75 |
--queries : Numer of queries to generate (default $default_queries);
|
|
76 |
--dsn : The DSN of the database that will be used to resolve rules such as _table , _field
|
|
0.73.4
by Bernt M. Johnsen
Let --mask be a seed to the masking process instead of the first 16 bits of the mask |
77 |
--mask : A seed to a random mask used to mask (reeduce) the grammar.
|
0.67.31
by Bernt M. Johnsen
Updated some help function (more to do here) |
78 |
--mask-level: How many levels deep the mask is applied (default 1)
|
79 |
--help : This help message
|
|
0.67.1
by Philip Stoev
initial import from internal tree |
80 |
EOF
|
81 |
;
|
|
0.67.31
by Bernt M. Johnsen
Updated some help function (more to do here) |
82 |
exit(1); |
0.67.1
by Philip Stoev
initial import from internal tree |
83 |
}
|
84 |