You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2017/07/27 17:28:27 UTC

[2/3] calcite git commit: [CALCITE-1898] LIKE must match '.' (period) literally

[CALCITE-1898] LIKE must match '.' (period) literally


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

Branch: refs/heads/master
Commit: ee0afb6e38ce09f82cc1883aae757306b55ce8fe
Parents: 0cbd2a1
Author: Julian Hyde <jh...@apache.org>
Authored: Sat Jul 22 17:25:47 2017 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Mon Jul 24 21:39:43 2017 -0700

----------------------------------------------------------------------
 .../main/java/org/apache/calcite/runtime/Like.java |  2 +-
 .../calcite/sql/test/SqlOperatorBaseTest.java      | 17 +++++++++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/calcite/blob/ee0afb6e/core/src/main/java/org/apache/calcite/runtime/Like.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/runtime/Like.java b/core/src/main/java/org/apache/calcite/runtime/Like.java
index 74b2c82..bdb6785 100644
--- a/core/src/main/java/org/apache/calcite/runtime/Like.java
+++ b/core/src/main/java/org/apache/calcite/runtime/Like.java
@@ -21,7 +21,7 @@ package org.apache.calcite.runtime;
  * to regular expressions.
  */
 public class Like {
-  private static final String JAVA_REGEX_SPECIALS = "[]()|^-+*?{}$\\";
+  private static final String JAVA_REGEX_SPECIALS = "[]()|^-+*?{}$\\.";
   private static final String SQL_SIMILAR_SPECIALS = "[]()|^-+*_%?{}";
   private static final String [] REG_CHAR_CLASSES = {
     "[:ALPHA:]", "\\p{Alpha}",

http://git-wip-us.apache.org/repos/asf/calcite/blob/ee0afb6e/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java b/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java
index b1d7cde..7925bf6 100644
--- a/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java
+++ b/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java
@@ -3417,6 +3417,15 @@ public abstract class SqlOperatorBaseTest {
     tester.checkBoolean("'ab\ncd\nef' like '%cde%'", Boolean.FALSE);
   }
 
+  /** Test case for
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-1898">[CALCITE-1898]
+   * LIKE must match '.' (period) literally</a>. */
+  @Test public void testLikeDot() {
+    tester.checkBoolean("'abc' like 'a.c'", Boolean.FALSE);
+    tester.checkBoolean("'abcde' like '%c.e'", Boolean.FALSE);
+    tester.checkBoolean("'abc.e' like '%c.e'", Boolean.TRUE);
+  }
+
   @Test public void testNotSimilarToOperator() {
     tester.setFor(SqlStdOperatorTable.NOT_SIMILAR_TO, VM_EXPAND);
     tester.checkBoolean("'ab' not similar to 'a_'", false);
@@ -3594,6 +3603,14 @@ public abstract class SqlOperatorBaseTest {
     tester.checkBoolean("'y' similar to 'x?+y'", Boolean.TRUE);
     tester.checkBoolean("'y' similar to 'x*+y'", Boolean.TRUE);
 
+    // dot is a wildcard for SIMILAR TO but not LIKE
+    tester.checkBoolean("'abc' similar to 'a.c'", Boolean.TRUE);
+    tester.checkBoolean("'a.c' similar to 'a.c'", Boolean.TRUE);
+    tester.checkBoolean("'abcd' similar to 'a.*d'", Boolean.TRUE);
+    tester.checkBoolean("'abc' like 'a.c'", Boolean.FALSE);
+    tester.checkBoolean("'a.c' like 'a.c'", Boolean.TRUE);
+    tester.checkBoolean("'abcd' like 'a.*d'", Boolean.FALSE);
+
     // The following two tests throws exception(They probably should).
     // "Dangling meta character '*' near index 2"