[jboss-svn-commits] JBL Code SVN: r11717 - in labs/jbossrules/trunk/drools-core/src: test/java/org/drools/base and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon May 7 16:37:15 EDT 2007


Author: tirelli
Date: 2007-05-07 16:37:15 -0400 (Mon, 07 May 2007)
New Revision: 11717

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BigDecimalFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BigIntegerFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ByteFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/CharacterFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DateFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DoubleFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/FloatFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/IntegerFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/LongFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ObjectFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ShortFactory.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java
Log:
JBRULES-798: checking for null values when evaluating constraints. Unit tests added

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BigDecimalFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BigDecimalFactory.java	2007-05-07 20:31:25 UTC (rev 11716)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BigDecimalFactory.java	2007-05-07 20:37:15 UTC (rev 11717)
@@ -198,18 +198,27 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             final BigDecimal comp = (BigDecimal) extractor.getValue( object1 );
             return comp.compareTo( (BigDecimal) object2.getValue() ) < 0;
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             final BigDecimal comp = (BigDecimal) ((ObjectVariableContextEntry) context).right;
             return comp.compareTo( (BigDecimal) context.declaration.getExtractor().getValue( left ) ) < 0;
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             final BigDecimal comp = (BigDecimal) context.extractor.getValue( right );
             return comp.compareTo( (BigDecimal) ((ObjectVariableContextEntry) context).left ) < 0;
         }
@@ -218,6 +227,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             final BigDecimal comp = (BigDecimal) extractor1.getValue( object1 );
             return comp.compareTo( (BigDecimal) extractor2.getValue( object2 ) ) < 0;
         }
@@ -242,18 +254,27 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             final BigDecimal comp = (BigDecimal) extractor.getValue( object1 );
             return comp.compareTo( (BigDecimal) object2.getValue() ) <= 0;
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             final BigDecimal comp = (BigDecimal) ((ObjectVariableContextEntry) context).right;
             return comp.compareTo( (BigDecimal) context.declaration.getExtractor().getValue( left ) ) <= 0;
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             final BigDecimal comp = (BigDecimal) context.extractor.getValue( right );
             return comp.compareTo( (BigDecimal) ((ObjectVariableContextEntry) context).left ) <= 0;
         }
@@ -262,6 +283,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             final BigDecimal comp = (BigDecimal) extractor1.getValue( object1 );
             return comp.compareTo( (BigDecimal) extractor2.getValue( object2 ) ) <= 0;
         }
@@ -286,18 +310,27 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             final BigDecimal comp = (BigDecimal) extractor.getValue( object1 );
             return comp.compareTo( (BigDecimal) object2.getValue() ) > 0;
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             final BigDecimal comp = (BigDecimal) ((ObjectVariableContextEntry) context).right;
             return comp.compareTo( (BigDecimal) context.declaration.getExtractor().getValue( left ) ) > 0;
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             final BigDecimal comp = (BigDecimal) context.extractor.getValue( right );
             return comp.compareTo( (BigDecimal) ((ObjectVariableContextEntry) context).left ) > 0;
         }
@@ -306,6 +339,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             final BigDecimal comp = (BigDecimal) extractor1.getValue( object1 );
             return comp.compareTo( (BigDecimal) extractor2.getValue( object2 ) ) > 0;
         }
@@ -330,18 +366,27 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             final BigDecimal comp = (BigDecimal) extractor.getValue( object1 );
             return comp.compareTo( (BigDecimal) object2.getValue() ) >= 0;
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             final BigDecimal comp = (BigDecimal) ((ObjectVariableContextEntry) context).right;
             return comp.compareTo( (BigDecimal) context.declaration.getExtractor().getValue( left ) ) >= 0;
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             final BigDecimal comp = (BigDecimal) context.extractor.getValue( right );
             return comp.compareTo( (BigDecimal) ((ObjectVariableContextEntry) context).left ) >= 0;
         }
@@ -350,6 +395,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             final BigDecimal comp = (BigDecimal) extractor1.getValue( object1 );
             return comp.compareTo( (BigDecimal) extractor2.getValue( object2 ) ) >= 0;
         }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BigIntegerFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BigIntegerFactory.java	2007-05-07 20:31:25 UTC (rev 11716)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BigIntegerFactory.java	2007-05-07 20:37:15 UTC (rev 11717)
@@ -197,18 +197,27 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             final BigInteger comp = (BigInteger) extractor.getValue( object1 );
             return comp.compareTo( (BigInteger) object2.getValue() ) < 0;
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             final BigInteger comp = (BigInteger) ((ObjectVariableContextEntry) context).right;
             return comp.compareTo( (BigInteger) context.declaration.getExtractor().getValue( left ) ) < 0;
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             final BigInteger comp = (BigInteger) context.extractor.getValue( right );
             return comp.compareTo( (BigInteger) ((ObjectVariableContextEntry) context).left ) < 0;
         }
@@ -217,6 +226,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             final BigInteger comp = (BigInteger) extractor1.getValue( object1 );
             return comp.compareTo( (BigInteger) extractor2.getValue( object2 ) ) < 0;
         }
