Repository: atlas
Updated Branches:
  refs/heads/master 2a2b07e98 -> 5384a7427


ATLAS-2229: fix for unit test failures in DSL tests; also fixed incorrect 
handling of orderby/groupby when limit/offset is present


Project: http://git-wip-us.apache.org/repos/asf/atlas/repo
Commit: http://git-wip-us.apache.org/repos/asf/atlas/commit/5384a742
Tree: http://git-wip-us.apache.org/repos/asf/atlas/tree/5384a742
Diff: http://git-wip-us.apache.org/repos/asf/atlas/diff/5384a742

Branch: refs/heads/master
Commit: 5384a74274b435118e0c4d4c521557df0b0f7eef
Parents: 2a2b07e
Author: Madhan Neethiraj <mad...@apache.org>
Authored: Fri Dec 22 13:52:14 2017 -0800
Committer: Madhan Neethiraj <mad...@apache.org>
Committed: Fri Dec 22 13:52:14 2017 -0800

----------------------------------------------------------------------
 .../graphdb/janus/AtlasJanusGraph.java          |  2 +-
 .../org/apache/atlas/query/QueryProcessor.java  | 28 +++++----
 .../org/apache/atlas/query/BasicTestSetup.java  | 18 ++++--
 .../org/apache/atlas/query/DSLQueriesTest.java  | 63 ++++++++++----------
 4 files changed, 64 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/atlas/blob/5384a742/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusGraph.java
----------------------------------------------------------------------
diff --git 
a/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusGraph.java
 
b/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusGraph.java
index ad34787..cd847ad 100644
--- 
a/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusGraph.java
+++ 
b/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusGraph.java
@@ -344,7 +344,7 @@ public class AtlasJanusGraph implements 
AtlasGraph<AtlasJanusVertex, AtlasJanusE
 
             return result;
         } catch (ScriptException e) {
-            throw new 
AtlasBaseException(AtlasErrorCode.GREMLIN_SCRIPT_EXECUTION_FAILED, 
gremlinQuery);
+            throw new 
AtlasBaseException(AtlasErrorCode.GREMLIN_SCRIPT_EXECUTION_FAILED, e, 
gremlinQuery);
         } finally {
             releaseGremlinScriptEngine(scriptEngine);
         }

http://git-wip-us.apache.org/repos/asf/atlas/blob/5384a742/repository/src/main/java/org/apache/atlas/query/QueryProcessor.java
----------------------------------------------------------------------
diff --git 
a/repository/src/main/java/org/apache/atlas/query/QueryProcessor.java 
b/repository/src/main/java/org/apache/atlas/query/QueryProcessor.java
index 76a10e3..5e07a92 100644
--- a/repository/src/main/java/org/apache/atlas/query/QueryProcessor.java
+++ b/repository/src/main/java/org/apache/atlas/query/QueryProcessor.java
@@ -281,8 +281,7 @@ public class QueryProcessor {
             LOG.debug("addGroupBy(item={})", item);
         }
 
-        add(GremlinClause.GROUP);
-        addByClause(item, false);
+        addGroupByClause(item);
         hasGrpBy = true;
     }
 
@@ -347,8 +346,7 @@ public class QueryProcessor {
             LOG.debug("addOrderBy(name={}, isDesc={})", name, isDesc);
         }
 
-        add(GremlinClause.ORDER);
-        addByClause(name, isDesc);
+        addOrderByClause(name, isDesc);
     }
 
     private void updatePosition(GremlinClause clause) {
@@ -407,22 +405,29 @@ public class QueryProcessor {
         }
     }
 
