You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by ra...@apache.org on 2022/03/08 18:23:38 UTC

[atlas] branch branch-2.0 updated: ATLAS-4560 : DSL Search : Error when keyword 'limit' is present in the search value

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

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


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new db32748  ATLAS-4560 : DSL Search : Error when keyword 'limit' is present in the search value
db32748 is described below

commit db3274852615b17acd3ee967cb7bb82b8c995e70
Author: snehal.ambavkar <sn...@cloudera.com>
AuthorDate: Thu Mar 3 22:51:08 2022 +0530

    ATLAS-4560 : DSL Search : Error when keyword 'limit' is present in the search value
    
    Signed-off-by: radhikakundam <ra...@apache.org>
    (cherry picked from commit f12b0cde76b9c17080f12a5be59e7ce8ee4dc881)
---
 .../query/executors/TraversalBasedExecutor.java    |  5 ---
 .../test/java/org/apache/atlas/BasicTestSetup.java | 11 +++++--
 .../atlas/discovery/AtlasDiscoveryServiceTest.java |  8 ++---
 .../org/apache/atlas/query/BaseDSLComposer.java    |  1 +
 .../org/apache/atlas/query/DSLQueriesTest.java     | 37 ++++++++++++----------
 .../apache/atlas/query/TraversalComposerTest.java  | 16 ++++++++++
 6 files changed, 51 insertions(+), 27 deletions(-)

diff --git a/repository/src/main/java/org/apache/atlas/query/executors/TraversalBasedExecutor.java b/repository/src/main/java/org/apache/atlas/query/executors/TraversalBasedExecutor.java
index ecd82e3..5a5b7e7 100644
--- a/repository/src/main/java/org/apache/atlas/query/executors/TraversalBasedExecutor.java
+++ b/repository/src/main/java/org/apache/atlas/query/executors/TraversalBasedExecutor.java
@@ -44,7 +44,6 @@ public class TraversalBasedExecutor implements DSLQueryExecutor {
     private static final String DSL_KEYWORD_LIMIT             = "limit";
     private static final String DSL_KEYWORD_OFFSET            = "offset";
     private static final String DEFAULT_LIMIT_OFFSET_TEMPLATE = " limit %d offset %d";
-    private static final String CLAUSE_OFFSET_ZERO            = " offset 0";
 
     private static final Translator translator;
 
@@ -144,10 +143,6 @@ public class TraversalBasedExecutor implements DSLQueryExecutor {
                 query += String.format(DEFAULT_LIMIT_OFFSET_TEMPLATE, params.limit(), params.offset());
             }
 
-            if (query.contains(DSL_KEYWORD_LIMIT) && !query.contains(DSL_KEYWORD_OFFSET)) {
-                query += CLAUSE_OFFSET_ZERO;
-            }
-
             return query;
         }
     }
diff --git a/repository/src/test/java/org/apache/atlas/BasicTestSetup.java b/repository/src/test/java/org/apache/atlas/BasicTestSetup.java
index a1d7b62..9b0578f 100644
--- a/repository/src/test/java/org/apache/atlas/BasicTestSetup.java
+++ b/repository/src/test/java/org/apache/atlas/BasicTestSetup.java
@@ -165,7 +165,11 @@ public abstract class BasicTestSetup extends AtlasTestBase {
                 .of(column("time_id", "int", "time id"),
                         column("product_id", "int", "product id"),
                         column("customer_id", "int", "customer id", PII_CLASSIFICATION),
-                        column("sales", "double", "product id", METRIC_CLASSIFICATION));
+                        column("sales", "double", "product id", METRIC_CLASSIFICATION),
+                        column("test", "int", "test 1"),
+                        column("test_limit", "int", "test limit 1")
+                );
+
         entities.addAll(salesFactColumns);
 
         AtlasEntity salesFact = table("sales_fact", "sales fact table", salesDB, sd, "Joe", "Managed", salesFactColumns, FACT_CLASSIFICATION);
