ATLAS-4109: Advanced Search: Glossary: More Efficient Structure
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 b7e5330..7014b4a 100644
--- a/repository/src/main/java/org/apache/atlas/query/GremlinClause.java
+++ b/repository/src/main/java/org/apache/atlas/query/GremlinClause.java
@@ -69,7 +69,8 @@
// idx of the tuple field to be sorted on
INLINE_TUPLE_SORT_ASC(".sort{a,b -> a[%s] <=> b[%s]}"),
INLINE_TUPLE_SORT_DESC(".sort{a,b -> b[%s] <=> a[%s]}"),
- TERM("and(__.in('r:AtlasGlossarySemanticAssignment').has('AtlasGlossaryTerm.%s', eq('%s')).dedup())"),
+ TERM("where(in('r:AtlasGlossarySemanticAssignment').has('AtlasGlossaryTerm.%s', '%s'))"),
+
V("V()"),
VALUE_MAP("valueMap(%s)");
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 156a65c..26942c7 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
@@ -248,12 +248,10 @@
case TERM:
String term = String.format("AtlasGlossaryTerm.%s", values[0]);
-
- traversal.and(
- traversal.startAnonymousTraversal()
- .in(org.apache.atlas.repository.Constants.TERM_ASSIGNMENT_LABEL)
- .has(term, P.eq(values[1]))
- .dedup()
+ traversal.where(
+ traversal.startAnonymousTraversal()
+ .in(org.apache.atlas.repository.Constants.TERM_ASSIGNMENT_LABEL)
+ .has(term, P.eq(values[1]))
);
break;
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 3594e2f..3a2d66d 100644
--- a/repository/src/test/java/org/apache/atlas/query/GremlinQueryComposerTest.java
+++ b/repository/src/test/java/org/apache/atlas/query/GremlinQueryComposerTest.java
@@ -334,21 +334,17 @@
@Test
public void glossaryTermQueries() {
- verify("Table hasTerm sales", "g.V().has('__typeName', 'Table')." +
- "and(__.in('r:AtlasGlossarySemanticAssignment')." +
- "has('AtlasGlossaryTerm.name', eq('sales')).dedup())." +
- "dedup().limit(25).toList()");
+ verify("Table hasTerm sales", "g.V().has('__typeName', 'Table')" +
+ ".where(in('r:AtlasGlossarySemanticAssignment').has('AtlasGlossaryTerm.name', 'sales'))" +
+ ".dedup().limit(25).toList()");
verify("Table hasTerm \"sales@glossary\"", "g.V().has('__typeName', 'Table')." +
- "and(__.in('r:AtlasGlossarySemanticAssignment')." +
- "has('AtlasGlossaryTerm.qualifiedName', eq('sales@glossary')).dedup())." +
- "dedup().limit(25).toList()");
+ "where(in('r:AtlasGlossarySemanticAssignment').has('AtlasGlossaryTerm.qualifiedName', 'sales@glossary'))" +
+ ".dedup().limit(25).toList()");
verify("Table hasTerm \"sales@glossary\" and owner = \"fetl\"",
"g.V().has('__typeName', 'Table')" +
".and(" +
- "__.and(" +
- "__.in('r:AtlasGlossarySemanticAssignment').has('AtlasGlossaryTerm.qualifiedName', eq('sales@glossary'))" +
- ".dedup())," +
- "__.has('Table.owner', eq(\"fetl\"))" +
+ "__.where(in('r:AtlasGlossarySemanticAssignment').has('AtlasGlossaryTerm.qualifiedName', 'sales@glossary'))" +
+ ",__.has('Table.owner', eq(\"fetl\"))" +
").dedup().limit(25).toList()");
}