You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2013/08/03 10:55:39 UTC
svn commit: r1509944 - in
/directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl:
CursorBuilder.java DefaultOptimizer.java
Author: elecharny
Date: Sat Aug 3 08:55:39 2013
New Revision: 1509944
URL: http://svn.apache.org/r1509944
Log:
o Construct the set of candidates for the equality ExprNode, to avoid fetching it again in the build() method
Modified:
directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/CursorBuilder.java
directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java
Modified: directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/CursorBuilder.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/CursorBuilder.java?rev=1509944&r1=1509943&r2=1509944&view=diff
==============================================================================
--- directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/CursorBuilder.java (original)
+++ directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/CursorBuilder.java Sat Aug 3 08:55:39 2013
@@ -193,6 +193,20 @@ public class CursorBuilder
private <T> long computeEquality( EqualityNode<T> node, PartitionSearchResult searchResult )
throws Exception
{
+ Set<String> thisCandidates = ( Set<String> ) node.get( "candidates" );
+
+ if ( thisCandidates != null )
+ {
+ Set<String> candidates = searchResult.getCandidateSet();
+
+ for ( String candidate : thisCandidates )
+ {
+ candidates.add( candidate );
+ }
+
+ return thisCandidates.size();
+ }
+
AttributeType attributeType = node.getAttributeType();
Value<T> value = node.getValue();
int nbResults = 0;
Modified: directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java?rev=1509944&r1=1509943&r2=1509944&view=diff
==============================================================================
--- directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java (original)
+++ directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java Sat Aug 3 08:55:39 2013
@@ -20,9 +20,12 @@
package org.apache.directory.server.xdbm.search.impl;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import org.apache.directory.api.ldap.model.constants.SchemaConstants;
+import org.apache.directory.api.ldap.model.cursor.Cursor;
import org.apache.directory.api.ldap.model.entry.Entry;
import org.apache.directory.api.ldap.model.filter.AndNode;
import org.apache.directory.api.ldap.model.filter.ApproximateNode;
@@ -301,7 +304,21 @@ public class DefaultOptimizer<E> impleme
{
Index<V, E, String> idx = ( Index<V, E, String> ) db.getIndex( node.getAttributeType() );
- return idx.count( node.getValue().getValue() );
+ //return idx.count( node.getValue().getValue() );
+
+ Cursor<String> result = idx.forwardValueCursor( node.getValue().getValue() );
+ Set<String> values = new HashSet<String>();
+
+ for ( String value : result )
+ {
+ values.add( value );
+ }
+
+ result.close();
+
+ node.set( "candidates", values );
+
+ return values.size();
}
// count for non-indexed attribute is unknown so we presume da worst