mirror of
https://github.com/apache/activemq.git
synced 2025-02-09 03:25:33 +00:00
Fix issue with selector parser. (cherry picked from commit 7b207567d9d304facdfa7c1c5d7fa8a81b6fe70e)
This commit is contained in:
parent
eb9139dddc
commit
8d114f058d
@ -204,7 +204,7 @@ BooleanExpression JmsSelector() :
|
||||
}
|
||||
{
|
||||
(
|
||||
left = orExpression()
|
||||
left = orExpression() <EOF>
|
||||
)
|
||||
{
|
||||
return asBooleanExpression(left);
|
||||
@ -298,8 +298,8 @@ Expression comparisonExpression() :
|
||||
Expression low;
|
||||
Expression high;
|
||||
String t, u;
|
||||
boolean not;
|
||||
ArrayList list;
|
||||
boolean not;
|
||||
ArrayList list;
|
||||
}
|
||||
{
|
||||
(
|
||||
@ -326,75 +326,75 @@ Expression comparisonExpression() :
|
||||
left = ComparisonExpression.createLessThanEqual(left, right);
|
||||
}
|
||||
|
|
||||
{
|
||||
u=null;
|
||||
}
|
||||
<LIKE> t = stringLitteral()
|
||||
[ <ESCAPE> u = stringLitteral() ]
|
||||
{
|
||||
{
|
||||
u=null;
|
||||
}
|
||||
<LIKE> t = stringLitteral()
|
||||
[ <ESCAPE> u = stringLitteral() ]
|
||||
{
|
||||
left = ComparisonExpression.createLike(left, t, u);
|
||||
}
|
||||
}
|
||||
|
|
||||
LOOKAHEAD(2)
|
||||
{
|
||||
u=null;
|
||||
}
|
||||
<NOT> <LIKE> t = stringLitteral() [ <ESCAPE> u = stringLitteral() ]
|
||||
{
|
||||
LOOKAHEAD(2)
|
||||
{
|
||||
u=null;
|
||||
}
|
||||
<NOT> <LIKE> t = stringLitteral() [ <ESCAPE> u = stringLitteral() ]
|
||||
{
|
||||
left = ComparisonExpression.createNotLike(left, t, u);
|
||||
}
|
||||
}
|
||||
|
|
||||
<BETWEEN> low = addExpression() <AND> high = addExpression()
|
||||
{
|
||||
left = ComparisonExpression.createBetween(left, low, high);
|
||||
}
|
||||
|
|
||||
LOOKAHEAD(2)
|
||||
<NOT> <BETWEEN> low = addExpression() <AND> high = addExpression()
|
||||
{
|
||||
left = ComparisonExpression.createNotBetween(left, low, high);
|
||||
}
|
||||
<BETWEEN> low = addExpression() <AND> high = addExpression()
|
||||
{
|
||||
left = ComparisonExpression.createBetween(left, low, high);
|
||||
}
|
||||
|
|
||||
<IN>
|
||||
"("
|
||||
t = stringLitteral()
|
||||
{
|
||||
list = new ArrayList();
|
||||
list.add( t );
|
||||
}
|
||||
(
|
||||
","
|
||||
t = stringLitteral()
|
||||
{
|
||||
list.add( t );
|
||||
}
|
||||
LOOKAHEAD(2)
|
||||
<NOT> <BETWEEN> low = addExpression() <AND> high = addExpression()
|
||||
{
|
||||
left = ComparisonExpression.createNotBetween(left, low, high);
|
||||
}
|
||||
|
|
||||
<IN>
|
||||
"("
|
||||
t = stringLitteral()
|
||||
{
|
||||
list = new ArrayList();
|
||||
list.add( t );
|
||||
}
|
||||
(
|
||||
","
|
||||
t = stringLitteral()
|
||||
{
|
||||
list.add( t );
|
||||
}
|
||||
|
||||
)*
|
||||
")"
|
||||
{
|
||||
left = ComparisonExpression.createInFilter(left, list);
|
||||
}
|
||||
)*
|
||||
")"
|
||||
{
|
||||
left = ComparisonExpression.createInFilter(left, list);
|
||||
}
|
||||
|
|
||||
LOOKAHEAD(2)
|
||||
<NOT> <IN>
|
||||
"("
|
||||
t = stringLitteral()
|
||||
{
|
||||
list = new ArrayList();
|
||||
list.add( t );
|
||||
}
|
||||
(
|
||||
","
|
||||
t = stringLitteral()
|
||||
{
|
||||
list.add( t );
|
||||
}
|
||||
LOOKAHEAD(2)
|
||||
<NOT> <IN>
|
||||
"("
|
||||
t = stringLitteral()
|
||||
{
|
||||
list = new ArrayList();
|
||||
list.add( t );
|
||||
}
|
||||
(
|
||||
","
|
||||
t = stringLitteral()
|
||||
{
|
||||
list.add( t );
|
||||
}
|
||||
|
||||
)*
|
||||
")"
|
||||
{
|
||||
left = ComparisonExpression.createNotInFilter(left, list);
|
||||
}
|
||||
)*
|
||||
")"
|
||||
{
|
||||
left = ComparisonExpression.createNotInFilter(left, list);
|
||||
}
|
||||
|
||||
)*
|
||||
)
|
||||
@ -411,17 +411,17 @@ Expression addExpression() :
|
||||
{
|
||||
left = multExpr()
|
||||
(
|
||||
LOOKAHEAD( ("+"|"-") multExpr())
|
||||
(
|
||||
"+" right = multExpr()
|
||||
{
|
||||
left = ArithmeticExpression.createPlus(left, right);
|
||||
}
|
||||
|
|
||||
"-" right = multExpr()
|
||||
{
|
||||
left = ArithmeticExpression.createMinus(left, right);
|
||||
}
|
||||
LOOKAHEAD( ("+"|"-") multExpr())
|
||||
(
|
||||
"+" right = multExpr()
|
||||
{
|
||||
left = ArithmeticExpression.createPlus(left, right);
|
||||
}
|
||||
|
|
||||
"-" right = multExpr()
|
||||
{
|
||||
left = ArithmeticExpression.createMinus(left, right);
|
||||
}
|
||||
)
|
||||
|
||||
)*
|
||||
@ -440,17 +440,17 @@ Expression multExpr() :
|
||||
(
|
||||
"*" right = unaryExpr()
|
||||
{
|
||||
left = ArithmeticExpression.createMultiply(left, right);
|
||||
left = ArithmeticExpression.createMultiply(left, right);
|
||||
}
|
||||
|
|
||||
"/" right = unaryExpr()
|
||||
{
|
||||
left = ArithmeticExpression.createDivide(left, right);
|
||||
left = ArithmeticExpression.createDivide(left, right);
|
||||
}
|
||||
|
|
||||
"%" right = unaryExpr()
|
||||
{
|
||||
left = ArithmeticExpression.createMod(left, right);
|
||||
left = ArithmeticExpression.createMod(left, right);
|
||||
}
|
||||
|
||||
)*
|
||||
@ -466,34 +466,34 @@ Expression unaryExpr() :
|
||||
Expression left=null;
|
||||
}
|
||||
{
|
||||
(
|
||||
LOOKAHEAD( "+" unaryExpr() )
|
||||
"+" left=unaryExpr()
|
||||
|
|
||||
"-" left=unaryExpr()
|
||||
{
|
||||
left = UnaryExpression.createNegate(left);
|
||||
}
|
||||
|
|
||||
<NOT> left=unaryExpr()
|
||||
{
|
||||
left = UnaryExpression.createNOT( asBooleanExpression(left) );
|
||||
}
|
||||
|
|
||||
<XPATH> s=stringLitteral()
|
||||
{
|
||||
left = UnaryExpression.createXPath( s );
|
||||
}
|
||||
|
|
||||
<XQUERY> s=stringLitteral()
|
||||
{
|
||||
left = UnaryExpression.createXQuery( s );
|
||||
}
|
||||
|
|
||||
(
|
||||
LOOKAHEAD( "+" unaryExpr() )
|
||||
"+" left=unaryExpr()
|
||||
|
|
||||
"-" left=unaryExpr()
|
||||
{
|
||||
left = UnaryExpression.createNegate(left);
|
||||
}
|
||||
|
|
||||
<NOT> left=unaryExpr()
|
||||
{
|
||||
left = UnaryExpression.createNOT( asBooleanExpression(left) );
|
||||
}
|
||||
|
|
||||
<XPATH> s=stringLitteral()
|
||||
{
|
||||
left = UnaryExpression.createXPath( s );
|
||||
}
|
||||
|
|
||||
<XQUERY> s=stringLitteral()
|
||||
{
|
||||
left = UnaryExpression.createXQuery( s );
|
||||
}
|
||||
|
|
||||
LOOKAHEAD( <ID> "(" )
|
||||
left = functionCallExpr()
|
||||
|
|
||||
left = primaryExpr()
|
||||
|
|
||||
left = primaryExpr()
|
||||
)
|
||||
{
|
||||
return left;
|
||||
@ -519,7 +519,7 @@ Expression functionCallExpr () :
|
||||
","
|
||||
arg = unaryExpr()
|
||||
{
|
||||
arg_list.add(arg);
|
||||
arg_list.add(arg);
|
||||
}
|
||||
) *
|
||||
)
|
||||
@ -574,28 +574,28 @@ ConstantExpression literal() :
|
||||
(
|
||||
t = <DECIMAL_LITERAL>
|
||||
{
|
||||
left = ConstantExpression.createFromDecimal(t.image);
|
||||
left = ConstantExpression.createFromDecimal(t.image);
|
||||
}
|
||||
)
|
||||
|
|
||||
(
|
||||
t = <HEX_LITERAL>
|
||||
{
|
||||
left = ConstantExpression.createFromHex(t.image);
|
||||
left = ConstantExpression.createFromHex(t.image);
|
||||
}
|
||||
)
|
||||
|
|
||||
(
|
||||
t = <OCTAL_LITERAL>
|
||||
{
|
||||
left = ConstantExpression.createFromOctal(t.image);
|
||||
left = ConstantExpression.createFromOctal(t.image);
|
||||
}
|
||||
)
|
||||
|
|
||||
(
|
||||
t = <FLOATING_POINT_LITERAL>
|
||||
{
|
||||
left = ConstantExpression.createFloat(t.image);
|
||||
left = ConstantExpression.createFloat(t.image);
|
||||
}
|
||||
)
|
||||
|
|
||||
@ -634,15 +634,15 @@ String stringLitteral() :
|
||||
{
|
||||
t = <STRING_LITERAL>
|
||||
{
|
||||
// Decode the sting value.
|
||||
String image = t.image;
|
||||
for( int i=1; i < image.length()-1; i++ ) {
|
||||
char c = image.charAt(i);
|
||||
if( c == '\'' )
|
||||
i++;
|
||||
rc.append(c);
|
||||
}
|
||||
return rc.toString();
|
||||
// Decode the sting value.
|
||||
String image = t.image;
|
||||
for( int i=1; i < image.length()-1; i++ ) {
|
||||
char c = image.charAt(i);
|
||||
if( c == '\'' )
|
||||
i++;
|
||||
rc.append(c);
|
||||
}
|
||||
return rc.toString();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -20,14 +20,14 @@ import javax.jms.InvalidSelectorException;
|
||||
import javax.jms.JMSException;
|
||||
import javax.jms.Message;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.apache.activemq.command.ActiveMQMessage;
|
||||
import org.apache.activemq.command.ActiveMQTextMessage;
|
||||
import org.apache.activemq.command.ActiveMQTopic;
|
||||
import org.apache.activemq.filter.BooleanExpression;
|
||||
import org.apache.activemq.filter.MessageEvaluationContext;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@ -327,6 +327,8 @@ public class SelectorTest extends TestCase {
|
||||
assertInvalidSelector(message, "3+5");
|
||||
assertInvalidSelector(message, "True AND 3+5");
|
||||
assertInvalidSelector(message, "=TEST 'test'");
|
||||
assertInvalidSelector(message, "prop1 = prop2 foo AND string = 'Test'");
|
||||
assertInvalidSelector(message, "a = 1 AMD b = 2");
|
||||
}
|
||||
|
||||
public void testFunctionSelector() throws Exception {
|
||||
|
Loading…
x
Reference in New Issue
Block a user