You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metamodel.apache.org by ka...@apache.org on 2017/05/10 03:54:04 UTC

[02/43] metamodel git commit: METAMODEL-1103: Fixed

METAMODEL-1103: Fixed

Closes #115

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

Branch: refs/heads/5.x
Commit: 1910d56f40bd5b4cd6a10b1b312d763059dfc8bd
Parents: 250b12d
Author: kaspersorensen <i....@gmail.com>
Authored: Fri Jul 15 16:04:50 2016 -0700
Committer: kaspersorensen <i....@gmail.com>
Committed: Fri Jul 15 16:04:50 2016 -0700

----------------------------------------------------------------------
 CHANGES.md                                             |  1 +
 .../org/apache/metamodel/util/WildcardPattern.java     | 13 ++++++++++---
 .../org/apache/metamodel/util/WildcardPatternTest.java | 11 +++++++++++
 3 files changed, 22 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/metamodel/blob/1910d56f/CHANGES.md
----------------------------------------------------------------------
diff --git a/CHANGES.md b/CHANGES.md
index 65223ac..0b2b49d 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,6 +1,7 @@
 ### Apache MetaModel 4.5.4 (work in progress)
 
  * [METAMODEL-1099] - Created a new DataContextFactory SPI and a extensible registry of implementations based on ServiceLoader.
+ * [METAMODEL-1103] - Fixed a bug pertaining to anchoring of wildcards in LIKE operands.
  * [METAMODEL-1088] - Add support for aliases in MongoDB.
  * [METAMODEL-1086] - Fixed encoding issue when CsvDataContext is instantiated with InputStream.
  * [METAMODEL-1094] - Added support for Apache Cassandra version 3.x.

http://git-wip-us.apache.org/repos/asf/metamodel/blob/1910d56f/core/src/main/java/org/apache/metamodel/util/WildcardPattern.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/util/WildcardPattern.java b/core/src/main/java/org/apache/metamodel/util/WildcardPattern.java
index 648c2ca..715e0d2 100644
--- a/core/src/main/java/org/apache/metamodel/util/WildcardPattern.java
+++ b/core/src/main/java/org/apache/metamodel/util/WildcardPattern.java
@@ -32,14 +32,20 @@ import org.apache.metamodel.query.FilterItem;
 public final class WildcardPattern implements Serializable {
 
 	private static final long serialVersionUID = 857462137797209624L;
+	private final boolean _startsWithDelim;
+	private final boolean _endsWithDelim;
 	private String _pattern;
 	private char _wildcard;
-	private boolean _endsWithDelim;
 
 	public WildcardPattern(String pattern, char wildcard) {
 		_pattern = pattern;
 		_wildcard = wildcard;
-		_endsWithDelim = (_pattern.charAt(pattern.length() - 1) == _wildcard);
+		if(_pattern.isEmpty()){
+			_startsWithDelim = _endsWithDelim = false;
+		} else {
+			_startsWithDelim = _pattern.charAt(0) == _wildcard;
+			_endsWithDelim = _pattern.charAt(pattern.length() - 1) == _wildcard;
+		}
 	}
 
 	public boolean matches(String value) {
@@ -50,9 +56,10 @@ public final class WildcardPattern implements Serializable {
 				Character.toString(_wildcard));
 		int charIndex = 0;
 		while (st.hasMoreTokens()) {
+			int oldIndex = charIndex;
 			String token = st.nextToken();
 			charIndex = value.indexOf(token, charIndex);
-			if (charIndex == -1) {
+			if (charIndex == -1 || !_startsWithDelim && oldIndex == 0 && charIndex != 0) {
 				return false;
 			}
 			charIndex = charIndex + token.length();

http://git-wip-us.apache.org/repos/asf/metamodel/blob/1910d56f/core/src/test/java/org/apache/metamodel/util/WildcardPatternTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/metamodel/util/WildcardPatternTest.java b/core/src/test/java/org/apache/metamodel/util/WildcardPatternTest.java
index 1e075dd..4bc45f7 100644
--- a/core/src/test/java/org/apache/metamodel/util/WildcardPatternTest.java
+++ b/core/src/test/java/org/apache/metamodel/util/WildcardPatternTest.java
@@ -41,5 +41,16 @@ public class WildcardPatternTest extends TestCase {
 		assertTrue(pattern.matches("foobarbar"));
 		assertFalse(pattern.matches("w00p"));
 
+		pattern = new WildcardPattern("oba%", '%');
+		assertTrue(pattern.matches("obar"));
+		assertFalse(pattern.matches("foobar"));
+
+		pattern = new WildcardPattern("bar", '%');
+		assertTrue(pattern.matches("bar"));
+		assertFalse(pattern.matches("foobar"));
+
+		pattern = new WildcardPattern("", '%');
+		assertTrue(pattern.matches(""));
+		assertFalse(pattern.matches("foo"));
 	}
 }
\ No newline at end of file