-    private void addByClause(String name, boolean descr) {
+    private void addOrderByClause(String name, boolean descr) {
         if (LOG.isDebugEnabled()) {
-            LOG.debug("addByClause(name={})", name, descr);
+            LOG.debug("addOrderByClause(name={})", name, descr);
         }
 
         IdentifierHelper.Advice ia = getAdvice(name);
-        add((!descr) ? GremlinClause.BY : GremlinClause.BY_DESC, 
ia.getQualifiedName());
+        add((!descr) ? GremlinClause.ORDER_BY : GremlinClause.ORDER_BY_DESC, 
ia.getQualifiedName());
+    }
+
+    private void addGroupByClause(String name) {
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("addGroupByClause(name={})", name);
+        }
+
+        IdentifierHelper.Advice ia = getAdvice(name);
+        add(GremlinClause.GROUP_BY, ia.getQualifiedName());
     }
 
     private enum GremlinClause {
         AS("as('%s')"),
-        BY("by('%s')"),
-        BY_DESC("by('%s', decr)"),
         DEDUP("dedup()"),
         G("g"),
-        GROUP("group()"),
+        GROUP_BY("group().by('%')"),
         HAS("has('%s', %s)"),
         HAS_OPERATOR("has('%s', %s(%s))"),
         HAS_PROPERTY("has('%s')"),
@@ -436,7 +441,8 @@ public class QueryProcessor {
         NESTED_START("__"),
         NESTED_HAS_OPERATOR("has('%s', %s(%s))"),
         LIMIT("limit(%s)"),
-        ORDER("order()"),
+        ORDER_BY("order().by('%s')"),
+        ORDER_BY_DESC("order().by('%s', decr)"),
         OUT("out('%s')"),
         RANGE("range(%s, %s + %s)"),
         SELECT("select('%s')"),

http://git-wip-us.apache.org/repos/asf/atlas/blob/5384a742/repository/src/test/java/org/apache/atlas/query/BasicTestSetup.java
----------------------------------------------------------------------
diff --git 
a/repository/src/test/java/org/apache/atlas/query/BasicTestSetup.java 
b/repository/src/test/java/org/apache/atlas/query/BasicTestSetup.java
index c8d3378..4408e5d 100644
--- a/repository/src/test/java/org/apache/atlas/query/BasicTestSetup.java
+++ b/repository/src/test/java/org/apache/atlas/query/BasicTestSetup.java
@@ -148,6 +148,7 @@ public abstract class BasicTestSetup {
         entities.addAll(salesFactColumns);
 
         AtlasEntity salesFact = table("sales_fact", "sales fact table", 
salesDB, sd, "Joe", "Managed", salesFactColumns, "Fact");
+        salesFact.setAttribute("createTime", new Date(2018, 01, 01));
         entities.add(salesFact);
 
         List<AtlasEntity> logFactColumns = ImmutableList
@@ -179,7 +180,7 @@ public abstract class BasicTestSetup {
         AtlasEntity circularLineageTable1 = table("table1", "", reportingDB, 
sd, "Vimal", "Managed", salesFactColumns, "Metric");
         entities.add(circularLineageTable1);
 
-        AtlasEntity circularLineageTable2 = table("table2", "", reportingDB, 
sd, "Vimal", "Managed", salesFactColumns, "Metric");
+        AtlasEntity circularLineageTable2 = table("table2", "", reportingDB, 
sd, "Vimal 2", "Managed", salesFactColumns, "Metric");
         entities.add(circularLineageTable2);
 
         AtlasEntity circularLineage1Process = loadProcess("circularLineage1", 
"hive query for daily summary", "John ETL", 
ImmutableList.of(circularLineageTable1),
@@ -209,7 +210,7 @@ public abstract class BasicTestSetup {
         entities.addAll(productDimColumns);
 
         AtlasEntity productDim =
-                table("product_dim", "product dimension table", salesDB, sd, 
"John Doe", "Managed", productDimColumns,
+                table("product_dim", "product dimension table", salesDB, sd, 
"John Doe 2", "Managed", productDimColumns,
                       "Dimension");
         entities.add(productDim);
 
@@ -240,7 +241,7 @@ public abstract class BasicTestSetup {
         entities.add(loadSalesMonthly);
 
         AtlasEntity loggingFactMonthly =
-                table("logging_fact_monthly_mv", "logging fact monthly 
materialized view", logDB, sd, "Tim ETL",
+                table("logging_fact_monthly_mv", "logging fact monthly 
materialized view", logDB, sd, "Tim ETL 2",
                       "Managed", logFactColumns, "Log Data");
         entities.add(loggingFactMonthly);
 
@@ -318,9 +319,12 @@ public abstract class BasicTestSetup {
 
     protected AtlasEntity table(String name, String description, AtlasEntity 
db, AtlasEntity sd, String owner, String tableType,
                                 List<AtlasEntity> columns, String... 
traitNames) {
+        String dbName      = db.getAttribute(AtlasClient.NAME).toString();
+        String clusterName = db.getAttribute("clusterName").toString();
+
         AtlasEntity table = new AtlasEntity(HIVE_TABLE_TYPE);
         table.setAttribute("name", name);
-        table.setAttribute(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME, 
"qualified:" + name);
+        table.setAttribute(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME, dbName + 
"." + name);
         table.setAttribute("description", description);
         table.setAttribute("owner", owner);
         table.setAttribute("tableType", tableType);
@@ -335,6 +339,12 @@ public abstract class BasicTestSetup {
         table.setAttribute("columns", getAtlasObjectIds(columns));
         
table.setClassifications(Stream.of(traitNames).map(AtlasClassification::new).collect(Collectors.toList()));
 
+        sd.setAttribute(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME, dbName + "." 
+ name + "@" + clusterName + "_storage");
+
+        for (AtlasEntity column : columns) {
+            column.setAttribute(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME, 
dbName + "." + name + "." + column.getAttribute(AtlasClient.NAME).toString() + 
"@" + clusterName);
+        }
+
         return table;
     }
 

http://git-wip-us.apache.org/repos/asf/atlas/blob/5384a742/repository/src/test/java/org/apache/atlas/query/DSLQueriesTest.java
----------------------------------------------------------------------
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 34975cb..e4d4475 100644
--- a/repository/src/test/java/org/apache/atlas/query/DSLQueriesTest.java
+++ b/repository/src/test/java/org/apache/atlas/query/DSLQueriesTest.java
@@ -22,6 +22,7 @@ import org.apache.atlas.discovery.EntityDiscoveryService;
 import org.apache.atlas.exception.AtlasBaseException;
 import org.apache.atlas.model.discovery.AtlasSearchResult;
 import org.apache.atlas.runner.LocalSolrRunner;
+import org.apache.commons.collections.CollectionUtils;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.DataProvider;
@@ -116,11 +117,11 @@ public class DSLQueriesTest extends BasicTestSetup {
                 {"hive_table", 10},
                 {"hive_table isa Dimension", 3},
                 {"hive_column where hive_column isa PII", 4},
-                {"hive_column where hive_column isa PII select 
hive_column.name", 4},
-                {"hive_column select hive_column.name", 17},
-                {"hive_column select name", 17},
+                {"hive_column where hive_column isa PII select 
hive_column.qualifiedName", 4},
+                {"hive_column select hive_column.qualifiedName", 17},
+                {"hive_column select qualifiedName", 17},
                 {"hive_column where hive_column.name=\"customer_id\"", 2},
-                {"from hive_table select hive_table.name", 10},
+                {"from hive_table select hive_table.qualifiedName", 10},
                 {"hive_db where (name = \"Reporting\")", 1},
                 {"hive_db where (name = \"Reporting\") select name as _col_0, 
owner as _col_1", 1},
                 {"hive_db where hive_db is JdbcAccess", 0},
@@ -154,8 +155,8 @@ public class DSLQueriesTest extends BasicTestSetup {
         return new Object[][]{
                 {"hive_column", 17, 40, 0},
                 {"hive_column limit 10", 10, 50, 0},
-                {"hive_column select hive_column.name limit 10", 10, 5, 0},
-                {"hive_column select hive_column.name limit 40 offset 10", 7, 
40, 0},
+                {"hive_column select hive_column.qualifiedName limit 10", 10, 
5, 0},
+                {"hive_column select hive_column.qualifiedName limit 40 offset 
10", 7, 40, 0},
                 {"hive_db where name = 'Reporting' limit 10 offset 0", 1, 40, 
0},
                 {"hive_table where db.name = 'Reporting' limit 10", 4, 1, 0},
         };
@@ -171,7 +172,7 @@ public class DSLQueriesTest extends BasicTestSetup {
     private Object[][] syntaxVerifierQueries() {
         return new Object[][]{
                 {"hive_column  limit 10 ", 10},
-                {"hive_column select hive_column.name limit 10 ", 10},
+                {"hive_column select hive_column.qualifiedName limit 10 ", 10},
                 {"from hive_db", 3},
                 {"from hive_db limit 2", 2},
                 {"from hive_db limit 2 offset 0", 2},
@@ -210,13 +211,13 @@ public class DSLQueriesTest extends BasicTestSetup {
                 {"hive_column where hive_column isa PII limit 5 offset 1", 3},
                 {"hive_column where hive_column isa PII limit 5 offset 5", 0},
 
-                {"hive_column select hive_column.name", 17},
-                {"hive_column select hive_column.name limit 5", 5},
-                {"hive_column select hive_column.name limit 5 offset 36", 0},
+                {"hive_column select hive_column.qualifiedName", 17},
+                {"hive_column select hive_column.qualifiedName limit 5", 5},
+                {"hive_column select hive_column.qualifiedName limit 5 offset 
36", 0},
 
-                {"hive_column select name", 17},
-                {"hive_column select name limit 5", 5},
-                {"hive_column select name limit 5 offset 36 ", 0},
+                {"hive_column select qualifiedName", 17},
+                {"hive_column select qualifiedName limit 5", 5},
+                {"hive_column select qualifiedName limit 5 offset 36 ", 0},
 
                 {"hive_column where hive_column.name=\"customer_id\"", 2},
                 {"hive_column where hive_column.name=\"customer_id\" limit 2", 
2},
@@ -269,19 +270,19 @@ public class DSLQueriesTest extends BasicTestSetup {
     private Object[][] orderByQueries() {
         return new Object[][]{
                 {"from hive_db as h orderby h.owner limit 3", 3, "owner", 
true},
-                {"hive_column as c select c.name orderby hive_column.name ", 
17, "c.name", true},
-                {"hive_column as c select c.name orderby hive_column.name 
limit 5", 5, "c.name", true},
-                {"hive_column as c select c.name orderby hive_column.name desc 
limit 5", 5, "c.name", false},
+                {"hive_column as c select c.qualifiedName orderby 
hive_column.qualifiedName ", 17, "c.qualifiedName", true},
+                {"hive_column as c select c.qualifiedName orderby 
hive_column.qualifiedName limit 5", 5, "c.qualifiedName", true},
+                {"hive_column as c select c.qualifiedName orderby 
hive_column.qualifiedName desc limit 5", 5, "c.qualifiedName", false},
 
                 {"from hive_db orderby hive_db.owner limit 3", 3, "owner", 
true},
-                {"hive_column select hive_column.name orderby hive_column.name 
", 17, "hive_column.name", true},
-                {"hive_column select hive_column.name orderby hive_column.name 
limit 5", 5, "hive_column.name", true},
-                {"hive_column select hive_column.name orderby hive_column.name 
desc limit 5", 5, "hive_column.name", false},
+                {"hive_column select hive_column.qualifiedName orderby 
hive_column.qualifiedName ", 17, "hive_column.qualifiedName", true},
+                {"hive_column select hive_column.qualifiedName orderby 
hive_column.qualifiedName limit 5", 5, "hive_column.qualifiedName", true},
+                {"hive_column select hive_column.qualifiedName orderby 
hive_column.qualifiedName desc limit 5", 5, "hive_column.qualifiedName", false},
 
                 {"from hive_db orderby owner limit 3", 3, "owner", true},
-                {"hive_column select hive_column.name orderby name ", 17, 
"hive_column.name", true},
-                {"hive_column select hive_column.name orderby name limit 5", 
5, "hive_column.name", true},
-                {"hive_column select hive_column.name orderby name desc limit 
5", 5, "hive_column.name", false},
+                {"hive_column select hive_column.qualifiedName orderby 
qualifiedName ", 17, "hive_column.qualifiedName", true},
+                {"hive_column select hive_column.qualifiedName orderby 
qualifiedName limit 5", 5, "hive_column.qualifiedName", true},
+                {"hive_column select hive_column.qualifiedName orderby 
qualifiedName desc limit 5", 5, "hive_column.qualifiedName", false},
 
                 {"from hive_db orderby hive_db.owner limit 3", 3, "owner", 
true},
                 {"hive_db where hive_db.name=\"Reporting\" orderby 'owner'", 
1, "owner", true},
@@ -291,7 +292,7 @@ public class DSLQueriesTest extends BasicTestSetup {
                 {"hive_db has name orderby hive_db.owner limit 10 offset 0", 
3, "owner", true},
 
                 {"from hive_table select hive_table.owner orderby 
hive_table.owner", 10, "hive_table.owner", true},
-                {"from hive_table select hive_table.owner  orderby 
hive_table.owner limit 8", 8, "hive_table.owner", true},
+                {"from hive_table select hive_table.owner orderby 
hive_table.owner limit 8", 8, "hive_table.owner", true},
 
                 {"hive_table orderby hive_table.name", 10, "name", true},
 
@@ -300,15 +301,15 @@ public class DSLQueriesTest extends BasicTestSetup {
                 {"hive_table orderby hive_table.owner limit 8 offset 0", 8, 
"owner", true},
                 {"hive_table orderby hive_table.owner desc limit 8 offset 0", 
8, "owner", false},
 
-                {"hive_column select hive_column.name orderby hive_column.name 
", 17, "hive_column.name", true},
-                {"hive_column select hive_column.name orderby hive_column.name 
limit 5", 5, "hive_column.name", true},
-                {"hive_column select hive_column.name orderby hive_column.name 
desc limit 5", 5, "hive_column.name", false},
+                {"hive_column select hive_column.qualifiedName orderby 
hive_column.qualifiedName ", 17, "hive_column.qualifiedName", true},
+                {"hive_column select hive_column.qualifiedName orderby 
hive_column.qualifiedName limit 5", 5, "hive_column.qualifiedName", true},
+                {"hive_column select hive_column.qualifiedName orderby 
hive_column.qualifiedName desc limit 5", 5, "hive_column.qualifiedName", false},
 
-                {"hive_column select hive_column.name orderby hive_column.name 
limit 5 offset 2", 5, "hive_column.name", true},
+                {"hive_column select hive_column.qualifiedName orderby 
hive_column.qualifiedName limit 5 offset 2", 5, "hive_column.qualifiedName", 
true},
 
-                {"hive_column select name orderby hive_column.name", 17, 
"name", true},
-                {"hive_column select name orderby hive_column.name limit 5", 
5, "name", true},
-                {"hive_column select name orderby hive_column.name desc", 17, 
"name", false},
+                {"hive_column select qualifiedName orderby 
hive_column.qualifiedName", 17, "qualifiedName", true},
+                {"hive_column select qualifiedName orderby 
hive_column.qualifiedName limit 5", 5, "qualifiedName", true},
+                {"hive_column select qualifiedName orderby 
hive_column.qualifiedName desc", 17, "qualifiedName", false},
 
                 {"hive_column where hive_column.name=\"customer_id\" orderby 
hive_column.name", 2, "name", true},
                 {"hive_column where hive_column.name=\"customer_id\" orderby 
hive_column.name limit 2", 2, "name", true},
@@ -368,7 +369,7 @@ public class DSLQueriesTest extends BasicTestSetup {
     private void assertSearchResult(AtlasSearchResult searchResult, int 
expected) {
         assertNotNull(searchResult);
         if(expected == 0) {
-            assertNull(searchResult.getAttributes());
+            assertTrue(searchResult.getAttributes() == null || 
CollectionUtils.isEmpty(searchResult.getAttributes().getValues()));
             assertNull(searchResult.getEntities());
         } else if(searchResult.getEntities() != null) {
             assertEquals(searchResult.getEntities().size(), expected);

Reply via email to