You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by sa...@apache.org on 2021/01/26 01:09:33 UTC

[atlas] branch master updated: ATLAS-4110: Inconsistency in the result of DSL query and basic query

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

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


The following commit(s) were added to refs/heads/master by this push:
     new c2ab990  ATLAS-4110: Inconsistency in the result of DSL query and basic query
c2ab990 is described below

commit c2ab99037637b7a918678c2fc46697fda95bfac2
Author: Deep Singh <de...@gmail.com>
AuthorDate: Mon Jan 25 16:07:34 2021 -0600

    ATLAS-4110: Inconsistency in the result of DSL query and basic query
    
    Signed-off-by: Sarath Subramanian <sa...@apache.org>
---
 .../java/org/apache/atlas/query/GremlinQueryComposer.java     | 11 ++++++++---
 .../main/java/org/apache/atlas/query/RegistryBasedLookup.java |  1 +
 .../query/executors/GremlinClauseToTraversalTranslator.java   |  6 ++++++
 repository/src/test/java/org/apache/atlas/BasicTestSetup.java |  2 +-
 .../src/test/java/org/apache/atlas/query/DSLQueriesTest.java  |  5 ++++-
 5 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/repository/src/main/java/org/apache/atlas/query/GremlinQueryComposer.java b/repository/src/main/java/org/apache/atlas/query/GremlinQueryComposer.java
