[hornetq-commits] JBoss hornetq SVN: r8913 - in trunk: tests/src/org/hornetq/tests/unit/core/filter/impl and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Thu Mar 4 10:31:34 EST 2010


Author: jmesnil
Date: 2010-03-04 10:31:34 -0500 (Thu, 04 Mar 2010)
New Revision: 8913

Modified:
   trunk/src/main/org/hornetq/core/filter/impl/FilterImpl.java
   trunk/src/main/org/hornetq/core/filter/impl/Operator.java
   trunk/tests/src/org/hornetq/tests/unit/core/filter/impl/FilterTest.java
   trunk/tests/src/org/hornetq/tests/unit/core/filter/impl/OperatorTest.java
Log:
fix message filter

* allow an identifier as a valid message filter
* does not treat a property which is not set as a match failure (false) with LIKE AND NOT IN,
  return null instead

Modified: trunk/src/main/org/hornetq/core/filter/impl/FilterImpl.java
===================================================================
--- trunk/src/main/org/hornetq/core/filter/impl/FilterImpl.java	2010-03-04 11:44:07 UTC (rev 8912)
+++ trunk/src/main/org/hornetq/core/filter/impl/FilterImpl.java	2010-03-04 15:31:34 UTC (rev 8913)
@@ -64,10 +64,12 @@
 
    private final Map<SimpleString, Identifier> identifiers = new HashMap<SimpleString, Identifier>();
 
-   private final Operator operator;
-
    private final FilterParser parser = new FilterParser();
 