@@ -241,18 +253,27 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             final BigInteger comp = (BigInteger) extractor.getValue( object1 );
             return comp.compareTo( (BigInteger) object2.getValue() ) <= 0;
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             final BigInteger comp = (BigInteger) ((ObjectVariableContextEntry) context).right;
             return comp.compareTo( (BigInteger) context.declaration.getExtractor().getValue( left ) ) <= 0;
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             final BigInteger comp = (BigInteger) context.extractor.getValue( right );
             return comp.compareTo( (BigInteger) ((ObjectVariableContextEntry) context).left ) <= 0;
         }
@@ -261,6 +282,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             final BigInteger comp = (BigInteger) extractor1.getValue( object1 );
             return comp.compareTo( (BigInteger) extractor2.getValue( object2 ) ) <= 0;
         }
@@ -285,18 +309,27 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             final BigInteger comp = (BigInteger) extractor.getValue( object1 );
             return comp.compareTo( (BigInteger) object2.getValue() ) > 0;
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             final BigInteger comp = (BigInteger) ((ObjectVariableContextEntry) context).right;
             return comp.compareTo( (BigInteger) context.declaration.getExtractor().getValue( left ) ) > 0;
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             final BigInteger comp = (BigInteger) context.extractor.getValue( right );
             return comp.compareTo( (BigInteger) ((ObjectVariableContextEntry) context).left ) > 0;
         }
@@ -305,6 +338,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             final BigInteger comp = (BigInteger) extractor1.getValue( object1 );
             return comp.compareTo( (BigInteger) extractor2.getValue( object2 ) ) > 0;
         }
@@ -329,18 +365,27 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             final BigInteger comp = (BigInteger) extractor.getValue( object1 );
             return comp.compareTo( (BigInteger) object2.getValue() ) >= 0;
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             final BigInteger comp = (BigInteger) ((ObjectVariableContextEntry) context).right;
             return comp.compareTo( (BigInteger) context.declaration.getExtractor().getValue( left ) ) >= 0;
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             final BigInteger comp = (BigInteger) context.extractor.getValue( right );
             return comp.compareTo( (BigInteger) ((ObjectVariableContextEntry) context).left ) >= 0;
         }
@@ -349,6 +394,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             final BigInteger comp = (BigInteger) extractor1.getValue( object1 );
             return comp.compareTo( (BigInteger) extractor2.getValue( object2 ) ) >= 0;
         }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ByteFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ByteFactory.java	2007-05-07 20:31:25 UTC (rev 11716)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ByteFactory.java	2007-05-07 20:37:15 UTC (rev 11717)
@@ -208,16 +208,25 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor.getByteValue( object1 ) < object2.getByteValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             return ((LongVariableContextEntry) context).right < context.declaration.getExtractor().getByteValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             return context.extractor.getByteValue( right ) < ((LongVariableContextEntry) context).left;
         }
 
@@ -225,6 +234,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor1.getByteValue( object1 ) < extractor2.getByteValue( object2 );
         }
 
@@ -248,16 +260,25 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor.getByteValue( object1 ) <= object2.getByteValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             return ((LongVariableContextEntry) context).right <= context.declaration.getExtractor().getByteValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             return context.extractor.getByteValue( right ) <= ((LongVariableContextEntry) context).left;
         }
 
@@ -265,6 +286,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor1.getByteValue( object1 ) <= extractor2.getByteValue( object2 );
         }
 
@@ -288,16 +312,25 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor.getByteValue( object1 ) > object2.getByteValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             return ((LongVariableContextEntry) context).right > context.declaration.getExtractor().getByteValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             return context.extractor.getByteValue( right ) > ((LongVariableContextEntry) context).left;
         }
 
@@ -305,6 +338,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor1.getByteValue( object1 ) > extractor2.getByteValue( object2 );
         }
 
@@ -328,16 +364,25 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor.getByteValue( object1 ) >= object2.getByteValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             return ((LongVariableContextEntry) context).right >= context.declaration.getExtractor().getByteValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             return context.extractor.getByteValue( right ) >= ((LongVariableContextEntry) context).left;
         }
 
@@ -345,6 +390,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor1.getByteValue( object1 ) >= extractor2.getByteValue( object2 );
         }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/CharacterFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/CharacterFactory.java	2007-05-07 20:31:25 UTC (rev 11716)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/CharacterFactory.java	2007-05-07 20:37:15 UTC (rev 11717)
@@ -18,8 +18,6 @@
 
 import org.drools.base.BaseEvaluator;
 import org.drools.base.ValueType;
-import org.drools.base.evaluators.IntegerFactory.IntegerMemberOfEvaluator;
-import org.drools.base.evaluators.IntegerFactory.IntegerNotMemberOfEvaluator;
 import org.drools.rule.VariableRestriction.LongVariableContextEntry;
 import org.drools.rule.VariableRestriction.VariableContextEntry;
 import org.drools.spi.Evaluator;
@@ -209,16 +207,25 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor.getCharValue( object1 ) < object2.getCharValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             return ((LongVariableContextEntry) context).right < context.declaration.getExtractor().getCharValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             return context.extractor.getCharValue( right ) < ((LongVariableContextEntry) context).left;
         }
 