@@ -176,7 +180,10 @@ public abstract class BasicTestSetup extends AtlasTestBase {
                     .of(column("time_id", "int", "time id"),
                         column("app_id", "int", "app id"),
                         column("machine_id", "int", "machine id"),
-                        column("log", "string", "log data", LOGDATA_CLASSIFICATION));
+                        column("log", "string", "log data", LOGDATA_CLASSIFICATION),
+                        column("test", "int", "test 2"),
+                        column("test_limit", "int", "test limit 2")
+                    );
         entities.addAll(logFactColumns);
 
         List<AtlasEntity> timeDimColumns = ImmutableList
diff --git a/repository/src/test/java/org/apache/atlas/discovery/AtlasDiscoveryServiceTest.java b/repository/src/test/java/org/apache/atlas/discovery/AtlasDiscoveryServiceTest.java
index 8c257d8..fbc7396 100644
--- a/repository/src/test/java/org/apache/atlas/discovery/AtlasDiscoveryServiceTest.java
+++ b/repository/src/test/java/org/apache/atlas/discovery/AtlasDiscoveryServiceTest.java
@@ -906,9 +906,9 @@ public class AtlasDiscoveryServiceTest extends BasicTestSetup {
         List<AtlasEntityHeader> list = relResult.getEntities();
 
         Assert.assertTrue(CollectionUtils.isNotEmpty(list));
-        Assert.assertTrue(list.size() == 4);
+        Assert.assertTrue(list.size() == 6);
         Assert.assertTrue(list.get(0).getDisplayText().equalsIgnoreCase("customer_id"));
-        Assert.assertTrue(list.get(3).getDisplayText().equalsIgnoreCase("time_id"));
+        Assert.assertTrue(list.get(5).getDisplayText().equalsIgnoreCase("time_id"));
 
     }
 
@@ -924,8 +924,8 @@ public class AtlasDiscoveryServiceTest extends BasicTestSetup {
         List<AtlasEntityHeader> list = relResult.getEntities();
 
         Assert.assertTrue(CollectionUtils.isNotEmpty(list));
-        Assert.assertTrue(list.size() == 4);
-        Assert.assertTrue(list.get(3).getDisplayText().equalsIgnoreCase("customer_id"));
+        Assert.assertTrue(list.size() == 6);
+        Assert.assertTrue(list.get(5).getDisplayText().equalsIgnoreCase("customer_id"));
         Assert.assertTrue(list.get(0).getDisplayText().equalsIgnoreCase("time_id"));
     }
 
