1 /* This file is part of the Zebra server.
2 Copyright (C) Index Data
4 Zebra is free software; you can redistribute it and/or modify it under
5 the terms of the GNU General Public License as published by the Free
6 Software Foundation; either version 2, or (at your option) any later
9 Zebra is distributed in the hope that it will be useful, but WITHOUT ANY
10 WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21 \brief test various search attributes */
28 const char *myrec[] = {
29 "<gils>\n<title>My title</title>\n"
30 " <abstract>test record with single coordset, negatives</abstract>\n"
31 " <Spatial-Domain><Bounding-Coordinates>\n"
32 " <West-Bounding-Coordinate> -120 </West-Bounding-Coordinate>\n"
33 " <East-Bounding-Coordinate> -102 </East-Bounding-Coordinate>\n"
34 " <North-Bounding-Coordinate> 49 </North-Bounding-Coordinate>\n"
35 " <South-Bounding-Coordinate> 31 </South-Bounding-Coordinate>\n"
36 " </Bounding-Coordinates></Spatial-Domain>\n"
39 "<gils>\n<title>My x title</title>\n"
40 " <abstract>second test with two coord sets</abstract>\n"
41 " <Spatial-Domain><Bounding-Coordinates>\n"
42 " <West-Bounding-Coordinate> -120 </West-Bounding-Coordinate>\n"
43 " <East-Bounding-Coordinate> -102 </East-Bounding-Coordinate>\n"
44 " <North-Bounding-Coordinate> 49 </North-Bounding-Coordinate>\n"
45 " <South-Bounding-Coordinate> 31 </South-Bounding-Coordinate>\n"
46 " </Bounding-Coordinates>"
47 " <Bounding-Coordinates>\n"
48 " <West-Bounding-Coordinate> -125 </West-Bounding-Coordinate>\n"
49 " <East-Bounding-Coordinate> -108 </East-Bounding-Coordinate>\n"
50 " <North-Bounding-Coordinate> 41 </North-Bounding-Coordinate>\n"
51 " <South-Bounding-Coordinate> 25 </South-Bounding-Coordinate>\n"
52 " </Bounding-Coordinates></Spatial-Domain>\n"
55 "<gils>\n<title>My title x</title><abstract>a b c c c a y</abstract>\n</gils>\n" ,
56 "<gils>\n<title>test</title><abstract>a1 a2 c a1 a2 a3</abstract>\n</gils>\n" ,
59 " <date>2107-09-19 00:00:00</date>\n"
64 "1234567890" "1234567890""1234567890""1234567890""1234567890"
65 "1234567890" "1234567890""1234567890""1234567890""1234567890"
66 "1234567890" "1234567890""1234567890""1234567890""1234567890"
67 "1234567890" "1234567890""1234567890""1234567890""1234567890"
68 "1234567890" "1234567890""1234567890""1234567890""1234567890"
69 "1234567890" "1234567890""1234567890""1234567890""1234567890"
70 "1234567890" "1234567890""1234567890""1234567890""1234567890"
71 "1234567890" "1234567890""1234567890""1234567890""1234567890"
72 "1234567890" "1234567890""1234567890""1234567890""1234567890"
73 "1234567890" "1234567890""1234567890""1234567890""1234567890"
81 "\xe5" " og vandl" "\xf8" "b"
87 static void tst(int argc, char **argv)
89 ZebraService zs = tl_start_up(0, argc, argv);
90 ZebraHandle zh = zebra_open(zs, 0);
92 YAZ_CHECK(tl_init_data(zh, myrec));
95 YAZ_CHECK(tl_query(zh, "@attr 1=4 notfound", 0));
96 YAZ_CHECK(tl_query(zh, "@attr 1=4 title", 3));
97 YAZ_CHECK_EQ(tl_fetch_compare(zh, 1, "zebra::facet::title:w",
102 "term 2 2: x\n"), ZEBRA_OK);
104 YAZ_CHECK_EQ(tl_fetch_compare(zh, 1, "zebra::facet::title:s",
105 yaz_oid_recsyn_sutrs,
107 "term 1 1: my title\n"
108 "term 1 1: my title x\n"
109 "term 1 1: my x title\n"), ZEBRA_OK);
112 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=1 titl", 3));
114 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=1 x", 2));
115 YAZ_CHECK_EQ(tl_fetch_compare(zh, 1, "zebra::facet::title:w",
116 yaz_oid_recsyn_sutrs,
120 "term 2 2: x\n"), ZEBRA_OK);
123 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=2 titl", 0));
124 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=2 x", 2));
125 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=2 le", 3));
127 /* trunc left&right */
128 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=3 titl", 3));
129 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=3 x", 2));
130 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=3 le", 3));
133 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=100 titl", 0));
134 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=100 x", 2));
135 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=100 le", 0));
137 /* trunc: process # in term */
138 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=101 titl", 0));
139 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=101 x", 2));
140 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=101 le", 0));
141 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=101 #le", 3));
144 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=102 titl", 0));
145 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=102 x", 2));
146 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=102 le", 0));
147 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=102 .*le", 3));
150 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=103 titl", 3));
151 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=103 titlx", 3));
152 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=103 titlxx", 0));
153 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=103 x", 3));
154 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=103 le", 0));
155 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=103 .*le", 3));
157 /* trunc: CCL #=. ?=.* (?[0-9] = n times .) */
158 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=104 titl", 0));
159 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=104 tit#e", 3));
160 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=104 x", 2));
161 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=104 le", 0));
162 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=104 ?le", 3));
163 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=104 ?1le", 0));
164 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=104 ?2le", 0));
165 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=104 ?3le", 3));
167 /* trunc: * = .* ! = . and right truncate */
168 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=105 titl", 3));
169 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=105 tit!e", 3));
170 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=105 x", 2));
171 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=105 le", 0));
172 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=105 *le", 3));
174 /* trunc: * = .* ! = . and do not truncate */
175 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=106 titl", 0));
176 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=106 tit!e", 3));
177 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=106 x", 2));
178 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=106 le", 0));
179 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=106 *le", 3));
181 /* string relations, < */
182 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=1 0", 0));
183 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=1 my", 1));
185 /* string relations, <= */
186 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=2 my", 4));
187 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=2 mn", 1));
190 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=3 my", 3));
193 "@attr 1=4 @attr 2=3 "
194 "1234567890" "1234567890""1234567890""1234567890""1234567890"
195 "1234567890" "1234567890""1234567890""1234567890""1234567890"
196 "1234567890" "1234567890""1234567890""1234567890""1234567890"
197 "1234567890" "1234567890""1234567890""1234567890""1234567890"
198 "1234567890" "1234567890""1234567890""1234567890""1234567890"
201 "1234567890" "1234567890""1234567890""1234567890""1234567890"
202 "1234567890" "1234567890""1234567890""1234567890""1234567890"
203 "1234567890" "1234567890""1234567890""1234567890""1234567890"
204 "1234567890" "1234567890""1234567890""1234567890""1234567890"
205 "1234567890" "1234567890""1234567890""1234567890""1234567890"
211 "@attr 1=4 @attr 2=3 "
212 "1234567890" "1234567890""1234567890""1234567890""1234567890"
213 "1234567890" "1234567890""1234567890""1234567890""1234567890"
214 "1234567890" "1234567890""1234567890""1234567890""1234567890"
215 "1234567890" "1234567890""1234567890""1234567890""1234567890"
216 "1234567890" "1234567890""1234567890""1234567890""1234567890"
218 "1234567890" "1234567890""1234567890""1234567890""1234567890"
219 "1234567890" "1234567890""1234567890""1234567890""1234567890"
220 "1234567890" "1234567890""1234567890""1234567890""1234567890"
221 "1234567890" "1234567890""1234567890""1234567890""1234567890"
222 "1234567890" "1234567890""1234567890""1234567890""1234567890"
227 /* string relations, >= */
228 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=4 x", 3));
229 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=4 tu", 3));
230 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=4 title", 4));
232 /* string relations, > */
233 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=5 x", 1));
234 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=5 tu", 3));
235 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=5 title", 3));
237 /* always-matches relation */
238 YAZ_CHECK(tl_query(zh, "@attr 1=_ALLRECORDS @attr 2=103 {ym}", 7));
239 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=103 {x my}", 6));
240 YAZ_CHECK(tl_query_x(zh, "@attr 1=1 @attr 2=103 {x my}", 0, 114));
243 YAZ_CHECK(tl_query(zh, "@and @attr 1=4 notfound @attr 1=4 x", 0));
244 YAZ_CHECK(tl_query(zh, "@and @attr 1=4 x @attr 1=4 notfound", 0));
245 YAZ_CHECK(tl_query(zh, "@and @attr 1=4 notfound @attr 1=4 notfound", 0));
246 YAZ_CHECK(tl_query(zh, "@and @attr 1=4 x @attr 1=4 x", 2));
247 YAZ_CHECK(tl_query(zh, "@and @attr 1=4 x @attr 1=4 my", 2));
248 YAZ_CHECK(tl_query(zh, "@and @attr 1=4 my @attr 1=4 x", 2));
249 YAZ_CHECK(tl_query(zh, "@and @attr 1=4 my @attr 1=4 my", 3));
252 YAZ_CHECK(tl_query(zh, "@or @attr 1=4 notfound @attr 1=4 x", 2));
253 YAZ_CHECK(tl_query(zh, "@or @attr 1=4 x @attr 1=4 notfound", 2));
254 YAZ_CHECK(tl_query(zh, "@or @attr 1=4 notfound @attr 1=4 notfound", 0));
255 YAZ_CHECK(tl_query(zh, "@or @attr 1=4 x @attr 1=4 x", 2));
256 YAZ_CHECK(tl_query(zh, "@or @attr 1=4 x @attr 1=4 my", 3));
257 YAZ_CHECK(tl_query(zh, "@or @attr 1=4 my @attr 1=4 x", 3));
258 YAZ_CHECK(tl_query(zh, "@or @attr 1=4 my @attr 1=4 my", 3));
262 YAZ_CHECK(tl_query(zh, "@not @attr 1=4 notfound @attr 1=4 x", 0));
263 YAZ_CHECK(tl_query(zh, "@not @attr 1=4 x @attr 1=4 x", 0));
264 YAZ_CHECK(tl_query(zh, "@not @attr 1=4 my @attr 1=4 x", 1));
265 YAZ_CHECK(tl_query(zh, "@not @attr 1=4 my @attr 1=4 notfound", 3));
266 YAZ_CHECK(tl_query(zh, "@not @attr 1=4 notfound @attr 1=4 notfound", 0));
268 /* phrase searches */
269 YAZ_CHECK(tl_query(zh, "@attr 1=4 my", 3));
270 YAZ_CHECK(tl_query(zh, "@attr 1=4 {my x}", 1));
271 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 4=1 {my x}", 1));
272 YAZ_CHECK(tl_query(zh, "@attr 1=4 {my x}", 1));
273 YAZ_CHECK(tl_query(zh, "@attr 1=4 {x my}", 0));
274 YAZ_CHECK(tl_query(zh, "@attr 1=4 {my x title}", 1));
275 YAZ_CHECK(tl_query(zh, "@attr 1=4 {my title}", 2));
277 /* and-list searches */
278 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 4=6 {x my}", 2));
279 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 4=6 {my x}", 2));
280 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 4=6 {my my}", 3));
281 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 4=6 {e x}", 0));
283 /* or-list searches */
284 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 4=105 {x my}", 3));
285 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 4=105 {my x}", 3));
286 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 4=105 {my my}", 3));
287 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 4=105 {e x}", 2));
288 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 4=106 {e x}", 2));
290 /* exl=0 distance=2 order=1 relation=2 (<=), known, unit=word */
291 YAZ_CHECK(tl_query(zh, "@attr 1=4 @prox 0 2 1 2 k 2 my x", 2));
293 /* exl=0 distance=2 order=1 relation=2 (<=), known, unit=word */
294 YAZ_CHECK(tl_query(zh, "@attr 1=4 @prox 0 2 1 2 k 2 x my", 0));
296 /* exl=0 distance=2 order=0 relation=2 (<=), known, unit=word */
297 YAZ_CHECK(tl_query(zh, "@attr 1=4 @prox 0 2 0 2 k 2 x my", 2));
299 /* exl=0 distance=2 order=0 relation=3 (=), known, unit=word */
300 YAZ_CHECK(tl_query(zh, "@attr 1=4 @prox 0 2 1 3 k 2 my x", 1));
302 /* exl=1 distance=2 order=0 relation=3 (=), known, unit=word */
303 YAZ_CHECK(tl_query(zh, "@attr 1=4 @prox 1 2 1 3 k 2 my x", 1));
305 /* exl=0 distance=2 order=1 relation=2 (<=), known, unit=word */
306 YAZ_CHECK(tl_query(zh, "@attr 1=1016 @prox 0 2 1 2 k 2 a y", 1));
308 /* exl=0 distance=1 order=1 relation=3 (=), known, unit=word */
309 YAZ_CHECK(tl_query(zh, "@attr 1=1016 @prox 0 1 1 3 k 2 a b", 1));
312 /* exl=0 distance=1 order=1 relation=3 (=), known, unit=word */
313 YAZ_CHECK(tl_query(zh, "@attr 1=1016 @prox 0 1 1 3 k 2 c a", 1));
314 /* exl=0 distance=1 order=1 relation=2 (<=), known, unit=word */
315 YAZ_CHECK(tl_query(zh, "@attr 1=1016 @prox 0 1 1 2 k 2 c a", 1));
317 /* exl=0 distance=1 order=1 relation=2 (<=), known, unit=word */
318 YAZ_CHECK(tl_query(zh, "@attr 1=1016 @prox 0 1 1 2 k 2 @prox 0 1 1 2 k 2 a1 a2 a3", 1));
319 YAZ_CHECK(tl_query(zh, "@attr 1=1016 @prox 0 1 1 3 k 2 @prox 0 1 1 3 k 2 a1 a2 a3", 1));
321 /* 3 term @prox test.. */
322 YAZ_CHECK(tl_query(zh, "@attr 1=1016 \"a b c\"", 1));
324 /* exl=0 distance=1 order=1 relation=2 (<=), known, unit=word */
325 /* right associative (does not work, so zero hits) */
326 YAZ_CHECK(tl_query(zh, "@attr 1=1016 @prox 0 1 1 2 k 2 a @prox 0 1 1 2 k 2 b c", 0));
327 /* left associative (works fine) */
328 YAZ_CHECK(tl_query(zh, "@attr 1=1016 @prox 0 1 1 2 k 2 @prox 0 1 1 2 k 2 a b c", 1));
330 /* exl=0 distance=1 order=1 relation=3 (=), known, unit=word */
331 /* right associative (does not work, so zero hits) */
332 YAZ_CHECK(tl_query(zh, "@attr 1=1016 @prox 0 1 1 3 k 2 a @prox 0 1 1 3 k 2 b c", 0));
333 /* left associative (works fine) */
334 YAZ_CHECK(tl_query(zh, "@attr 1=1016 @prox 0 1 1 3 k 2 @prox 0 1 1 3 k 2 a b c", 1));
336 /* Non-indexed numeric use, but specified in bib1.att (bug #1142) */
337 YAZ_CHECK(tl_query_x(zh, "@attr 1=1000 x", 0, 114));
338 YAZ_CHECK(tl_query_x(zh, "@attr 1=1000 @attr 14=0 x", 0, 114));
339 YAZ_CHECK(tl_query_x(zh, "@attr 1=1000 @attr 14=1 x", 0, 0));
340 /* Non-indexed numeric use and unspecified in bib1.att */
341 YAZ_CHECK(tl_query_x(zh, "@attr 1=999 x", 0, 114));
342 YAZ_CHECK(tl_query_x(zh, "@attr 1=999 @attr 14=1 x", 0, 114));
343 /* Non-indexed string use attribute */
344 YAZ_CHECK(tl_query_x(zh, "@attr 1=gyf x", 0, 114));
345 YAZ_CHECK(tl_query_x(zh, "@attr 1=gyf @attr 14=0 x", 0, 114));
346 YAZ_CHECK(tl_query_x(zh, "@attr 1=gyf @attr 14=1 x", 0, 0));
348 /* provoke unsupported use attribute */
349 YAZ_CHECK(tl_query_x(zh, "@attr 1=999 @attr 4=1 x", 0, 114));
350 YAZ_CHECK(tl_query_x(zh, "@attr 1=999 @attr 4=6 x", 0, 114));
351 YAZ_CHECK(tl_query_x(zh, "@attr 1=999 @attr 4=105 x", 0, 114));
352 YAZ_CHECK(tl_query_x(zh, "@attr 1=999 @attr 4=109 123", 0, 114));
353 YAZ_CHECK(tl_query_x(zh, "@attrset 1.2.840.10003.3.1 @attr 1=999 x",
355 /* provoke unsupported attribute set */
356 YAZ_CHECK(tl_query_x(zh, "@attrset 1.2.8 @attr 1=999 @attr 4=1 x", 0, 121));
357 YAZ_CHECK(tl_query_x(zh, "@attrset 1.2.8 @attr 1=999 @attr 4=6 x", 0,
359 YAZ_CHECK(tl_query_x(zh, "@attrset 1.2.8 @attr 1=999 @attr 4=105 x", 0,
361 YAZ_CHECK(tl_query_x(zh, "@attrset 1.2.8 @attr 1=999 @attr 4=109 123",
364 /* provoke unsupported relation */
365 YAZ_CHECK(tl_query_x(zh, "@attr 1=4 @attr 2=6 x", 0, 117));
366 YAZ_CHECK(tl_query_x(zh, "@attr 1=1016 @attr 2=6 @attr 4=109 x", 0, 114));
368 /* position , phrase searches */
369 YAZ_CHECK(tl_query(zh, "@attr 3=1 title", 0));
370 YAZ_CHECK(tl_query(zh, "@attr 3=1 my", 3));
372 YAZ_CHECK(tl_query(zh, "@attr 3=1 {my title}", 2));
373 YAZ_CHECK(tl_query(zh, "@attr 4=1 @attr 3=1 {my title}", 2));
375 YAZ_CHECK(tl_query(zh, "@attr 3=1 {title my}", 0));
376 YAZ_CHECK(tl_query(zh, "@attr 4=1 @attr 3=1 {title my}", 0));
378 YAZ_CHECK(tl_query(zh, "@attr 4=1 @attr 3=1 {title my}", 0));
380 /* position , or-list */
381 YAZ_CHECK(tl_query(zh, "@attr 4=105 @attr 3=1 {title my}", 3));
382 YAZ_CHECK(tl_query(zh, "@attr 4=105 @attr 3=1 {title x}", 0));
384 /* position, and-list */
385 YAZ_CHECK(tl_query(zh, "@attr 4=6 @attr 3=1 {title my}", 0));
386 YAZ_CHECK(tl_query(zh, "@attr 4=6 @attr 3=1 {title x}", 0));
387 YAZ_CHECK(tl_query(zh, "@attr 4=6 @attr 3=1 my", 3));
390 /* 1=2038: West-Bounding-Coordinate 2039: East: 2040: North: 2041 South*/
391 /* 4=109: numeric string */
392 /* 2=3: equal 2=1: less, 2=4: greater or equal 2=5 greater */
394 /* N>=25, search attributes work */
395 YAZ_CHECK(tl_query(zh, "@attr 2=4 @attr gils 1=2040 @attr 4=109 25", 2));
397 /* N>49, search attributes work */
398 YAZ_CHECK(tl_query(zh, "@attr 2=5 @attr gils 1=2040 @attr 4=109 49", 0));
400 /* N>=49, search attributes work */
401 YAZ_CHECK(tl_query(zh, "@attr 2=4 @attr gils 1=2040 @attr 4=109 49", 2));
403 /* N>48, search attributes work */
404 YAZ_CHECK(tl_query(zh, "@attr 2=5 @attr gils 1=2040 @attr 4=109 48", 2));
406 /* N<48, search attributes work */
407 YAZ_CHECK(tl_query(zh, "@attr 2=1 @attr gils 1=2040 @attr 4=109 48", 1));
409 /* N<=48, search attributes work */
410 YAZ_CHECK(tl_query(zh, "@attr 2=2 @attr gils 1=2040 @attr 4=109 48", 1));
412 /* N=41, get rec1 only */
413 YAZ_CHECK(tl_query(zh, "@attr 2=3 @attr gils 1=2040 @attr 4=109 41", 1));
415 /* N=49, get both records */
416 YAZ_CHECK(tl_query(zh, "@attr 2=3 @attr gils 1=2040 @attr 4=109 49", 2));
418 /* W=-120 get both records */
419 YAZ_CHECK(tl_query(zh, "@attr 2=3 @attr gils 1=2038 @attr 4=109 -120", 2));
421 /* W<-122 get only rec1 */
422 YAZ_CHECK(tl_query(zh, "@attr 2=1 @attr gils 1=2038 @attr 4=109 '-120' ", 1));
424 /* N=41 and N=49 get only rec2 */
425 YAZ_CHECK(tl_query(zh, "@attr 2=3 @attr gils 1=2040 @attr 4=109 \"41 49\" ", 1));
427 /* N=41 and N=49, but relevance */
428 YAZ_CHECK(tl_query(zh, "@attr 2=102 @attr gils 1=2040 @attr 4=109 \"41 49\" ", 1));
432 YAZ_CHECK(tl_query(zh, "@attr 1=30 @attr 4=5 @attr 2=3 {2107-09-19 00:00:00}", 1));
434 YAZ_CHECK(tl_query(zh, "@attr 1=30 @attr 4=5 @attr 2=1 {2107-09-19 00:00:00}", 0));
436 YAZ_CHECK(tl_query(zh, "@attr 1=30 @attr 4=5 @attr 2=2 {2107-09-19 00:00:00}", 1));
438 YAZ_CHECK(tl_query(zh, "@attr 1=30 @attr 4=5 @attr 2=4 {2107-09-19 00:00:00}", 1));
440 YAZ_CHECK(tl_query(zh, "@attr 1=30 @attr 4=5 @attr 2=5 {2107-09-19 00:00:00}", 0));
443 YAZ_CHECK(tl_query(zh, "@attr 1=4 {\xe5" " og vandl" "\xf8" "b}", 1));
445 YAZ_CHECK(tl_query(zh, "@attr 1=4 {\xc5" " OG VANDL" "\xd8" "B}", 1));
447 /* try equivalent directive */
448 YAZ_CHECK(tl_query(zh, "@attr 1=4 {aa" " OG VANDL" "\xd8" "B}", 1));
449 YAZ_CHECK(tl_query(zh, "@attr 1=4 {AA" " OG VANDL" "\xd8" "B}", 0));
451 YAZ_CHECK(tl_close_down(zh, zs));
459 * c-file-style: "Stroustrup"
460 * indent-tabs-mode: nil
462 * vim: shiftwidth=4 tabstop=8 expandtab