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:21:04 UTC

[atlas] branch branch-2.0 updated (9fcdf0f -> 0dc87b8)

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

sarath pushed a change to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/atlas.git.


    from 9fcdf0f  ATLAS-4108: updated free-text search processor to support Elasticsearch
     new 63ef2d8  ATLAS-4110: updated handling of neq operator for recent changes in JanusGraph
     new 0dc87b8  ATLAS-4110: Inconsistency in the result of DSL query and basic query

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../src/main/java/org/apache/atlas/query/GremlinClause.java |  1 +
 .../java/org/apache/atlas/query/GremlinQueryComposer.java   | 13 +++++++++++--
 .../java/org/apache/atlas/query/RegistryBasedLookup.java    |  1 +
 .../query/executors/GremlinClauseToTraversalTranslator.java |  6 ++++++
 .../src/test/java/org/apache/atlas/BasicTestSetup.java      |  2 +-
 .../test/java/org/apache/atlas/query/DSLQueriesTest.java    |  5 ++++-
 .../org/apache/atlas/query/GremlinQueryComposerTest.java    |  6 ++++++
 7 files changed, 30 insertions(+), 4 deletions(-)


[atlas] 02/02: ATLAS-4110: Inconsistency in the result of DSL query and basic query

Posted by sa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 0dc87b8727f58b84c6f3dd2f147369a5395ed2c6
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>
    (cherry picked from commit c2ab99037637b7a918678c2fc46697fda95bfac2)
---
 .../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")


[atlas] 01/02: ATLAS-4110: updated handling of neq operator for recent changes in JanusGraph

Posted by sa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 63ef2d8b623c6bfb6da64d9a922c8222fd405ae9
Author: Deep Singh <de...@gmail.com>
AuthorDate: Thu Jan 21 17:14:12 2021 -0600

    ATLAS-4110: updated handling of neq operator for recent changes in JanusGraph
    
    Signed-off-by: Madhan Neethiraj <ma...@apache.org>
    (cherry picked from commit c48e4c393b747b25f1c399a2c37175e5004d1526)
---
 repository/src/main/java/org/apache/atlas/query/GremlinClause.java  | 1 +
 .../src/main/java/org/apache/atlas/query/GremlinQueryComposer.java  | 4 ++++
 .../test/java/org/apache/atlas/query/GremlinQueryComposerTest.java  | 6 ++++++
 3 files changed, 11 insertions(+)

diff --git a/repository/src/main/java/org/apache/atlas/query/GremlinClause.java b/repository/src/main/java/org/apache/atlas/query/GremlinClause.java
index 7a98ddd..b7e5330 100644
--- a/repository/src/main/java/org/apache/atlas/query/GremlinClause.java
+++ b/repository/src/main/java/org/apache/atlas/query/GremlinClause.java
@@ -25,6 +25,7 @@ public enum GremlinClause {
     GROUP_BY("group().by('%s')"),
     HAS("has('%s', %s)"),
     HAS_OPERATOR("has('%s', %s(%s))"),
+    HAS_NOT_OPERATOR("or(__.has('%s', neq(%s)), __.hasNot('%s'))"),
     HAS_PROPERTY("has('%s')"),
     WHERE("where(%s)"),
     HAS_NOT_PROPERTY("hasNot('%s')"),
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 c5c53fc..c7d01cf 100644
--- a/repository/src/main/java/org/apache/atlas/query/GremlinQueryComposer.java
+++ b/repository/src/main/java/org/apache/atlas/query/GremlinQueryComposer.java
@@ -219,6 +219,10 @@ public class GremlinQueryComposer {
                 }
             } else if (op == SearchParameters.Operator.IN) {
                 add(GremlinClause.HAS_OPERATOR, getPropertyForClause(lhsI), "within", rhs);
+            } else if (op == SearchParameters.Operator.NEQ) {
+                String propertyName = getPropertyForClause(lhsI);
+
+                add(GremlinClause.HAS_NOT_OPERATOR, propertyName, rhs, propertyName);
             } else {
                 Object normalizedRhs = getNormalizedAttrVal(lhsI, IdentifierHelper.removeQuotes(rhs));
 
diff --git a/repository/src/test/java/org/apache/atlas/query/GremlinQueryComposerTest.java b/repository/src/test/java/org/apache/atlas/query/GremlinQueryComposerTest.java
index 96e2840..0e8af18 100644
--- a/repository/src/test/java/org/apache/atlas/query/GremlinQueryComposerTest.java
+++ b/repository/src/test/java/org/apache/atlas/query/GremlinQueryComposerTest.java
@@ -385,6 +385,12 @@ public class GremlinQueryComposerTest {
     }
 
     @Test
+    public void whereClauseWithNEQCondition() {
+        verify("Table where owner != 'random'",
+                "g.V().has('__typeName', 'Table').or(__.has('Table.owner', neq('random')), __.hasNot('Table.owner')).dedup().limit(25).toList()");
+    }
+
+    @Test
     public void invalidQueries() {
         verify("hdfs_path like h1", "");
     }