mhs-xapian 1.0.18a

Sign up to get free protection for your applications and to get access to all the features.
Files changed (328) hide show
  1. data/.gitignore +3 -0
  2. data/AUTHORS +1 -0
  3. data/COPYING +340 -0
  4. data/ChangeLog +5876 -0
  5. data/HACKING +101 -0
  6. data/INSTALL +293 -0
  7. data/Makefile +722 -0
  8. data/Makefile.am +26 -0
  9. data/Makefile.in +722 -0
  10. data/NEWS +2110 -0
  11. data/README +59 -0
  12. data/Rakefile +51 -0
  13. data/TODO +47 -0
  14. data/aclocal.m4 +7675 -0
  15. data/config.guess +1501 -0
  16. data/config.h +56 -0
  17. data/config.h.in +55 -0
  18. data/config.status +1298 -0
  19. data/config.sub +1705 -0
  20. data/configure +18536 -0
  21. data/configure.ac +944 -0
  22. data/csharp/.deps/xapian_wrap.Plo +1 -0
  23. data/csharp/AssemblyInfo.cs +40 -0
  24. data/csharp/AssemblyInfo.cs.in +40 -0
  25. data/csharp/Auto.cs +46 -0
  26. data/csharp/BM25Weight.cs +107 -0
  27. data/csharp/BoolWeight.cs +103 -0
  28. data/csharp/Database.cs +275 -0
  29. data/csharp/DateValueRangeProcessor.cs +61 -0
  30. data/csharp/Document.cs +177 -0
  31. data/csharp/ESet.cs +94 -0
  32. data/csharp/ESetIterator.cs +117 -0
  33. data/csharp/Enquire.cs +274 -0
  34. data/csharp/ExpandDecider.cs +76 -0
  35. data/csharp/Flint.cs +58 -0
  36. data/csharp/InMemory.cs +46 -0
  37. data/csharp/MSet.cs +193 -0
  38. data/csharp/MSetIterator.cs +141 -0
  39. data/csharp/Makefile +868 -0
  40. data/csharp/Makefile.am +106 -0
  41. data/csharp/Makefile.in +868 -0
  42. data/csharp/MatchDecider.cs +76 -0
  43. data/csharp/MultiValueSorter.cs +63 -0
  44. data/csharp/NumberValueRangeProcessor.cs +61 -0
  45. data/csharp/PositionIterator.cs +101 -0
  46. data/csharp/PostingIterator.cs +125 -0
  47. data/csharp/Quartz.cs +58 -0
  48. data/csharp/Query.cs +150 -0
  49. data/csharp/QueryParser.cs +174 -0
  50. data/csharp/RSet.cs +102 -0
  51. data/csharp/Remote.cs +100 -0
  52. data/csharp/SWIGTYPE_p_std__string.cs +30 -0
  53. data/csharp/SWIGTYPE_p_std__vectorTXapian__Query_t.cs +30 -0
  54. data/csharp/SWIGTYPE_p_std__vectorTstd__string_t.cs +30 -0
  55. data/csharp/SimpleStopper.cs +64 -0
  56. data/csharp/SmokeTest.cs +178 -0
  57. data/csharp/Sorter.cs +76 -0
  58. data/csharp/Stem.cs +66 -0
  59. data/csharp/Stopper.cs +91 -0
  60. data/csharp/StringValueRangeProcessor.cs +53 -0
  61. data/csharp/TermGenerator.cs +152 -0
  62. data/csharp/TermIterator.cs +125 -0
  63. data/csharp/TradWeight.cs +107 -0
  64. data/csharp/ValueIterator.cs +102 -0
  65. data/csharp/ValueRangeProcessor.cs +76 -0
  66. data/csharp/Version.cs +60 -0
  67. data/csharp/Weight.cs +93 -0
  68. data/csharp/WritableDatabase.cs +153 -0
  69. data/csharp/Xapian.cs +65 -0
  70. data/csharp/XapianPINVOKE.cs +1527 -0
  71. data/csharp/docs/Makefile +450 -0
  72. data/csharp/docs/Makefile.am +16 -0
  73. data/csharp/docs/Makefile.in +450 -0
  74. data/csharp/docs/examples/SimpleExpand.cs +109 -0
  75. data/csharp/docs/examples/SimpleIndex.cs +71 -0
  76. data/csharp/docs/examples/SimpleSearch.cs +78 -0
  77. data/csharp/docs/index.html +211 -0
  78. data/csharp/util.i +233 -0
  79. data/csharp/xapian_wrap.cc +10338 -0
  80. data/csharp/xapian_wrap.h +93 -0
  81. data/depcomp +632 -0
  82. data/extconf.rb +20 -0
  83. data/generic/except.i +80 -0
  84. data/generic/generic.mk +48 -0
  85. data/install-sh +520 -0
  86. data/java-swig/.deps/xapian_wrap.Plo +1 -0
  87. data/java-swig/Auto.java +35 -0
  88. data/java-swig/BM25Weight.java +81 -0
  89. data/java-swig/BoolWeight.java +77 -0
  90. data/java-swig/Database.java +195 -0
  91. data/java-swig/DateValueRangeProcessor.java +51 -0
  92. data/java-swig/Document.java +135 -0
  93. data/java-swig/ESet.java +71 -0
  94. data/java-swig/ESetIterator.java +71 -0
  95. data/java-swig/Enquire.java +246 -0
  96. data/java-swig/ExpandDecider.java +59 -0
  97. data/java-swig/Flint.java +43 -0
  98. data/java-swig/InMemory.java +35 -0
  99. data/java-swig/MSet.java +143 -0
  100. data/java-swig/MSetIterator.java +87 -0
  101. data/java-swig/Makefile +781 -0
  102. data/java-swig/Makefile.am +132 -0
  103. data/java-swig/Makefile.in +781 -0
  104. data/java-swig/MatchDecider.java +59 -0
  105. data/java-swig/MultiValueSorter.java +51 -0
  106. data/java-swig/NumberValueRangeProcessor.java +51 -0
  107. data/java-swig/PositionIterator.java +63 -0
  108. data/java-swig/PostingIterator.java +83 -0
  109. data/java-swig/Quartz.java +43 -0
  110. data/java-swig/Query.java +189 -0
  111. data/java-swig/QueryParser.java +214 -0
  112. data/java-swig/RSet.java +79 -0
  113. data/java-swig/Remote.java +71 -0
  114. data/java-swig/SWIGTYPE_p_std__string.java +25 -0
  115. data/java-swig/SimpleStopper.java +51 -0
  116. data/java-swig/SmokeTest.java +161 -0
  117. data/java-swig/Sorter.java +59 -0
  118. data/java-swig/Stem.java +51 -0
  119. data/java-swig/Stopper.java +63 -0
  120. data/java-swig/StringValueRangeProcessor.java +43 -0
  121. data/java-swig/TermGenerator.java +158 -0
  122. data/java-swig/TermIterator.java +83 -0
  123. data/java-swig/TradWeight.java +81 -0
  124. data/java-swig/ValueIterator.java +67 -0
  125. data/java-swig/ValueRangeProcessor.java +59 -0
  126. data/java-swig/Version.java +47 -0
  127. data/java-swig/Weight.java +68 -0
  128. data/java-swig/WritableDatabase.java +123 -0
  129. data/java-swig/Xapian.java +39 -0
  130. data/java-swig/XapianConstants.java +15 -0
  131. data/java-swig/XapianJNI.java +508 -0
  132. data/java-swig/run-java-test +6 -0
  133. data/java-swig/xapian_wrap.cc +12594 -0
  134. data/java-swig/xapian_wrap.h +91 -0
  135. data/java/Makefile +660 -0
  136. data/java/Makefile.am +35 -0
  137. data/java/Makefile.in +660 -0
  138. data/java/README +76 -0
  139. data/java/SmokeTest.java +148 -0
  140. data/java/native/.deps/Database.Plo +1 -0
  141. data/java/native/.deps/Document.Plo +1 -0
  142. data/java/native/.deps/ESet.Plo +1 -0
  143. data/java/native/.deps/ESetIterator.Plo +1 -0
  144. data/java/native/.deps/Enquire.Plo +1 -0
  145. data/java/native/.deps/MSet.Plo +1 -0
  146. data/java/native/.deps/MSetIterator.Plo +1 -0
  147. data/java/native/.deps/PositionIterator.Plo +1 -0
  148. data/java/native/.deps/Query.Plo +1 -0
  149. data/java/native/.deps/RSet.Plo +1 -0
  150. data/java/native/.deps/Stem.Plo +1 -0
  151. data/java/native/.deps/TermIterator.Plo +1 -0
  152. data/java/native/.deps/WritableDatabase.Plo +1 -0
  153. data/java/native/.deps/org_xapian_XapianJNI.Plo +1 -0
  154. data/java/native/.deps/utils.Plo +1 -0
  155. data/java/native/Database.cc +222 -0
  156. data/java/native/Document.cc +173 -0
  157. data/java/native/ESet.cc +79 -0
  158. data/java/native/ESetIterator.cc +82 -0
  159. data/java/native/Enquire.cc +271 -0
  160. data/java/native/MSet.cc +169 -0
  161. data/java/native/MSetIterator.cc +107 -0
  162. data/java/native/Makefile +594 -0
  163. data/java/native/Makefile.am +51 -0
  164. data/java/native/Makefile.in +594 -0
  165. data/java/native/PositionIterator.cc +64 -0
  166. data/java/native/Query.cc +180 -0
  167. data/java/native/RSet.cc +98 -0
  168. data/java/native/Stem.cc +75 -0
  169. data/java/native/TermIterator.cc +107 -0
  170. data/java/native/WritableDatabase.cc +118 -0
  171. data/java/native/XapianObjectHolder.h +115 -0
  172. data/java/native/org_xapian_XapianJNI.cc +78 -0
  173. data/java/native/org_xapian_XapianJNI.h +1369 -0
  174. data/java/native/utils.cc +51 -0
  175. data/java/native/xapian_jni.h +116 -0
  176. data/java/org/xapian/Database.java +148 -0
  177. data/java/org/xapian/Document.java +135 -0
  178. data/java/org/xapian/ESet.java +66 -0
  179. data/java/org/xapian/ESetIterator.java +97 -0
  180. data/java/org/xapian/Enquire.java +136 -0
  181. data/java/org/xapian/ExpandDecider.java +30 -0
  182. data/java/org/xapian/MSet.java +104 -0
  183. data/java/org/xapian/MSetIterator.java +132 -0
  184. data/java/org/xapian/Makefile +580 -0
  185. data/java/org/xapian/Makefile.am +38 -0
  186. data/java/org/xapian/Makefile.in +580 -0
  187. data/java/org/xapian/MatchDecider.java +30 -0
  188. data/java/org/xapian/PositionIterator.java +89 -0
  189. data/java/org/xapian/Query.java +190 -0
  190. data/java/org/xapian/RSet.java +89 -0
  191. data/java/org/xapian/Stem.java +80 -0
  192. data/java/org/xapian/TermIterator.java +142 -0
  193. data/java/org/xapian/WritableDatabase.java +92 -0
  194. data/java/org/xapian/Xapian.java +114 -0
  195. data/java/org/xapian/XapianJNI.java +444 -0
  196. data/java/org/xapian/errors/AssertionError.java +40 -0
  197. data/java/org/xapian/errors/DatabaseCorruptError.java +40 -0
  198. data/java/org/xapian/errors/DatabaseError.java +40 -0
  199. data/java/org/xapian/errors/DatabaseLockError.java +40 -0
  200. data/java/org/xapian/errors/DatabaseModifiedError.java +40 -0
  201. data/java/org/xapian/errors/DatabaseOpeningError.java +40 -0
  202. data/java/org/xapian/errors/DocNotFoundError.java +40 -0
  203. data/java/org/xapian/errors/FeatureUnavailableError.java +40 -0
  204. data/java/org/xapian/errors/InternalError.java +40 -0
  205. data/java/org/xapian/errors/InvalidArgumentError.java +40 -0
  206. data/java/org/xapian/errors/InvalidOperationError.java +40 -0
  207. data/java/org/xapian/errors/LogicError.java +40 -0
  208. data/java/org/xapian/errors/Makefile +416 -0
  209. data/java/org/xapian/errors/Makefile.am +32 -0
  210. data/java/org/xapian/errors/Makefile.in +416 -0
  211. data/java/org/xapian/errors/NetworkError.java +40 -0
  212. data/java/org/xapian/errors/NetworkTimeoutError.java +40 -0
  213. data/java/org/xapian/errors/RangeError.java +40 -0
  214. data/java/org/xapian/errors/RuntimeError.java +40 -0
  215. data/java/org/xapian/errors/UnimplementedError.java +40 -0
  216. data/java/org/xapian/errors/XapianError.java +40 -0
  217. data/java/org/xapian/errors/XapianRuntimeError.java +49 -0
  218. data/java/org/xapian/examples/Makefile +391 -0
  219. data/java/org/xapian/examples/Makefile.am +8 -0
  220. data/java/org/xapian/examples/Makefile.in +391 -0
  221. data/java/org/xapian/examples/SimpleIndex.java +68 -0
  222. data/java/org/xapian/examples/SimpleSearch.java +71 -0
  223. data/java/run-java-test +6 -0
  224. data/libtool +7618 -0
  225. data/ltmain.sh +6956 -0
  226. data/mhs-xapian.gemspec +368 -0
  227. data/missing +378 -0
  228. data/php/.deps/xapian_wrap.Plo +1 -0
  229. data/php/Makefile +871 -0
  230. data/php/Makefile.am +82 -0
  231. data/php/Makefile.in +871 -0
  232. data/php/docs/Makefile +453 -0
  233. data/php/docs/Makefile.am +19 -0
  234. data/php/docs/Makefile.in +453 -0
  235. data/php/docs/examples/simpleexpand.php4 +108 -0
  236. data/php/docs/examples/simpleexpand.php5 +104 -0
  237. data/php/docs/examples/simpleindex.php4 +76 -0
  238. data/php/docs/examples/simpleindex.php5 +73 -0
  239. data/php/docs/examples/simplesearch.php4 +75 -0
  240. data/php/docs/examples/simplesearch.php5 +72 -0
  241. data/php/docs/index.html +313 -0
  242. data/php/except.i +98 -0
  243. data/php/php4/php_xapian.h +323 -0
  244. data/php/php4/xapian.php +32 -0
  245. data/php/php4/xapian_wrap.cc +27656 -0
  246. data/php/php5/php_xapian.h +319 -0
  247. data/php/php5/xapian.php +1566 -0
  248. data/php/php5/xapian_wrap.cc +24330 -0
  249. data/php/smoketest.php +246 -0
  250. data/php/smoketest4.php +84 -0
  251. data/php/smoketest5.php +79 -0
  252. data/php/util.i +187 -0
  253. data/python/.deps/xapian_wrap.Plo +1 -0
  254. data/python/Makefile +891 -0
  255. data/python/Makefile.am +105 -0
  256. data/python/Makefile.in +891 -0
  257. data/python/doccomments.i +5134 -0
  258. data/python/docs/Makefile +448 -0
  259. data/python/docs/Makefile.am +14 -0
  260. data/python/docs/Makefile.in +448 -0
  261. data/python/docs/examples/simpleexpand.py +98 -0
  262. data/python/docs/examples/simpleindex.py +65 -0
  263. data/python/docs/examples/simplematchdecider.py +78 -0
  264. data/python/docs/examples/simplesearch.py +65 -0
  265. data/python/docs/index.html +420 -0
  266. data/python/except.i +290 -0
  267. data/python/extra.i +1048 -0
  268. data/python/extracomments.i +28 -0
  269. data/python/generate-python-exceptions +189 -0
  270. data/python/generate-python-exceptions.in +189 -0
  271. data/python/modern/xapian.py +5662 -0
  272. data/python/modern/xapian_wrap.cc +35170 -0
  273. data/python/modern/xapian_wrap.h +244 -0
  274. data/python/pythontest.py +1110 -0
  275. data/python/smoketest.py +328 -0
  276. data/python/testsuite.py +382 -0
  277. data/python/util.i +517 -0
  278. data/ruby/.deps/xapian_wrap.Plo +494 -0
  279. data/ruby/.libs/_xapian.bundle +0 -0
  280. data/ruby/.libs/_xapian.bundle.dSYM/Contents/Info.plist +25 -0
  281. data/ruby/.libs/_xapian.bundle.dSYM/Contents/Resources/DWARF/_xapian.bundle +0 -0
  282. data/ruby/.libs/_xapian.la +35 -0
  283. data/ruby/.libs/_xapian.lai +35 -0
  284. data/ruby/Makefile +854 -0
  285. data/ruby/Makefile.am +62 -0
  286. data/ruby/Makefile.in +854 -0
  287. data/ruby/_xapian.la +35 -0
  288. data/ruby/docs/Makefile +487 -0
  289. data/ruby/docs/Makefile.am +50 -0
  290. data/ruby/docs/Makefile.in +487 -0
  291. data/ruby/docs/examples/simpleexpand.rb +98 -0
  292. data/ruby/docs/examples/simpleindex.rb +60 -0
  293. data/ruby/docs/examples/simplematchdecider.rb +74 -0
  294. data/ruby/docs/examples/simplesearch.rb +63 -0
  295. data/ruby/docs/index.html +197 -0
  296. data/ruby/smoketest.rb +211 -0
  297. data/ruby/util.i +232 -0
  298. data/ruby/xapian.rb +280 -0
  299. data/ruby/xapian_wrap.cc +25837 -0
  300. data/ruby/xapian_wrap.h +65 -0
  301. data/ruby/xapian_wrap.lo +12 -0
  302. data/skiptest +2 -0
  303. data/stamp-h1 +1 -0
  304. data/tcl8/.deps/xapian_wrap.Plo +1 -0
  305. data/tcl8/Makefile +835 -0
  306. data/tcl8/Makefile.am +49 -0
  307. data/tcl8/Makefile.in +835 -0
  308. data/tcl8/docs/Makefile +448 -0
  309. data/tcl8/docs/Makefile.am +14 -0
  310. data/tcl8/docs/Makefile.in +448 -0
  311. data/tcl8/docs/examples/simpleexpand.tcl +104 -0
  312. data/tcl8/docs/examples/simpleindex.tcl +68 -0
  313. data/tcl8/docs/examples/simplesearch.tcl +66 -0
  314. data/tcl8/docs/index.html +208 -0
  315. data/tcl8/except.i +48 -0
  316. data/tcl8/pkgIndex.tcl +1 -0
  317. data/tcl8/pkgIndex.tcl.in +1 -0
  318. data/tcl8/run-tcl-test +15 -0
  319. data/tcl8/runtest.tcl +29 -0
  320. data/tcl8/smoketest.tcl +155 -0
  321. data/tcl8/util.i +76 -0
  322. data/tcl8/xapian_wrap.cc +20900 -0
  323. data/xapian-bindings.spec +206 -0
  324. data/xapian-bindings.spec.in +206 -0
  325. data/xapian-version.h +1 -0
  326. data/xapian-version.h.in +1 -0
  327. data/xapian.i +939 -0
  328. metadata +395 -0
