vincentchu-handlersocket 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/ext/HandlerSocket-Plugin-for-MySQL/AUTHORS +22 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/COPYING +30 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/ChangeLog +12 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/Makefile.am +87 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/README +78 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/autogen.sh +117 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/client/Makefile.am +24 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/client/hsclient.cpp +88 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/client/hslongrun.cpp +1041 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/client/hspool_test.pl +224 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/client/hstest.cpp +1532 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/client/hstest.pl +228 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/client/hstest_hs.sh +4 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/client/hstest_hs_more50.sh +4 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/client/hstest_md.sh +7 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/client/hstest_my.sh +3 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/client/hstest_my_more50.sh +3 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/configure.ac +144 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/docs-en/about-handlersocket.en.txt +72 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/docs-en/configuration-options.en.txt +99 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/docs-en/installation.en.txt +92 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/docs-en/perl-client.en.txt +135 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/docs-en/protocol.en.txt +205 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/docs-ja/about-handlersocket.ja.txt +51 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/docs-ja/installation.ja.txt +88 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/docs-ja/perl-client.ja.txt +127 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/docs-ja/protocol.ja.txt +180 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/COPYRIGHT.txt +27 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/Makefile.am +10 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/Makefile.plain.template +31 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/database.cpp +1190 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/database.hpp +142 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/handlersocket.cpp +222 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/handlersocket.spec.template +29 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/hstcpsvr.cpp +149 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/hstcpsvr.hpp +58 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/hstcpsvr_worker.cpp +951 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/hstcpsvr_worker.hpp +35 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/mysql_incl.hpp +50 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/COPYRIGHT.txt +27 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/Makefile.am +12 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/Makefile.plain +27 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/allocator.hpp +64 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/auto_addrinfo.hpp +49 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/auto_file.hpp +64 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/auto_ptrcontainer.hpp +67 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/config.cpp +67 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/config.hpp +32 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/escape.cpp +127 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/escape.hpp +66 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/fatal.cpp +36 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/fatal.hpp +22 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/hstcpcli.cpp +441 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/hstcpcli.hpp +62 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/libhsclient.spec.template +39 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/mutex.hpp +51 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/socket.cpp +186 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/socket.hpp +51 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/string_buffer.hpp +118 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/string_ref.hpp +63 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/string_util.cpp +182 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/string_util.hpp +53 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/thread.hpp +84 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/util.hpp +25 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/misc/microbench-hs.log +130 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/misc/microbench-my.log +125 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/COPYRIGHT.txt +27 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/Changes +6 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/HandlerSocket.xs +632 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/MANIFEST +8 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/Makefile.PL +18 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/Makefile.PL.installed +20 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/README +30 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/lib/Net/HandlerSocket.pm +68 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/lib/Net/HandlerSocket/Pool.pm +362 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/perl-Net-HandlerSocket.spec.template +127 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/ppport.h +6375 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/t/Net-HandlerSocket.t +15 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/Makefile +79 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/common/binary_my.cnf +4 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/common/compat.sh +29 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/common/hstest.pm +66 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/Makefile +4 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/run.sh +27 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test01.expected +100 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test01.pl +38 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test02.expected +100 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test02.pl +49 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test03.expected +771 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test03.pl +61 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test04.expected +0 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test04.pl +63 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test05.expected +771 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test05.pl +59 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test06.expected +644 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test06.pl +90 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test07.expected +304 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test07.pl +98 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test08.expected +2 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test08.pl +48 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test09.expected +12 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test09.pl +67 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test10.expected +771 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test10.pl +93 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test11.expected +37 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test11.pl +112 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test12.expected +273 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test12.pl +134 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test13.expected +92 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test13.pl +92 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test14.expected +144 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test14.pl +80 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test15.expected +764 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test15.pl +114 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test16.expected +66 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test16.pl +88 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test17.expected +0 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test17.pl +125 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test18.expected +22 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test18.pl +63 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test19.expected +14894 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test19.pl +190 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test20.expected +2 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test20.pl +33 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test21.expected +11 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test21.pl +58 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test22.expected +9 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test22.pl +61 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test23.expected +101 -0
- data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test23.pl +53 -0
- data/ext/winebarrel-ruby-handlersocket-c19841e47ea2/README +33 -0
- data/ext/winebarrel-ruby-handlersocket-c19841e47ea2/extconf.rb +27 -0
- data/ext/winebarrel-ruby-handlersocket-c19841e47ea2/handlersocket.cpp +437 -0
- data/ext/winebarrel-ruby-handlersocket-c19841e47ea2/handlersocket.h +32 -0
- metadata +200 -0
@@ -0,0 +1,190 @@
|
|
1
|
+
#!/usr/bin/perl
|
2
|
+
|
3
|
+
# vim:sw=2:ai
|
4
|
+
|
5
|
+
# test for filters
|
6
|
+
|
7
|
+
BEGIN {
|
8
|
+
push @INC, "../common/";
|
9
|
+
};
|
10
|
+
|
11
|
+
use strict;
|
12
|
+
use warnings;
|
13
|
+
use bigint;
|
14
|
+
use hstest;
|
15
|
+
|
16
|
+
my $numeric_types = [
|
17
|
+
[ 'TINYINT', -128, 127 ],
|
18
|
+
[ 'TINYINT UNSIGNED', 0, 255 ],
|
19
|
+
[ 'SMALLINT', -32768, 32768 ],
|
20
|
+
[ 'SMALLINT UNSIGNED', 0, 65535 ],
|
21
|
+
[ 'MEDIUMINT', -8388608, 8388607 ],
|
22
|
+
[ 'MEDIUMINT UNSIGNED', 0, 16777215 ],
|
23
|
+
[ 'INT', -2147483648, 2147483647 ],
|
24
|
+
[ 'INT UNSIGNED', 0, 4294967295 ],
|
25
|
+
[ 'BIGINT', -9223372036854775808, 9223372036854775807 ],
|
26
|
+
[ 'BIGINT UNSIGNED', 0, 18446744073709551615 ],
|
27
|
+
[ 'FLOAT', -32768, 32768 ],
|
28
|
+
[ 'DOUBLE', -2147483648, 2147483647 ],
|
29
|
+
];
|
30
|
+
my $datetime_types = [
|
31
|
+
[ 'DATE', '0000-00-00', '2011-01-01', '9999-12-31' ],
|
32
|
+
[ 'DATETIME', 0, '2011-01-01 18:30:25' ],
|
33
|
+
[ 'TIME', 0, '18:30:25' ],
|
34
|
+
[ 'YEAR(4)', 1901, 2011, 2155 ],
|
35
|
+
# [ 'TIMESTAMP', 0, 999999999 ], # DOES NOT WORK YET
|
36
|
+
];
|
37
|
+
my $string_types = [
|
38
|
+
[ 'CHAR(10)', undef, 1, 2, 5, 10 ],
|
39
|
+
[ 'VARCHAR(10)', undef, 1, 2, 5, 10 ],
|
40
|
+
[ 'BINARY(10)', undef, 1, 2, 5, 10 ],
|
41
|
+
[ 'VARBINARY(10)', undef, 1, 2, 5, 10 ],
|
42
|
+
[ 'CHAR(255)', undef, 1, 2, 5, 10, 100, 200, 255 ],
|
43
|
+
[ 'VARCHAR(255)', undef, 1, 2, 5, 10, 100, 200, 255 ],
|
44
|
+
[ 'VARCHAR(511)', undef, 1, 2, 5, 10, 100, 200, 511 ],
|
45
|
+
[ 'LONGTEXT', 500, 1, 2, 5, 10, 100, 200, 511 ], # NOT SUPPORTED YET
|
46
|
+
[ 'LONGBLOB', 500, 1, 2, 5, 10, 100, 200, 511 ], # NOT SUPPORTED YET
|
47
|
+
# [ 'VARCHAR(4096)', 500, 1, 2, 5, 10, 100, 200, 255, 256, 4095 ],
|
48
|
+
# [ 'VARCHAR(16383)', 500, 1, 2, 5, 10, 100, 200, 255, 256, 4095, 4096, 16383 ],
|
49
|
+
# [ 'VARBINARY(16383)', 500, 1, 2, 5, 10, 100, 200, 255, 256, 4095, 4096, 16383 ],
|
50
|
+
];
|
51
|
+
|
52
|
+
for my $rec (@$numeric_types) {
|
53
|
+
my ($typ, $minval, $maxval) = @$rec;
|
54
|
+
my @vals = ();
|
55
|
+
push(@vals, 0);
|
56
|
+
push(@vals, $maxval);
|
57
|
+
if ($minval != 0) {
|
58
|
+
push(@vals, $minval);
|
59
|
+
}
|
60
|
+
my $v1 = $minval;
|
61
|
+
my $v2 = $maxval;
|
62
|
+
for (my $i = 0; $i < 3; ++$i) {
|
63
|
+
$v1 /= 3;
|
64
|
+
$v2 /= 3;
|
65
|
+
push(@vals, int($v1));
|
66
|
+
push(@vals, int($v2));
|
67
|
+
}
|
68
|
+
my %vm = map { $_ => 1 } @vals;
|
69
|
+
@vals = sort { $a <=> $b } keys %vm;
|
70
|
+
push(@vals, undef);
|
71
|
+
test_one($typ, undef, \@vals);
|
72
|
+
}
|
73
|
+
|
74
|
+
for my $rec (@$datetime_types) {
|
75
|
+
my ($typ, @vals) = @$rec;
|
76
|
+
push(@vals, undef);
|
77
|
+
test_one($typ, undef, \@vals);
|
78
|
+
}
|
79
|
+
|
80
|
+
for my $rec (@$string_types) {
|
81
|
+
my ($typ, $keylen, @vs) = @$rec;
|
82
|
+
my @vals = ();
|
83
|
+
srand(999);
|
84
|
+
for my $len (@vs) {
|
85
|
+
my $s = '';
|
86
|
+
my @arr = ();
|
87
|
+
# print "$len 1\n";
|
88
|
+
for (my $i = 0; $i < $len; ++$i) {
|
89
|
+
my $v = int(rand(10));
|
90
|
+
$arr[$i] = chr(65 + $v);
|
91
|
+
}
|
92
|
+
# print "2\n";
|
93
|
+
push(@vals, join('', @arr));
|
94
|
+
}
|
95
|
+
push(@vals, undef);
|
96
|
+
test_one($typ, $keylen, \@vals);
|
97
|
+
}
|
98
|
+
|
99
|
+
my $hs;
|
100
|
+
|
101
|
+
sub test_one {
|
102
|
+
my ($typ, $keylen, $values) = @_;
|
103
|
+
print "\n$typ -------------------------------------------------\n\n";
|
104
|
+
my $keylen_str = '';
|
105
|
+
if (defined($keylen)) {
|
106
|
+
$keylen_str = "($keylen)";
|
107
|
+
}
|
108
|
+
my $dbh = hstest::init_testdb();
|
109
|
+
my $table = 'hstesttbl';
|
110
|
+
my $tablesize = 3;
|
111
|
+
$dbh->do(
|
112
|
+
"create table $table " .
|
113
|
+
"(k1 int not null, k2 int not null, " .
|
114
|
+
"v1 int not null, v2 $typ default null, " .
|
115
|
+
"primary key (k1, k2) ) engine = innodb");
|
116
|
+
my $sth = $dbh->prepare("insert into $table values (?,?,?,?)");
|
117
|
+
for (my $i = 0; $i < $tablesize; ++$i) {
|
118
|
+
my $j = 0;
|
119
|
+
for my $v (@$values) {
|
120
|
+
$sth->execute($i, $j, $i, $v);
|
121
|
+
++$j;
|
122
|
+
}
|
123
|
+
}
|
124
|
+
$hs = hstest::get_hs_connection(undef, 9999);
|
125
|
+
my $dbname = $hstest::conf{dbname};
|
126
|
+
$hs->open_index(1, $dbname, $table, '', 'k1,k2,v1,v2', 'v2');
|
127
|
+
my $minval = $values->[0];
|
128
|
+
# select * ... where (k1, k2) >= ('', $minval)
|
129
|
+
exec_multi(
|
130
|
+
4, "FILTER($typ) NO FILTER",
|
131
|
+
[ 1, '>=', [ '', $minval ], 1000, 0 ]
|
132
|
+
);
|
133
|
+
for my $v (@$values) {
|
134
|
+
my $vstr = defined($v) ? $v : 'NULL';
|
135
|
+
# select * ... where (k1, k2) >= ('', $minval) and v2 = $v
|
136
|
+
exec_multi(
|
137
|
+
4, "FILTER($typ) v2 = $vstr",
|
138
|
+
[ 1, '>=', [ '', $minval ], 1000, 0, undef, undef, [ [ 'F', '=', 0, $v ] ] ]
|
139
|
+
);
|
140
|
+
# select * ... where (k1, k2) >= ('', $minval) and v2 != $v
|
141
|
+
exec_multi(
|
142
|
+
4, "FILTER($typ) v2 != $vstr",
|
143
|
+
[ 1, '>=', [ '', $minval ], 1000, 0, undef, undef, [ [ 'F', '!=', 0, $v ] ] ]
|
144
|
+
);
|
145
|
+
# select * ... where (k1, k2) >= ('', $minval) and v2 >= $v
|
146
|
+
exec_multi(
|
147
|
+
4, "FILTER($typ) v2 >= $vstr",
|
148
|
+
[ 1, '>=', [ '', $minval ], 1000, 0, undef, undef, [ [ 'F', '>=', 0, $v ] ] ]
|
149
|
+
);
|
150
|
+
# select * ... where (k1, k2) >= ('', $minval) and v2 < $v
|
151
|
+
exec_multi(
|
152
|
+
4, "FILTER($typ) v2 < $vstr",
|
153
|
+
[ 1, '>=', [ '', $minval ], 1000, 0, undef, undef, [ [ 'F', '<', 0, $v ] ] ]
|
154
|
+
);
|
155
|
+
# select * ... where (k1, k2) >= ('', $minval) and v2 > $v
|
156
|
+
exec_multi(
|
157
|
+
4, "FILTER($typ) v2 > $vstr",
|
158
|
+
[ 1, '>=', [ '', $minval ], 1000, 0, undef, undef, [ [ 'F', '>', 0, $v ] ] ]
|
159
|
+
);
|
160
|
+
# select * ... where (k1, k2) >= ('', $minval) and v2 <= $v
|
161
|
+
exec_multi(
|
162
|
+
4, "FILTER($typ) v2 <= $vstr",
|
163
|
+
[ 1, '>=', [ '', $minval ], 1000, 0, undef, undef, [ [ 'F', '<=', 0, $v ] ] ]
|
164
|
+
);
|
165
|
+
}
|
166
|
+
undef $hs;
|
167
|
+
}
|
168
|
+
|
169
|
+
sub exec_multi {
|
170
|
+
my $width = shift(@_);
|
171
|
+
my $mess = shift(@_);
|
172
|
+
print "$mess\n";
|
173
|
+
my $mres = $hs->execute_multi(\@_);
|
174
|
+
for my $res (@$mres) {
|
175
|
+
my $code = shift(@$res);
|
176
|
+
my $nrows = $code == 0 ? scalar(@$res) / $width : 0;
|
177
|
+
print "code=$code rows=$nrows\n";
|
178
|
+
my $i = 0;
|
179
|
+
for my $fld (@$res) {
|
180
|
+
$fld = 'NULL' if !defined($fld);
|
181
|
+
print "[$fld]";
|
182
|
+
if (++$i >= $width) {
|
183
|
+
print "\n";
|
184
|
+
$i = 0;
|
185
|
+
}
|
186
|
+
}
|
187
|
+
print "\n";
|
188
|
+
}
|
189
|
+
}
|
190
|
+
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#!/usr/bin/perl
|
2
|
+
|
3
|
+
# vim:sw=2:ai
|
4
|
+
|
5
|
+
# test for a bug that table mdl is not released when open_index is failed
|
6
|
+
|
7
|
+
BEGIN {
|
8
|
+
push @INC, "../common/";
|
9
|
+
};
|
10
|
+
|
11
|
+
use strict;
|
12
|
+
use warnings;
|
13
|
+
use hstest;
|
14
|
+
|
15
|
+
my $dbh = hstest::init_testdb();
|
16
|
+
my $dbname = $hstest::conf{dbname};
|
17
|
+
my $table = 'hstesttbl';
|
18
|
+
|
19
|
+
$dbh->do("drop table if exists $table");
|
20
|
+
|
21
|
+
my $hs = hstest::get_hs_connection();
|
22
|
+
my $r = $hs->open_index(1, $dbname, $table, '', 'k,v'); # fails
|
23
|
+
print "open_index 1st r=$r\n";
|
24
|
+
undef $hs;
|
25
|
+
|
26
|
+
$dbh->do(
|
27
|
+
"create table $table (k varchar(30) primary key, v varchar(30) not null) " .
|
28
|
+
"engine = innodb");
|
29
|
+
|
30
|
+
$hs = hstest::get_hs_connection();
|
31
|
+
$r = $hs->open_index(1, $dbname, $table, '', 'k,v'); # success
|
32
|
+
print "open_index 2nd r=$r\n";
|
33
|
+
|
@@ -0,0 +1,58 @@
|
|
1
|
+
#!/usr/bin/perl
|
2
|
+
|
3
|
+
# vim:sw=2:ai
|
4
|
+
|
5
|
+
# test for 'IN'
|
6
|
+
|
7
|
+
BEGIN {
|
8
|
+
push @INC, "../common/";
|
9
|
+
};
|
10
|
+
|
11
|
+
use strict;
|
12
|
+
use warnings;
|
13
|
+
use hstest;
|
14
|
+
|
15
|
+
my $dbh = hstest::init_testdb();
|
16
|
+
my $table = 'hstesttbl';
|
17
|
+
my $tablesize = 100;
|
18
|
+
$dbh->do(
|
19
|
+
"create table $table (k varchar(30) primary key, v varchar(30) not null) " .
|
20
|
+
"engine = innodb");
|
21
|
+
srand(999);
|
22
|
+
|
23
|
+
my %valmap = ();
|
24
|
+
|
25
|
+
my $sth = $dbh->prepare("insert into $table values (?,?)");
|
26
|
+
for (my $i = 0; $i < $tablesize; ++$i) {
|
27
|
+
my $k = "k" . $i;
|
28
|
+
my $v = "v" . int(rand(1000)) . "-" . $i;
|
29
|
+
$sth->execute($k, $v);
|
30
|
+
$valmap{$k} = $v;
|
31
|
+
}
|
32
|
+
|
33
|
+
my $hs = hstest::get_hs_connection();
|
34
|
+
my $dbname = $hstest::conf{dbname};
|
35
|
+
$hs->open_index(1, $dbname, $table, '', 'k,v');
|
36
|
+
my $vs = [ 'k10', 'k20x', 'k30', 'k40', 'k50' ];
|
37
|
+
# select k,v from $table where k in $vs
|
38
|
+
my $r = $hs->execute_single(1, '=', [ '' ], 10000, 0, undef, undef, undef,
|
39
|
+
0, $vs);
|
40
|
+
shift(@$r);
|
41
|
+
print "HS\n";
|
42
|
+
my $len = scalar(@$r) / 2;
|
43
|
+
for (my $i = 0; $i < $len; ++$i) {
|
44
|
+
my $k = $r->[$i * 2];
|
45
|
+
my $v = $r->[$i * 2 + 1];
|
46
|
+
print "$k $v\n";
|
47
|
+
}
|
48
|
+
|
49
|
+
print "SQL\n";
|
50
|
+
my $aref = $dbh->selectall_arrayref(
|
51
|
+
"select k,v from $table where k in ('k10', 'k20x', 'k30', 'k40', 'k50') "
|
52
|
+
. "order by k");
|
53
|
+
for my $row (@$aref) {
|
54
|
+
my ($k, $v) = @$row;
|
55
|
+
print "$k $v\n";
|
56
|
+
}
|
57
|
+
print "END\n";
|
58
|
+
|
@@ -0,0 +1,61 @@
|
|
1
|
+
#!/usr/bin/perl
|
2
|
+
|
3
|
+
# vim:sw=2:ai
|
4
|
+
|
5
|
+
# test for 'IN' and filters
|
6
|
+
|
7
|
+
BEGIN {
|
8
|
+
push @INC, "../common/";
|
9
|
+
};
|
10
|
+
|
11
|
+
use strict;
|
12
|
+
use warnings;
|
13
|
+
use hstest;
|
14
|
+
|
15
|
+
my $dbh = hstest::init_testdb();
|
16
|
+
my $table = 'hstesttbl';
|
17
|
+
my $tablesize = 100;
|
18
|
+
$dbh->do(
|
19
|
+
"create table $table (k varchar(30) primary key, " .
|
20
|
+
"v varchar(30) not null, v2 int not null) " .
|
21
|
+
"engine = innodb");
|
22
|
+
srand(999);
|
23
|
+
|
24
|
+
my %valmap = ();
|
25
|
+
|
26
|
+
my $sth = $dbh->prepare("insert into $table values (?,?,?)");
|
27
|
+
for (my $i = 0; $i < $tablesize; ++$i) {
|
28
|
+
my $k = "k" . $i;
|
29
|
+
my $v = "v" . int(rand(1000)) . "-" . $i;
|
30
|
+
my $v2 = ($i / 10) % 2;
|
31
|
+
$sth->execute($k, $v, $v2);
|
32
|
+
$valmap{$k} = $v;
|
33
|
+
}
|
34
|
+
|
35
|
+
my $hs = hstest::get_hs_connection();
|
36
|
+
my $dbname = $hstest::conf{dbname};
|
37
|
+
$hs->open_index(1, $dbname, $table, '', 'k,v,v2', 'v2');
|
38
|
+
my $vs = [ 'k10', 'k20x', 'k30', 'k40', 'k50' ];
|
39
|
+
# select k,v,v2 from $table where k in $vs
|
40
|
+
my $r = $hs->execute_single(1, '=', [ '' ], 10000, 0, undef, undef,
|
41
|
+
[['F', '=', 0, '1']], 0, $vs);
|
42
|
+
shift(@$r);
|
43
|
+
print "HS\n";
|
44
|
+
my $len = scalar(@$r) / 3;
|
45
|
+
for (my $i = 0; $i < $len; ++$i) {
|
46
|
+
my $k = $r->[$i * 3];
|
47
|
+
my $v = $r->[$i * 3 + 1];
|
48
|
+
my $v2 = $r->[$i * 3 + 2];
|
49
|
+
print "$k $v $v2\n";
|
50
|
+
}
|
51
|
+
|
52
|
+
print "SQL\n";
|
53
|
+
my $aref = $dbh->selectall_arrayref(
|
54
|
+
"select k,v,v2 from $table where k in ('k10', 'k20x', 'k30', 'k40', 'k50') "
|
55
|
+
. "and v2 = '1' order by k");
|
56
|
+
for my $row (@$aref) {
|
57
|
+
my ($k, $v, $v2) = @$row;
|
58
|
+
print "$k $v $v2\n";
|
59
|
+
}
|
60
|
+
print "END\n";
|
61
|
+
|
@@ -0,0 +1,101 @@
|
|
1
|
+
HS
|
2
|
+
k0 v102-0 0
|
3
|
+
k1 v635-1 0
|
4
|
+
k10 MOD 1
|
5
|
+
k11 v751-11 1
|
6
|
+
k12 v367-12 1
|
7
|
+
k13 v400-13 1
|
8
|
+
k14 v397-14 1
|
9
|
+
k15 v170-15 1
|
10
|
+
k16 v719-16 1
|
11
|
+
k17 v734-17 1
|
12
|
+
k18 v587-18 1
|
13
|
+
k19 v494-19 1
|
14
|
+
k2 v803-2 0
|
15
|
+
k20 v523-20 0
|
16
|
+
k21 v954-21 0
|
17
|
+
k22 v433-22 0
|
18
|
+
k23 v820-23 0
|
19
|
+
k24 v283-24 0
|
20
|
+
k25 v837-25 0
|
21
|
+
k26 v205-26 0
|
22
|
+
k27 v415-27 0
|
23
|
+
k28 v545-28 0
|
24
|
+
k29 v583-29 0
|
25
|
+
k3 v925-3 0
|
26
|
+
k30 MOD 1
|
27
|
+
k31 v323-31 1
|
28
|
+
k32 v614-32 1
|
29
|
+
k33 v679-33 1
|
30
|
+
k34 v805-34 1
|
31
|
+
k35 v451-35 1
|
32
|
+
k36 v115-36 1
|
33
|
+
k37 v269-37 1
|
34
|
+
k38 v218-38 1
|
35
|
+
k39 v617-39 1
|
36
|
+
k4 v775-4 0
|
37
|
+
k40 v878-40 0
|
38
|
+
k41 v345-41 0
|
39
|
+
k42 v512-42 0
|
40
|
+
k43 v969-43 0
|
41
|
+
k44 v408-44 0
|
42
|
+
k45 v291-45 0
|
43
|
+
k46 v858-46 0
|
44
|
+
k47 v953-47 0
|
45
|
+
k48 v710-48 0
|
46
|
+
k49 v142-49 0
|
47
|
+
k5 v537-5 0
|
48
|
+
k50 MOD 1
|
49
|
+
k51 v934-51 1
|
50
|
+
k52 v621-52 1
|
51
|
+
k53 v965-53 1
|
52
|
+
k54 v574-54 1
|
53
|
+
k55 v204-55 1
|
54
|
+
k56 v298-56 1
|
55
|
+
k57 v134-57 1
|
56
|
+
k58 v983-58 1
|
57
|
+
k59 v444-59 1
|
58
|
+
k6 v592-6 0
|
59
|
+
k60 v144-60 0
|
60
|
+
k61 v152-61 0
|
61
|
+
k62 v187-62 0
|
62
|
+
k63 v215-63 0
|
63
|
+
k64 v8-64 0
|
64
|
+
k65 v697-65 0
|
65
|
+
k66 v651-66 0
|
66
|
+
k67 v280-67 0
|
67
|
+
k68 v701-68 0
|
68
|
+
k69 v537-69 0
|
69
|
+
k7 v414-7 0
|
70
|
+
k70 v413-70 1
|
71
|
+
k71 v69-71 1
|
72
|
+
k72 v86-72 1
|
73
|
+
k73 v822-73 1
|
74
|
+
k74 v670-74 1
|
75
|
+
k75 v370-75 1
|
76
|
+
k76 v806-76 1
|
77
|
+
k77 v688-77 1
|
78
|
+
k78 v26-78 1
|
79
|
+
k79 v66-79 1
|
80
|
+
k8 v590-8 0
|
81
|
+
k80 v802-80 0
|
82
|
+
k81 v171-81 0
|
83
|
+
k82 v557-82 0
|
84
|
+
k83 v847-83 0
|
85
|
+
k84 v777-84 0
|
86
|
+
k85 v730-85 0
|
87
|
+
k86 v987-86 0
|
88
|
+
k87 v115-87 0
|
89
|
+
k88 v646-88 0
|
90
|
+
k89 v496-89 0
|
91
|
+
k9 v302-9 0
|
92
|
+
k90 v120-90 1
|
93
|
+
k91 v684-91 1
|
94
|
+
k92 v374-92 1
|
95
|
+
k93 v65-93 1
|
96
|
+
k94 v370-94 1
|
97
|
+
k95 v174-95 1
|
98
|
+
k96 v828-96 1
|
99
|
+
k97 v867-97 1
|
100
|
+
k98 v759-98 1
|
101
|
+
k99 v703-99 1
|