mhs-xapian 1.0.18a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: */