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

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

commit 04537593853d5f8c1eae4f0c7253646a82199478
Author: Ashutosh Mestry <[email protected]>
AuthorDate: Thu Nov 21 21:08:08 2019 -0800

    ATLAS-3520: DSL Query special processing for '_'.
    
    (cherry picked from commit 7be3a6f7499970dbb026cbe1bd92e04c1865ebf0)
---
 .../main/java/org/apache/atlas/query/GremlinQueryComposer.java    | 8 +++++++-
 .../src/test/java/org/apache/atlas/query/DSLQueriesTest.java      | 5 +++++
 .../java/org/apache/atlas/query/GremlinQueryComposerTest.java     | 4 ++--
 3 files changed, 14 insertions(+), 3 deletions(-)

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 8cda325..95f3b44 100644
--- a/repository/src/main/java/org/apache/atlas/query/GremlinQueryComposer.java
+++ b/repository/src/main/java/org/apache/atlas/query/GremlinQueryComposer.java
@@ -43,6 +43,7 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
 import java.util.TimeZone;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -55,6 +56,7 @@ 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'";
     private static final String ISO8601_DATE_FORMAT = "yyyy-MM-dd";
+    private static final String REGEX_ALPHA_NUMERIC_PATTERN = "[a-zA-Z0-9]+";
 
     private static final ThreadLocal<DateFormat[]> DSL_DATE_FORMAT = 
ThreadLocal.withInitial(() -> {
         final String formats[] = {ISO8601_FORMAT, ISO8601_DATE_FORMAT};
@@ -199,7 +201,7 @@ public class GremlinQueryComposer {
             final AtlasStructType.AtlasAttribute attribute = 
context.getActiveEntityType().getAttribute(lhsI.getAttributeName());
             final AtlasStructDef.AtlasAttributeDef.IndexType indexType = 
attribute.getAttributeDef().getIndexType();
 
-            if (indexType == 
AtlasStructDef.AtlasAttributeDef.IndexType.STRING) {
+            if (indexType == AtlasStructDef.AtlasAttributeDef.IndexType.STRING 
|| !containsNumberAndLettersOnly(rhs)) {
                 add(GremlinClause.STRING_CONTAINS, getPropertyForClause(lhsI), 
IdentifierHelper.getFixedRegEx(rhs));
             } else {
                 add(GremlinClause.TEXT_CONTAINS, getPropertyForClause(lhsI), 
IdentifierHelper.getFixedRegEx(rhs));
@@ -224,6 +226,10 @@ public class GremlinQueryComposer {
         }
     }
 
+    private boolean containsNumberAndLettersOnly(String rhs) {
+        return Pattern.matches(REGEX_ALPHA_NUMERIC_PATTERN, rhs);
+    }
+
     private String parseNumber(String rhs, Context context) {
         return rhs.replace("'", "").replace("\"", "") + 
context.getNumericTypeFormatter();
     }
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 21c4fdf..5ace379 100644
--- a/repository/src/test/java/org/apache/atlas/query/DSLQueriesTest.java
+++ b/repository/src/test/java/org/apache/atlas/query/DSLQueriesTest.java
@@ -465,6 +465,11 @@ public class DSLQueriesTest extends BasicTestSetup {
     @DataProvider(name = "likeQueriesProvider")
     private Object[][] likeQueries() {
         return new Object[][]{
+                {"hive_table qualifiedName like \"*time_dim*\"", 1},
+                {"hive_db where qualifiedName like \"qualified:R*\"", 1},
+                {"hive_table db.name=\"Sales\"", 4},
+                {"hive_table qualifiedName =\"Sales.time_dim\" AND 
db.name=\"Sales\"", 1},
+                {"hive_table qualifiedName like \"*time_dim*\" AND 
db.name=\"Sales\"", 1},
                 {"hive_table where name like \"sa?es*\"", 3},
                 {"hive_db where name like \"R*\"", 1},
                 {"hive_db where hive_db.name like \"R???rt?*\" or hive_db.name 
like \"S?l?s\" or hive_db.name like\"Log*\"", 3},
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 c344dd4..959aa11 100644
--- 
a/repository/src/test/java/org/apache/atlas/query/GremlinQueryComposerTest.java
+++ 
b/repository/src/test/java/org/apache/atlas/query/GremlinQueryComposerTest.java
@@ -17,8 +17,6 @@
  */
 package org.apache.atlas.query;
 
-import afu.org.checkerframework.checker.igj.qual.I;
-import jnr.ffi.annotations.In;
 import org.apache.atlas.AtlasErrorCode;
 import org.apache.atlas.exception.AtlasBaseException;
 import org.apache.atlas.model.TypeCategory;
@@ -172,6 +170,8 @@ public class GremlinQueryComposerTest {
                 "g.V().has('__typeName', 'Table').has('Asset.__s_name', 
org.janusgraph.core.attribute.Text.textRegex(\"Tab.*\")).dedup().limit(25).toList()");
         verify("Table where owner like \"Tab*\"",
           "g.V().has('__typeName', 'Table').has('Table.owner', 
org.janusgraph.core.attribute.Text.textContainsRegex(\"Tab.*\")).dedup().limit(25).toList()");
+        verify("Table where owner like \"*Tab_*\"",
+                "g.V().has('__typeName', 'Table').has('Table.owner', 
org.janusgraph.core.attribute.Text.textRegex(\".*Tab_.*\")).dedup().limit(25).toList()");
         verify("from Table where (db.name = \"Reporting\")",
                 "g.V().has('__typeName', 
'Table').out('__Table.db').has('DB.name', 
eq(\"Reporting\")).dedup().in('__Table.db').dedup().limit(25).toList()");
     }

Reply via email to