data/php/smoketest.php ADDED
@@ -0,0 +1,246 @@
1
+ <?php
2
+ // Run this PHP script using 'make check' in the build tree.
3
+
4
+ /* Simple test to ensure that we can load the xapian module and exercise basic
5
+ * functionality successfully.
6
+ *
7
+ * Copyright (C) 2004,2005,2006,2007 Olly Betts
8
+ *
9
+ * This program is free software; you can redistribute it and/or
10
+ * modify it under the terms of the GNU General Public License as
11
+ * published by the Free Software Foundation; either version 2 of the
12
+ * License, or (at your option) any later version.
13
+ *
14
+ * This program is distributed in the hope that it will be useful,
15
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
+ * GNU General Public License for more details.
18
+ *
19
+ * You should have received a copy of the GNU General Public License
20
+ * along with this program; if not, write to the Free Software
21
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
22
+ * USA
23
+ */
24
+
25
+ $php_version = substr(PHP_VERSION, 0, 1);
26
+
27
+ include "php$php_version/xapian.php";
28
+
29
+ # Include PHP version specific code.
30
+ include "smoketest$php_version.php";
31
+
32
+ $stem = new XapianStem("english");
33
+ if ($stem->get_description() != "Xapian::Stem(english)") {
34
+ print "Unexpected \$stem->get_description()\n";
35
+ exit(1);
36
+ }
37
+
38
+ $doc = new XapianDocument();
39
+ $doc->set_data("a\x00b");
40
+ if ($doc->get_data() === "a") {
41
+ print "get_data+set_data truncates at a zero byte\n";
42
+ exit(1);
43
+ }
44
+ if ($doc->get_data() !== "a\x00b") {
45
+ print "get_data+set_data doesn't transparently handle a zero byte\n";
46
+ exit(1);
47
+ }
48
+ $doc->set_data("is there anybody out there?");
49
+ $doc->add_term("XYzzy");
50
+ $doc->add_posting($stem->apply("is"), 1);
51
+ $doc->add_posting($stem->apply("there"), 2);
52
+ $doc->add_posting($stem->apply("anybody"), 3);
53
+ $doc->add_posting($stem->apply("out"), 4);
54
+ $doc->add_posting($stem->apply("there"), 5);
55
+
56
+ // Check virtual function dispatch.
57
+ if (substr($db->get_description(), 0, 17) !== "WritableDatabase(") {
58
+ print "Unexpected \$db->get_description()\n";
59
+ exit(1);
60
+ }
61
+ $db->add_document($doc);
62
+ if ($db->get_doccount() != 1) {
63
+ print "Unexpected \$db->get_doccount()\n";
64
+ exit(1);
65
+ }
66
+
67
+ $terms = array("smoke", "test", "terms");
68
+ $query = new XapianQuery($op_or, $terms);
69
+ if ($query->get_description() != "Xapian::Query((smoke OR test OR terms))") {
70
+ print "Unexpected \$query->get_description()\n";
71
+ exit(1);
72
+ }
73
+ $query1 = new XapianQuery($op_phrase, array("smoke", "test", "tuple"));
74
+ if ($query1->get_description() != "Xapian::Query((smoke PHRASE 3 test PHRASE 3 tuple))") {
75
+ print "Unexpected \$query1->get_description()\n";
76
+ exit(1);
77
+ }
78
+ $query2 = new XapianQuery($op_xor, array(new XapianQuery("smoke"), $query1, "string"));
79
+ if ($query2->get_description() != "Xapian::Query((smoke XOR (smoke PHRASE 3 test PHRASE 3 tuple) XOR string))") {
80
+ print "Unexpected \$query2->get_description()\n";
81
+ exit(1);
82
+ }
83
+ $subqs = array("a", "b");
84
+ $query3 = new XapianQuery($op_or, $subqs);
85
+ if ($query3->get_description() != "Xapian::Query((a OR b))") {
86
+ print "Unexpected \$query3->get_description()\n";
87
+ exit(1);
88
+ }
89
+ $enq = new XapianEnquire($db);
90
+ $enq->set_query(new XapianQuery($op_or, "there", "is"));
91
+ $mset = $enq->get_mset(0, 10);
92
+ if ($mset->size() != 1) {
93
+ print "Unexpected \$mset->size()\n";
94
+ exit(1);
95
+ }
96
+ $terms = join(" ", $enq->get_matching_terms($mset->get_hit(0)));
97
+ if ($terms != "is there") {
98
+ print "Unexpected matching terms: $terms\n";
99
+ exit(1);
100
+ }
101
+
102
+ if ($op_elite_set != 10) {
103
+ print "OP_ELITE_SET is $op_elite_set not 10\n";
104
+ exit(1);
105
+ }
106
+
107
+ # Regression test - overload resolution involving boolean types failed.
108
+ $enq->set_sort_by_value(1, TRUE);
109
+
110
+ # Regression test - fixed in 0.9.10.1.
111
+ $oqparser = new XapianQueryParser();
112
+ $oquery = $oqparser->parse_query("I like tea");
113
+
114
+ # Regression test for bug#192 - fixed in 1.0.3.
115
+ $enq->set_cutoff(100);
116
+
117
+ # Check DateValueRangeProcessor works.
118
+ $qp = new XapianQueryParser();
119
+ $vrpdate = new XapianDateValueRangeProcessor(1, 1, 1960);
120
+ $qp->add_valuerangeprocessor($vrpdate);
121
+ $query = $qp->parse_query('12/03/99..12/04/01');
122
+ if ($query->get_description() !== 'Xapian::Query(VALUE_RANGE 1 19991203 20011204)') {
123
+ print "XapianDateValueRangeProcessor didn't work - result was ".$query->get_description()."\n";
124
+ exit(1);
125
+ }
126
+
127
+ # Test setting and getting metadata
128
+ if ($db->get_metadata('Foo') !== '') {
129
+ print "Unexpected value for metadata associated with 'Foo' (expected ''): '".$db->get_metadata('Foo')."'\n";
130
+ exit(1);
131
+ }
132
+ $db->set_metadata('Foo', 'Foo');
133
+ if ($db->get_metadata('Foo') !== 'Foo') {
134
+ print "Unexpected value for metadata associated with 'Foo' (expected 'Foo'): '".$db->get_metadata('Foo')."'\n";
135
+ exit(1);
136
+ }
137
+
138
+ # Test OP_SCALE_WEIGHT and corresponding constructor
139
+ $query4 = new XapianQuery($op_scale_weight, new XapianQuery('foo'), 5.0);
140
+ if ($query4->get_description() != "Xapian::Query(5 * foo)") {
141
+ print "Unexpected \$query4->get_description()\n";
142
+ exit(1);
143
+ }
144
+
145
+ # Test MultiValueSorter.
146
+
147
+ $doc = new XapianDocument();
148
+ $doc->add_term("foo");
149
+ $doc->add_value(0, "ABB");
150
+ $db2->add_document($doc);
151
+ $doc->add_value(0, "ABC");
152
+ $db2->add_document($doc);
153
+ $doc->add_value(0, "ABC\0");
154
+ $db2->add_document($doc);
155
+ $doc->add_value(0, "ABCD");
156
+ $db2->add_document($doc);
157
+ $doc->add_value(0, "ABC\xff");
158
+ $db2->add_document($doc);
159
+
160
+ $enquire = new XapianEnquire($db2);
161
+ $enquire->set_query(new XapianQuery("foo"));
162
+
163
+ {
164
+ $sorter = new XapianMultiValueSorter();
165
+ $sorter->add(0);
166
+ $enquire->set_sort_by_key($sorter);
167
+ $mset = $enquire->get_mset(0, 10);
168
+ mset_expect_order($mset, array(5, 4, 3, 2, 1));
169
+ }
170
+
171
+ {
172
+ $sorter = new XapianMultiValueSorter();
173
+ $sorter->add(0, false);
174
+ $enquire->set_sort_by_key($sorter);
175
+ $mset = $enquire->get_mset(0, 10);
176
+ mset_expect_order($mset, array(1, 2, 3, 4, 5));
177
+ }
178
+
179
+ {
180
+ $sorter = new XapianMultiValueSorter();
181
+ $sorter->add(0);
182
+ $sorter->add(1);
183
+ $enquire->set_sort_by_key($sorter);
184
+ $mset = $enquire->get_mset(0, 10);
185
+ mset_expect_order($mset, array(5, 4, 3, 2, 1));
186
+ }
187
+
188
+ {
189
+ $sorter = new XapianMultiValueSorter();
190
+ $sorter->add(0, false);
191
+ $sorter->add(1);
192
+ $enquire->set_sort_by_key($sorter);
193
+ $mset = $enquire->get_mset(0, 10);
194
+ mset_expect_order($mset, array(1, 2, 3, 4, 5));
195
+ }
196
+
197
+ {
198
+ $sorter = new XapianMultiValueSorter();
199
+ $sorter->add(0);
200
+ $sorter->add(1, false);
201
+ $enquire->set_sort_by_key($sorter);
202
+ $mset = $enquire->get_mset(0, 10);
203
+ mset_expect_order($mset, array(5, 4, 3, 2, 1));
204
+ }
205
+
206
+ {
207
+ $sorter = new XapianMultiValueSorter();
208
+ $sorter->add(0, false);
209
+ $sorter->add(1, false);
210
+ $enquire->set_sort_by_key($sorter);
211
+ $mset = $enquire->get_mset(0, 10);
212
+ mset_expect_order($mset, array(1, 2, 3, 4, 5));
213
+ }
214
+
215
+ function mset_expect_order($mset, $a) {
216
+ if ($mset->size() != sizeof($a)) {
217
+ print "MSet has ".$mset->size()." entries, expected ".sizeof($a)."\n";
218
+ exit(1);
219
+ }
220
+ for ($j = 0; $j < sizeof($a); ++$j) {
221
+ # PHP4 doesn't cope with: $mset->get_hit($j)->get_docid();
222
+ $hit = $mset->get_hit($j);
223
+ if ($hit->get_docid() != $a[$j]) {
224
+ print "Expected MSet[$j] to be $a[$j], got ".$hit->get_docid()."\n";
225
+ exit(1);
226
+ }
227
+ }
228
+ }
229
+
230
+ # Feature tests for Query "term" constructor optional arguments:
231
+ $query_wqf = new XapianQuery('wqf', 3);
232
+ if ($query_wqf->get_description() != 'Xapian::Query(wqf:(wqf=3))') {
233
+ print "Unexpected \$query_wqf->get_description():\n";
234
+ print $query_wqf->get_description() . "\n";
235
+ exit(1);
236
+ }
237
+
238
+
239
+ $query = new XapianQuery($op_value_ge, 0, "100");
240
+ if ($query->get_description() != 'Xapian::Query(VALUE_GE 0 100)') {
241
+ print "Unexpected \$query->get_description():\n";
242
+ print $query->get_description() . "\n";
243
+ exit(1);
244
+ }
245
+
246
+ ?>
@@ -0,0 +1,84 @@
1
+ <?php
2
+ /* PHP4 specific tests.
3
+ *
4
+ * Copyright (C) 2006,2007 Olly Betts
5
+ *
6
+ * This program is free software; you can redistribute it and/or
7
+ * modify it under the terms of the GNU General Public License as
8
+ * published by the Free Software Foundation; either version 2 of the
9
+ * License, or (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License
17
+ * along with this program; if not, write to the Free Software
18
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
19
+ * USA
20
+ */
21
+
22
+ # Test the version number reporting functions give plausible results.
23
+ $v = xapian_major_version().'.'.xapian_minor_version().'.'.xapian_revision();
24
+ $v2 = xapian_version_string();
25
+ if ($v != $v2) {
26
+ print "Unexpected version output ($v != $v2)\n";
27
+ exit(1);
28
+ }
29
+
30
+ $db = inmemory_open();
31
+ $db2 = inmemory_open();
32
+
33
+ function my_errhandler($type, $str) {
34
+ global $last_exception;
35
+ if ($type == E_WARNING) $last_exception = $str;
36
+ }
37
+
38
+ $old_errhandler = set_error_handler("my_errhandler");
39
+ # Check PHP4 handling of Xapian::DocNotFoundError
40
+ $old_error_reporting = error_reporting();
41
+ if ($old_error_reporting & E_WARNING)
42
+ error_reporting($old_error_reporting ^ E_WARNING);
43
+ $doc2 = $db->get_document(2);
44
+ if ($doc2 != null) {
45
+ print "Retrieved non-existent document\n";
46
+ exit(1);
47
+ }
48
+ if ($last_exception !== "DocNotFoundError: Docid 2 not found") {
49
+ print "Exception string not as expected, got: '$last_exception'\n";
50
+ exit(1);
51
+ }
52
+ # Check QueryParser parsing error.
53
+ $qp = new XapianQueryParser;
54
+ $qp->parse_query("test AND");
55
+ if ($last_exception !== "QueryParserError: Syntax: <expression> AND <expression>") {
56
+ print "Exception string not as expected, got: '$last_exception'\n";
57
+ exit(1);
58
+ }
59
+ if ($old_error_reporting & E_WARNING)
60
+ error_reporting($old_error_reporting);
61
+ set_error_handler($old_errhandler);
62
+
63
+ # Regression test for bug#193, fixed in 1.0.3.
64
+ $vrp = new XapianNumberValueRangeProcessor(0, '$', true);
65
+ $a = '$10';
66
+ $b = '20';
67
+ $vrp->apply($a, $b);
68
+ if (xapian_sortable_unserialise($a) != 10) {
69
+ print Xapian::sortable_unserialise($a)." != 10\n";
70
+ exit(1);
71
+ }
72
+ if (xapian_sortable_unserialise($b) != 20) {
73
+ print Xapian::sortable_unserialise($b)." != 20\n";
74
+ exit(1);
75
+ }
76
+
77
+ $op_or = XapianQuery_OP_OR;
78
+ $op_phrase = XapianQuery_OP_PHRASE;
79
+ $op_xor = XapianQuery_OP_XOR;
80
+ $op_elite_set = XapianQuery_OP_ELITE_SET;
81
+ $op_scale_weight = XapianQuery_OP_SCALE_WEIGHT;
82
+ $op_value_ge = XapianQuery_OP_VALUE_GE;
83
+
84
+ ?>
@@ -0,0 +1,79 @@
1
+ <?php
2
+ /* PHP5 specific tests.
3
+ *
4
+ * Copyright (C) 2006,2007 Olly Betts
5
+ *
6
+ * This program is free software; you can redistribute it and/or
7
+ * modify it under the terms of the GNU General Public License as
8
+ * published by the Free Software Foundation; either version 2 of the
9
+ * License, or (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License
17
+ * along with this program; if not, write to the Free Software
18
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
19
+ * USA
20
+ */
21
+
22
+ # Test the version number reporting functions give plausible results.
23
+ $v = Xapian::major_version().'.'.Xapian::minor_version().'.'.Xapian::revision();
24
+ $v2 = Xapian::version_string();
25
+ if ($v != $v2) {
26
+ print "Unexpected version output ($v != $v2)\n";
27
+ exit(1);
28
+ }
29
+
30
+ $db = Xapian::inmemory_open();
31
+ $db2 = Xapian::inmemory_open();
32
+
33
+ # Check PHP5 handling of Xapian::DocNotFoundError
34
+ try {
35
+ $doc2 = $db->get_document(2);
36
+ print "Retrieved non-existent document\n";
37
+ exit(1);
38
+ } catch (Exception $e) {
39
+ if ($e->getMessage() !== "DocNotFoundError: Docid 2 not found") {
40
+ print "DocNotFoundError Exception string not as expected, got: '{$e->getMessage()}'\n";
41
+ exit(1);
42
+ }
43
+ }
44
+
45
+ # Check QueryParser parsing error.
46
+ try {
47
+ $qp = new XapianQueryParser;
48
+ $qp->parse_query("test AND");
49
+ print "Successfully parsed bad query\n";
50
+ exit(1);
51
+ } catch (Exception $e) {
52
+ if ($e->getMessage() !== "QueryParserError: Syntax: <expression> AND <expression>") {
53
+ print "QueryParserError Exception string not as expected, got: '$e->getMessage()'\n";
54
+ exit(1);
55
+ }
56
+ }
57
+
58
+ # Regression test for bug#193, fixed in 1.0.3.
59
+ $vrp = new XapianNumberValueRangeProcessor(0, '$', true);
60
+ $a = '$10';
61
+ $b = '20';
62
+ $vrp->apply($a, $b);
63
+ if (Xapian::sortable_unserialise($a) != 10) {
64
+ print Xapian::sortable_unserialise($a)." != 10\n";
65
+ exit(1);
66
+ }
67
+ if (Xapian::sortable_unserialise($b) != 20) {
68
+ print Xapian::sortable_unserialise($b)." != 20\n";
69
+ exit(1);
70
+ }
71
+
72
+ $op_or = XapianQuery::OP_OR;
73
+ $op_phrase = XapianQuery::OP_PHRASE;
74
+ $op_xor = XapianQuery::OP_XOR;
75
+ $op_elite_set = XapianQuery::OP_ELITE_SET;
76
+ $op_scale_weight = XapianQuery::OP_SCALE_WEIGHT;
77
+ $op_value_ge = XapianQuery::OP_VALUE_GE;
78
+
79
+ ?>
data/php/util.i ADDED
@@ -0,0 +1,187 @@
1
+ %{
2
+ /* php4/util.i: custom PHP typemaps for xapian-bindings
3
+ *
4
+ * Copyright (C) 2004,2005,2006,2007 Olly Betts
5
+ *
6
+ * This program is free software; you can redistribute it and/or
7
+ * modify it under the terms of the GNU General Public License as
8
+ * published by the Free Software Foundation; either version 2 of the
9
+ * License, or (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License
17
+ * along with this program; if not, write to the Free Software
18
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
19
+ * USA
20
+ */
21
+
22
+ /* We need to ensure that this is defined so that the module produced
23
+ * exports get_module() and can be loaded by PHP. */
24
+ #ifndef COMPILE_DL_XAPIAN
25
+ #define COMPILE_DL_XAPIAN 1
26
+ #endif
27
+
28
+ #include "../xapian-version.h"
29
+ %}
30
+
31
+ /* Add a section to the output from phpinfo(). */
32
+ %pragma(php4) phpinfo="
33
+ const char * linked_version = Xapian::xapian_version_string();
34
+ php_info_print_table_start();
35
+ php_info_print_table_row(2, \"Xapian Support\", \"enabled\");
36
+ php_info_print_table_row(2, \"Xapian Compiled Version\",
37
+ XAPIAN_BINDINGS_VERSION);
38
+ php_info_print_table_row(2, \"Xapian Linked Version\", linked_version);
39
+ php_info_print_table_end();
40
+ "
41
+
42
+ %ignore Xapian::xapian_version_string;
43
+ %ignore Xapian::xapian_major_version;
44
+ %ignore Xapian::xapian_minor_version;
45
+ %ignore Xapian::xapian_revision;
46
+
47
+ // No point wrapping this abstract base class until SWIG supports directors
48
+ // for PHP.
49
+ %ignore Xapian::Sorter;
50
+
51
+ #ifdef SWIGPHP4
52
+ %rename("XapianBM25Weight") Xapian::BM25Weight;
53
+ %rename("XapianBoolWeight") Xapian::BoolWeight;
54
+ %rename("XapianDatabase") Xapian::Database;
55
+ %rename("XapianDateValueRangeProcessor") Xapian::DateValueRangeProcessor;
56
+ %rename("XapianDocument") Xapian::Document;
57
+ %rename("XapianEnquire") Xapian::Enquire;
58
+ %rename("XapianESet") Xapian::ESet;
59
+ %rename("XapianESetIterator") Xapian::ESetIterator;
60
+ %rename("XapianMSet") Xapian::MSet;
61
+ %rename("XapianMSetIterator") Xapian::MSetIterator;
62
+ %rename("XapianMultiValueSorter") Xapian::MultiValueSorter;
63
+ %rename("XapianNumberValueRangeProcessor") Xapian::v102::NumberValueRangeProcessor;
64
+ %rename("XapianNumberValueRangeProcessor") Xapian::NumberValueRangeProcessor;
65
+ %rename("XapianPositionIterator") Xapian::PositionIterator;
66
+ %rename("XapianPostingIterator") Xapian::PostingIterator;
67
+ %rename("XapianQuery") Xapian::Query;
68
+ %rename("XapianQueryParser") Xapian::QueryParser;
69
+ %rename("XapianRSet") Xapian::RSet;
70
+ %rename("XapianSimpleStopper") Xapian::SimpleStopper;
71
+ %rename("XapianStem") Xapian::Stem;
72
+ %rename("XapianStopper") Xapian::Stopper;
73
+ %rename("XapianStringValueRangeProcessor") Xapian::StringValueRangeProcessor;
74
+ %rename("XapianTermGenerator") Xapian::TermGenerator;
75
+ %rename("XapianTermIterator") Xapian::TermIterator;
76
+ %rename("XapianTradWeight") Xapian::TradWeight;
77
+ %rename("XapianValueIterator") Xapian::ValueIterator;
78
+ %rename("XapianValueRangeProcessor") Xapian::ValueRangeProcessor;
79
+ %rename("XapianWeight") Xapian::Weight;
80
+ %rename("XapianWritableDatabase") Xapian::WritableDatabase;
81
+
82
+ %rename("xapian_version_string") Xapian::version_string;
83
+ %rename("xapian_major_version") Xapian::major_version;
84
+ %rename("xapian_minor_version") Xapian::minor_version;
85
+ %rename("xapian_revision") Xapian::revision;
86
+ %rename("xapian_sortable_serialise") Xapian::sortable_serialise;
87
+ %rename("xapian_sortable_unserialise") Xapian::sortable_unserialise;
88
+ #else
89
+ %rename("is_empty") empty() const;
90
+ %rename("clone_object") clone() const;
91
+ #endif
92
+
93
+ %typemap(typecheck, precedence=SWIG_TYPECHECK_POINTER) const SWIGTYPE & {
94
+ void *ptr;
95
+ $1 = (SWIG_ConvertPtr(*$input, (void **)&ptr, $1_descriptor, 0) == 0);
96
+ }
97
+
98
+ %typemap(typecheck, precedence=SWIG_TYPECHECK_POINTER) SWIGTYPE {
99
+ void *ptr;
100
+ $1 = (SWIG_ConvertPtr(*$input, (void **)&ptr, $&1_descriptor, 0) == 0);
101
+ }
102
+
103
+ /* STRING has a lower precedence that numbers, but the SWIG PHP check for
104
+ * number (in 1.3.28 at least) includes IS_STRING which means that for a
105
+ * method taking either int or string, the int version will always be used.
106
+ * Simplest workaround is to set the precedence here higher that the numeric
107
+ * precedences - i.e. SWIG_TYPECHECK_VOIDPTR instead of SWIG_TYPECHECK_STRING.
108
+ */
109
+ %typemap(typecheck, precedence=SWIG_TYPECHECK_VOIDPTR) const std::string & {
110
+ $1 = (Z_TYPE_PP($input) == IS_STRING);
111
+ }
112
+
113
+ /* The SWIG overloading doesn't handle this correctly by default. */
114
+ %typemap(typecheck, precedence=SWIG_TYPECHECK_BOOL) bool {
115
+ $1 = (Z_TYPE_PP($input) == IS_BOOL || Z_TYPE_PP($input) == IS_LONG);
116
+ }
117
+
118
+ #define XAPIAN_MIXED_VECTOR_QUERY_INPUT_TYPEMAP
119
+ %typemap(typecheck, precedence=500) const vector<Xapian::Query> & {
120
+ $1 = (Z_TYPE_PP($input) == IS_ARRAY);
121
+ /* FIXME: if we add more array typemaps, we'll need to check the elements
122
+ * of the array here to disambiguate. */
123
+ }
124
+
125
+ %typemap(in) const vector<Xapian::Query> & (vector<Xapian::Query> v) {
126
+ if (Z_TYPE_PP($input) != IS_ARRAY) {
127
+ SWIG_PHP_Error(E_ERROR, "expected array of queries");
128
+ }
129
+ int numitems = zend_hash_num_elements(Z_ARRVAL_PP($input));
130
+ v.reserve(numitems);
131
+ zval **item;
132
+ HashTable *ht = Z_ARRVAL_PP($input);
133
+ HashPosition i;
134
+ zend_hash_internal_pointer_reset_ex(ht, &i);
135
+ while (zend_hash_get_current_data_ex(ht, (void **)&item, &i) == SUCCESS) {
136
+ if ((*item)->type == IS_STRING) {
137
+ int len = Z_STRLEN_PP(item);
138
+ const char *p = Z_STRVAL_PP(item);
139
+ v.push_back(Xapian::Query(string(p, len)));
140
+ } else {
141
+ Xapian::Query *subq = 0;
142
+ if (SWIG_ConvertPtr(*item, (void **)&subq,
143
+ SWIGTYPE_p_Xapian__Query, 0) < 0) {
144
+ subq = 0;
145
+ }
146
+ if (!subq) {
147
+ SWIG_PHP_Error(E_ERROR, "expected string or query object");
148
+ }
149
+ v.push_back(*subq);
150
+ }
151
+ zend_hash_move_forward_ex(ht, &i);
152
+ }
153
+ zend_hash_internal_pointer_end_ex(ht, &i);
154
+ $1 = &v;
155
+ }
156
+
157
+ /* SWIG's default typemap accepts "Null" when an object is passed by
158
+ reference, and the C++ wrapper code then dereferences a NULL pointer
159
+ which causes a SEGV. */
160
+ %typemap(in) SWIGTYPE & {
161
+ if (SWIG_ConvertPtr(*$input, (void**)&$1, $1_descriptor, 0) < 0 || $1 == NULL) {
162
+ SWIG_PHP_Error(E_ERROR, "Type error in argument $argnum of $symname. Expected $1_descriptor");
163
+ }
164
+ }
165
+
166
+ #define XAPIAN_TERMITERATOR_PAIR_OUTPUT_TYPEMAP
167
+ %typemap(out) std::pair<Xapian::TermIterator, Xapian::TermIterator> {
168
+ if (array_init($result) == FAILURE) {
169
+ SWIG_PHP_Error(E_ERROR, "array_init failed");
170
+ }
171
+
172
+ for (Xapian::TermIterator i = $1.first; i != $1.second; ++i) {
173
+ /* We have to cast away const here because the PHP API is rather
174
+ * poorly thought out - really there should be two API methods
175
+ * one of which takes a const char * and copies the string and
176
+ * the other which takes char * and takes ownership of the string.
177
+ *
178
+ * Passing 1 as the last parameter of add_next_index_stringl() tells
179
+ * PHP to copy the string pointed to by p, so it won't be modified.
180
+ */
181
+ const string & term = *i;
182
+ char *p = const_cast<char*>(term.data());
183
+ add_next_index_stringl($result, p, term.length(), 1);
184
+ }
185
+ }
186
+
187
+ /* vim:set syntax=cpp:set noexpandtab: */