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 2016/06/20 19:02:24 UTC
svn commit: r1749386 - in /directory/apacheds/branches/apacheds-value:
core-api/src/main/java/org/apache/directory/server/core/api/entry/
core-integ/src/test/java/org/apache/directory/server/core/jndi/
core-integ/src/test/java/org/apache/directory/serv...
Author: elecharny
Date: Mon Jun 20 19:02:24 2016
New Revision: 1749386
URL: http://svn.apache.org/viewvc?rev=1749386&view=rev
Log:
Multiple fixes and speedup in the server code :
o store either a String or a byte[] in an Attribute when converting it from a JNDI Attribute
o Refactored the SortedEnctry comparator to take care of the special case of the entryDn attribute
o Fix a bug in the applyRdn() in the schemaInterceptor class
o Store the normalized target DN in the searchRequest context
o Handle correctly a null DN for NTLM
o Correctly return the list of evaluators in the AndEvaluator optimize() method
o Fetch a cursor using the normalized value instead of the upValue in the CursorBuilder
o Speedup in the Optimizer : if the key is already normalized, dnon't do it again
o Fixed the count when the number of candidate is > 100, by using the normalized value instead of the up value (that would set the count to 0)
Modified:
directory/apacheds/branches/apacheds-value/core-api/src/main/java/org/apache/directory/server/core/api/entry/ServerEntryUtils.java
directory/apacheds/branches/apacheds-value/core-integ/src/test/java/org/apache/directory/server/core/jndi/ObjStateFactoryIT.java
directory/apacheds/branches/apacheds-value/core-integ/src/test/java/org/apache/directory/server/core/operations/modify/ModifyAddIT.java
directory/apacheds/branches/apacheds-value/core-shared/src/main/java/org/apache/directory/server/core/shared/SortedEntryComparator.java
directory/apacheds/branches/apacheds-value/interceptors/normalization/src/test/java/org/apache/directory/server/core/normalization/NormalizationVisitorTest.java
directory/apacheds/branches/apacheds-value/interceptors/schema/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java
directory/apacheds/branches/apacheds-value/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/request/SearchRequestHandler.java
directory/apacheds/branches/apacheds-value/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/sasl/ntlm/NtlmSaslServer.java
directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/operations/add/AddingEntriesWithSpecialCharactersInRDNIT.java
directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/operations/ldapsdk/AddIT.java
directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/ppolicy/PasswordPolicyIT.java
directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/evaluator/AndEvaluator.java
directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/CursorBuilder.java
directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java
Modified: directory/apacheds/branches/apacheds-value/core-api/src/main/java/org/apache/directory/server/core/api/entry/ServerEntryUtils.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/core-api/src/main/java/org/apache/directory/server/core/api/entry/ServerEntryUtils.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/core-api/src/main/java/org/apache/directory/server/core/api/entry/ServerEntryUtils.java (original)
+++ directory/apacheds/branches/apacheds-value/core-api/src/main/java/org/apache/directory/server/core/api/entry/ServerEntryUtils.java Mon Jun 20 19:02:24 2016
@@ -83,7 +83,14 @@ public final class ServerEntryUtils
for ( Value value : entryAttribute )
{
- attribute.add( value.getValue() );
+ if ( attributeType.isHR() )
+ {
+ attribute.add( value.getValue() );
+ }
+ else
+ {
+ attribute.add( value.getBytes() );
+ }
}
return attribute;
Modified: directory/apacheds/branches/apacheds-value/core-integ/src/test/java/org/apache/directory/server/core/jndi/ObjStateFactoryIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/core-integ/src/test/java/org/apache/directory/server/core/jndi/ObjStateFactoryIT.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/core-integ/src/test/java/org/apache/directory/server/core/jndi/ObjStateFactoryIT.java (original)
+++ directory/apacheds/branches/apacheds-value/core-integ/src/test/java/org/apache/directory/server/core/jndi/ObjStateFactoryIT.java Mon Jun 20 19:02:24 2016
@@ -74,7 +74,7 @@ public class ObjStateFactoryIT extends A
Person me = ( Person ) obj;
assertEquals( attrs.get( "sn" ).get(), me.getLastname() );
assertEquals( attrs.get( "cn" ).get(), me.getCn() );
- assertEquals( "test", attrs.get( "userPassword" ).get() );
+ assertEquals( "test", Strings.utf8ToString( ( byte[] ) attrs.get( "userPassword" ).get() ) );
assertEquals( attrs.get( "telephonenumber" ).get(), me.getTelephoneNumber() );
assertNull( me.getSeealso() );
assertNull( me.getDescription() );
@@ -92,7 +92,7 @@ public class ObjStateFactoryIT extends A
Attributes attrs = sysRoot.getAttributes( "sn=Rodriguez, ou=users" );
assertEquals( "Rodriguez", attrs.get( "sn" ).get() );
assertEquals( "Mr. Kerberos", attrs.get( "cn" ).get() );
- assertEquals( "noices", attrs.get( "userPassword" ).get() );
+ assertEquals( "noices", Strings.utf8ToString( ( byte[] ) attrs.get( "userPassword" ).get() ) );
assertEquals( "555-1212", attrs.get( "telephonenumber" ).get() );
assertEquals( "sn=erodriguez", attrs.get( "seealso" ).get() );
assertEquals( "committer", attrs.get( "description" ).get() );
Modified: directory/apacheds/branches/apacheds-value/core-integ/src/test/java/org/apache/directory/server/core/operations/modify/ModifyAddIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/core-integ/src/test/java/org/apache/directory/server/core/operations/modify/ModifyAddIT.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/core-integ/src/test/java/org/apache/directory/server/core/operations/modify/ModifyAddIT.java (original)
+++ directory/apacheds/branches/apacheds-value/core-integ/src/test/java/org/apache/directory/server/core/operations/modify/ModifyAddIT.java Mon Jun 20 19:02:24 2016
@@ -42,6 +42,7 @@ import javax.naming.directory.SchemaViol
import javax.naming.ldap.LdapContext;
import org.apache.directory.api.util.StringConstants;
+import org.apache.directory.api.util.Strings;
import org.apache.directory.server.core.annotations.ApplyLdifs;
import org.apache.directory.server.core.annotations.CreateDS;
import org.apache.directory.server.core.integ.AbstractLdapTestUnit;
@@ -338,7 +339,7 @@ public class ModifyAddIT extends Abstrac
attrs = sysRoot.getAttributes( "ou=testing01" );
Attribute attr = attrs.get( "crossCertificatePair" );
assertNotNull( attr );
- assertTrue( attr.contains( "12345" ) );
+ assertTrue( attr.contains( "12345".getBytes() ) );
assertEquals( 1, attr.size() );
}
@@ -364,7 +365,7 @@ public class ModifyAddIT extends Abstrac
attrs = sysRoot.getAttributes( "ou=testing01" );
Attribute attr = attrs.get( "crossCertificatePair" );
assertNotNull( attr );
- assertTrue( attr.contains( "" ) );
+ assertTrue( attr.contains( Strings.EMPTY_BYTES ) );
assertEquals( 1, attr.size() );
}
@@ -557,8 +558,8 @@ public class ModifyAddIT extends Abstrac
attrs = sysRoot.getAttributes( "ou=testing01" );
Attribute attr = attrs.get( "crossCertificatePair" );
assertNotNull( attr );
- assertTrue( attr.contains( "12345" ) );
- assertTrue( attr.contains( "" ) );
+ assertTrue( attr.contains( "12345".getBytes() ) );
+ assertTrue( attr.contains( Strings.EMPTY_BYTES ) );
assertEquals( 2, attr.size() );
}
Modified: directory/apacheds/branches/apacheds-value/core-shared/src/main/java/org/apache/directory/server/core/shared/SortedEntryComparator.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/core-shared/src/main/java/org/apache/directory/server/core/shared/SortedEntryComparator.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/core-shared/src/main/java/org/apache/directory/server/core/shared/SortedEntryComparator.java (original)
+++ directory/apacheds/branches/apacheds-value/core-shared/src/main/java/org/apache/directory/server/core/shared/SortedEntryComparator.java Mon Jun 20 19:02:24 2016
@@ -24,6 +24,7 @@ import java.io.Serializable;
import java.util.Comparator;
import java.util.TreeSet;
+import org.apache.directory.api.ldap.model.constants.SchemaConstants;
import org.apache.directory.api.ldap.model.entry.Attribute;
import org.apache.directory.api.ldap.model.entry.Entry;
import org.apache.directory.api.ldap.model.entry.Value;
@@ -32,6 +33,7 @@ import org.apache.directory.api.ldap.mod
import org.apache.directory.api.ldap.model.schema.LdapComparator;
import org.apache.directory.api.ldap.model.schema.MatchingRule;
import org.apache.directory.api.ldap.model.schema.SchemaManager;
+import org.apache.directory.api.ldap.model.schema.comparators.ParsedDnComparator;
/**
* A comparator to sort the entries as per <a href="http://tools.ietf.org/html/rfc2891">RFC 2891</a>
@@ -74,26 +76,37 @@ class SortedEntryComparator implements C
{
multivalued = true;
}
-
- hr = at.getSyntax().isHumanReadable();
-
- if ( mrule != null )
+
+ // Special case : entryDn
+ if ( SchemaConstants.ENTRY_DN_AT_OID.equals( at.getOid() ) )
{
- comparator = schemaManager.lookupComparatorRegistry( mrule );
+ // We will use the Entry's DN comparator.
+ comparator = new ParsedDnComparator( SchemaConstants.ENTRY_DN_AT_OID );
+ comparator.setSchemaManager( schemaManager );
+ hr = true;
}
else
- {
- MatchingRule mr = at.getOrdering();
-
- if ( mr == null )
+ {
+ hr = at.getSyntax().isHumanReadable();
+
+ if ( mrule != null )
+ {
+ comparator = schemaManager.lookupComparatorRegistry( mrule );
+ }
+ else
{
- mr = at.getEquality();
+ MatchingRule mr = at.getOrdering();
+
+ if ( mr == null )
+ {
+ mr = at.getEquality();
+ }
+
+ comparator = schemaManager.lookupComparatorRegistry( mr.getOid() );
}
- comparator = schemaManager.lookupComparatorRegistry( mr.getOid() );
+ comparator.setSchemaManager( schemaManager );
}
-
- comparator.setSchemaManager( schemaManager );
}
Modified: directory/apacheds/branches/apacheds-value/interceptors/normalization/src/test/java/org/apache/directory/server/core/normalization/NormalizationVisitorTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/interceptors/normalization/src/test/java/org/apache/directory/server/core/normalization/NormalizationVisitorTest.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/interceptors/normalization/src/test/java/org/apache/directory/server/core/normalization/NormalizationVisitorTest.java (original)
+++ directory/apacheds/branches/apacheds-value/interceptors/normalization/src/test/java/org/apache/directory/server/core/normalization/NormalizationVisitorTest.java Mon Jun 20 19:02:24 2016
@@ -93,7 +93,7 @@ public class NormalizationVisitorTest
assertTrue( result instanceof EqualityNode<?> );
EqualityNode<?> equalityNode = (org.apache.directory.api.ldap.model.filter.EqualityNode<?> ) result;
- assertEquals( " test 1 ", equalityNode.getValue().getValue() );
+ assertEquals( " test 1 ", equalityNode.getValue().getNormalized() );
assertEquals( "2.5.4.11", equalityNode.getAttributeType().getOid() );
}
Modified: directory/apacheds/branches/apacheds-value/interceptors/schema/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/interceptors/schema/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/interceptors/schema/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java (original)
+++ directory/apacheds/branches/apacheds-value/interceptors/schema/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java Mon Jun 20 19:02:24 2016
@@ -1303,6 +1303,8 @@ public class SchemaInterceptor extends B
for ( List<ModDnAva> modDnAvas : modifiedAvas.values() )
{
+ List<ModDnAva> addedModDnAvs = new ArrayList<>();
+
for ( ModDnAva modDnAva : modDnAvas )
{
Ava ava = modDnAva.getAva();
@@ -1322,7 +1324,7 @@ public class SchemaInterceptor extends B
removedSVs = new ArrayList<>();
}
- modDnAvas.add( new ModDnAva( ModDnAva.ModDnType.UPDATE_DELETE, ava ) );
+ addedModDnAvs.add( new ModDnAva( ModDnAva.ModDnType.UPDATE_DELETE, ava ) );
removedSVs.add( new ModDnAva( ModDnAva.ModDnType.UPDATE_DELETE, new Ava( schemaManager, svAttribute.getId(), svAttribute.getString() ) ) );
}
@@ -1338,6 +1340,8 @@ public class SchemaInterceptor extends B
break;
}
}
+
+ modDnAvas.addAll( addedModDnAvs );
}
// Add the SV attributes that has to be removed to the list of ModDnAva
Modified: directory/apacheds/branches/apacheds-value/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/request/SearchRequestHandler.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/request/SearchRequestHandler.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/request/SearchRequestHandler.java (original)
+++ directory/apacheds/branches/apacheds-value/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/request/SearchRequestHandler.java Mon Jun 20 19:02:24 2016
@@ -1228,6 +1228,7 @@ public class SearchRequestHandler extend
if ( !reqTargetDn.isSchemaAware() )
{
reqTargetDn = new Dn( directoryService.getSchemaManager(), reqTargetDn );
+ req.setBase( reqTargetDn );
}
// Check if the entry itself is a referral
Modified: directory/apacheds/branches/apacheds-value/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/sasl/ntlm/NtlmSaslServer.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/sasl/ntlm/NtlmSaslServer.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/sasl/ntlm/NtlmSaslServer.java (original)
+++ directory/apacheds/branches/apacheds-value/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/sasl/ntlm/NtlmSaslServer.java Mon Jun 20 19:02:24 2016
@@ -168,7 +168,11 @@ public class NtlmSaslServer extends Abst
result = provider.authenticate( getLdapSession().getIoSession(), response );
Dn dn = getBindRequest().getDn();
- if ( !dn.isSchemaAware() )
+ if ( dn == null )
+ {
+ dn = new Dn( getLdapSession().getLdapServer().getDirectoryService().getSchemaManager() );
+ }
+ else if ( !dn.isSchemaAware() )
{
dn = new Dn( getLdapSession().getLdapServer().getDirectoryService().getSchemaManager(), dn );
}
Modified: directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/operations/add/AddingEntriesWithSpecialCharactersInRDNIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/operations/add/AddingEntriesWithSpecialCharactersInRDNIT.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/operations/add/AddingEntriesWithSpecialCharactersInRDNIT.java (original)
+++ directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/operations/add/AddingEntriesWithSpecialCharactersInRDNIT.java Mon Jun 20 19:02:24 2016
@@ -396,7 +396,7 @@ public class AddingEntriesWithSpecialCha
"objectClass: person",
"objectClass: organizationalPerson",
"objectClass: inetOrgPerson",
- "cn: User",
+ "cn: User1",
"sn: Name " );
connection.add( entry );
@@ -406,9 +406,9 @@ public class AddingEntriesWithSpecialCha
assertNotNull( addedEntry );
assertEquals( "Name", addedEntry.get( "sn" ).getString() );
- assertEquals( "User", addedEntry.get( "cn" ).getString() );
+ assertEquals( "User1", addedEntry.get( "cn" ).getString() );
assertEquals( 2, addedEntry.get( "cn" ).size() );
- assertTrue( addedEntry.contains( "cn", "User" ) );
- assertTrue( addedEntry.contains( "cn", "\\ User" ) );
+ assertTrue( addedEntry.contains( "cn", " User" ) );
+ assertTrue( addedEntry.contains( "cn", "User1" ) );
}
}
\ No newline at end of file
Modified: directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/operations/ldapsdk/AddIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/operations/ldapsdk/AddIT.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/operations/ldapsdk/AddIT.java (original)
+++ directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/operations/ldapsdk/AddIT.java Mon Jun 20 19:02:24 2016
@@ -1256,7 +1256,7 @@ public class AddIT extends AbstractLdapT
javax.naming.directory.Attribute cnAttribute = res.next().getAttributes().get( "cn" );
assertEquals( 2, cnAttribute.size() );
assertTrue( cnAttribute.contains( "Tori,Amos" ) );
- assertTrue( cnAttribute.contains( "Amos\\,Tori" ) );
+ assertTrue( cnAttribute.contains( "Amos,Tori" ) );
assertFalse( res.hasMore() );
// search for the implicit added userPassword
Modified: directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/ppolicy/PasswordPolicyIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/ppolicy/PasswordPolicyIT.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/ppolicy/PasswordPolicyIT.java (original)
+++ directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/ppolicy/PasswordPolicyIT.java Mon Jun 20 19:02:24 2016
@@ -1119,7 +1119,7 @@ public class PasswordPolicyIT extends Ab
policyConfig.setPwdMaxFailure( 3 );
policyConfig.setPwdLockout( true );
- Dn userDn = new Dn( "cn=userLockout,ou=system" );
+ Dn userDn = new Dn( getService().getSchemaManager(), "cn=userLockout,ou=system" );
LdapConnection adminConnection = getAdminNetworkConnection( getLdapServer() );
addUser( adminConnection, "userLockout", "12345" );
Modified: directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/evaluator/AndEvaluator.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/evaluator/AndEvaluator.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/evaluator/AndEvaluator.java (original)
+++ directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/evaluator/AndEvaluator.java Mon Jun 20 19:02:24 2016
@@ -107,7 +107,7 @@ public class AndEvaluator implements Eva
Collections.sort( optimized, new ScanCountComparator() );
- return evaluators;
+ return optimized;
}
/* Potential speed up, for when we do'nt care about the evaluation itself.
Modified: directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/CursorBuilder.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/CursorBuilder.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/CursorBuilder.java (original)
+++ directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/CursorBuilder.java Mon Jun 20 19:02:24 2016
@@ -217,7 +217,7 @@ public class CursorBuilder
{
// Get the cursor using the index
Index<T, String> userIndex = ( Index<T, String> ) db.getIndex( attributeType );
- Cursor<IndexEntry<T, String>> userIdxCursor = userIndex.forwardCursor( ( T ) value.getValue() );
+ Cursor<IndexEntry<T, String>> userIdxCursor = userIndex.forwardCursor( ( T ) value.getNormalized() );
Set<String> uuidSet = searchResult.getCandidateSet();
// And loop on it
Modified: directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java (original)
+++ directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java Mon Jun 20 19:02:24 2016
@@ -305,7 +305,16 @@ public class DefaultOptimizer<E> impleme
{
Index<V, String> idx = ( Index<V, String> ) db.getIndex( node.getAttributeType() );
- String normalizedKey = node.getAttributeType().getEquality().getNormalizer().normalize( node.getValue().getValue() );
+ String normalizedKey;
+
+ if ( node.getValue().isSchemaAware() )
+ {
+ normalizedKey = node.getValue().getNormalized();
+ }
+ else
+ {
+ normalizedKey = node.getAttributeType().getEquality().getNormalizer().normalize( node.getValue().getValue() );
+ }
Cursor<String> result = idx.forwardValueCursor( ( V ) normalizedKey );
Set<String> values = new HashSet<String>();
@@ -337,7 +346,7 @@ public class DefaultOptimizer<E> impleme
// Reset the candidates annotation
node.set( CANDIDATES_ANNOTATION_KEY, null );
- return idx.count( ( V ) node.getValue().getValue() );
+ return idx.count( ( V ) node.getValue().getNormalized() );
}
}