@@ -226,6 +233,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor1.getCharValue( object1 ) < extractor2.getCharValue( object2 );
         }
 
@@ -249,16 +259,25 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor.getCharValue( object1 ) <= object2.getCharValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             return ((LongVariableContextEntry) context).right <= context.declaration.getExtractor().getCharValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             return context.extractor.getCharValue( right ) <= ((LongVariableContextEntry) context).left;
         }
 
@@ -266,6 +285,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor1.getCharValue( object1 ) <= extractor2.getCharValue( object2 );
         }
 
@@ -289,16 +311,25 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor.getCharValue( object1 ) > object2.getCharValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             return ((LongVariableContextEntry) context).right > context.declaration.getExtractor().getCharValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             return context.extractor.getCharValue( right ) > ((LongVariableContextEntry) context).left;
         }
 
@@ -306,6 +337,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor1.getCharValue( object1 ) > extractor2.getCharValue( object2 );
         }
 
@@ -329,16 +363,25 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor.getCharValue( object1 ) >= object2.getCharValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             return ((LongVariableContextEntry) context).right >= context.declaration.getExtractor().getCharValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             return context.extractor.getCharValue( right ) >= ((LongVariableContextEntry) context).left;
         }
 
@@ -346,6 +389,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor1.getCharValue( object1 ) >= extractor2.getCharValue( object2 );
         }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DateFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DateFactory.java	2007-05-07 20:31:25 UTC (rev 11716)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DateFactory.java	2007-05-07 20:37:15 UTC (rev 11717)
@@ -244,6 +244,9 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             final Date value1 = (Date) extractor.getValue( object1 );
             final Object value2 = object2.getValue();
             return value1.compareTo( getRightDate( value2 ) ) < 0;
@@ -251,6 +254,9 @@
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             final Date value1 = (Date) context.declaration.getExtractor().getValue( left );
             final Object value2 = ((ObjectVariableContextEntry) context).right;
             return getRightDate( value2 ).compareTo( value1 ) < 0;
@@ -258,6 +264,9 @@
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             final Date value1 = (Date) ((ObjectVariableContextEntry) context).left;
             final Object value2 = context.extractor.getValue( right );
             return getRightDate( value2 ).compareTo( value1 ) < 0;
@@ -267,11 +276,11 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             final Date value1 = (Date) extractor1.getValue( object1 );
             final Date value2 = (Date) extractor2.getValue( object2 );
-            if ( value1 == null ) {
-                return value2 == null;
-            }
             return value1.compareTo( value2 ) < 0;
         }
 
@@ -295,6 +304,9 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             final Date value1 = (Date) extractor.getValue( object1 );
             final Object value2 = object2.getValue();
             return value1.compareTo( getRightDate( value2 ) ) <= 0;
@@ -302,6 +314,9 @@
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             final Date value1 = (Date) context.declaration.getExtractor().getValue( left );
             final Object value2 = ((ObjectVariableContextEntry) context).right;
             return getRightDate( value2 ).compareTo( value1 ) <= 0;
@@ -309,6 +324,9 @@
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             final Date value1 = (Date) ((ObjectVariableContextEntry) context).left;
             final Object value2 = context.extractor.getValue( right );
             return getRightDate( value2 ).compareTo( value1 ) <= 0;
@@ -318,11 +336,11 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             final Date value1 = (Date) extractor1.getValue( object1 );
             final Date value2 = (Date) extractor2.getValue( object2 );
-            if ( value1 == null ) {
-                return value2 == null;
-            }
             return value1.compareTo( value2 ) <= 0;
         }
 
@@ -346,6 +364,9 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             final Date value1 = (Date) extractor.getValue( object1 );
             final Object value2 = object2.getValue();
             return value1.compareTo( getRightDate( value2 ) ) > 0;
@@ -353,6 +374,9 @@
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             final Date value1 = (Date) context.declaration.getExtractor().getValue( left );
             final Object value2 = ((ObjectVariableContextEntry) context).right;
             return getRightDate( value2 ).compareTo( value1 ) > 0;
@@ -360,6 +384,9 @@
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             final Date value1 = (Date) ((ObjectVariableContextEntry) context).left;
             final Object value2 = context.extractor.getValue( right );
             return getRightDate( value2 ).compareTo( value1 ) > 0;
@@ -369,11 +396,11 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             final Date value1 = (Date) extractor1.getValue( object1 );
             final Date value2 = (Date) extractor2.getValue( object2 );
-            if ( value1 == null ) {
-                return value2 == null;
-            }
             return value1.compareTo( value2 ) > 0;
         }
 
@@ -397,6 +424,9 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             final Date value1 = (Date) extractor.getValue( object1 );
             final Object value2 = object2.getValue();
             return value1.compareTo( getRightDate( value2 ) ) >= 0;
@@ -404,6 +434,9 @@
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             final Date value1 = (Date) context.declaration.getExtractor().getValue( left );
             final Object value2 = ((ObjectVariableContextEntry) context).right;
             return getRightDate( value2 ).compareTo( value1 ) >= 0;
