~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;
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