From 502566073c07eac6a91131847691cc0dbc093b18 Mon Sep 17 00:00:00 2001 From: Arun Isaac Date: Wed, 23 Sep 2026 01:47:30 +0100 Subject: Replace query combinator with C++ query builder. We need composite queries to have more than two subqueries. The only way to do this is to provide Xapian::Query with an iterator. And to do this, we need to drop down to C++. --- xapian.i.in | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'xapian.i.in') diff --git a/xapian.i.in b/xapian.i.in index 84695e9..ba923d4 100644 --- a/xapian.i.in +++ b/xapian.i.in @@ -1,5 +1,5 @@ /* guile-xapian --- Guile bindings for Xapian - * Copyright © 2020, 2023–2024 Arun Isaac + * Copyright © 2020, 2023–2024, 2026 Arun Isaac * Copyright © 2021, 2022 Bob131 * * This file is part of guile-xapian. @@ -206,3 +206,20 @@ class GuileXapianFieldProcessorWrapper ~GuileXapianFieldProcessorWrapper(); Xapian::Query operator()(std::string const&); }; + +// Build query from subqueries. This needs to be in C++ because we +// need to provide Xapian::Query with an iterator. +%{ + Xapian::Query guile_xapian_build_query(Xapian::Query::op op, SCM subqueries) { + int length = scm_to_int(scm_length(subqueries)); + Xapian::Query **subqueries_arr = (Xapian::Query**) malloc(length * sizeof(Xapian::Query*)); + for (int i=0; i