Skip to content

Commit f5f7443

Browse files
committed
fixed that filters did not work with 'IN'
1 parent c1043ba commit f5f7443

File tree

7 files changed

+227
-1
lines changed

7 files changed

+227
-1
lines changed

handlersocket/hstcpsvr_worker.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -807,6 +807,7 @@ hstcpsvr_worker::do_exec_on_index(char *cmd_begin, char *cmd_end, char *start,
807807
unescape_string(wp, invalue_begin, invalue_end);
808808
invalues_work[i] = string_ref(invalue_begin, wp - invalue_begin);
809809
}
810+
skip_one(start, finish);
810811
}
811812
if (start == finish) {
812813
/* no more options */

regtest/test_01_lib/run.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/bash
22

3-
TESTS="01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21";
3+
TESTS="01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23";
44

55
source ../common/compat.sh
66

regtest/test_01_lib/test21.pl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ BEGIN
3434
my $dbname = $hstest::conf{dbname};
3535
$hs->open_index(1, $dbname, $table, '', 'k,v');
3636
my $vs = [ 'k10', 'k20x', 'k30', 'k40', 'k50' ];
37+
# select k,v from $table where k in $vs
3738
my $r = $hs->execute_single(1, '=', [ '' ], 10000, 0, undef, undef, undef,
3839
0, $vs);
3940
shift(@$r);
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

regtest/test_01_lib/test22.pl

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

regtest/test_01_lib/test23.pl

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#!/usr/bin/perl
2+
3+
# vim:sw=2:ai
4+
5+
# test for 'IN', filters, and modifications
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(undef, 9999);
36+
my $dbname = $hstest::conf{dbname};
37+
$hs->open_index(1, $dbname, $table, '', 'k,v,v2', 'v2');
38+
$hs->open_index(2, $dbname, $table, '', 'v', 'v2');
39+
my $vs = [ 'k10', 'k20x', 'k30', 'k40', 'k50' ];
40+
# update $table set v = 'MOD' where k in $vs and v2 = '1'
41+
my $r = $hs->execute_single(2, '=', [ '' ], 10000, 0, 'U', [ 'MOD' ],
42+
[['F', '=', 0, '1']], 0, $vs);
43+
$r = $hs->execute_single(1, '>=', [ '' ], 10000, 0);
44+
shift(@$r);
45+
print "HS\n";
46+
my $len = scalar(@$r) / 3;
47+
for (my $i = 0; $i < $len; ++$i) {
48+
my $k = $r->[$i * 3];
49+
my $v = $r->[$i * 3 + 1];
50+
my $v2 = $r->[$i * 3 + 2];
51+
print "$k $v $v2\n";
52+
}
53+

0 commit comments

Comments
 (0)