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 2022/01/13 07:07:06 UTC

[directory-server] branch master updated: Fixed the Undefined node problem

This is an automated email from the ASF dual-hosted git repository.

elecharny pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/directory-server.git


The following commit(s) were added to refs/heads/master by this push:
     new 9fe09ca  Fixed the Undefined node problem
9fe09ca is described below

commit 9fe09cad67b89ea5bbf788e6fa2e0d584b4b3692
Author: emmanuel lecharny <el...@apache.org>
AuthorDate: Thu Jan 13 08:06:59 2022 +0100

    Fixed the Undefined node problem
---
 .../core/api/normalization/FilterNormalizingVisitor.java      |  2 +-
 .../server/core/normalization/NormalizationInterceptor.java   | 10 +++-------
 .../directory/server/core/schema/SchemaInterceptor.java       |  7 ++++---
 .../directory/server/xdbm/search/impl/CursorBuilder.java      |  2 ++
 .../directory/server/xdbm/search/impl/DefaultOptimizer.java   |  2 +-
 .../directory/server/xdbm/search/impl/EvaluatorBuilder.java   | 11 +++++++----
 6 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/core-api/src/main/java/org/apache/directory/server/core/api/normalization/FilterNormalizingVisitor.java b/core-api/src/main/java/org/apache/directory/server/core/api/normalization/FilterNormalizingVisitor.java
index a95433b..b40f0ad 100644
--- a/core-api/src/main/java/org/apache/directory/server/core/api/normalization/FilterNormalizingVisitor.java
+++ b/core-api/src/main/java/org/apache/directory/server/core/api/normalization/FilterNormalizingVisitor.java
@@ -238,7 +238,7 @@ public class FilterNormalizingVisitor implements FilterVisitor
         if ( ( substringMR == null ) || ( substringMR.getNormalizer() == null ) )
         {
             // No normalizer for a Substring filter
-            return UndefinedNode.UNDEFINED_NODE;
+            return new UndefinedNode( node.getAttribute() );
         }
         
         Normalizer normalizer = substringMR.getNormalizer();
diff --git a/interceptors/normalization/src/main/java/org/apache/directory/server/core/normalization/NormalizationInterceptor.java b/interceptors/normalization/src/main/java/org/apache/directory/server/core/normalization/NormalizationInterceptor.java
index c276157..aec6f94 100644
--- a/interceptors/normalization/src/main/java/org/apache/directory/server/core/normalization/NormalizationInterceptor.java
+++ b/interceptors/normalization/src/main/java/org/apache/directory/server/core/normalization/NormalizationInterceptor.java
@@ -45,8 +45,8 @@ import org.apache.directory.api.ldap.model.schema.normalizers.ConcreteNameCompon
 import org.apache.directory.api.ldap.model.schema.normalizers.NameComponentNormalizer;
 import org.apache.directory.server.core.api.DirectoryService;
 import org.apache.directory.server.core.api.InterceptorEnum;
-import org.apache.directory.server.core.api.filtering.EntryFilteringCursorImpl;
 import org.apache.directory.server.core.api.filtering.EntryFilteringCursor;
+import org.apache.directory.server.core.api.filtering.EntryFilteringCursorImpl;
 import org.apache.directory.server.core.api.interceptor.BaseInterceptor;
 import org.apache.directory.server.core.api.interceptor.context.AddOperationContext;
 import org.apache.directory.server.core.api.interceptor.context.CompareOperationContext;
@@ -432,12 +432,6 @@ public class NormalizationInterceptor extends BaseInterceptor
                 newAndNode.addNode( modifiedNode );
                 nbNodes++;
             }
-
-            if ( modifiedNode instanceof UndefinedNode )
-            {
-                // We can just return an Undefined node as nothing will get selected
-                return UndefinedNode.UNDEFINED_NODE;
-            }
         }
 
         switch ( nbNodes )
@@ -538,6 +532,8 @@ public class NormalizationInterceptor extends BaseInterceptor
                     }
                 }
             }
+            
+            return leafNode;
         }
 
         // --------------------------------------------------------------------
diff --git a/interceptors/schema/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java b/interceptors/schema/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java
index f415ef2..8956446 100644
--- a/interceptors/schema/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java
+++ b/interceptors/schema/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java
@@ -56,6 +56,7 @@ import org.apache.directory.api.ldap.model.filter.GreaterEqNode;
 import org.apache.directory.api.ldap.model.filter.LessEqNode;
 import org.apache.directory.api.ldap.model.filter.ObjectClassNode;
 import org.apache.directory.api.ldap.model.filter.SimpleNode;