+   private final Object result;
+
+   private final Class<? extends Object> resultType;
+
    // Static ---------------------------------------------------------
 
    /**
@@ -103,7 +105,10 @@
 
       try
       {
-         operator = (Operator)parser.parse(sfilterString, identifiers);
+         
+         result = parser.parse(sfilterString, identifiers);
+         resultType = result.getClass();
+
       }
       catch (Throwable e)
       {
@@ -145,11 +150,17 @@
 
          }
 
-         // Compute the result of this operator
-
-         boolean res = (Boolean)operator.apply();
-
-         return res;
+         if (resultType.equals(Identifier.class))
+            return (Boolean)((Identifier)result).getValue();
+         else if (resultType.equals(Operator.class))
+         {
+            Operator op = (Operator) result;
+            System.out.println(result);
+            return (Boolean)op.apply();
+         } else
+         {
+            throw new Exception("Bad object type: " + result);
+         }
       }
       catch (Exception e)
       {

Modified: trunk/src/main/org/hornetq/core/filter/impl/Operator.java
===================================================================
--- trunk/src/main/org/hornetq/core/filter/impl/Operator.java	2010-03-04 11:44:07 UTC (rev 8912)
+++ trunk/src/main/org/hornetq/core/filter/impl/Operator.java	2010-03-04 15:31:34 UTC (rev 8913)
@@ -911,7 +911,7 @@
 
       if (arg1 == null)
       {
-         return Boolean.FALSE;
+         return null;
       }
 
       if (class1 != Operator.SIMPLE_STRING)
@@ -1002,7 +1002,7 @@
       computeArgument1();
       if (arg1 == null)
       {
-         return true;
+         return null;
       }
       if (class1 != Operator.SIMPLE_STRING)
       {

Modified: trunk/tests/src/org/hornetq/tests/unit/core/filter/impl/FilterTest.java
===================================================================
--- trunk/tests/src/org/hornetq/tests/unit/core/filter/impl/FilterTest.java	2010-03-04 11:44:07 UTC (rev 8912)
+++ trunk/tests/src/org/hornetq/tests/unit/core/filter/impl/FilterTest.java	2010-03-04 15:31:34 UTC (rev 8913)
@@ -59,9 +59,6 @@
 
    public void testInvalidString() throws Exception
    {
-      testInvalidFilter("invalid");
-      testInvalidFilter(new SimpleString("invalid"));
-
       testInvalidFilter("color = 'red");
       testInvalidFilter(new SimpleString("color = 'red"));
 
@@ -161,6 +158,13 @@
       testBoolean("MyBoolean", true);
    }
 
+   public void testIdentifier() throws Exception
+   {
+      filter = FilterImpl.createFilter(new SimpleString("MyBoolean"));
+
+      testBoolean("MyBoolean", true);
+   }
+   
    public void testDifferentNullString() throws Exception
    {
       filter = FilterImpl.createFilter(new SimpleString("prop <> 'foo'"));
@@ -227,6 +231,36 @@
 
    }
 
+   public void testNOT_INWithNullProperty() throws Exception
+   {
+      filter = FilterImpl.createFilter(new SimpleString("myNullProp NOT IN ('foo','jms','test')"));
+
+      assertFalse(filter.match(message));
+      
+      message.putStringProperty("myNullProp", "JMS");
+      assertTrue(filter.match(message));
+   }
+   
+   public void testNOT_LIKEWithNullProperty() throws Exception
+   {
+      filter = FilterImpl.createFilter(new SimpleString("myNullProp NOT LIKE '1_3'"));
+
+      assertFalse(filter.match(message));
+      
+      message.putStringProperty("myNullProp", "JMS");
+      assertTrue(filter.match(message));
+   }
+   
+   public void testIS_NOT_NULLWithNullProperty() throws Exception
+   {
+      filter = FilterImpl.createFilter(new SimpleString("myNullProp IS NOT NULL"));
+      
+      assertFalse(filter.match(message));
+      
+      message.putStringProperty("myNullProp", "JMS");
+      assertTrue(filter.match(message));
+   }
+   
    public void testStringLike() throws Exception
    {
       // test LIKE operator with no wildcards
@@ -410,10 +444,10 @@
 
    public void testNotLikeExpression() throws Exception
    {
-      // Should evaluate to true since the property MyString does not exist
+      // Should evaluate to false when the property MyString is not set
       filter = FilterImpl.createFilter(new SimpleString("NOT (MyString LIKE '%')"));
 
-      Assert.assertTrue(filter.match(message));
+      Assert.assertFalse(filter.match(message));
    }
 
    public void testStringLikePercentWildcard() throws Exception

Modified: trunk/tests/src/org/hornetq/tests/unit/core/filter/impl/OperatorTest.java
===================================================================
--- trunk/tests/src/org/hornetq/tests/unit/core/filter/impl/OperatorTest.java	2010-03-04 11:44:07 UTC (rev 8912)
+++ trunk/tests/src/org/hornetq/tests/unit/core/filter/impl/OperatorTest.java	2010-03-04 15:31:34 UTC (rev 8913)
@@ -417,7 +417,7 @@
       OperatorTest.assertSuccess(Operator.LIKE, new SimpleString("lose"), pattern, true);
       OperatorTest.assertSuccess(Operator.LIKE, new SimpleString("loose"), pattern, false);
 
-      OperatorTest.assertSuccess(Operator.LIKE, null, pattern, false);
+      OperatorTest.assertSuccess(Operator.LIKE, null, pattern, null);
    }
 
    public void test_LIKE_ESCAPE() throws Exception
@@ -426,7 +426,7 @@
       SimpleString escapeChar = new SimpleString("\\");
       OperatorTest.assertSuccess(Operator.LIKE_ESCAPE, new SimpleString("_foo"), pattern, escapeChar, true);
       OperatorTest.assertSuccess(Operator.LIKE_ESCAPE, new SimpleString("bar"), pattern, escapeChar, false);
-      OperatorTest.assertSuccess(Operator.LIKE_ESCAPE, null, pattern, escapeChar, false);
+      OperatorTest.assertSuccess(Operator.LIKE_ESCAPE, null, pattern, escapeChar, null);
 
       OperatorTest.assertFailure(Operator.LIKE_ESCAPE,
                                  new SimpleString("_foo"),
@@ -440,7 +440,7 @@
       OperatorTest.assertSuccess(Operator.NOT_LIKE, new SimpleString("123"), pattern, false);
       OperatorTest.assertSuccess(Operator.NOT_LIKE, new SimpleString("12993"), pattern, false);
       OperatorTest.assertSuccess(Operator.NOT_LIKE, new SimpleString("1234"), pattern, true);
-      OperatorTest.assertSuccess(Operator.NOT_LIKE, null, pattern, false);
+      OperatorTest.assertSuccess(Operator.NOT_LIKE, null, pattern, null);
    }
 
    public void test_NOT_LIKE_ESCAPE() throws Exception
@@ -449,7 +449,7 @@
       SimpleString escapeChar = new SimpleString("\\");
       OperatorTest.assertSuccess(Operator.NOT_LIKE_ESCAPE, new SimpleString("_foo"), pattern, escapeChar, false);
       OperatorTest.assertSuccess(Operator.NOT_LIKE_ESCAPE, new SimpleString("bar"), pattern, escapeChar, true);
-      OperatorTest.assertSuccess(Operator.NOT_LIKE_ESCAPE, null, pattern, escapeChar, false);
+      OperatorTest.assertSuccess(Operator.NOT_LIKE_ESCAPE, null, pattern, escapeChar, null);
 
       OperatorTest.assertFailure(Operator.NOT_LIKE_ESCAPE,
                                  new SimpleString("_foo"),



More information about the hornetq-commits mailing list