Author: struberg
Date: Fri Jan 23 19:56:22 2015
New Revision: 1654352
URL: http://svn.apache.org/r1654352
Log:
OPENJPA-2558 add getRepresentation to allow BooleanRepresentation be used in
SQLBuffer
Added:
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/BooleanRepresentationFactory.java
(with props)
Modified:
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/BooleanRepresentation.java
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/PostgresDictionary.java
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SQLBuffer.java
openjpa/trunk/openjpa-jdbc/src/test/java/org/apache/openjpa/jdbc/sql/TestBooleanRepresentation.java
openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_dbsetup.xml
Modified:
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/BooleanRepresentation.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/BooleanRepresentation.java?rev=1654352&r1=1654351&r2=1654352&view=diff
==============================================================================
---
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/BooleanRepresentation.java
(original)
+++
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/BooleanRepresentation.java
Fri Jan 23 19:56:22 2015
@@ -21,10 +21,6 @@ package org.apache.openjpa.jdbc.sql;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
-import java.util.Arrays;
-
-import org.apache.openjpa.lib.util.Localizer;
-import org.apache.openjpa.util.UserException;
/**
* <p>Defines how a {@code Boolean} or {@code boolean} value
@@ -36,8 +32,7 @@ import org.apache.openjpa.util.UserExcep
* However, sometimes you like to use a different default representation for
Boolean values in your database.
* If your application likes to store boolean values in a {@code CHAR(1)}
field with {@code "T"} and
* {@code "F"} values then you might configure the {@link
org.apache.openjpa.jdbc.sql.DBDictionary}
- * to use the {@link
org.apache.openjpa.jdbc.sql.BooleanRepresentation.BooleanRepresentations#STRING_TF}
- * BooleanRepresentation:
+ * to use the {@code "STRING_TF"} BooleanRepresentation:
* <pre>
* <property name="openjpa.jdbc.DBDictionary"
*
value="(BitTypeName=CHAR(1),BooleanTypeName=CHAR(1),BooleanRepresentation=STRING_10)"/>
@@ -50,7 +45,8 @@ import org.apache.openjpa.util.UserExcep
*
* <p>The following {@code BooleanRepresentation} configuration options are
possible:
* <ul>
- * <li>One of the enum values of {@link
org.apache.openjpa.jdbc.sql.BooleanRepresentation.BooleanRepresentations}
+ * <li>One of the values of
+ * {@link
org.apache.openjpa.jdbc.sql.BooleanRepresentationFactory#BUILTIN_BOOLEAN_REPRESENTATIONS}
* , e.g.:
* <pre>
* <property name="openjpa.jdbc.DBDictionary"
value="(BooleanRepresentation=STRING_YN)"/>
@@ -77,227 +73,25 @@ import org.apache.openjpa.util.UserExcep
* <p>If a single column uses a different representation then they
* still can tweak this for those columns with the
* {@code org.apache.openjpa.persistence.ExternalValues} annotation.</p>
+ * @param <REPRESENTATION_TYPE> the java type which is used to store the
Boolean in the database,
+ * e.g. {@code String} or {@code Integer}
*/
-public interface BooleanRepresentation {
+public interface BooleanRepresentation<REPRESENTATION_TYPE> {
/**
* Set the boolean value into the statement
- * @param stmnt
- * @param columnIndex
- * @param val the boolean value to set
- * @throws SQLException
*/
public void setBoolean(PreparedStatement stmnt, int columnIndex, boolean
val) throws SQLException;
+ /**
+ * Read the boolean from the given ResultSet
+ */
public boolean getBoolean(ResultSet rs, int columnIndex) throws
SQLException;
- public static class Factory {
- public static BooleanRepresentation valueOf(String
booleanRepresentationKey, ClassLoader cl) {
- BooleanRepresentation booleanRepresentation = null;
-
- // 1st step, try to lookup the BooleanRepresentation from the
default ones
- try {
- booleanRepresentation =
BooleanRepresentations.valueOf(booleanRepresentationKey);
- }
- catch (IllegalArgumentException iae) {
- // nothing to do
- }
-
- if (booleanRepresentation == null &&
booleanRepresentationKey.contains("/")) {
- // if the key contains a '/' then the first value is the key
for 'true', the 2nd value is for 'false'
- String[] vals = booleanRepresentationKey.split("/");
- if (vals.length == 2) {
- booleanRepresentation = new
StringBooleanRepresentation(vals[0], vals[1]);
- }
- }
- else {
- // or do a class lookup for a custom BooleanRepresentation
- try {
- Class<? extends BooleanRepresentation>
booleanRepresentationClass
- = (Class<? extends BooleanRepresentation>)
cl.loadClass(booleanRepresentationKey);
- booleanRepresentation =
booleanRepresentationClass.newInstance();
- }
- catch (Exception e) {
- // nothing to do
- //X TODO probably log some error?
- }
- }
-
-
- if (booleanRepresentation == null) {
- Localizer _loc =
Localizer.forPackage(BooleanRepresentation.class);
- throw new
UserException(_loc.get("unknown-booleanRepresentation",
- new Object[]{booleanRepresentationKey,
-
Arrays.toString(BooleanRepresentation.BooleanRepresentations.values())}
- ));
-
- }
- else {
- //X TODO add logging about which one got picked up finally
- }
-
- return booleanRepresentation;
- }
- }
-
/**
- * BooleanRepresentation which takes 2 strings for true and false
representations
- * as constructor parameter;
+ * @return return the representation for {@code true} and {@code false}
*/
- public static class StringBooleanRepresentation implements
BooleanRepresentation {
- private final String trueRepresentation;
- private final String falseRepresentation;
-
- public StringBooleanRepresentation(String trueRepresentation, String
falseRepresentation) {
- this.trueRepresentation = trueRepresentation;
- this.falseRepresentation = falseRepresentation;
- }
-
- @Override
- public void setBoolean(PreparedStatement stmnt, int idx, boolean val)
throws SQLException{
- stmnt.setString(idx, val ? trueRepresentation :
falseRepresentation);
- }
-
- @Override
- public boolean getBoolean(ResultSet rs, int columnIndex) throws
SQLException {
- return trueRepresentation.equals(rs.getString(columnIndex));
- }
-
- @Override
- public String toString() {
- return "StringBooleanRepresentation with the following values for
true and false: "
- + trueRepresentation + " / " + falseRepresentation;
- }
- }
-
- public enum BooleanRepresentations implements BooleanRepresentation {
-
- /**
- * Booleans are natively supported by this very database.
- * The database column is e.g. a NUMBER(1)
- * OpenJPA will use preparedStatement.setBoolean(..) for it
- */
- BOOLEAN {
- @Override
- public void setBoolean(PreparedStatement stmnt, int idx, boolean
val) throws SQLException {
- stmnt.setBoolean(idx, val);
- }
-
- @Override
- public boolean getBoolean(ResultSet rs, int columnIndex) throws
SQLException {
- return rs.getBoolean(columnIndex);
- }
- },
-
- /**
- * Booleans are stored as numeric int 1 and int 0 values.
- * The database column is e.g. a NUMBER(1)
- * OpenJPA will use preparedStatement.setInt(..) for it
- */
- INT_10 {
- @Override
- public void setBoolean(PreparedStatement stmnt, int idx, boolean
val) throws SQLException{
- stmnt.setInt(idx, val ? 1 : 0);
- }
-
- @Override
- public boolean getBoolean(ResultSet rs, int columnIndex) throws
SQLException {
- return rs.getInt(columnIndex) > 0;
- }
- },
-
- /**
- * Booleans are stored as String "1" for {@code true}
- * and String "0" for {@code false}.
- * The database column is e.g. a CHAR(1) or VARCHAR(1)
- * OpenJPA will use preparedStatement.setString(..) for it
- */
- STRING_10 {
- @Override
- public void setBoolean(PreparedStatement stmnt, int idx, boolean
val) throws SQLException{
- stmnt.setString(idx, val ? "1" : "0");
- }
-
- @Override
- public boolean getBoolean(ResultSet rs, int columnIndex) throws
SQLException {
- return "1".equals(rs.getString(columnIndex));
- }
- },
-
- /**
- * Booleans are stored as String "Y" for {@code true}
- * and String "N" for {@code false}.
- * The database column is e.g. a CHAR(1) or VARCHAR(1)
- * OpenJPA will use preparedStatement.setString(..) for it
- */
- STRING_YN {
- @Override
- public void setBoolean(PreparedStatement stmnt, int idx, boolean
val) throws SQLException{
- stmnt.setString(idx, val ? "Y" : "N");
- }
-
- @Override
- public boolean getBoolean(ResultSet rs, int columnIndex) throws
SQLException {
- return "Y".equals(rs.getString(columnIndex));
- }
- },
-
- /**
- * Booleans are stored as String "y" for {@code true}
- * and String "n" for {@code false}.
- * The database column is e.g. a CHAR(1) or VARCHAR(1)
- * OpenJPA will use preparedStatement.setString(..) for it
- */
- STRING_YN_LOWERCASE {
- @Override
- public void setBoolean(PreparedStatement stmnt, int idx, boolean
val) throws SQLException{
- stmnt.setString(idx, val ? "y" : "n");
- }
-
- @Override
- public boolean getBoolean(ResultSet rs, int columnIndex) throws
SQLException {
- return "y".equals(rs.getString(columnIndex));
- }
- },
-
- /**
- * Booleans are stored as String "T" for {@code true}
- * and String "F" for {@code false}.
- * The database column is e.g. a CHAR(1) or VARCHAR(1)
- * OpenJPA will use preparedStatement.setString(..) for it
- */
- STRING_TF {
- @Override
- public void setBoolean(PreparedStatement stmnt, int idx, boolean
val) throws SQLException{
- stmnt.setString(idx, val ? "T" : "F");
- }
-
- @Override
- public boolean getBoolean(ResultSet rs, int columnIndex) throws
SQLException {
- return "T".equals(rs.getString(columnIndex));
- }
-
- },
-
- /**
- * Booleans are stored as String "t" for {@code true}
- * and String "f" for {@code false}.
- * The database column is e.g. a CHAR(1) or VARCHAR(1)
- * OpenJPA will use preparedStatement.setString(..) for it
- */
- STRING_TF_LOWERCASE {
- @Override
- public void setBoolean(PreparedStatement stmnt, int idx, boolean
val) throws SQLException{
- stmnt.setString(idx, val ? "t" : "f");
- }
-
- @Override
- public boolean getBoolean(ResultSet rs, int columnIndex) throws
SQLException {
- return "t".equals(rs.getString(columnIndex));
- }
- };
-
- }
+ public REPRESENTATION_TYPE getRepresentation(boolean bool);
}
Added:
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/BooleanRepresentationFactory.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/BooleanRepresentationFactory.java?rev=1654352&view=auto
==============================================================================
---
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/BooleanRepresentationFactory.java
(added)
+++
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/BooleanRepresentationFactory.java
Fri Jan 23 19:56:22 2015
@@ -0,0 +1,214 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openjpa.jdbc.sql;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.openjpa.lib.util.Localizer;
+import org.apache.openjpa.util.UserException;
+
+/**
+ * Factory which is being used to create the active {@link
org.apache.openjpa.jdbc.sql.BooleanRepresentation}.
+*/
+public class BooleanRepresentationFactory {
+
+ public static BooleanRepresentation INT_10 = new
Int10BooleanRepresentation();
+ public static BooleanRepresentation BOOLEAN = new
BooleanBooleanRepresentation();
+
+ /**
+ * {@link org.apache.openjpa.jdbc.sql.BooleanRepresentation}s built in by
default.
+ * Key is their config name, value is the BooleanRepresentation.
+ */
+ static final Map<String, BooleanRepresentation<?>>
BUILTIN_BOOLEAN_REPRESENTATIONS;
+
+ static {
+ BUILTIN_BOOLEAN_REPRESENTATIONS = new HashMap<String,
BooleanRepresentation<?>>();
+
+ /**
+ * Booleans are natively supported by this very database.
+ * The database column is e.g. a NUMBER(1)
+ * OpenJPA will use preparedStatement.setBoolean(..) for it
+ */
+ BUILTIN_BOOLEAN_REPRESENTATIONS.put("BOOLEAN", BOOLEAN);
+
+ /**
+ * Booleans are stored as numeric int 1 and int 0 values.
+ * The database column is e.g. a NUMBER(1)
+ * OpenJPA will use preparedStatement.setInt(..) for it
+ */
+ BUILTIN_BOOLEAN_REPRESENTATIONS.put("INT_10", INT_10);
+
+ /**
+ * Booleans are stored as String "1" for {@code true}
+ * and String "0" for {@code false}.
+ * The database column is e.g. a CHAR(1) or VARCHAR(1)
+ * OpenJPA will use preparedStatement.setString(..) for it
+ */
+ BUILTIN_BOOLEAN_REPRESENTATIONS.put("STRING_10", new
StringBooleanRepresentation("1", "0"));
+
+ /**
+ * Booleans are stored as String "Y" for {@code true}
+ * and String "N" for {@code false}.
+ * The database column is e.g. a CHAR(1) or VARCHAR(1)
+ * OpenJPA will use preparedStatement.setString(..) for it
+ */
+ BUILTIN_BOOLEAN_REPRESENTATIONS.put("STRING_YN", new
StringBooleanRepresentation("Y", "N"));
+
+ /**
+ * Booleans are stored as String "y" for {@code true}
+ * and String "n" for {@code false}.
+ * The database column is e.g. a CHAR(1) or VARCHAR(1)
+ * OpenJPA will use preparedStatement.setString(..) for it
+ */
+ BUILTIN_BOOLEAN_REPRESENTATIONS.put("STRING_YN_LOWERCASE", new
StringBooleanRepresentation("y", "n"));
+
+ /**
+ * Booleans are stored as String "T" for {@code true}
+ * and String "F" for {@code false}.
+ * The database column is e.g. a CHAR(1) or VARCHAR(1)
+ * OpenJPA will use preparedStatement.setString(..) for it
+ */
+ BUILTIN_BOOLEAN_REPRESENTATIONS.put("STRING_TF", new
StringBooleanRepresentation("T", "F"));
+
+ /**
+ * Booleans are stored as String "t" for {@code true}
+ * and String "f" for {@code false}.
+ * The database column is e.g. a CHAR(1) or VARCHAR(1)
+ * OpenJPA will use preparedStatement.setString(..) for it
+ */
+ BUILTIN_BOOLEAN_REPRESENTATIONS.put("STRING_TF_LOWERCASE", new
StringBooleanRepresentation("t", "f"));
+
+ }
+
+ public static BooleanRepresentation valueOf(String
booleanRepresentationKey, ClassLoader cl) {
+ // 1st step, try to lookup the BooleanRepresentation from the default
ones
+ BooleanRepresentation booleanRepresentation =
BUILTIN_BOOLEAN_REPRESENTATIONS.get(booleanRepresentationKey);
+
+ if (booleanRepresentation == null &&
booleanRepresentationKey.contains("/")) {
+ // if the key contains a '/' then the first value is the key for
'true', the 2nd value is for 'false'
+ String[] vals = booleanRepresentationKey.split("/");
+ if (vals.length == 2) {
+ booleanRepresentation = new
StringBooleanRepresentation(vals[0], vals[1]);
+ }
+ }
+ else {
+ // or do a class lookup for a custom BooleanRepresentation
+ try {
+ Class<? extends BooleanRepresentation>
booleanRepresentationClass
+ = (Class<? extends BooleanRepresentation>)
cl.loadClass(booleanRepresentationKey);
+ booleanRepresentation =
booleanRepresentationClass.newInstance();
+ }
+ catch (Exception e) {
+ // nothing to do
+ //X TODO probably log some error?
+ }
+ }
+
+ if (booleanRepresentation == null) {
+ Localizer _loc = Localizer.forPackage(BooleanRepresentation.class);
+ throw new UserException(_loc.get("unknown-booleanRepresentation",
+ new Object[]{booleanRepresentationKey,
+
Arrays.toString(BUILTIN_BOOLEAN_REPRESENTATIONS.keySet().toArray(new
String[]{}))}
+ ));
+
+ }
+ else {
+ //X TODO add logging about which one got picked up finally
+ }
+
+ return booleanRepresentation;
+ }
+
+
+
+ /**
+ * BooleanRepresentation which takes 2 strings for true and false
representations
+ * as constructor parameter;
+ */
+ public static class StringBooleanRepresentation implements
BooleanRepresentation<String> {
+ private final String trueRepresentation;
+ private final String falseRepresentation;
+
+ public StringBooleanRepresentation(String trueRepresentation, String
falseRepresentation) {
+ this.trueRepresentation = trueRepresentation;
+ this.falseRepresentation = falseRepresentation;
+ }
+
+ @Override
+ public void setBoolean(PreparedStatement stmnt, int idx, boolean val)
throws SQLException {
+ stmnt.setString(idx, val ? trueRepresentation :
falseRepresentation);
+ }
+
+ @Override
+ public boolean getBoolean(ResultSet rs, int columnIndex) throws
SQLException {
+ return trueRepresentation.equals(rs.getString(columnIndex));
+ }
+
+ @Override
+ public String getRepresentation(boolean bool) {
+ return bool ? trueRepresentation : falseRepresentation;
+ }
+
+ @Override
+ public String toString() {
+ return "StringBooleanRepresentation with the following values for
true and false: "
+ + trueRepresentation + " / " + falseRepresentation;
+ }
+ }
+
+ public static class BooleanBooleanRepresentation implements
BooleanRepresentation<Boolean> {
+ @Override
+ public void setBoolean(PreparedStatement stmnt, int idx, boolean val)
throws SQLException {
+ stmnt.setBoolean(idx, val);
+ }
+
+ @Override
+ public boolean getBoolean(ResultSet rs, int columnIndex) throws
SQLException {
+ return rs.getBoolean(columnIndex);
+ }
+
+ @Override
+ public Boolean getRepresentation(boolean bool) {
+ return bool;
+ }
+ }
+
+ public static class Int10BooleanRepresentation implements
BooleanRepresentation<Integer> {
+ @Override
+ public void setBoolean(PreparedStatement stmnt, int idx, boolean val)
throws SQLException{
+ stmnt.setInt(idx, val ? 1 : 0);
+ }
+
+ @Override
+ public boolean getBoolean(ResultSet rs, int columnIndex) throws
SQLException {
+ return rs.getInt(columnIndex) > 0;
+ }
+
+ @Override
+ public Integer getRepresentation(boolean bool) {
+ return bool ? 1 : 0;
+ }
+ }
+
+}
Propchange:
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/BooleanRepresentationFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
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=1654352&r1=1654351&r2=1654352&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
Fri Jan 23 19:56:22 2015
@@ -329,10 +329,10 @@ public class DBDictionary
/**
* Defines how {@code Boolean} and {@code boolean} values get represented
- * in OpenJPA. Default to {@link
org.apache.openjpa.jdbc.sql.BooleanRepresentation.BooleanRepresentations#INT_10}
+ * in OpenJPA. Default to {@code INT_10}.
* for backward compatibility.
*/
- protected BooleanRepresentation booleanRepresentation =
BooleanRepresentation.BooleanRepresentations.INT_10;
+ protected BooleanRepresentation booleanRepresentation =
BooleanRepresentationFactory.INT_10;
public int characterColumnSize = 255;
public String arrayTypeName = "ARRAY";
@@ -5683,12 +5683,12 @@ public class DBDictionary
BooleanRepresentation evaluatedBooleanRepresentation = null;
if (booleanRepresentationKey != null &&
booleanRepresentationKey.length() > 0) {
ClassLoader cl = conf.getUserClassLoader();
- evaluatedBooleanRepresentation =
BooleanRepresentation.Factory.valueOf(booleanRepresentationKey, cl);
+ evaluatedBooleanRepresentation =
BooleanRepresentationFactory.valueOf(booleanRepresentationKey, cl);
}
booleanRepresentation = evaluatedBooleanRepresentation != null
? evaluatedBooleanRepresentation
- :
BooleanRepresentation.BooleanRepresentations.INT_10;
+ : BooleanRepresentationFactory.INT_10;
}
protected boolean isUsingRange(long start, long end) {
Modified:
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/PostgresDictionary.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/PostgresDictionary.java?rev=1654352&r1=1654351&r2=1654352&view=diff
==============================================================================
---
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/PostgresDictionary.java
(original)
+++
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/PostgresDictionary.java
Fri Jan 23 19:56:22 2015
@@ -187,7 +187,7 @@ public class PostgresDictionary
"SET", "FLOAT4", "FLOAT8", "ABSTIME", "RELTIME", "TINTERVAL",
"MONEY",
}));
- booleanRepresentation =
BooleanRepresentation.BooleanRepresentations.BOOLEAN;
+ booleanRepresentation = BooleanRepresentationFactory.BOOLEAN;
supportsLockingWithDistinctClause = false;
supportsQueryTimeout = false;
Modified:
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SQLBuffer.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SQLBuffer.java?rev=1654352&r1=1654351&r2=1654352&view=diff
==============================================================================
---
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SQLBuffer.java
(original)
+++
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SQLBuffer.java
Fri Jan 23 19:56:22 2015
@@ -369,7 +369,7 @@ public final class SQLBuffer
} else if (type == Boolean.class) {
Boolean b = (Boolean) o;
// We store B(b)ooleans as ints. Convert
- _sql.append((b.booleanValue() ? "1" : "0"));
+
_sql.append(_dict.getBooleanRepresentation().getRepresentation(b.booleanValue()));
} else {
_sql.append(o.toString());
}
Modified:
openjpa/trunk/openjpa-jdbc/src/test/java/org/apache/openjpa/jdbc/sql/TestBooleanRepresentation.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/test/java/org/apache/openjpa/jdbc/sql/TestBooleanRepresentation.java?rev=1654352&r1=1654351&r2=1654352&view=diff
==============================================================================
---
openjpa/trunk/openjpa-jdbc/src/test/java/org/apache/openjpa/jdbc/sql/TestBooleanRepresentation.java
(original)
+++
openjpa/trunk/openjpa-jdbc/src/test/java/org/apache/openjpa/jdbc/sql/TestBooleanRepresentation.java
Fri Jan 23 19:56:22 2015
@@ -24,7 +24,6 @@ import java.lang.reflect.Proxy;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
-import java.util.concurrent.atomic.AtomicBoolean;
import junit.framework.Assert;
import junit.framework.TestCase;
@@ -60,7 +59,7 @@ public class TestBooleanRepresentation
final T yesRepresentation,
final T noRepresentation)
throws Exception {
ClassLoader cl = TestBooleanRepresentation.class.getClassLoader();
- BooleanRepresentation booleanRepresentation =
BooleanRepresentation.Factory.valueOf(representationKey, cl);
+ BooleanRepresentation booleanRepresentation =
BooleanRepresentationFactory.valueOf(representationKey, cl);
Assert.assertNotNull(booleanRepresentation);
DummyPreparedStatement<T> dummyPreparedStatement = new
DummyPreparedStatement<T>(expectedType);
@@ -145,15 +144,20 @@ public class TestBooleanRepresentation
}
}
- public static class DummyTestBooleanRepresentation implements
BooleanRepresentation {
+ public static class DummyTestBooleanRepresentation implements
BooleanRepresentation<String> {
@Override
public void setBoolean(PreparedStatement stmnt, int columnIndex,
boolean val) throws SQLException {
- stmnt.setString(columnIndex, val ? "somehowtrue" : "somehowfalse");
+ stmnt.setString(columnIndex, getRepresentation(val));
}
@Override
public boolean getBoolean(ResultSet rs, int columnIndex) throws
SQLException {
return "somehowtrue".equals(rs.getString(columnIndex));
}
+
+ @Override
+ public String getRepresentation(boolean bool) {
+ return bool ? "somehowtrue" : "somehowfalse";
+ }
}
}
Modified: openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_dbsetup.xml
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_dbsetup.xml?rev=1654352&r1=1654351&r2=1654352&view=diff
==============================================================================
--- openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_dbsetup.xml
(original)
+++ openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_dbsetup.xml Fri Jan
23 19:56:22 2015
@@ -1142,10 +1142,6 @@ the <literal>INSERT/UPDATE</literal> ope
generated by the <literal>mappingtool</literal>.
</para>
</listitem>
-
-
-
- <!-- MSX TODO START DOCUMENT -->
<listitem id="DBDictionary.BooleanRepresentation">
<para>
<indexterm>
@@ -1166,10 +1162,6 @@ Note that you additionally might need to
<literal>BitTypeName</literal> settings to fit your selected
BooleanRepresenation.
</para>
</listitem>
- <!-- MSX TODO END DOCUMENT -->
-
-
-
<listitem id="DBDictionary.BooleanTypeName">
<para>
<indexterm>