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")