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