Repository: atlas
Updated Branches:
  refs/heads/branch-0.8 0e80d9b37 -> 74f5ebe15


ATLAS-2274: search for classification '*' with a typeName filter results in 
error
ATLAS-2277: search for classification '*' doesn't honor 
excludeDeletedEntities=true

(cherry picked from commit a7e89196fe7f084cdc5a6e57916bb64ef1d6b466)


Project: http://git-wip-us.apache.org/repos/asf/atlas/repo
Commit: http://git-wip-us.apache.org/repos/asf/atlas/commit/74f5ebe1
Tree: http://git-wip-us.apache.org/repos/asf/atlas/tree/74f5ebe1
Diff: http://git-wip-us.apache.org/repos/asf/atlas/diff/74f5ebe1

Branch: refs/heads/branch-0.8
Commit: 74f5ebe1504471376df7795efd8c839fe2a6d785
Parents: 0e80d9b
Author: Madhan Neethiraj <[email protected]>
Authored: Sat Nov 25 22:03:48 2017 -0800
Committer: Madhan Neethiraj <[email protected]>
Committed: Mon Nov 27 11:39:58 2017 -0800

----------------------------------------------------------------------
 .../discovery/ClassificationSearchProcessor.java   | 13 ++++++++++---
 .../atlas/discovery/EntitySearchProcessor.java     | 17 ++++++++++++++---
 2 files changed, 24 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/atlas/blob/74f5ebe1/repository/src/main/java/org/apache/atlas/discovery/ClassificationSearchProcessor.java
----------------------------------------------------------------------
diff --git 
a/repository/src/main/java/org/apache/atlas/discovery/ClassificationSearchProcessor.java
 