@@ -411,6 +444,9 @@
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             final Date value1 = (Date) ((ObjectVariableContextEntry) context).left;
             final Object value2 = context.extractor.getValue( right );
             return getRightDate( value2 ).compareTo( value1 ) >= 0;
@@ -420,11 +456,11 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             final Date value1 = (Date) extractor1.getValue( object1 );
             final Date value2 = (Date) extractor2.getValue( object2 );
-            if ( value1 == null ) {
-                return value2 == null;
-            }
             return value1.compareTo( value2 ) >= 0;
         }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DoubleFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DoubleFactory.java	2007-05-07 20:31:25 UTC (rev 11716)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DoubleFactory.java	2007-05-07 20:37:15 UTC (rev 11717)
@@ -213,18 +213,27 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return extractor.getDoubleValue( object1 ) < object2.getDoubleValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return ((DoubleVariableContextEntry) context).right < context.declaration.getExtractor().getDoubleValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return context.extractor.getDoubleValue( right ) < ((DoubleVariableContextEntry) context).left;
         }
@@ -233,6 +242,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return extractor1.getDoubleValue( object1 ) < extractor2.getDoubleValue( object2 );
         }
@@ -257,18 +269,27 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return extractor.getDoubleValue( object1 ) <= object2.getDoubleValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return ((DoubleVariableContextEntry) context).right <= context.declaration.getExtractor().getDoubleValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return context.extractor.getDoubleValue( right ) <= ((DoubleVariableContextEntry) context).left;
         }
@@ -277,6 +298,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return extractor1.getDoubleValue( object1 ) <= extractor2.getDoubleValue( object2 );
         }
@@ -301,18 +325,27 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return extractor.getDoubleValue( object1 ) > object2.getDoubleValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return ((DoubleVariableContextEntry) context).right > context.declaration.getExtractor().getDoubleValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return context.extractor.getDoubleValue( right ) > ((DoubleVariableContextEntry) context).left;
         }
@@ -321,6 +354,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return extractor1.getDoubleValue( object1 ) > extractor2.getDoubleValue( object2 );
         }
@@ -345,18 +381,27 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return extractor.getDoubleValue( object1 ) >= object2.getDoubleValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return ((DoubleVariableContextEntry) context).right >= context.declaration.getExtractor().getDoubleValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return context.extractor.getDoubleValue( right ) >= ((DoubleVariableContextEntry) context).left;
         }
@@ -365,6 +410,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return extractor1.getDoubleValue( object1 ) >= extractor2.getDoubleValue( object2 );
         }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/FloatFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/FloatFactory.java	2007-05-07 20:31:25 UTC (rev 11716)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/FloatFactory.java	2007-05-07 20:37:15 UTC (rev 11717)
@@ -213,18 +213,27 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return extractor.getFloatValue( object1 ) < object2.getFloatValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return ((DoubleVariableContextEntry) context).right < context.declaration.getExtractor().getFloatValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return context.extractor.getFloatValue( right ) < ((DoubleVariableContextEntry) context).left;
         }
@@ -233,6 +242,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return extractor1.getFloatValue( object1 ) < extractor2.getFloatValue( object2 );
         }
@@ -257,18 +269,27 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return extractor.getFloatValue( object1 ) <= object2.getFloatValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return ((DoubleVariableContextEntry) context).right <= context.declaration.getExtractor().getFloatValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return context.extractor.getFloatValue( right ) <= ((DoubleVariableContextEntry) context).left;
         }
@@ -277,6 +298,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return extractor1.getFloatValue( object1 ) <= extractor2.getFloatValue( object2 );
         }
@@ -301,18 +325,27 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return extractor.getFloatValue( object1 ) > object2.getFloatValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return ((DoubleVariableContextEntry) context).right > context.declaration.getExtractor().getFloatValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return context.extractor.getFloatValue( right ) > ((DoubleVariableContextEntry) context).left;
         }
@@ -321,6 +354,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return extractor1.getFloatValue( object1 ) > extractor2.getFloatValue( object2 );
         }
@@ -345,18 +381,27 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return extractor.getFloatValue( object1 ) >= object2.getFloatValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return ((DoubleVariableContextEntry) context).right >= context.declaration.getExtractor().getFloatValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return context.extractor.getFloatValue( right ) >= ((DoubleVariableContextEntry) context).left;
         }
@@ -365,6 +410,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             // TODO: we are not handling delta right now... maybe we should
             return extractor1.getFloatValue( object1 ) >= extractor2.getFloatValue( object2 );
         }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/IntegerFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/IntegerFactory.java	2007-05-07 20:31:25 UTC (rev 11716)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/IntegerFactory.java	2007-05-07 20:37:15 UTC (rev 11717)
@@ -208,16 +208,25 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor.getIntValue( object1 ) < object2.getIntValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             return ((LongVariableContextEntry) context).right < context.declaration.getExtractor().getIntValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             return context.extractor.getIntValue( right ) < ((LongVariableContextEntry) context).left;
         }
 
@@ -225,6 +234,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor1.getIntValue( object1 ) < extractor2.getIntValue( object2 );
         }
 
