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