summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Godfrey <rgodfrey@apache.org>2008-04-16 09:24:04 +0000
committerRobert Godfrey <rgodfrey@apache.org>2008-04-16 09:24:04 +0000
commite34b410d62899c362565bc7b3a0039604da7841d (patch)
treea562a6758e746156a0ae81694f751f3a1ade83d7
parent1b8730c44f1158cf13706533ea065877e9189a3c (diff)
downloadqpid-python-e34b410d62899c362565bc7b3a0039604da7841d.tar.gz
QPID-922 : Selectors on header properties should not convert AMQShortStrings to Strings on every evaluation
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/M2.1@648637 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--java/broker/src/main/java/org/apache/qpid/server/filter/ComparisonExpression.java41
-rw-r--r--java/broker/src/main/java/org/apache/qpid/server/filter/ConstantExpression.java7
-rw-r--r--java/broker/src/main/java/org/apache/qpid/server/filter/JMSSelectorFilter.java5
-rw-r--r--java/broker/src/main/java/org/apache/qpid/server/filter/PropertyExpression.java14
4 files changed, 58 insertions, 9 deletions
diff --git a/java/broker/src/main/java/org/apache/qpid/server/filter/ComparisonExpression.java b/java/broker/src/main/java/org/apache/qpid/server/filter/ComparisonExpression.java
index 72a9ef7969..44281a3aae 100644
--- a/java/broker/src/main/java/org/apache/qpid/server/filter/ComparisonExpression.java
+++ b/java/broker/src/main/java/org/apache/qpid/server/filter/ComparisonExpression.java
@@ -28,6 +28,7 @@ import java.util.List;
import java.util.regex.Pattern;
import org.apache.qpid.AMQException;
+import org.apache.qpid.framing.AMQShortString;
import org.apache.qpid.server.queue.AMQMessage;
/**
@@ -147,6 +148,11 @@ public abstract class ComparisonExpression extends BinaryExpression implements B
return null;
}
+ if(rv instanceof AMQShortString)
+ {
+ rv = rv.toString();
+ }
+
if (!(rv instanceof String))
{
return
@@ -448,7 +454,40 @@ public abstract class ComparisonExpression extends BinaryExpression implements B
// try to convert up to allow the comparison.
if (lc != rc)
{
- if (lc == Byte.class)
+ if(lc == AMQShortString.class)
+ {
+ if(rc == String.class)
+ {
+ rv = new AMQShortString((String) rv);
+
+ if(right instanceof ConstantExpression)
+ {
+ ((ConstantExpression)right).setValue(rv);
+ }
+ }
+ else
+ {
+ return Boolean.FALSE;
+ }
+ }
+ else if(lc == String.class)
+ {
+ if(rc == AMQShortString.class)
+ {
+ lv = new AMQShortString((String) lv);
+
+ if(left instanceof ConstantExpression)
+ {
+ ((ConstantExpression)left).setValue(lv);
+ }
+ }
+ else
+ {
+ return Boolean.FALSE;
+ }
+
+ }
+ else if (lc == Byte.class)
{
if (rc == Short.class)
{
diff --git a/java/broker/src/main/java/org/apache/qpid/server/filter/ConstantExpression.java b/java/broker/src/main/java/org/apache/qpid/server/filter/ConstantExpression.java
index 0e729cc521..73c4c66ad7 100644
--- a/java/broker/src/main/java/org/apache/qpid/server/filter/ConstantExpression.java
+++ b/java/broker/src/main/java/org/apache/qpid/server/filter/ConstantExpression.java
@@ -26,6 +26,7 @@ package org.apache.qpid.server.filter;
import java.math.BigDecimal;
import org.apache.qpid.AMQException;
+import org.apache.qpid.framing.AMQShortString;
import org.apache.qpid.server.queue.AMQMessage;
/**
@@ -130,6 +131,12 @@ public class ConstantExpression implements Expression
return value;
}
+ public void setValue(final Object value)
+ {
+ this.value = value;
+ }
+
+
/**
* @see java.lang.Object#toString()
*/
diff --git a/java/broker/src/main/java/org/apache/qpid/server/filter/JMSSelectorFilter.java b/java/broker/src/main/java/org/apache/qpid/server/filter/JMSSelectorFilter.java
index 32f58ed666..48b6602bda 100644
--- a/java/broker/src/main/java/org/apache/qpid/server/filter/JMSSelectorFilter.java
+++ b/java/broker/src/main/java/org/apache/qpid/server/filter/JMSSelectorFilter.java
@@ -50,7 +50,10 @@ public class JMSSelectorFilter implements MessageFilter
try
{
boolean match = _matcher.matches(message);
- _logger.info(message + " match(" + match + ") selector(" + System.identityHashCode(_selector) + "):" + _selector);
+ if(_logger.isDebugEnabled())
+ {
+ _logger.debug(message + " match(" + match + ") selector(" + System.identityHashCode(_selector) + "):" + _selector);
+ }
return match;
}
catch (AMQException e)
diff --git a/java/broker/src/main/java/org/apache/qpid/server/filter/PropertyExpression.java b/java/broker/src/main/java/org/apache/qpid/server/filter/PropertyExpression.java
index 5ab360ca19..e5e9acf9bb 100644
--- a/java/broker/src/main/java/org/apache/qpid/server/filter/PropertyExpression.java
+++ b/java/broker/src/main/java/org/apache/qpid/server/filter/PropertyExpression.java
@@ -67,7 +67,7 @@ public class PropertyExpression implements Expression
message.getContentHeaderBody().properties;
AMQShortString replyTo = _properties.getReplyTo();
- return (replyTo == null) ? null : replyTo.toString();
+ return (replyTo == null) ? null : replyTo;
}
catch (AMQException e)
{
@@ -91,7 +91,7 @@ public class PropertyExpression implements Expression
message.getContentHeaderBody().properties;
AMQShortString type = _properties.getType();
- return (type == null) ? null : type.toString();
+ return (type == null) ? null : type;
}
catch (AMQException e)
{
@@ -206,7 +206,7 @@ public class PropertyExpression implements Expression
message.getContentHeaderBody().properties;
AMQShortString correlationId = _properties.getCorrelationId();
- return (correlationId == null) ? null : correlationId.toString();
+ return (correlationId == null) ? null : correlationId;
}
catch (AMQException e)
{
@@ -251,12 +251,12 @@ public class PropertyExpression implements Expression
}
- private final String name;
+ private final AMQShortString name;
private final Expression jmsPropertyExpression;
public PropertyExpression(String name)
{
- this.name = name;
+ this.name = new AMQShortString(name);
jmsPropertyExpression = JMS_PROPERTY_EXPRESSIONS.get(name);
}
@@ -283,7 +283,7 @@ public class PropertyExpression implements Expression
}
}
- public String getName()
+ public AMQShortString getName()
{
return name;
}
@@ -293,7 +293,7 @@ public class PropertyExpression implements Expression
*/
public String toString()
{
- return name;
+ return name.toString();
}
/**