diff options
author | pekka@mysql.com <> | 2004-10-08 10:50:50 +0200 |
---|---|---|
committer | pekka@mysql.com <> | 2004-10-08 10:50:50 +0200 |
commit | 8920cff4e9c419a66e6a8d990e65ebbe247c3cdf (patch) | |
tree | 393507eb7777160b4d0a20bdb083965c847c7b9c /mysql-test/ndb | |
parent | ae87bd11fb54d7feacc8cdcdfeeb2bc821a9e51b (diff) | |
download | mariadb-git-8920cff4e9c419a66e6a8d990e65ebbe247c3cdf.tar.gz |
NDB wl-2151 Fix bounds setting table handler vs TUX
Diffstat (limited to 'mysql-test/ndb')
-rw-r--r-- | mysql-test/ndb/ndb_range_bounds.pl | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/mysql-test/ndb/ndb_range_bounds.pl b/mysql-test/ndb/ndb_range_bounds.pl new file mode 100644 index 00000000000..264a543752b --- /dev/null +++ b/mysql-test/ndb/ndb_range_bounds.pl @@ -0,0 +1,133 @@ +# +# test range scan bounds +# output to mysql-test/t/ndb_range_bounds.test +# +# give option --all to generate all cases +# + +use strict; +use integer; + +my $all = shift; +!defined($all) || ($all eq '--all' && !defined(shift)) + or die "only available option is --all"; + +my $table = 't'; + +print <<EOF; +--source include/have_ndb.inc + +--disable_warnings +drop table if exists $table; +--enable_warnings + +# test range scan bounds +# generated by mysql-test/ndb/ndb_range_bounds.pl +# all selects must return 0 + +EOF + +sub cut ($$@) { + my($op, $key, @v) = @_; + $op = '==' if $op eq '='; + my(@w); + eval "\@w = grep(\$_ $op $key, \@v)"; + $@ and die $@; + return @w; +} + +sub mkdummy (\@) { + my ($val) = @_; + return { + 'dummy' => 1, + 'exp' => '9 = 9', + 'cnt' => scalar @$val, + }; +} + +sub mkone ($$$\@) { + my($col, $op, $key, $val) = @_; + my $cnt = scalar cut($op, $key, @$val); + return { + 'exp' => "$col $op $key", + 'cnt' => $cnt, + }; +} + +sub mktwo ($$$$$\@) { + my($col, $op1, $key1, $op2, $key2, $val) = @_; + my $cnt = scalar cut($op2, $key2, cut($op1, $key1, @$val)); + return { + 'exp' => "$col $op1 $key1 and $col $op2 $key2", + 'cnt' => $cnt, + }; +} + +sub mkall ($$$\@) { + my($col, $key1, $key2, $val) = @_; + my @a = (); + my $p = mkdummy(@$val); + push(@a, $p) if $all; + my @ops1 = $all ? qw(< <= = >= >) : qw(= >= >); + my @ops2 = $all ? qw(< <= = >= >) : qw(< <=); + for my $op1 (@ops1) { + my $p = mkone($col, $op1, $key1, @$val); + push(@a, $p) if $all || $p->{cnt} != 0; + for my $op2 (@ops2) { + my $p = mktwo($col, $op1, $key1, $op2, $key2, @$val); + push(@a, $p) if $all || $p->{cnt} != 0; + } + } + return \@a; +} + +for my $nn ("bcd", "") { + my %nn; + for my $x (qw(b c d)) { + $nn{$x} = $nn =~ /$x/ ? "not null" : "null"; + } + print <<EOF; +create table $table ( + a int primary key, + b int $nn{b}, + c int $nn{c}, + d int $nn{d}, + index (b, c, d) +) engine=ndb; +EOF + my @val = (0..4); + my $v0 = 0; + for my $v1 (@val) { + for my $v2 (@val) { + for my $v3 (@val) { + print "insert into $table values($v0, $v1, $v2, $v3);\n"; + $v0++; + } + } + } + my $key1 = 1; + my $key2 = 3; + my $a1 = mkall('b', $key1, $key2, @val); + my $a2 = mkall('c', $key1, $key2, @val); + my $a3 = mkall('d', $key1, $key2, @val); + for my $p1 (@$a1) { + my $cnt1 = $p1->{cnt} * @val * @val; + print "select count(*) - $cnt1 from $table"; + print " where $p1->{exp};\n"; + for my $p2 (@$a2) { + my $cnt2 = $p1->{cnt} * $p2->{cnt} * @val; + print "select count(*) - $cnt2 from $table"; + print " where $p1->{exp} and $p2->{exp};\n"; + for my $p3 (@$a3) { + my $cnt3 = $p1->{cnt} * $p2->{cnt} * $p3->{cnt}; + print "select count(*) - $cnt3 from $table"; + print " where $p1->{exp} and $p2->{exp} and $p3->{exp};\n"; + } + } + } + print <<EOF; +drop table $table; +EOF +} + +# vim: set sw=2: |