~drizzle-trunk/drizzle/development

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