[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