This is an automated email from the ASF dual-hosted git repository. amestry 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 857ffa2 ATLAS-4122: Advanced Search: Literals with double-quotes. 857ffa2 is described below commit 857ffa2df5d08b5c336ff641fa5c10b9e589be70 Author: Ashutosh Mestry <ames...@cloudera.com> AuthorDate: Tue Feb 2 20:59:07 2021 -0800 ATLAS-4122: Advanced Search: Literals with double-quotes. --- .../query/executors/GremlinClauseToTraversalTranslator.java | 5 +++-- .../src/test/java/org/apache/atlas/query/DSLQueriesTest.java | 9 ++++++--- .../java/org/apache/atlas/query/GremlinQueryComposerTest.java | 8 ++++++++ 3 files changed, 17 insertions(+), 5 deletions(-) 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 a7b05fd..156a65c 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 @@ -48,6 +48,8 @@ public class GremlinClauseToTraversalTranslator { private static final String EDGE_NAME_CLASSIFIED_AS = "classifiedAs"; private static final String EDGE_NAME_TRAIT_NAMES = "__traitNames"; private static final String EDGE_NAME_PROPAGATED_TRAIT_NAMES = "__propagatedTraitNames"; + private static final String[] STR_TOKEN_SEARCH = new String[]{"[", "]", "'", "\""}; + private static final String[] STR_TOKEN_REPLACE = new String[]{"", "", "", ""}; private final AtlasGraph graph; @@ -293,8 +295,7 @@ public class GremlinClauseToTraversalTranslator { } private String[] csvToArray(String strRhs) { - String csvRow = StringUtils.replaceEach(strRhs, new String[]{"[", "]", "'"}, new String[]{"", "", ""}); - + String csvRow = StringUtils.replaceEach(strRhs, STR_TOKEN_SEARCH, STR_TOKEN_REPLACE); return csvRow.split(","); } 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 359cb31..0c1dd59 100644 --- a/repository/src/test/java/org/apache/atlas/query/DSLQueriesTest.java +++ b/repository/src/test/java/org/apache/atlas/query/DSLQueriesTest.java @@ -226,7 +226,8 @@ public class DSLQueriesTest extends BasicTestSetup { {"hive_table hasTerm \"modernTrade@salesGlossary\" and hive_table isA Dimension",1, new ListValidator( "time_dim")}, {"hive_table hasTerm \"modernTrade@salesGlossary\" and db.name = \"Sales\" or (hive_table.name = \"sales_fact_monthly_mv\")", 2, new ListValidator("sales_fact_monthly_mv", "time_dim")}, {"hive_table where hive_table hasTerm \"modernTrade@salesGlossary\"", 2, new ListValidator("logging_fact_monthly_mv", "time_dim")}, - {"hive_table where (name = \"product_dim\" and hive_table hasTerm \"ecommerce@salesGlossary\")", 1, new ListValidator("product_dim")} + {"hive_table where (name = \"product_dim\" and hive_table hasTerm \"ecommerce@salesGlossary\")", 1, new ListValidator("product_dim")}, + {"hive_table where (name = 'product_dim' and hive_table hasTerm 'ecommerce@salesGlossary')", 1, new ListValidator("product_dim")} }; } @@ -283,14 +284,16 @@ public class DSLQueriesTest extends BasicTestSetup { {"DataSet where name='sales_fact'", 1}, {"Asset where name='sales_fact'", 1}, {"hive_db _NOT_CLASSIFIED", 3}, - {"_CLASSIFIED", 23} + {"_CLASSIFIED", 23}, + {"hive_db where name = [\"Reporting\",\"Sales\"]", 2}, + {"hive_db where name = ['Reporting', 'Sales']", 2}, }; } @Test(dataProvider = "basicProvider") public void basic(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 = "systemAttributesProvider") 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 0e8af18..3594e2f 100644 --- a/repository/src/test/java/org/apache/atlas/query/GremlinQueryComposerTest.java +++ b/repository/src/test/java/org/apache/atlas/query/GremlinQueryComposerTest.java @@ -41,6 +41,14 @@ import static org.testng.Assert.fail; import static org.apache.atlas.type.AtlasStructType.AtlasAttribute.AtlasRelationshipEdgeDirection.OUT; public class GremlinQueryComposerTest { @Test + public void withinClause() { + String expected1 = "g.V().has('__typeName', within('Asset','Table')).has('Asset.__s_name', within('t1','t2','t3')).dedup().limit(25).toList()"; + String expected2 = "g.V().has('__typeName', within('Asset','Table')).has('Asset.__s_name', within(\"t1\",\"t2\",\"t3\")).dedup().limit(25).toList()"; + verify("Asset where name=['t1', 't2', 't3']", expected1); + verify("Asset where name=[\"t1\", \"t2\", \"t3\"]", expected2); + } + + @Test public void classification() { String expected = "g.V().outE('classifiedAs').has('__name', within('PII')).outV().dedup().limit(25).toList()"; verify("PII", expected);