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.
- data/.gitignore +3 -0
- data/AUTHORS +1 -0
- data/COPYING +340 -0
- data/ChangeLog +5876 -0
- data/HACKING +101 -0
- data/INSTALL +293 -0
- data/Makefile +722 -0
- data/Makefile.am +26 -0
- data/Makefile.in +722 -0
- data/NEWS +2110 -0
- data/README +59 -0
- data/Rakefile +51 -0
- data/TODO +47 -0
- data/aclocal.m4 +7675 -0
- data/config.guess +1501 -0
- data/config.h +56 -0
- data/config.h.in +55 -0
- data/config.status +1298 -0
- data/config.sub +1705 -0
- data/configure +18536 -0
- data/configure.ac +944 -0
- data/csharp/.deps/xapian_wrap.Plo +1 -0
- data/csharp/AssemblyInfo.cs +40 -0
- data/csharp/AssemblyInfo.cs.in +40 -0
- data/csharp/Auto.cs +46 -0
- data/csharp/BM25Weight.cs +107 -0
- data/csharp/BoolWeight.cs +103 -0
- data/csharp/Database.cs +275 -0
- data/csharp/DateValueRangeProcessor.cs +61 -0
- data/csharp/Document.cs +177 -0
- data/csharp/ESet.cs +94 -0
- data/csharp/ESetIterator.cs +117 -0
- data/csharp/Enquire.cs +274 -0
- data/csharp/ExpandDecider.cs +76 -0
- data/csharp/Flint.cs +58 -0
- data/csharp/InMemory.cs +46 -0
- data/csharp/MSet.cs +193 -0
- data/csharp/MSetIterator.cs +141 -0
- data/csharp/Makefile +868 -0
- data/csharp/Makefile.am +106 -0
- data/csharp/Makefile.in +868 -0
- data/csharp/MatchDecider.cs +76 -0
- data/csharp/MultiValueSorter.cs +63 -0
- data/csharp/NumberValueRangeProcessor.cs +61 -0
- data/csharp/PositionIterator.cs +101 -0
- data/csharp/PostingIterator.cs +125 -0
- data/csharp/Quartz.cs +58 -0
- data/csharp/Query.cs +150 -0
- data/csharp/QueryParser.cs +174 -0
- data/csharp/RSet.cs +102 -0
- data/csharp/Remote.cs +100 -0
- data/csharp/SWIGTYPE_p_std__string.cs +30 -0
- data/csharp/SWIGTYPE_p_std__vectorTXapian__Query_t.cs +30 -0
- data/csharp/SWIGTYPE_p_std__vectorTstd__string_t.cs +30 -0
- data/csharp/SimpleStopper.cs +64 -0
- data/csharp/SmokeTest.cs +178 -0
- data/csharp/Sorter.cs +76 -0
- data/csharp/Stem.cs +66 -0
- data/csharp/Stopper.cs +91 -0
- data/csharp/StringValueRangeProcessor.cs +53 -0
- data/csharp/TermGenerator.cs +152 -0
- data/csharp/TermIterator.cs +125 -0
- data/csharp/TradWeight.cs +107 -0
- data/csharp/ValueIterator.cs +102 -0
- data/csharp/ValueRangeProcessor.cs +76 -0
- data/csharp/Version.cs +60 -0
- data/csharp/Weight.cs +93 -0
- data/csharp/WritableDatabase.cs +153 -0
- data/csharp/Xapian.cs +65 -0
- data/csharp/XapianPINVOKE.cs +1527 -0
- data/csharp/docs/Makefile +450 -0
- data/csharp/docs/Makefile.am +16 -0
- data/csharp/docs/Makefile.in +450 -0
- data/csharp/docs/examples/SimpleExpand.cs +109 -0
- data/csharp/docs/examples/SimpleIndex.cs +71 -0
- data/csharp/docs/examples/SimpleSearch.cs +78 -0
- data/csharp/docs/index.html +211 -0
- data/csharp/util.i +233 -0
- data/csharp/xapian_wrap.cc +10338 -0
- data/csharp/xapian_wrap.h +93 -0
- data/depcomp +632 -0
- data/extconf.rb +20 -0
- data/generic/except.i +80 -0
- data/generic/generic.mk +48 -0
- data/install-sh +520 -0
- data/java-swig/.deps/xapian_wrap.Plo +1 -0
- data/java-swig/Auto.java +35 -0
- data/java-swig/BM25Weight.java +81 -0
- data/java-swig/BoolWeight.java +77 -0
- data/java-swig/Database.java +195 -0
- data/java-swig/DateValueRangeProcessor.java +51 -0
- data/java-swig/Document.java +135 -0
- data/java-swig/ESet.java +71 -0
- data/java-swig/ESetIterator.java +71 -0
- data/java-swig/Enquire.java +246 -0
- data/java-swig/ExpandDecider.java +59 -0
- data/java-swig/Flint.java +43 -0
- data/java-swig/InMemory.java +35 -0
- data/java-swig/MSet.java +143 -0
- data/java-swig/MSetIterator.java +87 -0
- data/java-swig/Makefile +781 -0
- data/java-swig/Makefile.am +132 -0
- data/java-swig/Makefile.in +781 -0
- data/java-swig/MatchDecider.java +59 -0
- data/java-swig/MultiValueSorter.java +51 -0
- data/java-swig/NumberValueRangeProcessor.java +51 -0
- data/java-swig/PositionIterator.java +63 -0
- data/java-swig/PostingIterator.java +83 -0
- data/java-swig/Quartz.java +43 -0
- data/java-swig/Query.java +189 -0
- data/java-swig/QueryParser.java +214 -0
- data/java-swig/RSet.java +79 -0
- data/java-swig/Remote.java +71 -0
- data/java-swig/SWIGTYPE_p_std__string.java +25 -0
- data/java-swig/SimpleStopper.java +51 -0
- data/java-swig/SmokeTest.java +161 -0
- data/java-swig/Sorter.java +59 -0
- data/java-swig/Stem.java +51 -0
- data/java-swig/Stopper.java +63 -0
- data/java-swig/StringValueRangeProcessor.java +43 -0
- data/java-swig/TermGenerator.java +158 -0
- data/java-swig/TermIterator.java +83 -0
- data/java-swig/TradWeight.java +81 -0
- data/java-swig/ValueIterator.java +67 -0
- data/java-swig/ValueRangeProcessor.java +59 -0
- data/java-swig/Version.java +47 -0
- data/java-swig/Weight.java +68 -0
- data/java-swig/WritableDatabase.java +123 -0
- data/java-swig/Xapian.java +39 -0
- data/java-swig/XapianConstants.java +15 -0
- data/java-swig/XapianJNI.java +508 -0
- data/java-swig/run-java-test +6 -0
- data/java-swig/xapian_wrap.cc +12594 -0
- data/java-swig/xapian_wrap.h +91 -0
- data/java/Makefile +660 -0
- data/java/Makefile.am +35 -0
- data/java/Makefile.in +660 -0
- data/java/README +76 -0
- data/java/SmokeTest.java +148 -0
- data/java/native/.deps/Database.Plo +1 -0
- data/java/native/.deps/Document.Plo +1 -0
- data/java/native/.deps/ESet.Plo +1 -0
- data/java/native/.deps/ESetIterator.Plo +1 -0
- data/java/native/.deps/Enquire.Plo +1 -0
- data/java/native/.deps/MSet.Plo +1 -0
- data/java/native/.deps/MSetIterator.Plo +1 -0
- data/java/native/.deps/PositionIterator.Plo +1 -0
- data/java/native/.deps/Query.Plo +1 -0
- data/java/native/.deps/RSet.Plo +1 -0
- data/java/native/.deps/Stem.Plo +1 -0
- data/java/native/.deps/TermIterator.Plo +1 -0
- data/java/native/.deps/WritableDatabase.Plo +1 -0
- data/java/native/.deps/org_xapian_XapianJNI.Plo +1 -0
- data/java/native/.deps/utils.Plo +1 -0
- data/java/native/Database.cc +222 -0
- data/java/native/Document.cc +173 -0
- data/java/native/ESet.cc +79 -0
- data/java/native/ESetIterator.cc +82 -0
- data/java/native/Enquire.cc +271 -0
- data/java/native/MSet.cc +169 -0
- data/java/native/MSetIterator.cc +107 -0
- data/java/native/Makefile +594 -0
- data/java/native/Makefile.am +51 -0
- data/java/native/Makefile.in +594 -0
- data/java/native/PositionIterator.cc +64 -0
- data/java/native/Query.cc +180 -0
- data/java/native/RSet.cc +98 -0
- data/java/native/Stem.cc +75 -0
- data/java/native/TermIterator.cc +107 -0
- data/java/native/WritableDatabase.cc +118 -0
- data/java/native/XapianObjectHolder.h +115 -0
- data/java/native/org_xapian_XapianJNI.cc +78 -0
- data/java/native/org_xapian_XapianJNI.h +1369 -0
- data/java/native/utils.cc +51 -0
- data/java/native/xapian_jni.h +116 -0
- data/java/org/xapian/Database.java +148 -0
- data/java/org/xapian/Document.java +135 -0
- data/java/org/xapian/ESet.java +66 -0
- data/java/org/xapian/ESetIterator.java +97 -0
- data/java/org/xapian/Enquire.java +136 -0
- data/java/org/xapian/ExpandDecider.java +30 -0
- data/java/org/xapian/MSet.java +104 -0
- data/java/org/xapian/MSetIterator.java +132 -0
- data/java/org/xapian/Makefile +580 -0
- data/java/org/xapian/Makefile.am +38 -0
- data/java/org/xapian/Makefile.in +580 -0
- data/java/org/xapian/MatchDecider.java +30 -0
- data/java/org/xapian/PositionIterator.java +89 -0
- data/java/org/xapian/Query.java +190 -0
- data/java/org/xapian/RSet.java +89 -0
- data/java/org/xapian/Stem.java +80 -0
- data/java/org/xapian/TermIterator.java +142 -0
- data/java/org/xapian/WritableDatabase.java +92 -0
- data/java/org/xapian/Xapian.java +114 -0
- data/java/org/xapian/XapianJNI.java +444 -0
- data/java/org/xapian/errors/AssertionError.java +40 -0
- data/java/org/xapian/errors/DatabaseCorruptError.java +40 -0
- data/java/org/xapian/errors/DatabaseError.java +40 -0
- data/java/org/xapian/errors/DatabaseLockError.java +40 -0
- data/java/org/xapian/errors/DatabaseModifiedError.java +40 -0
- data/java/org/xapian/errors/DatabaseOpeningError.java +40 -0
- data/java/org/xapian/errors/DocNotFoundError.java +40 -0
- data/java/org/xapian/errors/FeatureUnavailableError.java +40 -0
- data/java/org/xapian/errors/InternalError.java +40 -0
- data/java/org/xapian/errors/InvalidArgumentError.java +40 -0
- data/java/org/xapian/errors/InvalidOperationError.java +40 -0
- data/java/org/xapian/errors/LogicError.java +40 -0
- data/java/org/xapian/errors/Makefile +416 -0
- data/java/org/xapian/errors/Makefile.am +32 -0
- data/java/org/xapian/errors/Makefile.in +416 -0
- data/java/org/xapian/errors/NetworkError.java +40 -0
- data/java/org/xapian/errors/NetworkTimeoutError.java +40 -0
- data/java/org/xapian/errors/RangeError.java +40 -0
- data/java/org/xapian/errors/RuntimeError.java +40 -0
- data/java/org/xapian/errors/UnimplementedError.java +40 -0
- data/java/org/xapian/errors/XapianError.java +40 -0
- data/java/org/xapian/errors/XapianRuntimeError.java +49 -0
- data/java/org/xapian/examples/Makefile +391 -0
- data/java/org/xapian/examples/Makefile.am +8 -0
- data/java/org/xapian/examples/Makefile.in +391 -0
- data/java/org/xapian/examples/SimpleIndex.java +68 -0
- data/java/org/xapian/examples/SimpleSearch.java +71 -0
- data/java/run-java-test +6 -0
- data/libtool +7618 -0
- data/ltmain.sh +6956 -0
- data/mhs-xapian.gemspec +368 -0
- data/missing +378 -0
- data/php/.deps/xapian_wrap.Plo +1 -0
- data/php/Makefile +871 -0
- data/php/Makefile.am +82 -0
- data/php/Makefile.in +871 -0
- data/php/docs/Makefile +453 -0
- data/php/docs/Makefile.am +19 -0
- data/php/docs/Makefile.in +453 -0
- data/php/docs/examples/simpleexpand.php4 +108 -0
- data/php/docs/examples/simpleexpand.php5 +104 -0
- data/php/docs/examples/simpleindex.php4 +76 -0
- data/php/docs/examples/simpleindex.php5 +73 -0
- data/php/docs/examples/simplesearch.php4 +75 -0
- data/php/docs/examples/simplesearch.php5 +72 -0
- data/php/docs/index.html +313 -0
- data/php/except.i +98 -0
- data/php/php4/php_xapian.h +323 -0
- data/php/php4/xapian.php +32 -0
- data/php/php4/xapian_wrap.cc +27656 -0
- data/php/php5/php_xapian.h +319 -0
- data/php/php5/xapian.php +1566 -0
- data/php/php5/xapian_wrap.cc +24330 -0
- data/php/smoketest.php +246 -0
- data/php/smoketest4.php +84 -0
- data/php/smoketest5.php +79 -0
- data/php/util.i +187 -0
- data/python/.deps/xapian_wrap.Plo +1 -0
- data/python/Makefile +891 -0
- data/python/Makefile.am +105 -0
- data/python/Makefile.in +891 -0
- data/python/doccomments.i +5134 -0
- data/python/docs/Makefile +448 -0
- data/python/docs/Makefile.am +14 -0
- data/python/docs/Makefile.in +448 -0
- data/python/docs/examples/simpleexpand.py +98 -0
- data/python/docs/examples/simpleindex.py +65 -0
- data/python/docs/examples/simplematchdecider.py +78 -0
- data/python/docs/examples/simplesearch.py +65 -0
- data/python/docs/index.html +420 -0
- data/python/except.i +290 -0
- data/python/extra.i +1048 -0
- data/python/extracomments.i +28 -0
- data/python/generate-python-exceptions +189 -0
- data/python/generate-python-exceptions.in +189 -0
- data/python/modern/xapian.py +5662 -0
- data/python/modern/xapian_wrap.cc +35170 -0
- data/python/modern/xapian_wrap.h +244 -0
- data/python/pythontest.py +1110 -0
- data/python/smoketest.py +328 -0
- data/python/testsuite.py +382 -0
- data/python/util.i +517 -0
- data/ruby/.deps/xapian_wrap.Plo +494 -0
- data/ruby/.libs/_xapian.bundle +0 -0
- data/ruby/.libs/_xapian.bundle.dSYM/Contents/Info.plist +25 -0
- data/ruby/.libs/_xapian.bundle.dSYM/Contents/Resources/DWARF/_xapian.bundle +0 -0
- data/ruby/.libs/_xapian.la +35 -0
- data/ruby/.libs/_xapian.lai +35 -0
- data/ruby/Makefile +854 -0
- data/ruby/Makefile.am +62 -0
- data/ruby/Makefile.in +854 -0
- data/ruby/_xapian.la +35 -0
- data/ruby/docs/Makefile +487 -0
- data/ruby/docs/Makefile.am +50 -0
- data/ruby/docs/Makefile.in +487 -0
- data/ruby/docs/examples/simpleexpand.rb +98 -0
- data/ruby/docs/examples/simpleindex.rb +60 -0
- data/ruby/docs/examples/simplematchdecider.rb +74 -0
- data/ruby/docs/examples/simplesearch.rb +63 -0
- data/ruby/docs/index.html +197 -0
- data/ruby/smoketest.rb +211 -0
- data/ruby/util.i +232 -0
- data/ruby/xapian.rb +280 -0
- data/ruby/xapian_wrap.cc +25837 -0
- data/ruby/xapian_wrap.h +65 -0
- data/ruby/xapian_wrap.lo +12 -0
- data/skiptest +2 -0
- data/stamp-h1 +1 -0
- data/tcl8/.deps/xapian_wrap.Plo +1 -0
- data/tcl8/Makefile +835 -0
- data/tcl8/Makefile.am +49 -0
- data/tcl8/Makefile.in +835 -0
- data/tcl8/docs/Makefile +448 -0
- data/tcl8/docs/Makefile.am +14 -0
- data/tcl8/docs/Makefile.in +448 -0
- data/tcl8/docs/examples/simpleexpand.tcl +104 -0
- data/tcl8/docs/examples/simpleindex.tcl +68 -0
- data/tcl8/docs/examples/simplesearch.tcl +66 -0
- data/tcl8/docs/index.html +208 -0
- data/tcl8/except.i +48 -0
- data/tcl8/pkgIndex.tcl +1 -0
- data/tcl8/pkgIndex.tcl.in +1 -0
- data/tcl8/run-tcl-test +15 -0
- data/tcl8/runtest.tcl +29 -0
- data/tcl8/smoketest.tcl +155 -0
- data/tcl8/util.i +76 -0
- data/tcl8/xapian_wrap.cc +20900 -0
- data/xapian-bindings.spec +206 -0
- data/xapian-bindings.spec.in +206 -0
- data/xapian-version.h +1 -0
- data/xapian-version.h.in +1 -0
- data/xapian.i +939 -0
- 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
|
+
?>
|
data/php/smoketest4.php
ADDED
@@ -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
|
+
?>
|
data/php/smoketest5.php
ADDED
@@ -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: */
|