b/repository/src/main/java/org/apache/atlas/discovery/ClassificationSearchProcessor.java
index 0a9e846..1565977 100644
--- 
a/repository/src/main/java/org/apache/atlas/discovery/ClassificationSearchProcessor.java
+++ 
b/repository/src/main/java/org/apache/atlas/discovery/ClassificationSearchProcessor.java
@@ -58,7 +58,7 @@ public class ClassificationSearchProcessor extends 
SearchProcessor {
     private final AtlasIndexQuery indexQuery;
     private final AtlasGraphQuery tagGraphQueryWithAttributes;
     private final AtlasGraphQuery entityGraphQueryTraitNames;
-    private final Predicate       entityPredicateTraitNames;
+    private       Predicate       entityPredicateTraitNames;
 
     private final String              gremlinTagFilterQuery;
     private final Map<String, Object> gremlinQueryBindings;
@@ -144,12 +144,19 @@ public class ClassificationSearchProcessor extends 
SearchProcessor {
 
             if (classificationType != SearchContext.MATCH_ALL_CLASSIFICATION) {
                 entityGraphQueryTraitNames = 
graph.query().in(Constants.TRAIT_NAMES_PROPERTY_KEY, typeAndSubTypes);
+                entityPredicateTraitNames  = 
SearchPredicateUtil.getContainsAnyPredicateGenerator().generatePredicate(Constants.TRAIT_NAMES_PROPERTY_KEY,
 classificationType.getTypeAndAllSubTypes(), List.class);
             } else {
                 entityGraphQueryTraitNames = 
graph.query().has(Constants.TRAIT_NAMES_PROPERTY_KEY, NOT_EQUAL, null);
+                entityPredicateTraitNames = 
SearchPredicateUtil.getNotNullPredicateGenerator().generatePredicate(Constants.TRAIT_NAMES_PROPERTY_KEY,
 null, List.class);
             }
 
-            entityPredicateTraitNames   = 
SearchPredicateUtil.getContainsAnyPredicateGenerator()
-                                                             
.generatePredicate(Constants.TRAIT_NAMES_PROPERTY_KEY, 
classificationType.getTypeAndAllSubTypes(), List.class);
+            if (context.getSearchParameters().getExcludeDeletedEntities()) {
+                entityGraphQueryTraitNames.has(Constants.STATE_PROPERTY_KEY, 
"ACTIVE");
+
+                final Predicate activePredicate = 
SearchPredicateUtil.getEQPredicateGenerator().generatePredicate(Constants.STATE_PROPERTY_KEY,
 "ACTIVE", String.class);
+
+                entityPredicateTraitNames = 
PredicateUtils.andPredicate(entityPredicateTraitNames, activePredicate);
+            }
 
             gremlinTagFilterQuery = null;
             gremlinQueryBindings  = null;

http://git-wip-us.apache.org/repos/asf/atlas/blob/74f5ebe1/repository/src/main/java/org/apache/atlas/discovery/EntitySearchProcessor.java
----------------------------------------------------------------------
diff --git 
a/repository/src/main/java/org/apache/atlas/discovery/EntitySearchProcessor.java
 
b/repository/src/main/java/org/apache/atlas/discovery/EntitySearchProcessor.java
index 87efed7..1119463 100644
--- 
a/repository/src/main/java/org/apache/atlas/discovery/EntitySearchProcessor.java
+++ 
b/repository/src/main/java/org/apache/atlas/discovery/EntitySearchProcessor.java
@@ -39,6 +39,8 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
+import static 
org.apache.atlas.repository.graphdb.AtlasGraphQuery.ComparisionOperator.NOT_EQUAL;
+
 public class EntitySearchProcessor extends SearchProcessor {
     private static final Logger LOG      = 
LoggerFactory.getLogger(EntitySearchProcessor.class);
     private static final Logger PERF_LOG = 
AtlasPerfTracer.getPerfLogger("EntitySearchProcessor");
@@ -66,10 +68,15 @@ public class EntitySearchProcessor extends SearchProcessor {
 
         final Predicate typeNamePredicate = 
SearchPredicateUtil.getINPredicateGenerator()
                                                                
.generatePredicate(Constants.TYPE_NAME_PROPERTY_KEY, typeAndSubTypes, 
String.class);
-        final Predicate traitPredicate    = 
SearchPredicateUtil.getContainsAnyPredicateGenerator()
-                                                               
.generatePredicate(Constants.TRAIT_NAMES_PROPERTY_KEY, 
classificationTypeAndSubTypes, List.class);
         final Predicate activePredicate   = 
SearchPredicateUtil.getEQPredicateGenerator()
                                                                
.generatePredicate(Constants.STATE_PROPERTY_KEY, "ACTIVE", String.class);
+        final Predicate traitPredicate;
+
+        if (classificationType == SearchContext.MATCH_ALL_CLASSIFICATION) {
+            traitPredicate = 
SearchPredicateUtil.getNotNullPredicateGenerator().generatePredicate(Constants.TRAIT_NAMES_PROPERTY_KEY,
 null, List.class);
+        } else {
+            traitPredicate = 
SearchPredicateUtil.getContainsAnyPredicateGenerator().generatePredicate(Constants.TRAIT_NAMES_PROPERTY_KEY,
 classificationTypeAndSubTypes, List.class);
+        }
 
         processSearchAttributes(entityType, filterCriteria, indexAttributes, 
graphAttributes, allAttributes);
 
@@ -122,7 +129,11 @@ public class EntitySearchProcessor extends SearchProcessor 
{
 
             // If we need to filter on the trait names then we need to build 
the query and equivalent in-memory predicate
             if (filterClassification) {
-                query.in(Constants.TRAIT_NAMES_PROPERTY_KEY, 
classificationTypeAndSubTypes);
+                if (classificationType == 
SearchContext.MATCH_ALL_CLASSIFICATION) {
+                    query.has(Constants.TRAIT_NAMES_PROPERTY_KEY, NOT_EQUAL, 
null);
+                } else {
+                    query.in(Constants.TRAIT_NAMES_PROPERTY_KEY, 
classificationTypeAndSubTypes);
+                }
 
                 // Construct a parallel in-memory predicate
                 if (graphQueryPredicate != null) {

Reply via email to