You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2013/08/03 17:50:35 UTC

svn commit: r1510018 - in /cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne: exp/parser/ util/

Author: aadamchik
Date: Sat Aug  3 15:50:34 2013
New Revision: 1510018

URL: http://svn.apache.org/r1510018
Log:
CAY-1860  In-memory matching of DataObjects against ObjectId or int

switching other expressions to evaluator

Modified:
    cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTBetween.java
    cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTGreater.java
    cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTGreaterOrEqual.java
    cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLess.java
    cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLessOrEqual.java
    cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTNotBetween.java
    cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/util/ConversionUtil.java

Modified: cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTBetween.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTBetween.java?rev=1510018&r1=1510017&r2=1510018&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTBetween.java (original)
+++ cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTBetween.java Sat Aug  3 15:50:34 2013
@@ -20,7 +20,6 @@
 package org.apache.cayenne.exp.parser;
 
 import org.apache.cayenne.exp.Expression;
-import org.apache.cayenne.util.ConversionUtil;
 
 /**
  * "Between" expression.
@@ -42,7 +41,7 @@ public class ASTBetween extends Conditio
         jjtAddChild(path, 0);
         jjtAddChild(new ASTScalar(value1), 1);
         jjtAddChild(new ASTScalar(value2), 2);
-        
+
         connectChildren();
     }
 
@@ -53,24 +52,12 @@ public class ASTBetween extends Conditio
             return Boolean.FALSE;
         }
 
-        Comparable c1 = ConversionUtil.toComparable(evaluateChild(0, o));
-
-        if (c1 == null) {
-            return Boolean.FALSE;
-        }
-
-        Comparable c2 = ConversionUtil.toComparable(evaluateChild(1, o));
-        if (c2 == null) {
-            return Boolean.FALSE;
-        }
-
-        Comparable c3 = ConversionUtil.toComparable(evaluateChild(2, o));
-        if (c3 == null) {
-            return Boolean.FALSE;
-        }
+        Object o1 = evaluateChild(0, o);
+        Object o2 = evaluateChild(1, o);
+        Object o3 = evaluateChild(2, o);
+        Evaluator e = Evaluator.evaluator(o1);
 
-        return c1.compareTo(c2) >= 0
-            && c1.compareTo(c3) <= 0 ? Boolean.TRUE : Boolean.FALSE;
+        return e.compare(o1, o2) >= 0 && e.compare(o1, o3) <= 0 ? Boolean.TRUE : Boolean.FALSE;
     }
 
     /**

Modified: cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTGreater.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTGreater.java?rev=1510018&r1=1510017&r2=1510018&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTGreater.java (original)
+++ cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTGreater.java Sat Aug  3 15:50:34 2013
@@ -20,11 +20,9 @@
 package org.apache.cayenne.exp.parser;
 
 import org.apache.cayenne.exp.Expression;
-import org.apache.cayenne.util.ConversionUtil;
 
 /**
- * "Greate Than" expression.
- * 
+ * "Greater Than" expression.
  */
 public class ASTGreater extends ConditionNode {
 
@@ -53,17 +51,11 @@ public class ASTGreater extends Conditio
             return Boolean.FALSE;
         }
 
-        Comparable c1 = ConversionUtil.toComparable(evaluateChild(0, o));
-        if (c1 == null) {
-            return Boolean.FALSE;
-        }
-
-        Comparable c2 = ConversionUtil.toComparable(evaluateChild(1, o));
-        if (c2 == null) {
-            return Boolean.FALSE;
-        }
+        Object o1 = evaluateChild(0, o);
+        Object o2 = evaluateChild(1, o);
+        int diff = Evaluator.evaluator(o1).compare(o1, o2);
 