index c7d01cf..320acbe 100644
--- a/repository/src/main/java/org/apache/atlas/query/GremlinQueryComposer.java
+++ b/repository/src/main/java/org/apache/atlas/query/GremlinQueryComposer.java
@@ -181,6 +181,7 @@ public class GremlinQueryComposer {
         String                currentType = context.getActiveTypeName();
         IdentifierHelper.Info org         = null;
         IdentifierHelper.Info lhsI        = createInfo(lhs);
+        boolean rhsIsNotDateOrNumOrBool   = false;
 
         if (!lhsI.isPrimitive()) {
             introduceType(lhsI);
@@ -197,8 +198,12 @@ public class GremlinQueryComposer {
 
         if (lhsI.isDate()) {
             rhs = parseDate(rhs);
-        } else if (lhsI.isNumeric() && !StringUtils.equals(lhsI.getAttributeName(), Constants.IS_INCOMPLETE_PROPERTY_KEY)) {
-            rhs = parseNumber(rhs, this.context);
+        } else if (lhsI.isNumeric()) {
+            if(!StringUtils.equals(lhsI.getAttributeName(), Constants.IS_INCOMPLETE_PROPERTY_KEY)) {
+                rhs = parseNumber(rhs, this.context);
+            }
+        } else if (!IdentifierHelper.isTrueOrFalse(rhs)) {
+            rhsIsNotDateOrNumOrBool = true;
         }
 
         rhs = addQuotesIfNecessary(lhsI, rhs);
@@ -219,7 +224,7 @@ public class GremlinQueryComposer {
                 }
             } else if (op == SearchParameters.Operator.IN) {
                 add(GremlinClause.HAS_OPERATOR, getPropertyForClause(lhsI), "within", rhs);
-            } else if (op == SearchParameters.Operator.NEQ) {
+            } else if (op == SearchParameters.Operator.NEQ && rhsIsNotDateOrNumOrBool) {
                 String propertyName = getPropertyForClause(lhsI);
 
                 add(GremlinClause.HAS_NOT_OPERATOR, propertyName, rhs, propertyName);
diff --git a/repository/src/main/java/org/apache/atlas/query/RegistryBasedLookup.java b/repository/src/main/java/org/apache/atlas/query/RegistryBasedLookup.java
index 587a099..eb3c349 100644
--- a/repository/src/main/java/org/apache/atlas/query/RegistryBasedLookup.java
+++ b/repository/src/main/java/org/apache/atlas/query/RegistryBasedLookup.java
@@ -36,6 +36,7 @@ import static org.apache.atlas.model.discovery.SearchParameters.ALL_ENTITY_TYPES
 
 class RegistryBasedLookup implements Lookup {
     private static final Map<String, String> NUMERIC_ATTRIBUTES = new HashMap<String, String>() {{
+            put(AtlasBaseTypeDef.ATLAS_TYPE_BYTE, "");
             put(AtlasBaseTypeDef.ATLAS_TYPE_SHORT, "");
             put(AtlasBaseTypeDef.ATLAS_TYPE_INT, "");
             put(AtlasBaseTypeDef.ATLAS_TYPE_LONG, "L");
diff --git a/repository/src/main/java/org/apache/atlas/query/executors/GremlinClauseToTraversalTranslator.java b/repository/src/main/java/org/apache/atlas/query/executors/GremlinClauseToTraversalTranslator.java
index be55c8e..a7b05fd 100644
--- a/repository/src/main/java/org/apache/atlas/query/executors/GremlinClauseToTraversalTranslator.java
+++ b/repository/src/main/java/org/apache/atlas/query/executors/GremlinClauseToTraversalTranslator.java
@@ -146,6 +146,12 @@ public class GremlinClauseToTraversalTranslator {
                     traversal.has(values[0], predicate);
                     break;
 
+                case HAS_NOT_OPERATOR:
+                    traversal.or(
+                            traversal.startAnonymousTraversal().has(values[0], P.neq(values[1])),
+                            traversal.startAnonymousTraversal().hasNot(values[0]));
+                    break;
+
                 case HAS_TYPE:
                     traversal.has(Constants.TYPE_NAME_PROPERTY_KEY, values[0]);
                     break;
diff --git a/repository/src/test/java/org/apache/atlas/BasicTestSetup.java b/repository/src/test/java/org/apache/atlas/BasicTestSetup.java
index 4be0940..99e075a 100644
--- a/repository/src/test/java/org/apache/atlas/BasicTestSetup.java
+++ b/repository/src/test/java/org/apache/atlas/BasicTestSetup.java
@@ -229,7 +229,7 @@ public abstract class BasicTestSetup extends AtlasTestBase {
                                          ImmutableList.of(salesFactDaily), "create table as select ", "plan", "id", "graph", ETL_CLASSIFICATION);
         entities.add(loadSalesDaily);
 
-        AtlasEntity logDB = database("Logging", "logging database", "Tim ETL", "hdfs://host:8000/apps/warehouse/logging");
+        AtlasEntity logDB = database("Logging", null, "Tim ETL", "hdfs://host:8000/apps/warehouse/logging");
         entities.add(logDB);
 
         sd = storageDescriptor("hdfs://host:8000/apps/warehouse/sales", "TextInputFormat", "TextOutputFormat", true, ImmutableList.of(column("time_id", "int", "time id")));
diff --git a/repository/src/test/java/org/apache/atlas/query/DSLQueriesTest.java b/repository/src/test/java/org/apache/atlas/query/DSLQueriesTest.java
index 3f4559a..359cb31 100644
--- a/repository/src/test/java/org/apache/atlas/query/DSLQueriesTest.java
+++ b/repository/src/test/java/org/apache/atlas/query/DSLQueriesTest.java
@@ -423,6 +423,9 @@ public class DSLQueriesTest extends BasicTestSetup {
                 {"hive_db as d where owner = ['John ETL', 'Jane BI']", 2},
                 {"hive_db as d where owner = ['John ETL', 'Jane BI'] limit 10", 2},
                 {"hive_db as d where owner = ['John ETL', 'Jane BI'] limit 10 offset 1", 1},
+                {"hive_db where description != 'Random'", 3},
+                {"hive_db where (owner = \"John ETL\" and description != Random)", 1},
+                {"hive_db where (owner = \"Tim ETL\" and description != Random)", 1},
                 {"hive_db where (name='Reporting' or ((name='Logging' and owner = 'Jane BI') and (name='Logging' and owner = 'John ETL')))", 1}
         };
     }
@@ -430,7 +433,7 @@ public class DSLQueriesTest extends BasicTestSetup {
     @Test(dataProvider = "syntaxProvider")
     public void syntax(String query, int expected) throws AtlasBaseException {
         queryAssert(query, expected, DEFAULT_LIMIT, 0);
-//        queryAssert(query.replace("where", " "), expected, DEFAULT_LIMIT, 0);
+        queryAssert(query.replace("where", " "), expected, DEFAULT_LIMIT, 0);
     }
 
     @DataProvider(name = "orderByProvider")