mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge pnousiainen@bk-internal.mysql.com:/home/bk/mysql-4.1-ndb
into mysql.com:/space/pekka/ndb/version/my41-tux ndb/src/kernel/blocks/dblqh/DblqhMain.cpp: Auto merged sql/ha_ndbcluster.cc: Auto merged
This commit is contained in:
133
mysql-test/ndb/ndb_range_bounds.pl
Normal file
133
mysql-test/ndb/ndb_range_bounds.pl
Normal file
@ -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:
|
Reference in New Issue
Block a user