@@ -248,16 +260,25 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor.getIntValue( object1 ) <= object2.getIntValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             return ((LongVariableContextEntry) context).right <= context.declaration.getExtractor().getIntValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             return context.extractor.getIntValue( right ) <= ((LongVariableContextEntry) context).left;
         }
 
@@ -265,6 +286,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor1.getIntValue( object1 ) <= extractor2.getIntValue( object2 );
         }
 
@@ -288,16 +312,25 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor.getIntValue( object1 ) > object2.getIntValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             return ((LongVariableContextEntry) context).right > context.declaration.getExtractor().getIntValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             return context.extractor.getIntValue( right ) > ((LongVariableContextEntry) context).left;
         }
 
@@ -305,6 +338,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor1.getIntValue( object1 ) > extractor2.getIntValue( object2 );
         }
 
@@ -328,16 +364,25 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor.getIntValue( object1 ) >= object2.getIntValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             return ((LongVariableContextEntry) context).right >= context.declaration.getExtractor().getIntValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             return context.extractor.getIntValue( right ) >= ((LongVariableContextEntry) context).left;
         }
 
@@ -345,6 +390,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor1.getIntValue( object1 ) >= extractor2.getIntValue( object2 );
         }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/LongFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/LongFactory.java	2007-05-07 20:31:25 UTC (rev 11716)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/LongFactory.java	2007-05-07 20:37:15 UTC (rev 11717)
@@ -207,16 +207,25 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor.getLongValue( object1 ) < object2.getLongValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             return ((LongVariableContextEntry) context).right < context.declaration.getExtractor().getLongValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             return context.extractor.getLongValue( right ) < ((LongVariableContextEntry) context).left;
         }
 
@@ -224,6 +233,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor1.getLongValue( object1 ) < extractor2.getLongValue( object2 );
         }
 
@@ -247,16 +259,25 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor.getLongValue( object1 ) <= object2.getLongValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             return ((LongVariableContextEntry) context).right <= context.declaration.getExtractor().getLongValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             return context.extractor.getLongValue( right ) <= ((LongVariableContextEntry) context).left;
         }
 
@@ -264,6 +285,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor1.getLongValue( object1 ) <= extractor2.getLongValue( object2 );
         }
 
@@ -287,16 +311,25 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor.getLongValue( object1 ) > object2.getLongValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             return ((LongVariableContextEntry) context).right > context.declaration.getExtractor().getLongValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             return context.extractor.getLongValue( right ) > ((LongVariableContextEntry) context).left;
         }
 
@@ -304,6 +337,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor1.getLongValue( object1 ) > extractor2.getLongValue( object2 );
         }
 
@@ -327,16 +363,25 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor.getLongValue( object1 ) >= object2.getLongValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             return ((LongVariableContextEntry) context).right >= context.declaration.getExtractor().getLongValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             return context.extractor.getLongValue( right ) >= ((LongVariableContextEntry) context).left;
         }
 
@@ -344,6 +389,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor1.getLongValue( object1 ) >= extractor2.getLongValue( object2 );
         }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ObjectFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ObjectFactory.java	2007-05-07 20:31:25 UTC (rev 11716)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ObjectFactory.java	2007-05-07 20:37:15 UTC (rev 11717)
@@ -210,18 +210,27 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             final Comparable comp = (Comparable) extractor.getValue( object1 );
             return comp.compareTo( object2.getValue() ) < 0;
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             final Comparable comp = (Comparable) ((ObjectVariableContextEntry) context).right;
             return comp.compareTo( context.declaration.getExtractor().getValue( left ) ) < 0;
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             final Comparable comp = (Comparable) context.extractor.getValue( right );
             return comp.compareTo( ((ObjectVariableContextEntry) context).left ) < 0;
         }
@@ -230,6 +239,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             final Comparable comp = (Comparable) extractor1.getValue( object1 );
             return comp.compareTo( extractor2.getValue( object2 ) ) < 0;
         }
@@ -254,18 +266,27 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             final Comparable comp = (Comparable) extractor.getValue( object1 );
             return comp.compareTo( object2.getValue() ) <= 0;
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             final Comparable comp = (Comparable) ((ObjectVariableContextEntry) context).right;
             return comp.compareTo( context.declaration.getExtractor().getValue( left ) ) <= 0;
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             final Comparable comp = (Comparable) context.extractor.getValue( right );
             return comp.compareTo( ((ObjectVariableContextEntry) context).left ) <= 0;
         }
@@ -274,6 +295,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             final Comparable comp = (Comparable) extractor1.getValue( object1 );
             return comp.compareTo( extractor2.getValue( object2 ) ) <= 0;
         }
@@ -298,18 +322,27 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             final Comparable comp = (Comparable) extractor.getValue( object1 );
             return comp.compareTo( object2.getValue() ) > 0;
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             final Comparable comp = (Comparable) ((ObjectVariableContextEntry) context).right;
             return comp.compareTo( context.declaration.getExtractor().getValue( left ) ) > 0;
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             final Comparable comp = (Comparable) context.extractor.getValue( right );
             return comp.compareTo( ((ObjectVariableContextEntry) context).left ) > 0;
         }
