You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ch...@apache.org on 2013/01/09 16:25:03 UTC
svn commit: r1430883 - in /activemq/activemq-apollo/trunk:
apollo-selector/src/main/java/org/apache/activemq/apollo/selector/
apollo-selector/src/main/javacc/
apollo-stomp/src/main/scala/org/apache/activemq/apollo/stomp/
apollo-stomp/src/test/scala/org...
Author: chirino
Date: Wed Jan 9 15:25:03 2013
New Revision: 1430883
URL: http://svn.apache.org/viewvc?rev=1430883&view=rev
Log:
Fixes regression in APLO-283: Selectors on message properties with a hyphen in the name don't work (anymore) with STOMP
Added:
activemq/activemq-apollo/trunk/apollo-selector/src/main/java/org/apache/activemq/apollo/selector/SelectorParser.java
activemq/activemq-apollo/trunk/apollo-selector/src/main/javacc/HyphenatedParser.jj
- copied, changed from r1430460, activemq/activemq-apollo/trunk/apollo-selector/src/main/javacc/SelectorParser.jj
activemq/activemq-apollo/trunk/apollo-selector/src/main/javacc/StrictParser.jj
- copied, changed from r1430460, activemq/activemq-apollo/trunk/apollo-selector/src/main/javacc/SelectorParser.jj
Removed:
activemq/activemq-apollo/trunk/apollo-selector/src/main/javacc/SelectorParser.jj
Modified:
activemq/activemq-apollo/trunk/apollo-stomp/src/main/scala/org/apache/activemq/apollo/stomp/StompProtocolHandler.scala
activemq/activemq-apollo/trunk/apollo-stomp/src/test/scala/org/apache/activemq/apollo/stomp/test/StompParallelTest.scala
Added: activemq/activemq-apollo/trunk/apollo-selector/src/main/java/org/apache/activemq/apollo/selector/SelectorParser.java
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-selector/src/main/java/org/apache/activemq/apollo/selector/SelectorParser.java?rev=1430883&view=auto
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-selector/src/main/java/org/apache/activemq/apollo/selector/SelectorParser.java (added)
+++ activemq/activemq-apollo/trunk/apollo-selector/src/main/java/org/apache/activemq/apollo/selector/SelectorParser.java Wed Jan 9 15:25:03 2013
@@ -0,0 +1,88 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.apollo.selector;
+
+import org.apache.activemq.apollo.filter.BooleanExpression;
+import org.apache.activemq.apollo.filter.ComparisonExpression;
+import org.apache.activemq.apollo.filter.FilterException;
+import org.apache.activemq.apollo.selector.hyphenated.HyphenatedParser;
+import org.apache.activemq.apollo.selector.strict.StrictParser;
+
+import java.io.StringReader;
+
+/**
+ */
+public class SelectorParser {
+
+ private static final LRUCache cache = new LRUCache(100);
+ private static final String CONVERT_STRING_EXPRESSIONS_PREFIX = "convert_string_expressions:";
+ private static final String HYPHENATED_PROPS_PREFIX = "hyphenated_props:";
+
+ public static BooleanExpression parse(String sql) throws FilterException {
+ Object result = cache.get(sql);
+ if (result instanceof FilterException) {
+ throw (FilterException) result;
+ } else if (result instanceof BooleanExpression) {
+ return (BooleanExpression) result;
+ } else {
+ String actual = sql;
+ boolean convertStringExpressions = false;
+ boolean hyphenatedProps=false;
+ while(true) {
+ if( actual.startsWith(CONVERT_STRING_EXPRESSIONS_PREFIX)) {
+ convertStringExpressions = true;
+ actual = actual.substring(CONVERT_STRING_EXPRESSIONS_PREFIX.length());
+ continue;
+ }
+ if( actual.startsWith(HYPHENATED_PROPS_PREFIX)) {
+ hyphenatedProps = true;
+ actual = actual.substring(HYPHENATED_PROPS_PREFIX.length());
+ continue;
+ }
+ break;
+ }
+
+ if( convertStringExpressions ) {
+ ComparisonExpression.CONVERT_STRING_EXPRESSIONS.set(true);
+ }
+ try {
+ BooleanExpression e = null;
+ if( hyphenatedProps ) {
+ HyphenatedParser parser = new HyphenatedParser(new StringReader(actual));
+ e = parser.JmsSelector();
+ } else {
+ StrictParser parser = new StrictParser(new StringReader(actual));
+ e = parser.JmsSelector();
+ }
+ cache.put(sql, e);
+ return e;
+ } catch (Throwable e) {
+ FilterException fe = new FilterException(actual, e);
+ cache.put(sql, fe);
+ throw fe;
+ } finally {
+ if( convertStringExpressions ) {
+ ComparisonExpression.CONVERT_STRING_EXPRESSIONS.remove();
+ }
+ }
+ }
+ }
+
+ public static void clearCache() {
+ cache.clear();
+ }
+}
Copied: activemq/activemq-apollo/trunk/apollo-selector/src/main/javacc/HyphenatedParser.jj (from r1430460, activemq/activemq-apollo/trunk/apollo-selector/src/main/javacc/SelectorParser.jj)
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-selector/src/main/javacc/HyphenatedParser.jj?p2=activemq/activemq-apollo/trunk/apollo-selector/src/main/javacc/HyphenatedParser.jj&p1=activemq/activemq-apollo/trunk/apollo-selector/src/main/javacc/SelectorParser.jj&r1=1430460&r2=1430883&rev=1430883&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-selector/src/main/javacc/SelectorParser.jj (original)
+++ activemq/activemq-apollo/trunk/apollo-selector/src/main/javacc/HyphenatedParser.jj Wed Jan 9 15:25:03 2013
@@ -29,7 +29,7 @@ options {
// PARSER
// ----------------------------------------------------------------------------
-PARSER_BEGIN(SelectorParser)
+PARSER_BEGIN(HyphenatedParser)
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -47,7 +47,7 @@ PARSER_BEGIN(SelectorParser)
* limitations under the License.
*/
-package org.apache.activemq.apollo.selector;
+package org.apache.activemq.apollo.selector.hyphenated;
import java.io.*;
import java.util.*;
@@ -57,65 +57,9 @@ import org.apache.activemq.apollo.filter
/**
* JMS Selector Parser generated by JavaCC
*
- * Do not edit this .java file directly - it is autogenerated from SelectorParser.jj
+ * Do not edit this .java file directly - it is autogenerated from HyphenatedParser.jj
*/
-public class SelectorParser {
-
- private static final LRUCache cache = new LRUCache(100);
- private static final String CONVERT_STRING_EXPRESSIONS_PREFIX = "convert_string_expressions:";
-
- public static BooleanExpression parse(String sql) throws FilterException {
- Object result = cache.get(sql);
- if (result instanceof FilterException) {
- throw (FilterException) result;
- } else if (result instanceof BooleanExpression) {
- return (BooleanExpression) result;
- } else {
-
- boolean convertStringExpressions = false;
- if( sql.startsWith(CONVERT_STRING_EXPRESSIONS_PREFIX)) {
- convertStringExpressions = true;
- sql = sql.substring(CONVERT_STRING_EXPRESSIONS_PREFIX.length());
- }
-
- if( convertStringExpressions ) {
- ComparisonExpression.CONVERT_STRING_EXPRESSIONS.set(true);
- }
- try {
- BooleanExpression e = new SelectorParser(sql).parse();
- cache.put(sql, e);
- return e;
- } catch (FilterException t) {
- cache.put(sql, t);
- throw t;
- } finally {
- if( convertStringExpressions ) {
- ComparisonExpression.CONVERT_STRING_EXPRESSIONS.remove();
- }
- }
- }
- }
-
- public static void clearCache() {
- cache.clear();
- }
-
- private String sql;
-
- protected SelectorParser(String sql) {
- this(new StringReader(sql));
- this.sql = sql;
- }
-
- protected BooleanExpression parse() throws FilterException {
- try {
- return this.JmsSelector();
- }
- catch (Throwable e) {
- throw new FilterException(sql, e);
- }
- }
-
+public class HyphenatedParser {
private BooleanExpression asBooleanExpression(Expression value) throws ParseException {
if (value instanceof BooleanExpression) {
return (BooleanExpression) value;
@@ -125,11 +69,9 @@ public class SelectorParser {
}
throw new ParseException("Expression will not result in a boolean value: " + value);
}
-
-
}
-PARSER_END(SelectorParser)
+PARSER_END(HyphenatedParser)
// ----------------------------------------------------------------------------
// Tokens
@@ -188,7 +130,7 @@ TOKEN [IGNORE_CASE] :
TOKEN [IGNORE_CASE] :
{
- < ID : ["a"-"z", "_", "$"] (["a"-"z","0"-"9","_", "$"])* >
+ < ID : ["a"-"z", "_", "$"] (["a"-"z","0"-"9","_", "$", "-"])* >
}
// ----------------------------------------------------------------------------
@@ -609,11 +551,11 @@ PropertyExpression variable() :
PropertyExpression left=null;
}
{
- (
- t = <ID>
+ (
+ t=<ID>
{
left = new PropertyExpression(t.image);
- }
+ }
)
{
return left;
Copied: activemq/activemq-apollo/trunk/apollo-selector/src/main/javacc/StrictParser.jj (from r1430460, activemq/activemq-apollo/trunk/apollo-selector/src/main/javacc/SelectorParser.jj)
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-selector/src/main/javacc/StrictParser.jj?p2=activemq/activemq-apollo/trunk/apollo-selector/src/main/javacc/StrictParser.jj&p1=activemq/activemq-apollo/trunk/apollo-selector/src/main/javacc/SelectorParser.jj&r1=1430460&r2=1430883&rev=1430883&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-selector/src/main/javacc/SelectorParser.jj (original)
+++ activemq/activemq-apollo/trunk/apollo-selector/src/main/javacc/StrictParser.jj Wed Jan 9 15:25:03 2013
@@ -29,7 +29,7 @@ options {
// PARSER
// ----------------------------------------------------------------------------
-PARSER_BEGIN(SelectorParser)
+PARSER_BEGIN(StrictParser)
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -47,7 +47,7 @@ PARSER_BEGIN(SelectorParser)
* limitations under the License.
*/
-package org.apache.activemq.apollo.selector;
+package org.apache.activemq.apollo.selector.strict;
import java.io.*;
import java.util.*;
@@ -57,65 +57,9 @@ import org.apache.activemq.apollo.filter
/**
* JMS Selector Parser generated by JavaCC
*
- * Do not edit this .java file directly - it is autogenerated from SelectorParser.jj
+ * Do not edit this .java file directly - it is autogenerated from StrictParser.jj
*/
-public class SelectorParser {
-
- private static final LRUCache cache = new LRUCache(100);
- private static final String CONVERT_STRING_EXPRESSIONS_PREFIX = "convert_string_expressions:";
-
- public static BooleanExpression parse(String sql) throws FilterException {
- Object result = cache.get(sql);
- if (result instanceof FilterException) {
- throw (FilterException) result;
- } else if (result instanceof BooleanExpression) {
- return (BooleanExpression) result;
- } else {
-
- boolean convertStringExpressions = false;
- if( sql.startsWith(CONVERT_STRING_EXPRESSIONS_PREFIX)) {
- convertStringExpressions = true;
- sql = sql.substring(CONVERT_STRING_EXPRESSIONS_PREFIX.length());
- }
-
- if( convertStringExpressions ) {
- ComparisonExpression.CONVERT_STRING_EXPRESSIONS.set(true);
- }
- try {
- BooleanExpression e = new SelectorParser(sql).parse();
- cache.put(sql, e);
- return e;
- } catch (FilterException t) {
- cache.put(sql, t);
- throw t;
- } finally {
- if( convertStringExpressions ) {
- ComparisonExpression.CONVERT_STRING_EXPRESSIONS.remove();
- }
- }
- }
- }
-
- public static void clearCache() {
- cache.clear();
- }
-
- private String sql;
-
- protected SelectorParser(String sql) {
- this(new StringReader(sql));
- this.sql = sql;
- }
-
- protected BooleanExpression parse() throws FilterException {
- try {
- return this.JmsSelector();
- }
- catch (Throwable e) {
- throw new FilterException(sql, e);
- }
- }
-
+public class StrictParser {
private BooleanExpression asBooleanExpression(Expression value) throws ParseException {
if (value instanceof BooleanExpression) {
return (BooleanExpression) value;
@@ -125,11 +69,9 @@ public class SelectorParser {
}
throw new ParseException("Expression will not result in a boolean value: " + value);
}
-
-
}
-PARSER_END(SelectorParser)
+PARSER_END(StrictParser)
// ----------------------------------------------------------------------------
// Tokens
@@ -609,11 +551,11 @@ PropertyExpression variable() :
PropertyExpression left=null;
}
{
- (
- t = <ID>
+ (
+ t=<ID>
{
left = new PropertyExpression(t.image);
- }
+ }
)
{
return left;
Modified: activemq/activemq-apollo/trunk/apollo-stomp/src/main/scala/org/apache/activemq/apollo/stomp/StompProtocolHandler.scala
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-stomp/src/main/scala/org/apache/activemq/apollo/stomp/StompProtocolHandler.scala?rev=1430883&r1=1430882&r2=1430883&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-stomp/src/main/scala/org/apache/activemq/apollo/stomp/StompProtocolHandler.scala (original)
+++ activemq/activemq-apollo/trunk/apollo-stomp/src/main/scala/org/apache/activemq/apollo/stomp/StompProtocolHandler.scala Wed Jan 9 15:25:03 2013
@@ -1409,8 +1409,8 @@ class StompProtocolHandler extends Proto
case None=> null
case Some(x)=>
try {
- val s = decode_header(x)
- (s, SelectorParser.parse("convert_string_expressions:"+s))
+ val s = "convert_string_expressions:hyphenated_props:"+decode_header(x)
+ (s, SelectorParser.parse(s))
} catch {
case e:FilterException =>
die("Invalid selector expression: "+e.getMessage)
Modified: activemq/activemq-apollo/trunk/apollo-stomp/src/test/scala/org/apache/activemq/apollo/stomp/test/StompParallelTest.scala
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-stomp/src/test/scala/org/apache/activemq/apollo/stomp/test/StompParallelTest.scala?rev=1430883&r1=1430882&r2=1430883&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-stomp/src/test/scala/org/apache/activemq/apollo/stomp/test/StompParallelTest.scala (original)
+++ activemq/activemq-apollo/trunk/apollo-stomp/src/test/scala/org/apache/activemq/apollo/stomp/test/StompParallelTest.scala Wed Jan 9 15:25:03 2013
@@ -553,9 +553,10 @@ class StompParallelTest extends StompTes
}
test_selector("color = 'red'", List("color:blue", "not:set", "color:red"), List(3))
- test_selector("hyphen-5 = 5", List("hyphen:9", "not:set", "hyphen:10"), List(3))
test_selector("age >= 21", List("age:3", "not:set", "age:21", "age:30"), List(3, 4))
-
+ test_selector("hyphen - 5 = 5", List("hyphen:9", "not:set", "hyphen:10"), List(3))
+ test_selector("hyphen -5 = 5", List("hyphen:9", "not:set", "hyphen:10"), List(3))
+ test_selector("hyphen-5 = 5", List("hyphen:9", "hyphen-5:5", "not:set", "hyphen:10"), List(2))
}
test("Queues load balance across subscribers") {