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 2018/07/05 16:35:32 UTC
atlas git commit: ATLAS-2777: Enhance advanced search (DSL) to
support classification search on _CLASSIFIED or _NOT_CLASSIFIED keyword
Repository: atlas
Updated Branches:
refs/heads/master a2c26bfc2 -> 9d4678e41
ATLAS-2777: Enhance advanced search (DSL) to support classification search on _CLASSIFIED or _NOT_CLASSIFIED keyword
Project: http://git-wip-us.apache.org/repos/asf/atlas/repo
Commit: http://git-wip-us.apache.org/repos/asf/atlas/commit/9d4678e4
Tree: http://git-wip-us.apache.org/repos/asf/atlas/tree/9d4678e4
Diff: http://git-wip-us.apache.org/repos/asf/atlas/diff/9d4678e4
Branch: refs/heads/master
Commit: 9d4678e41502c23abb3ad1d5e2cd0c9760679034
Parents: a2c26bf
Author: Sarath Subramanian <ss...@hortonworks.com>
Authored: Thu Jul 5 09:35:19 2018 -0700
Committer: Sarath Subramanian <ss...@hortonworks.com>
Committed: Thu Jul 5 09:35:19 2018 -0700
----------------------------------------------------------------------
.../org/apache/atlas/query/GremlinClause.java | 2 ++
.../atlas/query/GremlinQueryComposer.java | 24 ++++++++++++++++--
.../apache/atlas/query/RegistryBasedLookup.java | 26 ++++++++++++++++++--
3 files changed, 48 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/atlas/blob/9d4678e4/repository/src/main/java/org/apache/atlas/query/GremlinClause.java
----------------------------------------------------------------------
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 454b343..ca8419a 100644
--- a/repository/src/main/java/org/apache/atlas/query/GremlinClause.java
+++ b/repository/src/main/java/org/apache/atlas/query/GremlinClause.java
@@ -47,6 +47,8 @@ enum GremlinClause {
TEXT_PREFIX("has('%s', org.janusgraph.core.attribute.Text.textPrefix(%s))"),
TEXT_SUFFIX("has('%s', org.janusgraph.core.attribute.Text.textRegex(\".*\" + %s))"),
TRAIT("outE('classifiedAs').has('__name', within('%s')).outV()"),
+ ANY_TRAIT("or(has('__traitNames'), has('__propagatedTraitNames'))"),
+ NO_TRAIT("and(hasNot('__traitNames'), hasNot('__propagatedTraitNames'))"),
SELECT_NOOP_FN("def f(r){ r }; "),
SELECT_FN("def f(r){ t=[[%s]]; %s r.each({t.add([%s])}); t.unique(); }; "),
SELECT_ONLY_AGG_FN("def f(r){ t=[[%s]]; %s t.add([%s]); t;}; "),
http://git-wip-us.apache.org/repos/asf/atlas/blob/9d4678e4/repository/src/main/java/org/apache/atlas/query/GremlinQueryComposer.java
----------------------------------------------------------------------
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 9ad9a6e..17c837b 100644
--- a/repository/src/main/java/org/apache/atlas/query/GremlinQueryComposer.java
+++ b/repository/src/main/java/org/apache/atlas/query/GremlinQueryComposer.java
@@ -46,6 +46,9 @@ import java.util.TimeZone;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import static org.apache.atlas.model.discovery.SearchParameters.ALL_CLASSIFICATIONS;
+import static org.apache.atlas.model.discovery.SearchParameters.NO_CLASSIFICATIONS;
+
public class GremlinQueryComposer {
private static final Logger LOG = LoggerFactory.getLogger(GremlinQueryComposer.class);
private static final String ISO8601_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
@@ -112,7 +115,15 @@ public class GremlinQueryComposer {
IdentifierHelper.Info ia = createInfo(typeInfo.get());
if (ia.isTrait()) {
- addTrait(GremlinClause.TRAIT, ia);
+ String traitName = ia.get();
+
+ if (traitName.equalsIgnoreCase(ALL_CLASSIFICATIONS)) {
+ addTrait(GremlinClause.ANY_TRAIT, ia);
+ } else if (traitName.equalsIgnoreCase(NO_CLASSIFICATIONS)) {
+ addTrait(GremlinClause.NO_TRAIT, ia);
+ } else {
+ addTrait(GremlinClause.TRAIT, ia);
+ }
} else {
if (ia.hasSubtypes()) {
add(GremlinClause.HAS_TYPE_WITHIN, ia.getSubTypes());
@@ -144,7 +155,14 @@ public class GremlinQueryComposer {
}
IdentifierHelper.Info traitInfo = createInfo(traitName);
- addTrait(GremlinClause.TRAIT, traitInfo);
+
+ if (StringUtils.equals(traitName, ALL_CLASSIFICATIONS)) {
+ addTrait(GremlinClause.ANY_TRAIT, traitInfo);
+ } else if (StringUtils.equals(traitName, NO_CLASSIFICATIONS)) {
+ addTrait(GremlinClause.NO_TRAIT, traitInfo);
+ } else {
+ addTrait(GremlinClause.TRAIT, traitInfo);
+ }
}
public void addWhere(String lhs, String operator, String rhs) {
@@ -739,6 +757,8 @@ public class GremlinQueryComposer {
public boolean isValid(Context ctx, GremlinClause clause, IdentifierHelper.Info ia) {
switch (clause) {
case TRAIT:
+ case ANY_TRAIT:
+ case NO_TRAIT:
return check(ia.isTrait(), AtlasErrorCode.INVALID_DSL_UNKNOWN_CLASSIFICATION, ia.getRaw());
case HAS_TYPE:
http://git-wip-us.apache.org/repos/asf/atlas/blob/9d4678e4/repository/src/main/java/org/apache/atlas/query/RegistryBasedLookup.java
----------------------------------------------------------------------
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 808eab8..e0fb4d8 100644
--- a/repository/src/main/java/org/apache/atlas/query/RegistryBasedLookup.java
+++ b/repository/src/main/java/org/apache/atlas/query/RegistryBasedLookup.java
@@ -27,6 +27,11 @@ import org.apache.commons.lang.StringUtils;
import java.util.*;
+import static org.apache.atlas.discovery.SearchContext.MATCH_ALL_CLASSIFIED;
+import static org.apache.atlas.discovery.SearchContext.MATCH_ALL_NOT_CLASSIFIED;
+import static org.apache.atlas.model.discovery.SearchParameters.ALL_CLASSIFICATIONS;
+import static org.apache.atlas.model.discovery.SearchParameters.NO_CLASSIFICATIONS;
+
class RegistryBasedLookup implements Lookup {
private static final Set<String> SYSTEM_ATTRIBUTES = new HashSet<>(
Arrays.asList(Constants.GUID_PROPERTY_KEY,
@@ -56,7 +61,17 @@ class RegistryBasedLookup implements Lookup {
@Override
public AtlasType getType(String typeName) throws AtlasBaseException {
- return typeRegistry.getType(typeName);
+ AtlasType ret;
+
+ if (typeName.equalsIgnoreCase(ALL_CLASSIFICATIONS)) {
+ ret = MATCH_ALL_CLASSIFIED;
+ } else if (typeName.equalsIgnoreCase(NO_CLASSIFICATIONS)) {
+ ret = MATCH_ALL_NOT_CLASSIFIED;
+ } else {
+ ret = typeRegistry.getType(typeName);
+ }
+
+ return ret;
}
@Override
@@ -156,7 +171,14 @@ class RegistryBasedLookup implements Lookup {
public boolean isTraitType(String typeName) {
AtlasType t = null;
try {
- t = typeRegistry.getType(typeName);
+ if (typeName.equalsIgnoreCase(ALL_CLASSIFICATIONS)) {
+ t = MATCH_ALL_CLASSIFIED;
+ } else if (typeName.equalsIgnoreCase(NO_CLASSIFICATIONS)) {
+ t = MATCH_ALL_NOT_CLASSIFIED;
+ } else {
+ t = typeRegistry.getType(typeName);
+ }
+
} catch (AtlasBaseException e) {
return false;
}