@@ -318,6 +351,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             final Comparable comp = (Comparable) extractor1.getValue( object1 );
             return comp.compareTo( extractor2.getValue( object2 ) ) > 0;
         }
@@ -342,18 +378,27 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             final Comparable comp = (Comparable) extractor.getValue( object1 );
             return comp.compareTo( object2.getValue() ) >= 0;
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             final Comparable comp = (Comparable) ((ObjectVariableContextEntry) context).right;
             return comp.compareTo( context.declaration.getExtractor().getValue( left ) ) >= 0;
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             final Comparable comp = (Comparable) context.extractor.getValue( right );
             return comp.compareTo( ((ObjectVariableContextEntry) context).left ) >= 0;
         }
@@ -362,6 +407,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             final Comparable comp = (Comparable) extractor1.getValue( object1 );
             return comp.compareTo( extractor2.getValue( object2 ) ) >= 0;
         }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ShortFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ShortFactory.java	2007-05-07 20:31:25 UTC (rev 11716)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ShortFactory.java	2007-05-07 20:37:15 UTC (rev 11717)
@@ -207,16 +207,25 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor.getShortValue( object1 ) < object2.getShortValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             return ((LongVariableContextEntry) context).right < context.declaration.getExtractor().getShortValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             return context.extractor.getShortValue( right ) < ((LongVariableContextEntry) context).left;
         }
 
@@ -224,6 +233,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor1.getShortValue( object1 ) < extractor2.getShortValue( object2 );
         }
 
@@ -247,16 +259,25 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor.getShortValue( object1 ) <= object2.getShortValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             return ((LongVariableContextEntry) context).right <= context.declaration.getExtractor().getShortValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             return context.extractor.getShortValue( right ) <= ((LongVariableContextEntry) context).left;
         }
 
@@ -264,6 +285,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor1.getShortValue( object1 ) <= extractor2.getShortValue( object2 );
         }
 
@@ -287,16 +311,25 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor.getShortValue( object1 ) > object2.getShortValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             return ((LongVariableContextEntry) context).right > context.declaration.getExtractor().getShortValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             return context.extractor.getShortValue( right ) > ((LongVariableContextEntry) context).left;
         }
 
@@ -304,6 +337,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor1.getShortValue( object1 ) > extractor2.getShortValue( object2 );
         }
 
@@ -327,16 +363,25 @@
         public boolean evaluate(final Extractor extractor,
                                 final Object object1,
                                 final FieldValue object2) {
+            if( extractor.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor.getShortValue( object1 ) >= object2.getShortValue();
         }
 
         public boolean evaluateCachedRight(final VariableContextEntry context,
                                            final Object left) {
+            if( context.rightNull ) {
+                return false;
+            }
             return ((LongVariableContextEntry) context).right >= context.declaration.getExtractor().getShortValue( left );
         }
 
         public boolean evaluateCachedLeft(final VariableContextEntry context,
                                           final Object right) {
+            if( context.extractor.isNullValue( right ) ) {
+                return false;
+            }
             return context.extractor.getShortValue( right ) >= ((LongVariableContextEntry) context).left;
         }
 
@@ -344,6 +389,9 @@
                                 final Object object1,
                                 final Extractor extractor2,
                                 final Object object2) {
+            if( extractor1.isNullValue( object1 ) ) {
+                return false;
+            }
             return extractor1.getShortValue( object1 ) >= extractor2.getShortValue( object2 );
         }
 

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java	2007-05-07 20:31:25 UTC (rev 11716)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java	2007-05-07 20:37:15 UTC (rev 11717)
@@ -23,6 +23,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Date;
 import java.util.List;
 import java.util.Locale;
 
@@ -65,6 +66,10 @@
                                  {null, "==", null, Boolean.TRUE}, 
                                  {null, "==", list, Boolean.FALSE}, 
                                  {null, "!=", list, Boolean.TRUE},
+                                 {null, "<", new Integer( 43 ), Boolean.FALSE}, 
+                                 {null, ">=", new Integer( -10 ), Boolean.FALSE},
+                                 {null, ">", new Integer( -10 ), Boolean.FALSE}, 
+                                 {null, "<=", new Integer( 42 ), Boolean.FALSE},
                                  {new BigDecimal( "42.42" ), "<", new BigDecimal( "43" ), Boolean.TRUE}, 
                                  {new BigDecimal( "42.42" ), ">", new BigDecimal( "43" ), Boolean.FALSE}, 
                                  {new BigDecimal( "42.42" ), "<=", new BigDecimal( "42.42" ), Boolean.TRUE},
@@ -175,6 +180,10 @@
                                  {null, "!=", null, Boolean.FALSE}, 
                                  {null, "!=", new Integer( 42 ), Boolean.TRUE}, 
                                  {null, "==", new Integer( 42 ), Boolean.FALSE},
+                                 {null, "<", new Integer( 43 ), Boolean.FALSE}, 
+                                 {null, ">=", new Integer( -10 ), Boolean.FALSE},
+                                 {null, ">", new Integer( -10 ), Boolean.FALSE}, 
+                                 {null, "<=", new Integer( 42 ), Boolean.FALSE},
                                  {new Integer( 42 ), "memberOf", col, Boolean.TRUE},
                                  {new Integer( 43 ), "memberOf", col, Boolean.FALSE},
                                  {null, "memberOf", col, Boolean.FALSE},
