[teiid-commits] teiid SVN: r3628 - in trunk/engine/src: main/java/org/teiid/query/sql/lang and 1 other directories.
teiid-commits at lists.jboss.org
teiid-commits at lists.jboss.org
Thu Nov 10 11:29:44 EST 2011
Author: shawkins
Date: 2011-11-10 11:29:43 -0500 (Thu, 10 Nov 2011)
New Revision: 3628
Modified:
trunk/engine/src/main/java/org/teiid/query/eval/Evaluator.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/MatchCriteria.java
trunk/engine/src/test/java/org/teiid/query/processor/eval/TestCriteriaEvaluator.java
trunk/engine/src/test/java/org/teiid/query/processor/eval/TestExpressionEvaluator.java
Log:
TEIID-1820 updating the match logic to use find and optimizing generated regex
Modified: trunk/engine/src/main/java/org/teiid/query/eval/Evaluator.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/eval/Evaluator.java 2011-11-10 02:29:40 UTC (rev 3627)
+++ trunk/engine/src/main/java/org/teiid/query/eval/Evaluator.java 2011-11-10 16:29:43 UTC (rev 3628)
@@ -435,7 +435,7 @@
}
Matcher matcher = patternRegex.matcher(search);
- return matcher.matches();
+ return matcher.find();
}
private Boolean evaluate(AbstractSetCriteria criteria, List<?> tuple)
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/MatchCriteria.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/MatchCriteria.java 2011-11-10 02:29:40 UTC (rev 3627)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/MatchCriteria.java 2011-11-10 16:29:43 UTC (rev 3628)
@@ -292,11 +292,17 @@
public String getPatternString(String pattern, char escape)
throws ExpressionEvaluationException {
- StringBuffer newPattern = new StringBuffer("^"); //$NON-NLS-1$
+ int startChar = 0;
+ StringBuffer newPattern = new StringBuffer(pattern.length());
+ if (pattern.length() > 0 && pattern.charAt(0) == '%') {
+ startChar = 1;
+ } else {
+ newPattern.append('^');
+ }
boolean escaped = false;
-
- for (int i = 0; i < pattern.length(); i++) {
+ boolean endsWithMatchAny = false;
+ for (int i = startChar; i < pattern.length(); i++) {
char character = pattern.charAt(i);
if (character == escape && character != NULL_ESCAPE_CHAR) {
@@ -313,6 +319,10 @@
appendCharacter(newPattern, character);
escaped = false;
} else {
+ if (character == '%' && i == pattern.length() - 1) {
+ endsWithMatchAny = true;
+ continue;
+ }
newPattern.append(replacements[index]);
}
} else {
@@ -328,7 +338,9 @@
throw new ExpressionEvaluationException(QueryPlugin.Util.getString("MatchCriteria.invalid_escape", new Object[] {pattern, new Character(escape)})); //$NON-NLS-1$
}
- newPattern.append('$');
+ if (!endsWithMatchAny) {
+ newPattern.append('$');
+ }
return newPattern.toString();
}
Modified: trunk/engine/src/test/java/org/teiid/query/processor/eval/TestCriteriaEvaluator.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/eval/TestCriteriaEvaluator.java 2011-11-10 02:29:40 UTC (rev 3627)
+++ trunk/engine/src/test/java/org/teiid/query/processor/eval/TestCriteriaEvaluator.java 2011-11-10 16:29:43 UTC (rev 3628)
@@ -156,10 +156,6 @@
helpTestMatch("xx", "%", MatchCriteria.NULL_ESCAPE_CHAR, true); //$NON-NLS-1$ //$NON-NLS-2$
}
- @Test public void testMatch6() throws Exception {
- helpTestMatch("xx", "%", MatchCriteria.NULL_ESCAPE_CHAR, true); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
@Test public void testMatch7() throws Exception {
helpTestMatch("a", "a%", MatchCriteria.NULL_ESCAPE_CHAR, true); //$NON-NLS-1$ //$NON-NLS-2$
}
@@ -172,10 +168,6 @@
helpTestMatch("a.", "a%", MatchCriteria.NULL_ESCAPE_CHAR, true); //$NON-NLS-1$ //$NON-NLS-2$
}
- @Test public void testMatch10() throws Exception {
- helpTestMatch("a.", "a%", MatchCriteria.NULL_ESCAPE_CHAR, true); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
@Test public void testMatch11() throws Exception {
helpTestMatch("ax.", "a%", MatchCriteria.NULL_ESCAPE_CHAR, true); //$NON-NLS-1$ //$NON-NLS-2$
}
Modified: trunk/engine/src/test/java/org/teiid/query/processor/eval/TestExpressionEvaluator.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/eval/TestExpressionEvaluator.java 2011-11-10 02:29:40 UTC (rev 3627)
+++ trunk/engine/src/test/java/org/teiid/query/processor/eval/TestExpressionEvaluator.java 2011-11-10 16:29:43 UTC (rev 3628)
@@ -504,6 +504,11 @@
assertEquals(Boolean.FALSE, Evaluator.evaluate(ex));
}
+ @Test public void testLikeRegex4() throws Exception {
+ Expression ex = TestFunctionResolving.getExpression("'xay' like_regex 'a'");
+ assertEquals(Boolean.TRUE, Evaluator.evaluate(ex));
+ }
+
@Test public void testLikePlus() throws Exception {
Expression ex = TestFunctionResolving.getExpression("'+' like '+'");
assertEquals(Boolean.TRUE, Evaluator.evaluate(ex));
More information about the teiid-commits
mailing list