From 558a0bd1b48792629a19185e347ab8f9fe6d47df Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Tue, 31 May 2016 14:13:56 +0000
Subject: [PATCH] OPENDJ-2987 Fix IllegalArgumentException when performing union index queries

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexQueryFactoryImpl.java |   15 +++++++++------
 1 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexQueryFactoryImpl.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexQueryFactoryImpl.java
index fdda820..0401cb6 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexQueryFactoryImpl.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/IndexQueryFactoryImpl.java
@@ -22,6 +22,7 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.LocalizableMessageBuilder;
@@ -124,16 +125,18 @@
     @Override
     public EntryIDSet evaluate(LocalizableMessageBuilder debugMessage, StringBuilder indexNameOut)
     {
-      final EntryIDSet entryIDs = newDefinedSet();
-      for (IndexQuery query : subIndexQueries)
+      final List<EntryIDSet> candidateSets = new ArrayList<>(subIndexQueries.size());
+      for (final IndexQuery query : subIndexQueries)
       {
-        entryIDs.addAll(query.evaluate(debugMessage, indexNameOut));
-        if (entryIDs.isDefined() && entryIDs.size() >= CURSOR_ENTRY_LIMIT)
+        final EntryIDSet set = query.evaluate(debugMessage, indexNameOut);
+        if (!set.isDefined())
         {
-          break;
+          // There is no point continuing.
+          return set;
         }
+        candidateSets.add(set);
       }
-      return entryIDs;
+      return newSetFromUnion(candidateSets);
     }
 
     @Override

--
Gitblit v1.10.0