204 lines
6.5 KiB
Diff
204 lines
6.5 KiB
Diff
diff -Naupr a/CMakeLists.txt c/CMakeLists.txt
|
|
--- a/CMakeLists.txt 2024-02-18 19:18:26.000000000 +0100
|
|
+++ c/CMakeLists.txt 2025-03-31 10:09:11.175008239 +0200
|
|
@@ -47,7 +47,7 @@ include(dependencies)
|
|
include(Lucene++Docs)
|
|
|
|
# Enable C++11
|
|
-set(CMAKE_CXX_STANDARD 11)
|
|
+set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
####################################
|
|
diff -Naupr a/src/core/document/NumericField.cpp c/src/core/document/NumericField.cpp
|
|
--- a/src/core/document/NumericField.cpp 2024-02-18 19:18:26.000000000 +0100
|
|
+++ c/src/core/document/NumericField.cpp 2025-03-31 10:29:14.383300303 +0200
|
|
@@ -4,6 +4,10 @@
|
|
// or the GNU Lesser General Public License.
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
+#include <boost/variant/get.hpp>
|
|
+#include <locale>
|
|
+#include <codecvt>
|
|
+
|
|
#include "LuceneInc.h"
|
|
#include "NumericField.h"
|
|
#include "Field.h"
|
|
@@ -53,9 +57,23 @@ ReaderPtr NumericField::readerValue() {
|
|
}
|
|
|
|
String NumericField::stringValue() {
|
|
- StringStream value;
|
|
- value << fieldsData;
|
|
- return value.str();
|
|
+ std::stringstream value;
|
|
+
|
|
+ // Estrazione del valore numerico (come prima)
|
|
+ if (int* v = boost::get<int>(&fieldsData)) {
|
|
+ value << *v;
|
|
+ } else if (int64_t* v = boost::get<int64_t>(&fieldsData)) {
|
|
+ value << *v;
|
|
+ } else if (double* v = boost::get<double>(&fieldsData)) {
|
|
+ value << *v;
|
|
+ } else {
|
|
+ value << "0";
|
|
+ }
|
|
+
|
|
+ std::string narrowStr = value.str();
|
|
+ std::wstring wideStr(narrowStr.begin(), narrowStr.end());
|
|
+ return String(wideStr);
|
|
+
|
|
}
|
|
|
|
int64_t NumericField::getNumericValue() {
|
|
diff -Naupr a/src/core/search/FieldDoc.cpp c/src/core/search/FieldDoc.cpp
|
|
--- a/src/core/search/FieldDoc.cpp 2024-02-18 19:18:26.000000000 +0100
|
|
+++ c/src/core/search/FieldDoc.cpp 2025-03-31 10:42:12.819612969 +0200
|
|
@@ -6,6 +6,7 @@
|
|
|
|
#include "LuceneInc.h"
|
|
#include "FieldDoc.h"
|
|
+#include <boost/variant/get.hpp>
|
|
|
|
namespace Lucene {
|
|
|
|
@@ -19,14 +20,31 @@ FieldDoc::~FieldDoc() {
|
|
String FieldDoc::toString() {
|
|
StringStream buffer;
|
|
buffer << ScoreDoc::toString() << L"[";
|
|
+
|
|
+ bool first = true;
|
|
for (Collection<ComparableValue>::iterator field = fields.begin(); field != fields.end(); ++field) {
|
|
- if (field != fields.begin()) {
|
|
+ if (!first) {
|
|
buffer << L", ";
|
|
}
|
|
- buffer << *field;
|
|
+ first = false;
|
|
+
|
|
+ // Gestione del boost::variant
|
|
+ if (const std::wstring* s = boost::get<std::wstring>(&*field)) {
|
|
+ buffer << *s;
|
|
+ } else if (const int32_t* i = boost::get<int32_t>(&*field)) {
|
|
+ buffer << *i;
|
|
+ } else if (const int64_t* l = boost::get<int64_t>(&*field)) {
|
|
+ buffer << *l;
|
|
+ } else if (const double* d = boost::get<double>(&*field)) {
|
|
+ buffer << *d;
|
|
+ } else if (const uint8_t* b = boost::get<uint8_t>(&*field)) {
|
|
+ buffer << static_cast<int>(*b);
|
|
+ }
|
|
+ // Aggiungi altri tipi se necessario
|
|
}
|
|
+
|
|
buffer << L"]";
|
|
return buffer.str();
|
|
}
|
|
|
|
-}
|
|
+} // namespace Lucene
|
|
diff -Naupr a/src/core/search/NumericRangeQuery.cpp c/src/core/search/NumericRangeQuery.cpp
|
|
--- a/src/core/search/NumericRangeQuery.cpp 2024-02-18 19:18:26.000000000 +0100
|
|
+++ c/src/core/search/NumericRangeQuery.cpp 2025-03-31 10:46:59.001580233 +0200
|
|
@@ -3,7 +3,7 @@
|
|
// Distributable under the terms of either the Apache License (Version 2.0)
|
|
// or the GNU Lesser General Public License.
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
-
|
|
+#include <boost/variant/get.hpp>
|
|
#include "LuceneInc.h"
|
|
#include "NumericRangeQuery.h"
|
|
#include "_NumericRangeQuery.h"
|
|
@@ -131,17 +131,36 @@ String NumericRangeQuery::toString(const
|
|
buffer << this->field << L":";
|
|
}
|
|
buffer << (minInclusive ? L"[" : L"{");
|
|
+
|
|
+ // Gestione del valore minimo
|
|
if (VariantUtils::isNull(min)) {
|
|
buffer << L"*";
|
|
} else {
|
|
- buffer << min;
|
|
+ // Estrazione del valore dal variant
|
|
+ if (const int32_t* i = boost::get<int32_t>(&min)) {
|
|
+ buffer << *i;
|
|
+ } else if (const int64_t* l = boost::get<int64_t>(&min)) {
|
|
+ buffer << *l;
|
|
+ } else if (const double* d = boost::get<double>(&min)) {
|
|
+ buffer << *d;
|
|
+ }
|
|
}
|
|
+
|
|
buffer << L" TO ";
|
|
+
|
|
+ // Gestione del valore massimo (NOTA: c'è un bug nel codice originale che usa 'min' invece di 'max')
|
|
if (VariantUtils::isNull(max)) {
|
|
buffer << L"*";
|
|
} else {
|
|
- buffer << max;
|
|
+ if (const int32_t* i = boost::get<int32_t>(&max)) {
|
|
+ buffer << *i;
|
|
+ } else if (const int64_t* l = boost::get<int64_t>(&max)) {
|
|
+ buffer << *l;
|
|
+ } else if (const double* d = boost::get<double>(&max)) {
|
|
+ buffer << *d;
|
|
+ }
|
|
}
|
|
+
|
|
buffer << (maxInclusive ? L"]" : L"}");
|
|
buffer << boostString();
|
|
return buffer.str();
|
|
diff -Naupr a/src/core/search/TermRangeQuery.cpp c/src/core/search/TermRangeQuery.cpp
|
|
--- a/src/core/search/TermRangeQuery.cpp 2024-02-18 19:18:26.000000000 +0100
|
|
+++ c/src/core/search/TermRangeQuery.cpp 2025-03-31 10:51:38.091670633 +0200
|
|
@@ -10,6 +10,7 @@
|
|
#include "Collator.h"
|
|
#include "StringUtils.h"
|
|
#include "VariantUtils.h"
|
|
+#include <boost/variant/get.hpp>
|
|
|
|
namespace Lucene {
|
|
|
|
@@ -72,22 +73,39 @@ String TermRangeQuery::toString(const St
|
|
buffer << getField() << L":";
|
|
}
|
|
buffer << (includeLower ? L"[" : L"{");
|
|
+
|
|
+ // Gestione del lowerTerm
|
|
if (VariantUtils::isNull(lowerTerm)) {
|
|
buffer << L"*";
|
|
} else {
|
|
- buffer << lowerTerm;
|
|
+ // Estrazione del valore stringa dal variant
|
|
+ if (const String* s = boost::get<String>(&lowerTerm)) {
|
|
+ buffer << *s;
|
|
+ } else if (const std::wstring* ws = boost::get<std::wstring>(&lowerTerm)) {
|
|
+ buffer << *ws;
|
|
+ }
|
|
+ // Aggiungi altri tipi se necessario
|
|
}
|
|
+
|
|
buffer << L" TO ";
|
|
+
|
|
+ // Gestione dell'upperTerm
|
|
if (VariantUtils::isNull(upperTerm)) {
|
|
buffer << L"*";
|
|
} else {
|
|
- buffer << upperTerm;
|
|
+ if (const String* s = boost::get<String>(&upperTerm)) {
|
|
+ buffer << *s;
|
|
+ } else if (const std::wstring* ws = boost::get<std::wstring>(&upperTerm)) {
|
|
+ buffer << *ws;
|
|
+ }
|
|
}
|
|
+
|
|
buffer << (includeUpper ? L"]" : L"}");
|
|
buffer << boostString();
|
|
return buffer.str();
|
|
}
|
|
|
|
+
|
|
bool TermRangeQuery::equals(const LuceneObjectPtr& other) {
|
|
if (LuceneObject::equals(other)) {
|
|
return true;
|