vincentchu-handlersocket 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. data/ext/HandlerSocket-Plugin-for-MySQL/AUTHORS +22 -0
  2. data/ext/HandlerSocket-Plugin-for-MySQL/COPYING +30 -0
  3. data/ext/HandlerSocket-Plugin-for-MySQL/ChangeLog +12 -0
  4. data/ext/HandlerSocket-Plugin-for-MySQL/Makefile.am +87 -0
  5. data/ext/HandlerSocket-Plugin-for-MySQL/README +78 -0
  6. data/ext/HandlerSocket-Plugin-for-MySQL/autogen.sh +117 -0
  7. data/ext/HandlerSocket-Plugin-for-MySQL/client/Makefile.am +24 -0
  8. data/ext/HandlerSocket-Plugin-for-MySQL/client/hsclient.cpp +88 -0
  9. data/ext/HandlerSocket-Plugin-for-MySQL/client/hslongrun.cpp +1041 -0
  10. data/ext/HandlerSocket-Plugin-for-MySQL/client/hspool_test.pl +224 -0
  11. data/ext/HandlerSocket-Plugin-for-MySQL/client/hstest.cpp +1532 -0
  12. data/ext/HandlerSocket-Plugin-for-MySQL/client/hstest.pl +228 -0
  13. data/ext/HandlerSocket-Plugin-for-MySQL/client/hstest_hs.sh +4 -0
  14. data/ext/HandlerSocket-Plugin-for-MySQL/client/hstest_hs_more50.sh +4 -0
  15. data/ext/HandlerSocket-Plugin-for-MySQL/client/hstest_md.sh +7 -0
  16. data/ext/HandlerSocket-Plugin-for-MySQL/client/hstest_my.sh +3 -0
  17. data/ext/HandlerSocket-Plugin-for-MySQL/client/hstest_my_more50.sh +3 -0
  18. data/ext/HandlerSocket-Plugin-for-MySQL/configure.ac +144 -0
  19. data/ext/HandlerSocket-Plugin-for-MySQL/docs-en/about-handlersocket.en.txt +72 -0
  20. data/ext/HandlerSocket-Plugin-for-MySQL/docs-en/configuration-options.en.txt +99 -0
  21. data/ext/HandlerSocket-Plugin-for-MySQL/docs-en/installation.en.txt +92 -0
  22. data/ext/HandlerSocket-Plugin-for-MySQL/docs-en/perl-client.en.txt +135 -0
  23. data/ext/HandlerSocket-Plugin-for-MySQL/docs-en/protocol.en.txt +205 -0
  24. data/ext/HandlerSocket-Plugin-for-MySQL/docs-ja/about-handlersocket.ja.txt +51 -0
  25. data/ext/HandlerSocket-Plugin-for-MySQL/docs-ja/installation.ja.txt +88 -0
  26. data/ext/HandlerSocket-Plugin-for-MySQL/docs-ja/perl-client.ja.txt +127 -0
  27. data/ext/HandlerSocket-Plugin-for-MySQL/docs-ja/protocol.ja.txt +180 -0
  28. data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/COPYRIGHT.txt +27 -0
  29. data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/Makefile.am +10 -0
  30. data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/Makefile.plain.template +31 -0
  31. data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/database.cpp +1190 -0
  32. data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/database.hpp +142 -0
  33. data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/handlersocket.cpp +222 -0
  34. data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/handlersocket.spec.template +29 -0
  35. data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/hstcpsvr.cpp +149 -0
  36. data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/hstcpsvr.hpp +58 -0
  37. data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/hstcpsvr_worker.cpp +951 -0
  38. data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/hstcpsvr_worker.hpp +35 -0
  39. data/ext/HandlerSocket-Plugin-for-MySQL/handlersocket/mysql_incl.hpp +50 -0
  40. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/COPYRIGHT.txt +27 -0
  41. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/Makefile.am +12 -0
  42. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/Makefile.plain +27 -0
  43. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/allocator.hpp +64 -0
  44. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/auto_addrinfo.hpp +49 -0
  45. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/auto_file.hpp +64 -0
  46. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/auto_ptrcontainer.hpp +67 -0
  47. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/config.cpp +67 -0
  48. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/config.hpp +32 -0
  49. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/escape.cpp +127 -0
  50. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/escape.hpp +66 -0
  51. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/fatal.cpp +36 -0
  52. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/fatal.hpp +22 -0
  53. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/hstcpcli.cpp +441 -0
  54. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/hstcpcli.hpp +62 -0
  55. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/libhsclient.spec.template +39 -0
  56. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/mutex.hpp +51 -0
  57. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/socket.cpp +186 -0
  58. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/socket.hpp +51 -0
  59. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/string_buffer.hpp +118 -0
  60. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/string_ref.hpp +63 -0
  61. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/string_util.cpp +182 -0
  62. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/string_util.hpp +53 -0
  63. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/thread.hpp +84 -0
  64. data/ext/HandlerSocket-Plugin-for-MySQL/libhsclient/util.hpp +25 -0
  65. data/ext/HandlerSocket-Plugin-for-MySQL/misc/microbench-hs.log +130 -0
  66. data/ext/HandlerSocket-Plugin-for-MySQL/misc/microbench-my.log +125 -0
  67. data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/COPYRIGHT.txt +27 -0
  68. data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/Changes +6 -0
  69. data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/HandlerSocket.xs +632 -0
  70. data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/MANIFEST +8 -0
  71. data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/Makefile.PL +18 -0
  72. data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/Makefile.PL.installed +20 -0
  73. data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/README +30 -0
  74. data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/lib/Net/HandlerSocket.pm +68 -0
  75. data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/lib/Net/HandlerSocket/Pool.pm +362 -0
  76. data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/perl-Net-HandlerSocket.spec.template +127 -0
  77. data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/ppport.h +6375 -0
  78. data/ext/HandlerSocket-Plugin-for-MySQL/perl-Net-HandlerSocket/t/Net-HandlerSocket.t +15 -0
  79. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/Makefile +79 -0
  80. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/common/binary_my.cnf +4 -0
  81. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/common/compat.sh +29 -0
  82. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/common/hstest.pm +66 -0
  83. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/Makefile +4 -0
  84. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/run.sh +27 -0
  85. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test01.expected +100 -0
  86. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test01.pl +38 -0
  87. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test02.expected +100 -0
  88. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test02.pl +49 -0
  89. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test03.expected +771 -0
  90. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test03.pl +61 -0
  91. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test04.expected +0 -0
  92. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test04.pl +63 -0
  93. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test05.expected +771 -0
  94. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test05.pl +59 -0
  95. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test06.expected +644 -0
  96. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test06.pl +90 -0
  97. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test07.expected +304 -0
  98. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test07.pl +98 -0
  99. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test08.expected +2 -0
  100. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test08.pl +48 -0
  101. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test09.expected +12 -0
  102. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test09.pl +67 -0
  103. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test10.expected +771 -0
  104. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test10.pl +93 -0
  105. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test11.expected +37 -0
  106. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test11.pl +112 -0
  107. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test12.expected +273 -0
  108. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test12.pl +134 -0
  109. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test13.expected +92 -0
  110. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test13.pl +92 -0
  111. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test14.expected +144 -0
  112. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test14.pl +80 -0
  113. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test15.expected +764 -0
  114. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test15.pl +114 -0
  115. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test16.expected +66 -0
  116. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test16.pl +88 -0
  117. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test17.expected +0 -0
  118. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test17.pl +125 -0
  119. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test18.expected +22 -0
  120. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test18.pl +63 -0
  121. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test19.expected +14894 -0
  122. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test19.pl +190 -0
  123. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test20.expected +2 -0
  124. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test20.pl +33 -0
  125. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test21.expected +11 -0
  126. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test21.pl +58 -0
  127. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test22.expected +9 -0
  128. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test22.pl +61 -0
  129. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test23.expected +101 -0
  130. data/ext/HandlerSocket-Plugin-for-MySQL/regtest/test_01_lib/test23.pl +53 -0
  131. data/ext/winebarrel-ruby-handlersocket-c19841e47ea2/README +33 -0
  132. data/ext/winebarrel-ruby-handlersocket-c19841e47ea2/extconf.rb +27 -0
  133. data/ext/winebarrel-ruby-handlersocket-c19841e47ea2/handlersocket.cpp +437 -0
  134. data/ext/winebarrel-ruby-handlersocket-c19841e47ea2/handlersocket.h +32 -0
  135. 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,2 @@
1
+ open_index 1st r=1
2
+ open_index 2nd r=0
@@ -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,11 @@
1
+ HS
2
+ k10 v704-10
3
+ k30 v52-30
4
+ k40 v878-40
5
+ k50 v682-50
6
+ SQL
7
+ k10 v704-10
8
+ k30 v52-30
9
+ k40 v878-40
10
+ k50 v682-50
11
+ END
@@ -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,9 @@
1
+ HS
2
+ k10 v704-10 1
3
+ k30 v52-30 1
4
+ k50 v682-50 1
5
+ SQL
6
+ k10 v704-10 1
7
+ k30 v52-30 1
8
+ k50 v682-50 1
9
+ END
@@ -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