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"