1 /* This file is part of the Zebra server.
2 Copyright (C) 1994-2011 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 static void tst(int argc, char **argv)
83 ZebraService zs = tl_start_up(0, argc, argv);
84 ZebraHandle zh = zebra_open(zs, 0);
86 YAZ_CHECK(tl_init_data(zh, myrec));
89 YAZ_CHECK(tl_query(zh, "@attr 1=4 notfound", 0));
90 YAZ_CHECK(tl_query(zh, "@attr 1=4 title", 3));
91 YAZ_CHECK_EQ(tl_fetch_compare(zh, 1, "zebra::facet::title:w",
96 "term 2 2: x\n"), ZEBRA_OK);
98 YAZ_CHECK_EQ(tl_fetch_compare(zh, 1, "zebra::facet::title:s",
101 "term 1 1: my title\n"
102 "term 1 1: my title x\n"
103 "term 1 1: my x title\n"), ZEBRA_OK);
106 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=1 titl", 3));
108 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=1 x", 2));
109 YAZ_CHECK_EQ(tl_fetch_compare(zh, 1, "zebra::facet::title:w",
110 yaz_oid_recsyn_sutrs,
114 "term 2 2: x\n"), ZEBRA_OK);
117 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=2 titl", 0));
118 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=2 x", 2));
119 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=2 le", 3));
121 /* trunc left&right */
122 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=3 titl", 3));
123 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=3 x", 2));
124 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=3 le", 3));
127 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=100 titl", 0));
128 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=100 x", 2));
129 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=100 le", 0));
131 /* trunc: process # in term */
132 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=101 titl", 0));
133 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=101 x", 2));
134 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=101 le", 0));
135 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=101 #le", 3));
138 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=102 titl", 0));
139 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=102 x", 2));
140 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=102 le", 0));
141 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=102 .*le", 3));
144 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=103 titl", 3));
145 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=103 titlx", 3));
146 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=103 titlxx", 0));
147 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=103 x", 2));
148 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=103 le", 0));
149 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=103 .*le", 3));
151 /* trunc: CCL #=. ?=.* (?[0-9] = n times .) */
152 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=104 titl", 0));
153 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=104 tit#e", 3));
154 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=104 x", 2));
155 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=104 le", 0));
156 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=104 ?le", 3));
157 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=104 ?1le", 0));
158 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=104 ?2le", 0));
159 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=104 ?3le", 3));
161 /* trunc: * = .* ! = . and right truncate */
162 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=105 titl", 3));
163 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=105 tit!e", 3));
164 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=105 x", 2));
165 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=105 le", 0));
166 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=105 *le", 3));
168 /* trunc: * = .* ! = . and do not truncate */
169 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=106 titl", 0));
170 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=106 tit!e", 3));
171 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=106 x", 2));
172 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=106 le", 0));
173 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 5=106 *le", 3));
175 /* string relations, < */
176 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=1 0", 0));
177 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=1 my", 1));
179 /* string relations, <= */
180 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=2 my", 4));
181 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=2 mn", 1));
184 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=3 my", 3));
187 "@attr 1=4 @attr 2=3 "
188 "1234567890" "1234567890""1234567890""1234567890""1234567890"
189 "1234567890" "1234567890""1234567890""1234567890""1234567890"
190 "1234567890" "1234567890""1234567890""1234567890""1234567890"
191 "1234567890" "1234567890""1234567890""1234567890""1234567890"
192 "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"
199 "1234567890" "1234567890""1234567890""1234567890""1234567890"
205 "@attr 1=4 @attr 2=3 "
206 "1234567890" "1234567890""1234567890""1234567890""1234567890"
207 "1234567890" "1234567890""1234567890""1234567890""1234567890"
208 "1234567890" "1234567890""1234567890""1234567890""1234567890"
209 "1234567890" "1234567890""1234567890""1234567890""1234567890"
210 "1234567890" "1234567890""1234567890""1234567890""1234567890"
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"
221 /* string relations, >= */
222 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=4 x", 2));
223 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=4 tu", 2));
224 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=4 title", 3));
226 /* string relations, > */
227 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=5 x", 0));
228 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=5 tu", 2));
229 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=5 title", 2));
231 /* always-matches relation */
232 YAZ_CHECK(tl_query(zh, "@attr 1=_ALLRECORDS @attr 2=103 {ym}", 6));
233 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 2=103 {x my}", 5));
234 YAZ_CHECK(tl_query_x(zh, "@attr 1=1 @attr 2=103 {x my}", 0, 114));
237 YAZ_CHECK(tl_query(zh, "@and @attr 1=4 notfound @attr 1=4 x", 0));
238 YAZ_CHECK(tl_query(zh, "@and @attr 1=4 x @attr 1=4 notfound", 0));
239 YAZ_CHECK(tl_query(zh, "@and @attr 1=4 notfound @attr 1=4 notfound", 0));
240 YAZ_CHECK(tl_query(zh, "@and @attr 1=4 x @attr 1=4 x", 2));
241 YAZ_CHECK(tl_query(zh, "@and @attr 1=4 x @attr 1=4 my", 2));
242 YAZ_CHECK(tl_query(zh, "@and @attr 1=4 my @attr 1=4 x", 2));
243 YAZ_CHECK(tl_query(zh, "@and @attr 1=4 my @attr 1=4 my", 3));
246 YAZ_CHECK(tl_query(zh, "@or @attr 1=4 notfound @attr 1=4 x", 2));
247 YAZ_CHECK(tl_query(zh, "@or @attr 1=4 x @attr 1=4 notfound", 2));
248 YAZ_CHECK(tl_query(zh, "@or @attr 1=4 notfound @attr 1=4 notfound", 0));
249 YAZ_CHECK(tl_query(zh, "@or @attr 1=4 x @attr 1=4 x", 2));
250 YAZ_CHECK(tl_query(zh, "@or @attr 1=4 x @attr 1=4 my", 3));
251 YAZ_CHECK(tl_query(zh, "@or @attr 1=4 my @attr 1=4 x", 3));
252 YAZ_CHECK(tl_query(zh, "@or @attr 1=4 my @attr 1=4 my", 3));
256 YAZ_CHECK(tl_query(zh, "@not @attr 1=4 notfound @attr 1=4 x", 0));
257 YAZ_CHECK(tl_query(zh, "@not @attr 1=4 x @attr 1=4 x", 0));
258 YAZ_CHECK(tl_query(zh, "@not @attr 1=4 my @attr 1=4 x", 1));
259 YAZ_CHECK(tl_query(zh, "@not @attr 1=4 my @attr 1=4 notfound", 3));
260 YAZ_CHECK(tl_query(zh, "@not @attr 1=4 notfound @attr 1=4 notfound", 0));
262 /* phrase searches */
263 YAZ_CHECK(tl_query(zh, "@attr 1=4 my", 3));
264 YAZ_CHECK(tl_query(zh, "@attr 1=4 {my x}", 1));
265 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 4=1 {my x}", 1));
266 YAZ_CHECK(tl_query(zh, "@attr 1=4 {my x}", 1));
267 YAZ_CHECK(tl_query(zh, "@attr 1=4 {x my}", 0));
268 YAZ_CHECK(tl_query(zh, "@attr 1=4 {my x title}", 1));
269 YAZ_CHECK(tl_query(zh, "@attr 1=4 {my title}", 2));
271 /* and-list searches */
272 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 4=6 {x my}", 2));
273 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 4=6 {my x}", 2));
274 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 4=6 {my my}", 3));
275 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 4=6 {e x}", 0));
277 /* or-list searches */
278 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 4=105 {x my}", 3));
279 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 4=105 {my x}", 3));
280 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 4=105 {my my}", 3));
281 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 4=105 {e x}", 2));
282 YAZ_CHECK(tl_query(zh, "@attr 1=4 @attr 4=106 {e x}", 2));
284 /* exl=0 distance=2 order=1 relation=2 (<=), known, unit=word */
285 YAZ_CHECK(tl_query(zh, "@attr 1=4 @prox 0 2 1 2 k 2 my x", 2));
287 /* exl=0 distance=2 order=1 relation=2 (<=), known, unit=word */
288 YAZ_CHECK(tl_query(zh, "@attr 1=4 @prox 0 2 1 2 k 2 x my", 0));
290 /* exl=0 distance=2 order=0 relation=2 (<=), known, unit=word */
291 YAZ_CHECK(tl_query(zh, "@attr 1=4 @prox 0 2 0 2 k 2 x my", 2));
293 /* exl=0 distance=2 order=0 relation=3 (=), known, unit=word */
294 YAZ_CHECK(tl_query(zh, "@attr 1=4 @prox 0 2 1 3 k 2 my x", 1));
296 /* exl=1 distance=2 order=0 relation=3 (=), known, unit=word */
297 YAZ_CHECK(tl_query(zh, "@attr 1=4 @prox 1 2 1 3 k 2 my x", 1));
299 /* exl=0 distance=2 order=1 relation=2 (<=), known, unit=word */
300 YAZ_CHECK(tl_query(zh, "@attr 1=1016 @prox 0 2 1 2 k 2 a y", 1));
302 /* exl=0 distance=1 order=1 relation=3 (=), known, unit=word */
303 YAZ_CHECK(tl_query(zh, "@attr 1=1016 @prox 0 1 1 3 k 2 a b", 1));
306 /* exl=0 distance=1 order=1 relation=3 (=), known, unit=word */
307 YAZ_CHECK(tl_query(zh, "@attr 1=1016 @prox 0 1 1 3 k 2 c a", 1));
308 /* exl=0 distance=1 order=1 relation=2 (<=), known, unit=word */
309 YAZ_CHECK(tl_query(zh, "@attr 1=1016 @prox 0 1 1 2 k 2 c a", 1));
311 /* exl=0 distance=1 order=1 relation=2 (<=), known, unit=word */
312 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));
313 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));
315 /* 3 term @prox test.. */
316 YAZ_CHECK(tl_query(zh, "@attr 1=1016 \"a b c\"", 1));
318 /* exl=0 distance=1 order=1 relation=2 (<=), known, unit=word */
319 /* right associative (does not work, so zero hits) */
320 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));
321 /* left associative (works fine) */
322 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));
324 /* exl=0 distance=1 order=1 relation=3 (=), 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 3 k 2 a @prox 0 1 1 3 k 2 b c", 0));
327 /* left associative (works fine) */
328 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));
330 /* Non-indexed numeric use, but specified in bib1.att (bug #1142) */
331 YAZ_CHECK(tl_query_x(zh, "@attr 1=1000 x", 0, 114));
332 YAZ_CHECK(tl_query_x(zh, "@attr 1=1000 @attr 14=0 x", 0, 114));
333 YAZ_CHECK(tl_query_x(zh, "@attr 1=1000 @attr 14=1 x", 0, 0));
334 /* Non-indexed numeric use and unspecified in bib1.att */
335 YAZ_CHECK(tl_query_x(zh, "@attr 1=999 x", 0, 114));
336 YAZ_CHECK(tl_query_x(zh, "@attr 1=999 @attr 14=1 x", 0, 114));
337 /* Non-indexed string use attribute */
338 YAZ_CHECK(tl_query_x(zh, "@attr 1=gyf x", 0, 114));
339 YAZ_CHECK(tl_query_x(zh, "@attr 1=gyf @attr 14=0 x", 0, 114));
340 YAZ_CHECK(tl_query_x(zh, "@attr 1=gyf @attr 14=1 x", 0, 0));
342 /* provoke unsupported use attribute */
343 YAZ_CHECK(tl_query_x(zh, "@attr 1=999 @attr 4=1 x", 0, 114));
344 YAZ_CHECK(tl_query_x(zh, "@attr 1=999 @attr 4=6 x", 0, 114));
345 YAZ_CHECK(tl_query_x(zh, "@attr 1=999 @attr 4=105 x", 0, 114));
346 YAZ_CHECK(tl_query_x(zh, "@attr 1=999 @attr 4=109 123", 0, 114));
347 YAZ_CHECK(tl_query_x(zh, "@attrset 1.2.840.10003.3.1 @attr 1=999 x",
349 /* provoke unsupported attribute set */
350 YAZ_CHECK(tl_query_x(zh, "@attrset 1.2.8 @attr 1=999 @attr 4=1 x", 0, 121));
351 YAZ_CHECK(tl_query_x(zh, "@attrset 1.2.8 @attr 1=999 @attr 4=6 x", 0,
353 YAZ_CHECK(tl_query_x(zh, "@attrset 1.2.8 @attr 1=999 @attr 4=105 x", 0,
355 YAZ_CHECK(tl_query_x(zh, "@attrset 1.2.8 @attr 1=999 @attr 4=109 123",
358 /* provoke unsupported relation */
359 YAZ_CHECK(tl_query_x(zh, "@attr 1=4 @attr 2=6 x", 0, 117));
360 YAZ_CHECK(tl_query_x(zh, "@attr 1=1016 @attr 2=6 @attr 4=109 x", 0, 114));
362 /* position , phrase searches */
363 YAZ_CHECK(tl_query(zh, "@attr 3=1 title", 0));
364 YAZ_CHECK(tl_query(zh, "@attr 3=1 my", 3));
366 YAZ_CHECK(tl_query(zh, "@attr 3=1 {my title}", 2));
367 YAZ_CHECK(tl_query(zh, "@attr 4=1 @attr 3=1 {my title}", 2));
369 YAZ_CHECK(tl_query(zh, "@attr 3=1 {title my}", 0));
370 YAZ_CHECK(tl_query(zh, "@attr 4=1 @attr 3=1 {title my}", 0));
372 YAZ_CHECK(tl_query(zh, "@attr 4=1 @attr 3=1 {title my}", 0));
374 /* position , or-list */
375 YAZ_CHECK(tl_query(zh, "@attr 4=105 @attr 3=1 {title my}", 3));
376 YAZ_CHECK(tl_query(zh, "@attr 4=105 @attr 3=1 {title x}", 0));
378 /* position, and-list */
379 YAZ_CHECK(tl_query(zh, "@attr 4=6 @attr 3=1 {title my}", 0));
380 YAZ_CHECK(tl_query(zh, "@attr 4=6 @attr 3=1 {title x}", 0));
381 YAZ_CHECK(tl_query(zh, "@attr 4=6 @attr 3=1 my", 3));
384 /* 1=2038: West-Bounding-Coordinate 2039: East: 2040: North: 2041 South*/
385 /* 4=109: numeric string */
386 /* 2=3: equal 2=1: less, 2=4: greater or equal 2=5 greater */
388 /* N>=25, search attributes work */
389 YAZ_CHECK(tl_query(zh, "@attr 2=4 @attr gils 1=2040 @attr 4=109 25", 2));
391 /* N>49, search attributes work */
392 YAZ_CHECK(tl_query(zh, "@attr 2=5 @attr gils 1=2040 @attr 4=109 49", 0));
394 /* N>=49, search attributes work */
395 YAZ_CHECK(tl_query(zh, "@attr 2=4 @attr gils 1=2040 @attr 4=109 49", 2));
397 /* N>48, search attributes work */
398 YAZ_CHECK(tl_query(zh, "@attr 2=5 @attr gils 1=2040 @attr 4=109 48", 2));
400 /* N<48, search attributes work */
401 YAZ_CHECK(tl_query(zh, "@attr 2=1 @attr gils 1=2040 @attr 4=109 48", 1));
403 /* N<=48, search attributes work */
404 YAZ_CHECK(tl_query(zh, "@attr 2=2 @attr gils 1=2040 @attr 4=109 48", 1));
406 /* N=41, get rec1 only */
407 YAZ_CHECK(tl_query(zh, "@attr 2=3 @attr gils 1=2040 @attr 4=109 41", 1));
409 /* N=49, get both records */
410 YAZ_CHECK(tl_query(zh, "@attr 2=3 @attr gils 1=2040 @attr 4=109 49", 2));
412 /* W=-120 get both records */
413 YAZ_CHECK(tl_query(zh, "@attr 2=3 @attr gils 1=2038 @attr 4=109 -120", 2));
415 /* W<-122 get only rec1 */
416 YAZ_CHECK(tl_query(zh, "@attr 2=1 @attr gils 1=2038 @attr 4=109 '-120' ", 1));
418 /* N=41 and N=49 get only rec2 */
419 YAZ_CHECK(tl_query(zh, "@attr 2=3 @attr gils 1=2040 @attr 4=109 \"41 49\" ", 1));
423 YAZ_CHECK(tl_query(zh, "@attr 1=30 @attr 4=5 @attr 2=3 {2107-09-19 00:00:00}", 1));
425 YAZ_CHECK(tl_query(zh, "@attr 1=30 @attr 4=5 @attr 2=1 {2107-09-19 00:00:00}", 0));
427 YAZ_CHECK(tl_query(zh, "@attr 1=30 @attr 4=5 @attr 2=2 {2107-09-19 00:00:00}", 1));
429 YAZ_CHECK(tl_query(zh, "@attr 1=30 @attr 4=5 @attr 2=4 {2107-09-19 00:00:00}", 1));
431 YAZ_CHECK(tl_query(zh, "@attr 1=30 @attr 4=5 @attr 2=5 {2107-09-19 00:00:00}", 0));
434 YAZ_CHECK(tl_close_down(zh, zs));
442 * c-file-style: "Stroustrup"
443 * indent-tabs-mode: nil
445 * vim: shiftwidth=4 tabstop=8 expandtab