-        return c1.compareTo(c2) > 0 ? Boolean.TRUE : Boolean.FALSE;
+        return diff > 0 ? Boolean.TRUE : Boolean.FALSE;
     }
 
     /**

Modified: cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTGreaterOrEqual.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTGreaterOrEqual.java?rev=1510018&r1=1510017&r2=1510018&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTGreaterOrEqual.java (original)
+++ cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTGreaterOrEqual.java Sat Aug  3 15:50:34 2013
@@ -20,7 +20,6 @@
 package org.apache.cayenne.exp.parser;
 
 import org.apache.cayenne.exp.Expression;
-import org.apache.cayenne.util.ConversionUtil;
 
 /**
  * "Greater Than Or Equal To" expression.
@@ -54,17 +53,11 @@ public class ASTGreaterOrEqual extends C
             return Boolean.FALSE;
         }
 
-        Comparable c1 = ConversionUtil.toComparable(evaluateChild(0, o));
-        if (c1 == null) {
-            return Boolean.FALSE;
-        }
-
-        Comparable c2 = ConversionUtil.toComparable(evaluateChild(1, o));
-        if (c2 == null) {
-            return Boolean.FALSE;
-        }
+        Object o1 = evaluateChild(0, o);
+        Object o2 = evaluateChild(1, o);
+        int diff = Evaluator.evaluator(o1).compare(o1, o2);
 
-        return c1.compareTo(c2) >= 0 ? Boolean.TRUE : Boolean.FALSE;
+        return diff >= 0 ? Boolean.TRUE : Boolean.FALSE;
     }
 
     /**

Modified: cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLess.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLess.java?rev=1510018&r1=1510017&r2=1510018&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLess.java (original)
+++ cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLess.java Sat Aug  3 15:50:34 2013
@@ -20,7 +20,6 @@
 package org.apache.cayenne.exp.parser;
 
 import org.apache.cayenne.exp.Expression;
-import org.apache.cayenne.util.ConversionUtil;
 
 /**
  * "Less Then" expression.
@@ -53,17 +52,11 @@ public class ASTLess extends ConditionNo
             return Boolean.FALSE;
         }
 
-        Comparable c1 = ConversionUtil.toComparable(evaluateChild(0, o));
-        if (c1 == null) {
-            return Boolean.FALSE;
-        }
-
-        Comparable c2 = ConversionUtil.toComparable(evaluateChild(1, o));
-        if (c2 == null) {
-            return Boolean.FALSE;
-        }
+        Object o1 = evaluateChild(0, o);
+        Object o2 = evaluateChild(1, o);
+        int diff = Evaluator.evaluator(o1).compare(o1, o2);
 
-        return c1.compareTo(c2) < 0 ? Boolean.TRUE : Boolean.FALSE;
+        return diff < 0 ? Boolean.TRUE : Boolean.FALSE;
     }
 
     /**

Modified: cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLessOrEqual.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLessOrEqual.java?rev=1510018&r1=1510017&r2=1510018&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLessOrEqual.java (original)
+++ cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTLessOrEqual.java Sat Aug  3 15:50:34 2013
@@ -20,7 +20,6 @@
 package org.apache.cayenne.exp.parser;
 
 import org.apache.cayenne.exp.Expression;
-import org.apache.cayenne.util.ConversionUtil;
 
 /**
  * "Less than or equal to" expression.
@@ -54,17 +53,11 @@ public class ASTLessOrEqual extends Cond
             return Boolean.FALSE;
         }
 
-        Comparable c1 = ConversionUtil.toComparable(evaluateChild(0, o));
-        if (c1 == null) {
-            return Boolean.FALSE;
-        }
-
-        Comparable c2 = ConversionUtil.toComparable(evaluateChild(1, o));
-        if (c2 == null) {
-            return Boolean.FALSE;
-        }
+        Object o1 = evaluateChild(0, o);
+        Object o2 = evaluateChild(1, o);
+        int diff = Evaluator.evaluator(o1).compare(o1, o2);
 
-        return c1.compareTo(c2) <= 0 ? Boolean.TRUE : Boolean.FALSE;
+        return diff <= 0 ? Boolean.TRUE : Boolean.FALSE;
     }
 
     /**

Modified: cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTNotBetween.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTNotBetween.java?rev=1510018&r1=1510017&r2=1510018&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTNotBetween.java (original)
+++ cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/exp/parser/ASTNotBetween.java Sat Aug  3 15:50:34 2013
@@ -17,11 +17,9 @@
  *  under the License.
  ****************************************************************/
 
-
 package org.apache.cayenne.exp.parser;
 
 import org.apache.cayenne.exp.Expression;
-import org.apache.cayenne.util.ConversionUtil;
 
 /**
  * "Not Between" expression.
@@ -51,24 +49,12 @@ public class ASTNotBetween extends Condi
             return Boolean.FALSE;
         }
 
-        Comparable c1 = ConversionUtil.toComparable(evaluateChild(0, o));
-
-        if (c1 == null) {
-            return Boolean.FALSE;
-        }
-
-        Comparable c2 = ConversionUtil.toComparable(evaluateChild(1, o));
-        if (c2 == null) {
-            return Boolean.FALSE;
-        }
-
-        Comparable c3 = ConversionUtil.toComparable(evaluateChild(2, o));
-        if (c3 == null) {
-            return Boolean.FALSE;
-        }
+        Object o1 = evaluateChild(0, o);
+        Object o2 = evaluateChild(1, o);
+        Object o3 = evaluateChild(2, o);
+        Evaluator e = Evaluator.evaluator(o1);
 
-        return c1.compareTo(c2) >= 0
-            && c1.compareTo(c3) <= 0 ? Boolean.FALSE : Boolean.TRUE;
+        return e.compare(o1, o2) >= 0 && e.compare(o1, o3) <= 0 ? Boolean.FALSE : Boolean.TRUE;
     }
 
     /**

Modified: cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/util/ConversionUtil.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/util/ConversionUtil.java?rev=1510018&r1=1510017&r2=1510018&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/util/ConversionUtil.java (original)
+++ cayenne/main/trunk/framework/cayenne-core-unpublished/src/main/java/org/apache/cayenne/util/ConversionUtil.java Sat Aug  3 15:50:34 2013
@@ -113,6 +113,9 @@ public class ConversionUtil {
         else if (object instanceof Comparable) {
             return (Comparable) object;
         }
+        else if (object instanceof StringBuilder) {
+            return object.toString();
+        }
         else if (object instanceof StringBuffer) {
             return object.toString();
         }