@@ -211,6 +220,10 @@
                                  {new BigDecimal( 42 ), "!=", null, Boolean.TRUE}, 
                                  {null, "==", new BigDecimal( 42 ), Boolean.FALSE},
                                  {null, "!=", new BigDecimal( 42 ), Boolean.TRUE},
+                                 {null, "<", new BigDecimal( 43 ), Boolean.FALSE}, 
+                                 {null, ">=", new BigDecimal( -10 ), Boolean.FALSE},
+                                 {null, ">", new BigDecimal( -10 ), Boolean.FALSE}, 
+                                 {null, "<=", new BigDecimal( 42 ), Boolean.FALSE},
                                  {new BigDecimal( 42 ), "memberOf", col, Boolean.TRUE},
                                  {new BigDecimal( 43 ), "memberOf", col, Boolean.FALSE},
                                  {null, "memberOf", col, Boolean.FALSE},
@@ -247,6 +260,10 @@
                                  {new BigInteger( "42" ), "!=", null, Boolean.TRUE}, 
                                  {null, "==", new BigInteger( "42" ), Boolean.FALSE},
                                  {null, "!=", new BigInteger( "42" ), Boolean.TRUE},
+                                 {null, "<", new BigInteger( "43" ), Boolean.FALSE}, 
+                                 {null, ">=", new BigInteger( "-10" ), Boolean.FALSE},
+                                 {null, ">", new BigInteger( "-10" ), Boolean.FALSE}, 
+                                 {null, "<=", new BigInteger( "42" ), Boolean.FALSE},
                                  {new BigInteger( "42" ), "memberOf", col, Boolean.TRUE},
                                  {new BigInteger( "43" ), "memberOf", col, Boolean.FALSE},
                                  {null, "memberOf", col, Boolean.FALSE},
@@ -278,6 +295,10 @@
                                  {null, "!=", null, Boolean.FALSE}, 
                                  {null, "!=", new Short( (short) 42 ), Boolean.TRUE}, 
                                  {null, "==", new Short( (short) 42 ), Boolean.FALSE},
+                                 {null, "<", new Short( (short)43 ), Boolean.FALSE}, 
+                                 {null, ">=", new Short( (short)-10 ), Boolean.FALSE},
+                                 {null, ">", new Short( (short)-10 ), Boolean.FALSE}, 
+                                 {null, "<=", new Short((short) 42 ), Boolean.FALSE},
                                  {new Short( (short) 42 ), "memberOf", col, Boolean.TRUE},
                                  {new Short( (short) 43 ), "memberOf", col, Boolean.FALSE},
                                  {null, "memberOf", col, Boolean.FALSE},
@@ -341,6 +362,10 @@
                                  {null, "!=", null, Boolean.FALSE}, 
                                  {null, "!=", new Double( 42 ), Boolean.TRUE}, 
                                  {null, "==", new Double( 42 ), Boolean.FALSE},
+                                 {null, "<", new Double( 43 ), Boolean.FALSE}, 
+                                 {null, ">=", new Double( -10 ), Boolean.FALSE},
+                                 {null, ">", new Double( -10 ), Boolean.FALSE}, 
+                                 {null, "<=", new Double( 42 ), Boolean.FALSE},
                                  {new Double( 42 ), "memberOf", col, Boolean.TRUE},
                                  {new Double( 43 ), "memberOf", col, Boolean.FALSE},
                                  {null, "memberOf", col, Boolean.FALSE},
@@ -374,6 +399,10 @@
                                  {null, "!=", null, Boolean.FALSE}, 
                                  {null, "!=", new Float( 42 ), Boolean.TRUE}, 
                                  {null, "==", new Float( 42 ), Boolean.FALSE},
+                                 {null, "<", new Float( 43 ), Boolean.FALSE}, 
+                                 {null, ">=", new Float( -10 ), Boolean.FALSE},
+                                 {null, ">", new Float( -10 ), Boolean.FALSE}, 
+                                 {null, "<=", new Float( 42 ), Boolean.FALSE},
                                  {new Float( 42 ), "memberOf", col, Boolean.TRUE},
                                  {new Float( 43 ), "memberOf", col, Boolean.FALSE},
                                  {null, "memberOf", col, Boolean.FALSE},
@@ -407,6 +436,10 @@
                                  {null, "!=", null, Boolean.FALSE}, 
                                  {null, "!=", new Long( 42 ), Boolean.TRUE}, 
                                  {null, "==", new Long( 42 ), Boolean.FALSE},
+                                 {null, "<", new Long( 43 ), Boolean.FALSE}, 
+                                 {null, ">=", new Long( -10 ), Boolean.FALSE},
+                                 {null, ">", new Long( -10 ), Boolean.FALSE}, 
+                                 {null, "<=", new Long( 42 ), Boolean.FALSE},
                                  {new Long( 42 ), "memberOf", col, Boolean.TRUE},
                                  {new Long( 43 ), "memberOf", col, Boolean.FALSE},
                                  {null, "memberOf", col, Boolean.FALSE},
