You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by fa...@apache.org on 2010/07/17 02:16:39 UTC

svn commit: r964989 - in /openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel: JDBCStoreQuery.java exps/JDBCExpressionFactory.java

Author: faywang
Date: Sat Jul 17 00:16:39 2010
New Revision: 964989

URL: http://svn.apache.org/viewvc?rev=964989&view=rev
Log:
OPENJPA-1726: fix boolean literal for Postgres

Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/JDBCExpressionFactory.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java?rev=964989&r1=964988&r2=964989&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java Sat Jul 17 00:16:39 2010
@@ -49,6 +49,7 @@ import org.apache.openjpa.jdbc.meta.stra
 import org.apache.openjpa.jdbc.schema.Column;
 import org.apache.openjpa.jdbc.schema.Table;
 import org.apache.openjpa.jdbc.sql.DBDictionary;
+import org.apache.openjpa.jdbc.sql.PostgresDictionary;
 import org.apache.openjpa.jdbc.sql.SQLBuffer;
 import org.apache.openjpa.jdbc.sql.SQLExceptions;
 import org.apache.openjpa.jdbc.sql.Select;
@@ -142,7 +143,10 @@ public class JDBCStoreQuery 
     }
 
     protected ExpressionFactory getExpressionFactory(ClassMetaData meta) {
-        return new JDBCExpressionFactory((ClassMapping) meta);
+        JDBCExpressionFactory factory = new JDBCExpressionFactory((ClassMapping) meta);
+        if (_store.getDBDictionary() instanceof PostgresDictionary)
+            factory.setBooleanLiteralAsNumeric(false);
+        return factory;
     }
     
     protected ResultObjectProvider executeQuery(Executor ex,

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/JDBCExpressionFactory.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/JDBCExpressionFactory.java?rev=964989&r1=964988&r2=964989&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/JDBCExpressionFactory.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/JDBCExpressionFactory.java Sat Jul 17 00:16:39 2010
@@ -25,6 +25,7 @@ import org.apache.openjpa.jdbc.meta.Clas
 import org.apache.openjpa.jdbc.meta.Discriminator;
 import org.apache.openjpa.jdbc.meta.strats.NoneDiscriminatorStrategy;
 import org.apache.openjpa.jdbc.sql.DBDictionary;
+import org.apache.openjpa.jdbc.sql.PostgresDictionary;
 import org.apache.openjpa.jdbc.sql.Raw;
 import org.apache.openjpa.kernel.exps.AggregateListener;
 import org.apache.openjpa.kernel.exps.Arguments;
@@ -57,6 +58,8 @@ public class JDBCExpressionFactory
     private final ClassMapping _type;
     private final SelectConstructor _cons = new SelectConstructor();
     private int _getMapValueAlias = 0;
+    
+    private boolean _isBooleanLiteralAsNumeric = true;
 
     /**
      * Constructor. Supply the type we're querying against.
@@ -65,6 +68,10 @@ public class JDBCExpressionFactory
         _type = type;
     }
 
+    public void setBooleanLiteralAsNumeric(boolean isBooleanLiteralAsNumeric) {
+        _isBooleanLiteralAsNumeric = isBooleanLiteralAsNumeric;
+    }
+    
     /**
      * Use to create SQL select.
      */
@@ -504,10 +511,11 @@ public class JDBCExpressionFactory
                 pType == Literal.TYPE_STRING)
                 value.append("'").append(lit.getValue().toString()).append("'");
             else if (pType == Literal.TYPE_BOOLEAN) {
-                if ((Boolean) lit.getValue())
-                    value.append("1");
+                Boolean boolVal = (Boolean)lit.getValue();
+                if (_isBooleanLiteralAsNumeric)
+                    value.append(boolVal ? "1" : "0");
                 else
-                    value.append("0");
+                    value.append(boolVal ? "true" : "false");
             } else if (pType == Literal.TYPE_ENUM) {
                 lit.setRaw(true);
                 return val;