mhs-xapian 1.0.18a
Sign up to get free protection for your applications and to get access to all the features.
- 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: */
|