-
-
Notifications
You must be signed in to change notification settings - Fork 493
/
test.xml
150 lines (125 loc) · 4.57 KB
/
test.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<?xml version="1.0" encoding="utf-8"?>
<test>
<name>IN filter vs expression (incl percolate)</name>
<config>
indexer
{
mem_limit = 16M
}
searchd
{
<searchd_settings/>
workers = threads
}
source test
{
type = mysql
<sql_settings/>
sql_query = select * from test_table
sql_attr_uint = gid
sql_attr_json = j
}
index test
{
source = test
path = <data_path/>/test
}
index pq
{
type = percolate
path = <data_path/>/pq_re
rt_field = title
rt_attr_json = j
}
index dist
{
type = distributed
agent = <my_address/>:test
}
index pq_in
{
type = percolate
path = <data_path/>/pq_in
rt_field = title
rt_attr_json = j
}
source j_arrays
{
type = mysql
<sql_settings/>
sql_query = SELECT * from j_arrays
sql_attr_json = j
}
index arrays
{
source = j_arrays
path = <data_path/>/j_arrays
}
index pq_expr
{
type = percolate
path = <data_path/>/pq_expr
rt_field = title
rt_attr_json = j
}
</config>
<db_create>
CREATE TABLE `test_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`gid` int(11) NOT NULL,
`title` varchar(255) NOT NULL,
`j` varchar(8192) NOT NULL,
PRIMARY KEY (`id`)
);
</db_create>
<db_drop>DROP TABLE IF EXISTS `test_table`;</db_drop>
<db_insert>
INSERT INTO `test_table` VALUES
(1,1,'test one','{"a":5,"b":123}'),
(2,1,'test two','{"a":101,"b":134}')
</db_insert>
<db_create>CREATE TABLE j_arrays ( id INTEGER NOT NULL, gid INTEGER NOT NULL, j VARCHAR(255) NOT NULL )</db_create>
<db_drop>DROP TABLE IF EXISTS `j_arrays`;</db_drop>
<db_insert>
INSERT INTO j_arrays ( id, gid, j ) VALUES
( 123, 1, '{"a":[1,2,3,4], "t":["t1", "t2", "t3"]}' ),
( 234, 1, '{"a":[2,3,4,5], "t":["t2", "t3", "t4"]}' ),
( 345, 2, '{"a":[3,4,5,1], "t":["t3", "t4", "t5"]}' ),
( 456, 2, '{"a":["4","5","6","2"], "t":["t4", "t5", "t6"]}' )
</db_insert>
<sphqueries>
<!-- IN for plain indexes -->
<sphinxql>select * from test</sphinxql>
<sphinxql>select * from test where j.a IN (5,100)</sphinxql>
<sphinxql>select *, IN(j.b, 100, 134) as cnd from test where cnd<>0</sphinxql>
<sphinxql>select *, j.b IN(100, 134) as cnd from test where cnd<>0</sphinxql>
<!-- IN for distributed indexes -->
<sphinxql>select * from dist where j.a IN (5,100)</sphinxql>
<sphinxql>select *, IN(j.b, 100, 134) as cnd from dist where cnd<>0</sphinxql>
<sphinxql>select *, j.b IN(100, 134) as cnd from dist where cnd<>0</sphinxql>
<!-- IN for PQ indexes -->
<sphinxql>INSERT INTO pq (query, filters) VALUES ('', 'j.a IN (5, 100)')</sphinxql>
<sphinxql>INSERT INTO pq (query, filters) VALUES ('', 'IN (j.a, 5, 100)')</sphinxql>
<sphinxql>INSERT INTO pq (query, filters) VALUES ('', 'j.a IN (5, 100) and CRC32(\'test\')')</sphinxql>
<sphinxql>INSERT INTO pq (query, filters) VALUES ('', 'IN (j.a, 5, 100) and CRC32(\'test\')')</sphinxql>
<sphinxql>INSERT INTO pq (query, filters) VALUES ('', 'j.a IN (5, 100) or IN (j.b, 134, 200)')</sphinxql>
<sphinxql>INSERT INTO pq (query, filters) VALUES ('', 'IN (j.a, 5, 100) or j.b IN (134, 200)')</sphinxql>
<sphinxql>CALL PQ ('pq', ('{"j":{"a":5, "b":123}}', '{"j":{"a":101, "b":134}}'), 1 as docs, 1 as query)</sphinxql>
<!-- crash on IN for plain indexes -->
<sphinxql>select *, IN (missed.a,5,100) from test</sphinxql>
<!-- crash on IN with large values -->
<sphinxql>INSERT INTO pq_in (query, filters) VALUES ('', '(j.a=5 OR (j.a=6 AND NOT IN(j.b, 1220431865,6663093570)))')</sphinxql>
<sphinxql>CALL PQ ('pq_in', ('{"j":{"a":5, "b":123}}', '{"j":{"a":6, "b":134}}'), 1 as docs, 1 as query)</sphinxql>
<sphinxql>select *, in(j.a,1220431865,6663093570) as p from arrays</sphinxql>
<!-- JSON expression -->
<sphinxql>INSERT INTO pq_expr (query, filters) VALUES ('', 'abs(j.a)=22')</sphinxql>
<sphinxql>INSERT INTO pq_expr (query, filters) VALUES ('', 'abs(j.a)=12')</sphinxql>
<sphinxql>CALL PQ ('pq_expr', ('{"j":{"a":-12, "b":123}}', '{"j":{"a":22, "b":134}}'), 1 as docs, 1 as query)</sphinxql>
<sphinxql>INSERT INTO pq_expr (query, filters) VALUES ('', 'GEODIST(j.lat, j.lon,0.937717,-0.0798578, {in=radians, out=m} )<100000')</sphinxql>
<sphinxql>CALL PQ ('pq_expr', ('{"j":{"lon":-0.0798578, "lat":0.937717}}', '{"j":{"lon":-0.0799989, "lat":0.891975}}', '{"j":{"some":"thing"}}', '{"j":{"lon":-0.0721455, "lat":0.926761}}'), 1 as docs, 1 as query)</sphinxql>
<sphinxql>INSERT INTO pq_expr (query, filters) VALUES ('', 'CONTAINS(POLY2D(j.poly), 2, 3)')</sphinxql>
<sphinxql>CALL PQ ('pq_expr', ('{"j":{"poly":"1,2,3,4,5,6.0"}}', '{"j":{"poly":"1,-2,1,2,-5,6"}}', '{"j":{"poly":"-1,2,12,4,5,6"}}'), 1 as docs, 1 as query)</sphinxql>
<!-- regression crash at IN to JSON attribute -->
<sphinxql>select * from test where j IN (5,100)</sphinxql>
</sphqueries>
</test>