You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by ni...@apache.org on 2020/03/11 06:59:26 UTC

[atlas] 02/02: ATLAS-3647: Fix System attribute search when IsIncomplete Attribute has 1, null as values.

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

nixon pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/atlas.git

commit c6cac0301707e0d5ac983902a0c2aeefb148c872
Author: mayanknj <ma...@freestoneinfotech.com>
AuthorDate: Mon Mar 2 16:55:08 2020 +0530

    ATLAS-3647: Fix System attribute search when IsIncomplete Attribute has 1,null as values.
    
    Signed-off-by: nixonrodrigues <ni...@apache.org>
---
 .../apache/atlas/discovery/SearchProcessor.java    | 38 ++++++++++++++++++++--
 1 file changed, 36 insertions(+), 2 deletions(-)

diff --git a/repository/src/main/java/org/apache/atlas/discovery/SearchProcessor.java b/repository/src/main/java/org/apache/atlas/discovery/SearchProcessor.java
index cd01443..ddd3e60 100644
--- a/repository/src/main/java/org/apache/atlas/discovery/SearchProcessor.java
+++ b/repository/src/main/java/org/apache/atlas/discovery/SearchProcessor.java
@@ -222,9 +222,43 @@ public abstract class SearchProcessor {
                 processSearchAttributes(structType, criteria, indexFiltered, graphFiltered, allAttributes);
             }
         } else if (StringUtils.isNotEmpty(filterCriteria.getAttributeName())) {
-            try {
-                String attributeName = filterCriteria.getAttributeName();
+            String attributeName = filterCriteria.getAttributeName();
+
+            if (StringUtils.equals(attributeName, Constants.IS_INCOMPLETE_PROPERTY_KEY)) {
+                // when entity is incomplete (i.e. shell entity):
+                //   vertex property IS_INCOMPLETE_PROPERTY_KEY will be set to INCOMPLETE_ENTITY_VALUE
+                // when entity is not incomplete (i.e. not a shell entity):
+                //   vertex property IS_INCOMPLETE_PROPERTY_KEY will not be set
+
+                String attributeValue = filterCriteria.getAttributeValue();
+
+                switch (filterCriteria.getOperator()) {
+                    case EQ:
+                        if (attributeValue == null || StringUtils.equals(attributeValue, "0") || StringUtils.equalsIgnoreCase(attributeValue, "false")) {
+                            filterCriteria.setOperator(SearchParameters.Operator.IS_NULL);
+                        } else {
+                            filterCriteria.setOperator(SearchParameters.Operator.EQ);
+                            filterCriteria.setAttributeValue(Constants.INCOMPLETE_ENTITY_VALUE.toString());
+                        }
+                    break;
 
+                    case NEQ:
+                        if (attributeValue == null || StringUtils.equals(attributeValue, "0") || StringUtils.equalsIgnoreCase(attributeValue, "false")) {
+                            filterCriteria.setOperator(SearchParameters.Operator.EQ);
+                            filterCriteria.setAttributeValue(Constants.INCOMPLETE_ENTITY_VALUE.toString());
+                        } else {
+                            filterCriteria.setOperator(SearchParameters.Operator.IS_NULL);
+                        }
+                    break;
+
+                    case NOT_NULL:
+                        filterCriteria.setOperator(SearchParameters.Operator.EQ);
+                        filterCriteria.setAttributeValue(Constants.INCOMPLETE_ENTITY_VALUE.toString());
+                    break;
+                }
+            }
+
+            try {
                 if (isIndexSearchable(filterCriteria, structType)) {
                     indexFiltered.add(attributeName);
                 } else {