From 75ee22ead20ad8d1b059974b56f48351b4e7995a Mon Sep 17 00:00:00 2001
From: Fabio Pistolesi <fabio.pistolesi@forgerock.com>
Date: Mon, 06 Jul 2015 15:48:39 +0000
Subject: [PATCH] OPENDJ-2119 CR-7476 debugsearchindex incorrect output with AND search on only one attribute
---
opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/AttributeIndex.java | 16 ++++++++++++----
opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/backends/jeb/AttributeIndex.java | 16 ++++++++++++----
2 files changed, 24 insertions(+), 8 deletions(-)
diff --git a/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/backends/jeb/AttributeIndex.java b/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/backends/jeb/AttributeIndex.java
index 852f0a7..0616d10 100644
--- a/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/backends/jeb/AttributeIndex.java
+++ b/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/backends/jeb/AttributeIndex.java
@@ -507,10 +507,18 @@
// in IndexFilter#evaluateLogicalAndFilter method.
// One solution could be to implement a boundedRangeAssertion that combine
// the two operations in one.
- EntryIDSet results = evaluate(filter1, debugBuffer, monitor);
- EntryIDSet results2 = evaluate(filter2, debugBuffer, monitor);
- results.retainAll(results2);
- return results;
+ StringBuilder tmpBuff1 = debugBuffer != null ? new StringBuilder(): null;
+ StringBuilder tmpBuff2 = debugBuffer != null ? new StringBuilder(): null;
+ EntryIDSet results1 = evaluate(filter1, tmpBuff1, monitor);
+ EntryIDSet results2 = evaluate(filter2, tmpBuff2, monitor);
+ if (debugBuffer != null)
+ {
+ debugBuffer
+ .append(filter1).append(tmpBuff1).append(results1)
+ .append(filter2).append(tmpBuff2).append(results2);
+ }
+ results1.retainAll(results2);
+ return results1;
}
private EntryIDSet evaluate(SearchFilter filter, StringBuilder debugBuffer, DatabaseEnvironmentMonitor monitor)
diff --git a/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/AttributeIndex.java b/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/AttributeIndex.java
index 1f41856..e75e3f6 100644
--- a/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/AttributeIndex.java
+++ b/opendj-sdk/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/AttributeIndex.java
@@ -572,10 +572,18 @@
// in IndexFilter#evaluateLogicalAndFilter method.
// One solution could be to implement a boundedRangeAssertion that combine
// the two operations in one.
- EntryIDSet results = evaluate(indexQueryFactory, filter1, debugBuffer, monitor);
- EntryIDSet results2 = evaluate(indexQueryFactory, filter2, debugBuffer, monitor);
- results.retainAll(results2);
- return results;
+ StringBuilder tmpBuff1 = debugBuffer != null ? new StringBuilder() : null;
+ StringBuilder tmpBuff2 = debugBuffer != null ? new StringBuilder() : null;
+ EntryIDSet results1 = evaluate(indexQueryFactory, filter1, tmpBuff1, monitor);
+ EntryIDSet results2 = evaluate(indexQueryFactory, filter2, tmpBuff2, monitor);
+ if (debugBuffer != null)
+ {
+ debugBuffer
+ .append(filter1).append(tmpBuff1).append(results1)
+ .append(filter2).append(tmpBuff2).append(results2);
+ }
+ results1.retainAll(results2);
+ return results1;
}
private EntryIDSet evaluate(IndexQueryFactory<IndexQuery> indexQueryFactory, SearchFilter filter,
--
Gitblit v1.10.0