diff --git a/repository/src/test/java/org/apache/atlas/query/BaseDSLComposer.java b/repository/src/test/java/org/apache/atlas/query/BaseDSLComposer.java
index 419050e..24b3a2a 100644
--- a/repository/src/test/java/org/apache/atlas/query/BaseDSLComposer.java
+++ b/repository/src/test/java/org/apache/atlas/query/BaseDSLComposer.java
@@ -168,6 +168,7 @@ public class BaseDSLComposer {
                     (context.getActiveTypeName().equals("hive_db") && attributeName.equals("createTime")) ||
                     (context.getActiveTypeName().equals("hive_db") && attributeName.equals("description")) ||
                     (context.getActiveTypeName().equals("hive_db") && attributeName.equals("userDescription")) ||
+                    (context.getActiveTypeName().equals("hive_column") && attributeName.equals("name")) ||
                     (context.getActiveTypeName().equals("DB") && attributeName.equals("name")) ||
                     (context.getActiveTypeName().equals("DB") && attributeName.equals("owner")) ||
                     (context.getActiveTypeName().equals("DB") && attributeName.equals("clusterName")) ||
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 74cc4e0..1d3e245 100644
--- a/repository/src/test/java/org/apache/atlas/query/DSLQueriesTest.java
+++ b/repository/src/test/java/org/apache/atlas/query/DSLQueriesTest.java
@@ -55,6 +55,7 @@ public class DSLQueriesTest extends BasicTestSetup {
     private static final Logger LOG = LoggerFactory.getLogger(DSLQueriesTest.class);
 
     private final int DEFAULT_LIMIT = 25;
+    private final int DEFAULT_OFFSET = 0;
 
     @Inject
     private EntityDiscoveryService discoveryService;
@@ -272,7 +273,7 @@ public class DSLQueriesTest extends BasicTestSetup {
     @DataProvider(name = "basicProvider")
     private Object[][] basicQueries() {
         return new Object[][]{
-                {"hive_column where table.name = \"sales_fact_daily_mv\"", 4},
+                {"hive_column where table.name = \"sales_fact_daily_mv\"", 6},
                 {"hive_table where columns.name = \"app_id\"", 2},
                 {"from hive_db", 3},
                 {"hive_db", 3},
@@ -286,10 +287,10 @@ public class DSLQueriesTest extends BasicTestSetup {
                 {"hive_table isa Dimension", 5},
                 {"hive_column where hive_column isa PII", 4},
                 {"hive_column where hive_column isa PII select hive_column.qualifiedName", 4},
-                {"hive_column select hive_column.qualifiedName", 17},
-                {"hive_column select hive_column.qualifiedName, hive_column.description", 17},
-                {"hive_column select qualifiedName", 17},
-                {"hive_column select qualifiedName, description", 17},
+                {"hive_column select hive_column.qualifiedName", 21},
+                {"hive_column select hive_column.qualifiedName, hive_column.description", 21},
+                {"hive_column select qualifiedName", 21},
+                {"hive_column select qualifiedName, description", 21},
                 {"hive_column where hive_column.name=\"customer_id\"", 2},
                 {"hive_column where hive_column.name=\"customer_id\" select qualifiedName, description", 2},
                 {"from hive_table select hive_table.qualifiedName", 10},
@@ -352,12 +353,16 @@ public class DSLQueriesTest extends BasicTestSetup {
     @DataProvider(name = "limitProvider")
     private Object[][] limitQueries() {
         return new Object[][]{
-                {"hive_column", 17, 40, 0},
+                {"hive_column", 21, 40, 0},
                 {"hive_column limit 10", 10, 50, 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_column select hive_column.qualifiedName limit 40 offset 10", 11, 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},
+                {"hive_column where name = 'test' ", 2, DEFAULT_LIMIT, DEFAULT_OFFSET},
+                {"hive_column where name = 'test_limit' ", 2, DEFAULT_LIMIT, DEFAULT_OFFSET},
+                {"hive_column where name = 'test_limit' limit 1 ", 1, DEFAULT_LIMIT, DEFAULT_OFFSET},
+                {"hive_column where name = 'test_limit' limit 1 offset 1", 1, DEFAULT_LIMIT, DEFAULT_OFFSET},
         };
     }
 
@@ -411,11 +416,11 @@ 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.qualifiedName", 17},
+                {"hive_column select hive_column.qualifiedName", 21},
                 {"hive_column select hive_column.qualifiedName limit 5", 5},
                 {"hive_column select hive_column.qualifiedName limit 5 offset 36", 0},
 
-                {"hive_column select qualifiedName", 17},
+                {"hive_column select qualifiedName", 21},
                 {"hive_column select qualifiedName limit 5", 5},
                 {"hive_column select qualifiedName limit 5 offset 36 ", 0},
 
@@ -470,17 +475,17 @@ 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.qualifiedName orderby hive_column.qualifiedName ", 17, "qualifiedName", true},
+                {"hive_column as c select c.qualifiedName orderby hive_column.qualifiedName ", 21, "qualifiedName", true},
                 {"hive_column as c select c.qualifiedName orderby hive_column.qualifiedName limit 5", 5, "qualifiedName", true},
                 {"hive_column as c select c.qualifiedName orderby hive_column.qualifiedName desc limit 5", 5, "qualifiedName", false},
 
                 {"from hive_db orderby hive_db.owner limit 3", 3, "owner", true},
-                {"hive_column select hive_column.qualifiedName orderby hive_column.qualifiedName ", 17, "qualifiedName", true},
+                {"hive_column select hive_column.qualifiedName orderby hive_column.qualifiedName ", 21, "qualifiedName", true},
                 {"hive_column select hive_column.qualifiedName orderby hive_column.qualifiedName limit 5", 5, "qualifiedName", true},
                 {"hive_column select hive_column.qualifiedName orderby hive_column.qualifiedName desc limit 5", 5, "qualifiedName", false},
 
                 {"from hive_db orderby owner limit 3", 3, "owner", true},
-                {"hive_column select hive_column.qualifiedName orderby qualifiedName ", 17, "qualifiedName", true},
+                {"hive_column select hive_column.qualifiedName orderby qualifiedName ", 21, "qualifiedName", true},
                 {"hive_column select hive_column.qualifiedName orderby qualifiedName limit 5", 5, "qualifiedName", true},
                 {"hive_column select hive_column.qualifiedName orderby qualifiedName desc limit 5", 5, "qualifiedName", false},
 
@@ -500,14 +505,14 @@ 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.qualifiedName orderby hive_column.qualifiedName ", 17, "qualifiedName", true},
+                {"hive_column select hive_column.qualifiedName orderby hive_column.qualifiedName ", 21, "qualifiedName", true},
                 {"hive_column select hive_column.qualifiedName orderby hive_column.qualifiedName limit 5", 5, "qualifiedName", true},
                 {"hive_column select hive_column.qualifiedName orderby hive_column.qualifiedName desc limit 5", 5, "qualifiedName", false},
                 {"hive_column select hive_column.qualifiedName orderby hive_column.qualifiedName limit 5 offset 2", 5, "qualifiedName", true},
 
-                {"hive_column select qualifiedName orderby hive_column.qualifiedName", 17, "qualifiedName", true},
+                {"hive_column select qualifiedName orderby hive_column.qualifiedName", 21, "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 select qualifiedName orderby hive_column.qualifiedName desc", 21, "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},
@@ -699,7 +704,7 @@ public class DSLQueriesTest extends BasicTestSetup {
                         new TableValidator("__typeName", "count()")
                                 .row("Asset", 1)
                                 .row("hive_table", 10)
-                                .row("hive_column", 17)
+                                .row("hive_column", 21)
                                 .row("hive_db", 3)
                                 .row("hive_process", 7)
                 }
diff --git a/repository/src/test/java/org/apache/atlas/query/TraversalComposerTest.java b/repository/src/test/java/org/apache/atlas/query/TraversalComposerTest.java
index 6064577..359ac70 100644
--- a/repository/src/test/java/org/apache/atlas/query/TraversalComposerTest.java
+++ b/repository/src/test/java/org/apache/atlas/query/TraversalComposerTest.java
@@ -54,6 +54,22 @@ public class TraversalComposerTest extends BaseDSLComposer {
 
         verify("Table groupby(owner) select name, owner, clusterName orderby name",
                 "[JanusGraphStep([],[__typeName.eq(Table), Table.owner.neq]), GroupStep(value([CoalesceStep([value(Table.owner), (null)])]),[FoldStep]), DedupGlobalStep(null,null), RangeGlobalStep(0,25)]");
+
+        verify("hive_column where name = 'test'",
+                "[JanusGraphStep([],[__typeName.eq(hive_column), hive_column.name.eq(test)]), DedupGlobalStep(null,null), RangeGlobalStep(0,25)]");
+
+        verify("hive_column where name = 'test' limit 35 offset 6",
+                "[JanusGraphStep([],[__typeName.eq(hive_column), hive_column.name.eq(test)]), DedupGlobalStep(null,null), DedupGlobalStep(null,null), RangeGlobalStep(6,41)]");
+
+        verify("hive_column where name = 'test_limit'",
+                "[JanusGraphStep([],[__typeName.eq(hive_column), hive_column.name.eq(test_limit)]), DedupGlobalStep(null,null), RangeGlobalStep(0,25)]");
+
+        verify("hive_column where name = 'test_limit' limit 2",
+                "[JanusGraphStep([],[__typeName.eq(hive_column), hive_column.name.eq(test_limit)]), DedupGlobalStep(null,null), RangeGlobalStep(0,2)]");
+
+        verify("hive_column where name = 'test_limit' limit 2 offset 4",
+                "[JanusGraphStep([],[__typeName.eq(hive_column), hive_column.name.eq(test_limit)]), DedupGlobalStep(null,null), DedupGlobalStep(null,null), RangeGlobalStep(4,6)]");
+
     }
 
     private void verify(String dsl, String expected) {