You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2009/11/25 20:32:16 UTC

svn commit: r884233 - /openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java

Author: ppoddar
Date: Wed Nov 25 19:32:15 2009
New Revision: 884233

URL: http://svn.apache.org/viewvc?rev=884233&view=rev
Log:
Special comparison for two boolean constants

Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java?rev=884233&r1=884232&r2=884233&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java Wed Nov 25 19:32:15 2009
@@ -2888,6 +2888,16 @@
         boolean castrhs = false;
         Class lc = Filters.wrap(lhs.getType());
         Class rc = Filters.wrap(rhs.getType());
+        
+        // special case of comparison of two boolean constants
+        // because some databases do not like false = false or false = true
+        // but all databases understand 1 = 0 or 0 <> 1 etc.
+        if (lc == rc && lc == Boolean.class && lhs.isConstant() && rhs.isConstant()) {
+            String lvalue = Boolean.TRUE.equals(lhs.getValue()) ? "1" : "0";
+            String rvalue = Boolean.TRUE.equals(rhs.getValue()) ? "1" : "0";
+            buf.append(lvalue).append(op).append(rvalue);
+            return;
+        }
         int type = 0;
         if (requiresCastForComparisons && (lc != rc
             || (lhs.isConstant() && rhs.isConstant()))) {