+import org.apache.directory.api.ldap.model.filter.UndefinedNode;
 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.api.ldap.model.message.SearchScope;
 import org.apache.directory.api.ldap.model.message.controls.Cascade;
@@ -74,9 +75,9 @@ import org.apache.directory.server.core.api.DirectoryService;
 import org.apache.directory.server.core.api.InterceptorEnum;
 import org.apache.directory.server.core.api.entry.ClonedServerEntry;
 import org.apache.directory.server.core.api.entry.ServerEntryUtils;
-import org.apache.directory.server.core.api.filtering.EntryFilteringCursorImpl;
 import org.apache.directory.server.core.api.filtering.EntryFilter;
 import org.apache.directory.server.core.api.filtering.EntryFilteringCursor;
+import org.apache.directory.server.core.api.filtering.EntryFilteringCursorImpl;
 import org.apache.directory.server.core.api.interceptor.BaseInterceptor;
 import org.apache.directory.server.core.api.interceptor.context.AddOperationContext;
 import org.apache.directory.server.core.api.interceptor.context.CompareOperationContext;
@@ -383,9 +384,9 @@ public class SchemaInterceptor extends BaseInterceptor
             throw new LdapException( message );
         }
 
-        if ( filter instanceof ObjectClassNode )
+        if ( ( filter instanceof ObjectClassNode ) || ( filter instanceof UndefinedNode ) )
         {
-            // Bypass (ObjectClass=*)
+            // Bypass (ObjectClass=*) and undifined nodes
             return;
         }
 
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/CursorBuilder.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/CursorBuilder.java
index 536cb42..1395440 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/CursorBuilder.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/CursorBuilder.java
@@ -149,6 +149,8 @@ public class CursorBuilder
                     return computeOr( partitionTxn, ( OrNode ) node, searchResult );
     
                     /* ----------  NOT IMPLEMENTED  ---------- */
+                case UNDEFINED:
+                    return Long.MAX_VALUE;
     
                 case ASSERTION:
                 case EXTENSIBLE:
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java
index 94a4f3d..438d4ac 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java
@@ -221,7 +221,7 @@ public class DefaultOptimizer implements Optimizer
             }
             else
             {
-                throw new IllegalArgumentException( I18n.err( I18n.ERR_712 ) );
+                count = Long.MAX_VALUE;
             }
         }
 
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/EvaluatorBuilder.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/EvaluatorBuilder.java
index a67d2cc..109e130 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/EvaluatorBuilder.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/EvaluatorBuilder.java
@@ -66,7 +66,7 @@ public class EvaluatorBuilder
     private final Store db;
     private final SchemaManager schemaManager;
 
-    private static final EmptyEvaluator EMPTY_EVALLUATOR = new EmptyEvaluator();
+    private static final EmptyEvaluator EMPTY_EVALUATOR = new EmptyEvaluator();
 
     /**
      * Creates a top level Evaluator where leaves are delegated to a leaf node
@@ -88,7 +88,7 @@ public class EvaluatorBuilder
 
         if ( ( count != null ) && ( ( Long ) count == 0L ) )
         {
-            return EMPTY_EVALLUATOR;
+            return EMPTY_EVALUATOR;
         }
 
         switch ( node.getAssertionType() )
@@ -136,6 +136,9 @@ public class EvaluatorBuilder
 
                 /* ----------  NOT IMPLEMENTED  ---------- */
 
+            case UNDEFINED:
+                return new EmptyEvaluator();
+                
             case ASSERTION:
             case EXTENSIBLE:
                 throw new NotImplementedException();
@@ -156,7 +159,7 @@ public class EvaluatorBuilder
         switch ( size )
         {
             case 0:
-                return EMPTY_EVALLUATOR;
+                return EMPTY_EVALUATOR;
 
             case 1:
                 return evaluators.get( 0 );
@@ -177,7 +180,7 @@ public class EvaluatorBuilder
         switch ( size )
         {
             case 0:
-                return EMPTY_EVALLUATOR;
+                return EMPTY_EVALUATOR;
 
             case 1:
                 return evaluators.get( 0 );