@@ -440,6 +473,10 @@
                                  {null, "!=", null, Boolean.FALSE}, 
                                  {null, "!=", new Character( 'z' ), Boolean.TRUE}, 
                                  {null, "==", new Character( 'z' ), Boolean.FALSE},
+                                 {null, "<", new Character( 'a' ), Boolean.FALSE}, 
+                                 {null, ">=", new Character( '\0' ), Boolean.FALSE},
+                                 {null, ">", new Character( '\0' ), Boolean.FALSE}, 
+                                 {null, "<=", new Character( 'a' ), Boolean.FALSE},
                                  {new Character( 'a' ), "memberOf", col, Boolean.TRUE},
                                  {new Character( 'z' ), "memberOf", col, Boolean.FALSE},
                                  {null, "memberOf", col, Boolean.FALSE},
@@ -478,6 +515,10 @@
                                  {null, "==", df.parse( "10-Jul-1974" ), Boolean.FALSE}, 
                                  {null, "!=", null, Boolean.FALSE}, 
                                  {null, "!=", df.parse( "10-Jul-1974" ), Boolean.TRUE},
+                                 {null, "<", df.parse( "10-Jul-1974" ), Boolean.FALSE}, 
+                                 {null, ">=", new Date(0), Boolean.FALSE},
+                                 {null, ">", new Date(0), Boolean.FALSE}, 
+                                 {null, "<=", df.parse( "10-Jul-1974" ), Boolean.FALSE},
                                  {df.parse( "10-Jul-1974" ), "memberOf", col, Boolean.TRUE},
                                  {df.parse( "15-Jul-1974" ), "memberOf", col, Boolean.FALSE},
                                  {null, "memberOf", col, Boolean.FALSE},
@@ -502,10 +543,18 @@
                                  {new Byte( "1" ), "!=", new Byte( "1" ), Boolean.FALSE}, 
                                  {new Byte( "1" ), "<=", new Byte( "1" ), Boolean.TRUE}, 
                                  {new Byte( "1" ), "==", null, Boolean.FALSE}, 
+                                 {new Byte( "1" ), "<", new Byte( "2" ), Boolean.TRUE}, 
+                                 {new Byte( "2" ), ">=", new Byte( "1" ), Boolean.TRUE},
+                                 {new Byte( "2" ), ">", new Byte( "1" ), Boolean.TRUE}, 
+                                 {new Byte( "1" ), "<=", new Byte( "2" ), Boolean.TRUE},
                                  {null, "==", null, Boolean.TRUE}, 
                                  {null, "!=", null, Boolean.FALSE}, 
                                  {null, "!=", new Byte( "1" ), Boolean.TRUE}, 
                                  {null, "==", new Byte( "1" ), Boolean.FALSE},
+                                 {null, "<", new Byte( Byte.MAX_VALUE), Boolean.FALSE}, 
+                                 {null, ">=", new Byte( Byte.MIN_VALUE ), Boolean.FALSE},
+                                 {null, ">", new Byte( Byte.MIN_VALUE ), Boolean.FALSE}, 
+                                 {null, "<=", new Byte( Byte.MAX_VALUE ), Boolean.FALSE},
                                  {new Byte( "1" ), "memberOf", col, Boolean.TRUE},
                                  {new Byte( "3" ), "memberOf", col, Boolean.FALSE},
                                  {null, "memberOf", col, Boolean.FALSE},
@@ -772,19 +821,19 @@
         private static final long serialVersionUID = 2759666130893301563L;
 
         public boolean getBooleanValue(final Object object) {
-            return ((Boolean) object).booleanValue();
+            return object != null ? ((Boolean) object).booleanValue() : false;
         }
 
         public byte getByteValue(final Object object) {
-            return ((Number) object).byteValue();
+            return object != null ? ((Number) object).byteValue() : (byte) 0;
         }
 
         public char getCharValue(final Object object) {
-            return ((Character) object).charValue();
+            return object != null ? ((Character) object).charValue() : '\0';
         }
 
         public double getDoubleValue(final Object object) {
-            return ((Number) object).doubleValue();
+            return object != null ? ((Number) object).doubleValue() : 0.0;
         }
 
         public Class getExtractToClass() {
@@ -792,7 +841,7 @@
         }
 
         public float getFloatValue(final Object object) {
-            return ((Number) object).floatValue();
+            return object != null ? ((Number) object).floatValue() : (float) 0.0;
         }
 
         public int getHashCode(final Object object) {
@@ -800,11 +849,11 @@
         }
 
         public int getIntValue(final Object object) {
-            return ((Number) object).intValue();
+            return object != null ? ((Number) object).intValue() : 0;
         }
 
         public long getLongValue(final Object object) {
-            return ((Number) object).longValue();
+            return object != null ? ((Number) object).longValue() : 0;
         }
 
         public Method getNativeReadMethod() {
@@ -812,7 +861,7 @@
         }
 
         public short getShortValue(final Object object) {
-            return ((Number) object).shortValue();
+            return object != null ? ((Number) object).shortValue() : (short) 0;
         }
 
         public Object getValue(final Object object) {




More information about the jboss-svn-commits mailing list