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 2017/01/24 13:23:05 UTC
[1/7] cayenne git commit: CAY-2050 | Fast hack for Cayenne Crypto
Repository: cayenne
Updated Branches:
refs/heads/master ee021067a -> 27849ce59
CAY-2050 | Fast hack for Cayenne Crypto
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/e9e1e73a
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/e9e1e73a
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/e9e1e73a
Branch: refs/heads/master
Commit: e9e1e73a9b5c39aae649a062996787a29f01070c
Parents: b99c2b4
Author: Savva Kolbachev <s....@gmail.com>
Authored: Sat Jan 21 18:00:52 2017 +0300
Committer: Savva Kolbachev <s....@gmail.com>
Committed: Sat Jan 21 18:16:02 2017 +0300
----------------------------------------------------------------------
.../crypto/transformer/DefaultBindingsTransformer.java | 1 +
.../java/org/apache/cayenne/log/CommonsJdbcEventLogger.java | 7 ++++++-
2 files changed, 7 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e9e1e73a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultBindingsTransformer.java
----------------------------------------------------------------------
diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultBindingsTransformer.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultBindingsTransformer.java
index e8aeb4b..4844795 100644
--- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultBindingsTransformer.java
+++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultBindingsTransformer.java
@@ -46,6 +46,7 @@ public class DefaultBindingsTransformer implements BindingsTransformer {
DbAttributeBinding b = bindings[positions[i]];
Object transformed = transformers[i].encrypt(encryptor, b.getValue());
b.setValue(transformed);
+ b.setExtendedType(null); // TODO fast hack
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e9e1e73a/cayenne-server/src/main/java/org/apache/cayenne/log/CommonsJdbcEventLogger.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/log/CommonsJdbcEventLogger.java b/cayenne-server/src/main/java/org/apache/cayenne/log/CommonsJdbcEventLogger.java
index c10daad..83994dc 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/log/CommonsJdbcEventLogger.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/log/CommonsJdbcEventLogger.java
@@ -376,7 +376,12 @@ public class CommonsJdbcEventLogger implements JdbcEventLogger {
}
buffer.append(":");
- buffer.append(b.getExtendedType().toString(b.getValue()));
+
+ if (b.getExtendedType() != null) {
+ buffer.append(b.getExtendedType().toString(b.getValue()));
+ } else {
+ buffer.append(b.getValue());
+ }
}
if (hasIncluded) {
[7/7] cayenne git commit: CAY-2050 Refactoring: ParameterBinding to
contain ExtendedType property
Posted by aa...@apache.org.
CAY-2050 Refactoring: ParameterBinding to contain ExtendedType property
* do not enclose NULL in quotation marks, as it will make it indistinguishable for a a String "null"
* refactoring
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/27849ce5
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/27849ce5
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/27849ce5
Branch: refs/heads/master
Commit: 27849ce595b291989aa830fdbb8f0f77923d71e8
Parents: 0161822
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Tue Jan 24 15:08:03 2017 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Tue Jan 24 16:22:52 2017 +0300
----------------------------------------------------------------------
.../java8/access/types/LocalDateTimeType.java | 6 ++--
.../java8/access/types/LocalDateType.java | 6 ++--
.../java8/access/types/LocalTimeType.java | 6 ++--
.../cayenne/joda/access/types/DateTimeType.java | 8 ++---
.../joda/access/types/LocalDateTimeType.java | 8 ++---
.../joda/access/types/LocalDateType.java | 8 ++---
.../joda/access/types/LocalTimeType.java | 12 +++----
.../cayenne/access/types/BigDecimalType.java | 2 +-
.../cayenne/access/types/BigIntegerType.java | 6 ++--
.../cayenne/access/types/BooleanType.java | 2 +-
.../cayenne/access/types/ByteArrayType.java | 36 ++++++++++++++++----
.../access/types/ByteOrCharArrayFactory.java | 10 +++---
.../apache/cayenne/access/types/ByteType.java | 6 ++--
.../cayenne/access/types/CalendarType.java | 8 ++---
.../apache/cayenne/access/types/CharType.java | 12 ++++---
.../apache/cayenne/access/types/DateType.java | 2 +-
.../apache/cayenne/access/types/DoubleType.java | 2 +-
.../apache/cayenne/access/types/EnumType.java | 21 ++++++------
.../cayenne/access/types/ExtendedEnumType.java | 2 +-
.../cayenne/access/types/ExtendedType.java | 20 +++++++----
.../access/types/ExtendedTypeDecorator.java | 2 +-
.../apache/cayenne/access/types/FloatType.java | 2 +-
.../cayenne/access/types/IntegerType.java | 2 +-
.../apache/cayenne/access/types/LongType.java | 2 +-
.../apache/cayenne/access/types/ObjectType.java | 2 +-
.../apache/cayenne/access/types/ShortType.java | 2 +-
.../apache/cayenne/access/types/TimeType.java | 2 +-
.../cayenne/access/types/TimestampType.java | 2 +-
.../apache/cayenne/access/types/UUIDType.java | 6 ++--
.../cayenne/access/types/UtilDateType.java | 6 ++--
.../apache/cayenne/access/types/VoidType.java | 2 +-
.../cayenne/dba/oracle/OracleAdapter.java | 22 ++++++------
.../dba/sqlite/SQLiteBigDecimalType.java | 6 ++--
.../cayenne/dba/sqlite/SQLiteByteArrayType.java | 10 +++---
.../cayenne/dba/sqlite/SQLiteCalendarType.java | 8 ++---
.../cayenne/dba/sqlite/SQLiteFloatType.java | 6 ++--
.../cayenne/log/CommonsJdbcEventLogger.java | 29 +++++++++++-----
.../java/org/apache/cayenne/util/IDUtil.java | 34 ++----------------
.../cayenne/access/types/MockExtendedType.java | 2 +-
.../extended_type/StringET1ExtendedType.java | 6 ++--
.../cayenne/unit/jira/CAY_207StringType1.java | 6 ++--
.../cayenne/unit/jira/CAY_207StringType2.java | 6 ++--
docs/doc/src/main/resources/RELEASE-NOTES.txt | 1 +
43 files changed, 182 insertions(+), 167 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalDateTimeType.java
----------------------------------------------------------------------
diff --git a/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalDateTimeType.java b/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalDateTimeType.java
index f47e247..6242574 100644
--- a/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalDateTimeType.java
+++ b/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalDateTimeType.java
@@ -19,14 +19,14 @@
package org.apache.cayenne.java8.access.types;
+import org.apache.cayenne.access.types.ExtendedType;
+
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.time.LocalDateTime;
-import org.apache.cayenne.access.types.ExtendedType;
-
public class LocalDateTimeType implements ExtendedType<LocalDateTime> {
@Override
@@ -54,7 +54,7 @@ public class LocalDateTimeType implements ExtendedType<LocalDateTime> {
@Override
public String toString(LocalDateTime value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return '\'' + value.toString() + '\'';
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalDateType.java
----------------------------------------------------------------------
diff --git a/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalDateType.java b/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalDateType.java
index ee602d5..0d0b431 100644
--- a/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalDateType.java
+++ b/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalDateType.java
@@ -19,14 +19,14 @@
package org.apache.cayenne.java8.access.types;
+import org.apache.cayenne.access.types.ExtendedType;
+
import java.sql.CallableStatement;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.time.LocalDate;
-import org.apache.cayenne.access.types.ExtendedType;
-
public class LocalDateType implements ExtendedType<LocalDate> {
@Override
@@ -54,7 +54,7 @@ public class LocalDateType implements ExtendedType<LocalDate> {
@Override
public String toString(LocalDate value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return '\'' + value.toString() + '\'';
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalTimeType.java
----------------------------------------------------------------------
diff --git a/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalTimeType.java b/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalTimeType.java
index f1a8dea..1b0afb4 100644
--- a/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalTimeType.java
+++ b/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalTimeType.java
@@ -19,14 +19,14 @@
package org.apache.cayenne.java8.access.types;
+import org.apache.cayenne.access.types.ExtendedType;
+
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Time;
import java.time.LocalTime;
-import org.apache.cayenne.access.types.ExtendedType;
-
public class LocalTimeType implements ExtendedType<LocalTime> {
@Override
@@ -54,7 +54,7 @@ public class LocalTimeType implements ExtendedType<LocalTime> {
@Override
public String toString(LocalTime value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return '\'' + value.toString() + '\'';
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/DateTimeType.java
----------------------------------------------------------------------
diff --git a/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/DateTimeType.java b/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/DateTimeType.java
index a042b3d..5b8bb63 100644
--- a/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/DateTimeType.java
+++ b/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/DateTimeType.java
@@ -19,14 +19,14 @@
package org.apache.cayenne.joda.access.types;
+import org.apache.cayenne.access.types.ExtendedType;
+import org.joda.time.DateTime;
+
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
-import org.apache.cayenne.access.types.ExtendedType;
-import org.joda.time.DateTime;
-
/**
* Handles <code>org.joda.time.DateTime</code> type mapping.
*
@@ -70,7 +70,7 @@ public class DateTimeType implements ExtendedType<DateTime> {
@Override
public String toString(DateTime value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return '\'' + value.toString() + '\'';
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalDateTimeType.java
----------------------------------------------------------------------
diff --git a/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalDateTimeType.java b/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalDateTimeType.java
index 97d3900..e12ab04 100644
--- a/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalDateTimeType.java
+++ b/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalDateTimeType.java
@@ -19,15 +19,15 @@
package org.apache.cayenne.joda.access.types;
+import org.apache.cayenne.access.types.ExtendedType;
+import org.joda.time.LocalDateTime;
+
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.sql.Types;
-import org.apache.cayenne.access.types.ExtendedType;
-import org.joda.time.LocalDateTime;
-
/**
* Handles <code>org.joda.time.LocalDateTime</code> type mapping.
*
@@ -71,7 +71,7 @@ public class LocalDateTimeType implements ExtendedType<LocalDateTime> {
@Override
public String toString(LocalDateTime value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return '\'' + value.toString() + '\'';
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalDateType.java
----------------------------------------------------------------------
diff --git a/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalDateType.java b/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalDateType.java
index 19f05b6..c59a371 100644
--- a/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalDateType.java
+++ b/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalDateType.java
@@ -19,6 +19,9 @@
package org.apache.cayenne.joda.access.types;
+import org.apache.cayenne.access.types.ExtendedType;
+import org.joda.time.LocalDate;
+
import java.sql.CallableStatement;
import java.sql.Date;
import java.sql.PreparedStatement;
@@ -26,9 +29,6 @@ import java.sql.ResultSet;
import java.sql.Timestamp;
import java.sql.Types;
-import org.apache.cayenne.access.types.ExtendedType;
-import org.joda.time.LocalDate;
-
/**
* Handles <code>org.joda.time.LocalDate</code> type mapping.
*
@@ -81,7 +81,7 @@ public class LocalDateType implements ExtendedType<LocalDate> {
@Override
public String toString(LocalDate value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return '\'' + value.toString() + '\'';
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalTimeType.java
----------------------------------------------------------------------
diff --git a/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalTimeType.java b/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalTimeType.java
index 501f889..87d4fca 100644
--- a/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalTimeType.java
+++ b/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalTimeType.java
@@ -19,6 +19,11 @@
package org.apache.cayenne.joda.access.types;
+import org.apache.cayenne.access.types.ExtendedType;
+import org.joda.time.DateTimeZone;
+import org.joda.time.LocalDate;
+import org.joda.time.LocalTime;
+
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
@@ -26,11 +31,6 @@ import java.sql.Time;
import java.sql.Timestamp;
import java.sql.Types;
-import org.apache.cayenne.access.types.ExtendedType;
-import org.joda.time.DateTimeZone;
-import org.joda.time.LocalDate;
-import org.joda.time.LocalTime;
-
/**
* Handles <code>org.joda.time.LocalTime</code> type mapping.
*
@@ -86,7 +86,7 @@ public class LocalTimeType implements ExtendedType<LocalTime> {
@Override
public String toString(LocalTime value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return '\'' + value.toString() + '\'';
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/BigDecimalType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/BigDecimalType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/BigDecimalType.java
index 11e9860..626e794 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/BigDecimalType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/BigDecimalType.java
@@ -63,7 +63,7 @@ public class BigDecimalType implements ExtendedType<BigDecimal> {
@Override
public String toString(BigDecimal value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return value.toString();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/BigIntegerType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/BigIntegerType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/BigIntegerType.java
index a3d1752..f6c10b1 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/BigIntegerType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/BigIntegerType.java
@@ -18,13 +18,13 @@
****************************************************************/
package org.apache.cayenne.access.types;
+import org.apache.cayenne.dba.TypesMapping;
+
import java.math.BigInteger;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
-import org.apache.cayenne.dba.TypesMapping;
-
/**
* @since 3.0
*/
@@ -80,7 +80,7 @@ public class BigIntegerType implements ExtendedType<BigInteger> {
@Override
public String toString(BigInteger value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return value.toString();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/BooleanType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/BooleanType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/BooleanType.java
index be0d597..8de103d 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/BooleanType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/BooleanType.java
@@ -75,7 +75,7 @@ public class BooleanType implements ExtendedType<Boolean> {
@Override
public String toString(Boolean value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return '\'' + value.toString() + '\'';
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteArrayType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteArrayType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteArrayType.java
index 3ad6898..21fc5b7 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteArrayType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteArrayType.java
@@ -19,6 +19,10 @@
package org.apache.cayenne.access.types;
+import org.apache.cayenne.CayenneException;
+import org.apache.cayenne.util.IDUtil;
+import org.apache.cayenne.util.MemoryBlob;
+
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -29,10 +33,6 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
-import org.apache.cayenne.CayenneException;
-import org.apache.cayenne.util.IDUtil;
-import org.apache.cayenne.util.MemoryBlob;
-
/**
* Handles <code>byte[]</code>, mapping it as either of JDBC types - BLOB or
* (VAR)BINARY. Can be configured to trim trailing zero bytes.
@@ -44,6 +44,30 @@ public class ByteArrayType implements ExtendedType<byte[]> {
protected boolean trimmingBytes;
protected boolean usingBlobs;
+ public static void logBytes(StringBuilder buffer, byte[] bytes) {
+ buffer.append("< ");
+
+ int len = bytes.length;
+ boolean trimming = false;
+ if (len > TRIM_VALUES_THRESHOLD) {
+ len = TRIM_VALUES_THRESHOLD;
+ trimming = true;
+ }
+
+ for (int i = 0; i < len; i++) {
+ if (i > 0) {
+ buffer.append(",");
+ }
+ IDUtil.appendFormattedByte(buffer, bytes[i]);
+ }
+
+ if (trimming) {
+ buffer.append("...");
+ }
+
+ buffer.append('>');
+ }
+
/**
* Strips null bytes from the byte array, returning a potentially smaller
* array that contains no trailing zero bytes.
@@ -141,11 +165,11 @@ public class ByteArrayType implements ExtendedType<byte[]> {
@Override
public String toString(byte[] value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
StringBuilder buffer = new StringBuilder();
- IDUtil.appendFormattedBytes(buffer, value);
+ logBytes(buffer, value);
return buffer.toString();
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteOrCharArrayFactory.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteOrCharArrayFactory.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteOrCharArrayFactory.java
index 8db28ce..2b1b83f 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteOrCharArrayFactory.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteOrCharArrayFactory.java
@@ -18,11 +18,9 @@
****************************************************************/
package org.apache.cayenne.access.types;
-import java.lang.reflect.Array;
-
import org.apache.cayenne.util.IDUtil;
-import static org.apache.cayenne.log.CommonsJdbcEventLogger.TRIM_VALUES_THRESHOLD;
+import java.lang.reflect.Array;
/**
* A factory that dynamically creates ExtendedTypes for Character, Character[], Byte[] and
@@ -123,7 +121,7 @@ class ByteOrCharArrayFactory implements ExtendedTypeFactory {
@Override
public String toString(char[] value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
StringBuilder buffer = new StringBuilder();
@@ -194,7 +192,7 @@ class ByteOrCharArrayFactory implements ExtendedTypeFactory {
@Override
public String toString(Character[] value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
StringBuilder buffer = new StringBuilder();
@@ -265,7 +263,7 @@ class ByteOrCharArrayFactory implements ExtendedTypeFactory {
@Override
public String toString(Byte[] value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
StringBuilder buffer = new StringBuilder();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteType.java
index c11191d..b363bbf 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteType.java
@@ -19,12 +19,12 @@
package org.apache.cayenne.access.types;
+import org.apache.cayenne.util.IDUtil;
+
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
-import org.apache.cayenne.util.IDUtil;
-
/**
* Handles <code>java.lang.Byte</code> type mapping. Can be configured to recast
* java.lang.Byte to java.lang.Integer when binding values to PreparedStatement. This is a
@@ -83,7 +83,7 @@ public class ByteType implements ExtendedType<Byte> {
@Override
public String toString(Byte value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
StringBuilder buffer = new StringBuilder();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/CalendarType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/CalendarType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/CalendarType.java
index acc53b2..0b60548 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/CalendarType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/CalendarType.java
@@ -18,6 +18,9 @@
****************************************************************/
package org.apache.cayenne.access.types;
+import org.apache.cayenne.CayenneRuntimeException;
+import org.apache.cayenne.dba.TypesMapping;
+
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
@@ -26,9 +29,6 @@ import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
-import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.dba.TypesMapping;
-
/**
* ExtendedType that handles {@link java.util.Calendar} fields.
*
@@ -172,7 +172,7 @@ public class CalendarType<T extends Calendar> implements ExtendedType<Calendar>
@Override
public String toString(Calendar value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return value.getClass().getName() + '(' + new java.sql.Timestamp(value.getTimeInMillis()) + ')';
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/CharType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/CharType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/CharType.java
index 5da2bae..cf807a9 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/CharType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/CharType.java
@@ -19,6 +19,8 @@
package org.apache.cayenne.access.types;
+import org.apache.cayenne.CayenneException;
+
import java.io.IOException;
import java.io.Reader;
import java.io.StringWriter;
@@ -29,8 +31,6 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
-import org.apache.cayenne.CayenneException;
-
/**
* Handles <code>java.lang.String</code>, mapping it as either of JDBC types -
* CLOB or (VAR)CHAR. Can be configured to trim trailing spaces.
@@ -117,18 +117,19 @@ public class CharType implements ExtendedType<String> {
@Override
public String toString(String value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
StringBuilder buffer = new StringBuilder();
buffer.append('\'');
- // lets escape quotes
+
String literal = value;
if (literal.length() > TRIM_VALUES_THRESHOLD) {
literal = literal.substring(0, TRIM_VALUES_THRESHOLD) + "...";
}
+ // escape quotes
int curPos = 0;
int endPos = 0;
@@ -137,8 +138,9 @@ public class CharType implements ExtendedType<String> {
curPos = endPos + 1;
}
- if (curPos < literal.length())
+ if (curPos < literal.length()) {
buffer.append(literal.substring(curPos));
+ }
buffer.append('\'');
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/DateType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/DateType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/DateType.java
index 0e158fc..654e1fe 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/DateType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/DateType.java
@@ -63,7 +63,7 @@ public class DateType implements ExtendedType<Date> {
@Override
public String toString(Date value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return '\'' + value.toString() + '\'';
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/DoubleType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/DoubleType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/DoubleType.java
index 66186c6..cfdd91f 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/DoubleType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/DoubleType.java
@@ -64,7 +64,7 @@ public class DoubleType implements ExtendedType<Double> {
@Override
public String toString(Double value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return value.toString();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/EnumType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/EnumType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/EnumType.java
index e1af1db..f8c4192 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/EnumType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/EnumType.java
@@ -19,14 +19,14 @@
package org.apache.cayenne.access.types;
+import org.apache.cayenne.ExtendedEnumeration;
+import org.apache.cayenne.dba.TypesMapping;
+
import java.lang.reflect.Method;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
-import org.apache.cayenne.ExtendedEnumeration;
-import org.apache.cayenne.dba.TypesMapping;
-
/**
* An ExtendedType that handles an enum class. If Enum is mapped to a character column,
* its name is used as persistent value; if it is mapped to a numeric column, its ordinal
@@ -116,22 +116,21 @@ public class EnumType<T extends Enum<T>> implements ExtendedType<T> {
@Override
public String toString(T value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
StringBuilder buffer = new StringBuilder();
- // buffer.append(object.getClass().getName()).append(".");
- buffer.append(value.name()).append("=");
+ buffer.append(value.name());
if (value instanceof ExtendedEnumeration) {
+ buffer.append("=");
Object dbValue = ((ExtendedEnumeration) value).getDatabaseValue();
- if (dbValue instanceof String)
+ if (dbValue instanceof String) {
buffer.append("'");
+ }
buffer.append(value);
- if (dbValue instanceof String)
+ if (dbValue instanceof String) {
buffer.append("'");
- } else {
- buffer.append((value).ordinal());
- // FIXME -- this isn't quite right
+ }
}
return buffer.toString();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedEnumType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedEnumType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedEnumType.java
index 50dc48c..3ac8dc9 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedEnumType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedEnumType.java
@@ -159,7 +159,7 @@ public class ExtendedEnumType<T extends Enum<T>> implements ExtendedType<T> {
@Override
public String toString(T value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
StringBuilder buffer = new StringBuilder();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedType.java
index 0836290..b30f674 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedType.java
@@ -24,11 +24,16 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
/**
- * Defines methods to read Java objects from JDBC ResultSets and write as parameters of
- * PreparedStatements.
+ * Defines methods to read Java objects from JDBC ResultSets and write as parameters of PreparedStatements.
*/
public interface ExtendedType<T> {
+
+ /**
+ * Defines trimming constant for toString method that helps to limit logging of large values.
+ */
+ int TRIM_VALUES_THRESHOLD = 30;
+
/**
* Returns a full name of Java class that this ExtendedType supports.
*/
@@ -47,23 +52,26 @@ public interface ExtendedType<T> {
/**
* Reads an object from JDBC ResultSet column, converting it to class returned by
* 'getClassName' method.
- *
+ *
* @throws Exception if read error occurred, or an object can't be converted to a
- * target Java class.
+ * target Java class.
*/
T materializeObject(ResultSet rs, int index, int type) throws Exception;
/**
* Reads an object from a stored procedure OUT parameter, converting it to class
* returned by 'getClassName' method.
- *
+ *
* @throws Exception if read error occurred, or an object can't be converted to a
- * target Java class.
+ * target Java class.
*/
T materializeObject(CallableStatement rs, int index, int type) throws Exception;
/**
+ * Converts value of the supported type to a human-readable String representation.
*
+ * @param value a vlue to convert to String.
+ * @since 4.0
*/
String toString(T value);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedTypeDecorator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedTypeDecorator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedTypeDecorator.java
index 970aaa1..388b8e0 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedTypeDecorator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedTypeDecorator.java
@@ -66,7 +66,7 @@ abstract class ExtendedTypeDecorator<T, E> implements ExtendedType<T> {
@Override
public String toString(T value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return value.toString();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/FloatType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/FloatType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/FloatType.java
index 822e9df..51713db 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/FloatType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/FloatType.java
@@ -64,7 +64,7 @@ public class FloatType implements ExtendedType<Float> {
@Override
public String toString(Float value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return value.toString();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/IntegerType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/IntegerType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/IntegerType.java
index 64ee766..0d2ec62 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/IntegerType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/IntegerType.java
@@ -64,7 +64,7 @@ public class IntegerType implements ExtendedType<Integer> {
@Override
public String toString(Integer value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return value.toString();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/LongType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/LongType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/LongType.java
index decab14..287190e 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/LongType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/LongType.java
@@ -64,7 +64,7 @@ public class LongType implements ExtendedType<Long> {
@Override
public String toString(Long value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return value.toString();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/ObjectType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ObjectType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ObjectType.java
index 6fb2d3e..2473177 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ObjectType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ObjectType.java
@@ -63,7 +63,7 @@ public class ObjectType implements ExtendedType<Object> {
@Override
public String toString(Object value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return value.toString();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/ShortType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ShortType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ShortType.java
index 72ed935..257f7cc 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ShortType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ShortType.java
@@ -82,7 +82,7 @@ public class ShortType implements ExtendedType<Short> {
@Override
public String toString(Short value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return value.toString();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/TimeType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/TimeType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/TimeType.java
index 3026954..8966f82 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/TimeType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/TimeType.java
@@ -63,7 +63,7 @@ public class TimeType implements ExtendedType<Time> {
@Override
public String toString(Time value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return '\'' + value.toString() + '\'';
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/TimestampType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/TimestampType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/TimestampType.java
index 8b877a0..d6b6aca 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/TimestampType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/TimestampType.java
@@ -63,7 +63,7 @@ public class TimestampType implements ExtendedType<Timestamp> {
@Override
public String toString(Timestamp value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return '\'' + value.toString() + '\'';
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/UUIDType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/UUIDType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/UUIDType.java
index 8ff5eae..fd700ea 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/UUIDType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/UUIDType.java
@@ -18,13 +18,13 @@
****************************************************************/
package org.apache.cayenne.access.types;
+import org.apache.cayenne.CayenneRuntimeException;
+
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.UUID;
-import org.apache.cayenne.CayenneRuntimeException;
-
/**
* An ExtendedType to map Java UUIDs as persistent attributes.
*
@@ -87,7 +87,7 @@ public class UUIDType implements ExtendedType<UUID> {
@Override
public String toString(UUID value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return value.toString();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/UtilDateType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/UtilDateType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/UtilDateType.java
index dafd472..9fa5010 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/UtilDateType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/UtilDateType.java
@@ -19,14 +19,14 @@
package org.apache.cayenne.access.types;
+import org.apache.cayenne.dba.TypesMapping;
+
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Types;
import java.util.Date;
-import org.apache.cayenne.dba.TypesMapping;
-
/**
* Maps <code>java.util.Date</code> to any of the three database date/time types: TIME,
* DATE, TIMESTAMP.
@@ -122,7 +122,7 @@ public class UtilDateType implements ExtendedType<Date> {
@Override
public String toString(Date value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
long time = value.getTime();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/access/types/VoidType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/VoidType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/VoidType.java
index 52ff9fb..d842d96 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/VoidType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/VoidType.java
@@ -60,7 +60,7 @@ public class VoidType implements ExtendedType<Void> {
@Override
public String toString(Void value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return null;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
index c0ac4f0..00ff222 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
@@ -19,16 +19,6 @@
package org.apache.cayenne.dba.oracle;
-import java.lang.reflect.Field;
-import java.sql.CallableStatement;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Types;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.translator.ParameterBinding;
@@ -57,6 +47,16 @@ import org.apache.cayenne.query.SelectQuery;
import org.apache.cayenne.query.UpdateBatchQuery;
import org.apache.cayenne.resource.ResourceLocator;
+import java.lang.reflect.Field;
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
/**
* DbAdapter implementation for <a href="http://www.oracle.com">Oracle RDBMS
* </a>. Sample connection settings to use with Oracle are shown below:
@@ -345,7 +345,7 @@ public class OracleAdapter extends JdbcAdapter {
@Override
public String toString(Boolean value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return '\'' + value.toString() + '\'';
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteBigDecimalType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteBigDecimalType.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteBigDecimalType.java
index e834bbc..440d9d8 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteBigDecimalType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteBigDecimalType.java
@@ -18,13 +18,13 @@
****************************************************************/
package org.apache.cayenne.dba.sqlite;
+import org.apache.cayenne.access.types.ExtendedType;
+
import java.math.BigDecimal;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
-import org.apache.cayenne.access.types.ExtendedType;
-
/**
* @since 3.0
*/
@@ -73,7 +73,7 @@ class SQLiteBigDecimalType implements ExtendedType<BigDecimal> {
@Override
public String toString(BigDecimal value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return value.toString();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteByteArrayType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteByteArrayType.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteByteArrayType.java
index 11526e0..dca1e48 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteByteArrayType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteByteArrayType.java
@@ -18,13 +18,13 @@
****************************************************************/
package org.apache.cayenne.dba.sqlite;
+import org.apache.cayenne.access.types.ByteArrayType;
+import org.apache.cayenne.access.types.ExtendedType;
+
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
-import org.apache.cayenne.access.types.ExtendedType;
-import org.apache.cayenne.util.IDUtil;
-
/**
* @since 3.0
*/
@@ -70,11 +70,11 @@ class SQLiteByteArrayType implements ExtendedType<byte[]> {
@Override
public String toString(byte[] value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
StringBuilder buffer = new StringBuilder();
- IDUtil.appendFormattedBytes(buffer, value);
+ ByteArrayType.logBytes(buffer, value);
return buffer.toString();
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteCalendarType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteCalendarType.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteCalendarType.java
index e099b2b..7749032 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteCalendarType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteCalendarType.java
@@ -18,6 +18,9 @@
****************************************************************/
package org.apache.cayenne.dba.sqlite;
+import org.apache.cayenne.access.types.CalendarType;
+import org.apache.cayenne.access.types.ExtendedType;
+
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
@@ -25,9 +28,6 @@ import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
-import org.apache.cayenne.access.types.CalendarType;
-import org.apache.cayenne.access.types.ExtendedType;
-
/**
* @since 3.0
*/
@@ -85,7 +85,7 @@ class SQLiteCalendarType<T extends Calendar> implements ExtendedType<Calendar> {
@Override
public String toString(Calendar value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return value.getClass().getName() + '(' + new java.sql.Timestamp(value.getTimeInMillis()) + ')';
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteFloatType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteFloatType.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteFloatType.java
index c80961a..100dfba 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteFloatType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteFloatType.java
@@ -18,12 +18,12 @@
****************************************************************/
package org.apache.cayenne.dba.sqlite;
+import org.apache.cayenne.access.types.ExtendedType;
+
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
-import org.apache.cayenne.access.types.ExtendedType;
-
/**
* @since 3.0
*/
@@ -70,7 +70,7 @@ class SQLiteFloatType implements ExtendedType<Float> {
@Override
public String toString(Float value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return value.toString();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/log/CommonsJdbcEventLogger.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/log/CommonsJdbcEventLogger.java b/cayenne-server/src/main/java/org/apache/cayenne/log/CommonsJdbcEventLogger.java
index 83994dc..27a9d65 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/log/CommonsJdbcEventLogger.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/log/CommonsJdbcEventLogger.java
@@ -18,11 +18,6 @@
****************************************************************/
package org.apache.cayenne.log;
-import java.lang.reflect.Array;
-import java.sql.SQLException;
-import java.util.Iterator;
-import java.util.List;
-
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.ExtendedEnumeration;
import org.apache.cayenne.access.jdbc.SQLParameterBinding;
@@ -37,6 +32,11 @@ import org.apache.cayenne.util.Util;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import java.lang.reflect.Array;
+import java.sql.SQLException;
+import java.util.Iterator;
+import java.util.List;
+
/**
* A {@link JdbcEventLogger} built on top of commons-logging.
*
@@ -46,7 +46,10 @@ public class CommonsJdbcEventLogger implements JdbcEventLogger {
private static final Log logger = LogFactory.getLog(CommonsJdbcEventLogger.class);
- public static final int TRIM_VALUES_THRESHOLD = 30;
+ /**
+ * @deprecated since 4.0
+ */
+ private static final int TRIM_VALUES_THRESHOLD = 30;
protected long queryExecutionTimeLoggingThreshold;
@@ -55,6 +58,8 @@ public class CommonsJdbcEventLogger implements JdbcEventLogger {
Constants.QUERY_EXECUTION_TIME_LOGGING_THRESHOLD_PROPERTY, 0);
}
+ // this should go away once we can remove 4.0 deprecated API. The actual logic for printing a value is now
+ // spread around the ExtendedTypes
void sqlLiteralForObject(StringBuilder buffer, Object object) {
if (object == null) {
buffer.append("NULL");
@@ -320,6 +325,9 @@ public class CommonsJdbcEventLogger implements JdbcEventLogger {
}
}
+ /**
+ * @deprecated since 4.0
+ */
@Deprecated
@Override
public void logQueryParameters(String label, List<DbAttribute> attrs, List<Object> parameters, boolean isInserting) {
@@ -379,8 +387,13 @@ public class CommonsJdbcEventLogger implements JdbcEventLogger {
if (b.getExtendedType() != null) {
buffer.append(b.getExtendedType().toString(b.getValue()));
- } else {
- buffer.append(b.getValue());
+ } else if(b.getValue() == null) {
+ buffer.append("NULL");
+ }
+ else {
+ buffer.append(b.getValue().getClass().getName())
+ .append("@")
+ .append(System.identityHashCode(b.getValue()));
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/main/java/org/apache/cayenne/util/IDUtil.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/util/IDUtil.java b/cayenne-server/src/main/java/org/apache/cayenne/util/IDUtil.java
index 6f4df35..ccda74c 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/util/IDUtil.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/util/IDUtil.java
@@ -19,15 +19,13 @@
package org.apache.cayenne.util;
+import org.apache.cayenne.CayenneRuntimeException;
+
import java.io.IOException;
import java.net.UnknownHostException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
-import org.apache.cayenne.CayenneRuntimeException;
-
-import static org.apache.cayenne.log.CommonsJdbcEventLogger.TRIM_VALUES_THRESHOLD;
-
/**
* helper class to generate pseudo-GUID sequences.
*
@@ -86,34 +84,6 @@ public class IDUtil {
}
}
- public static void appendFormattedBytes(Appendable buffer, byte[] bytes) {
- try {
- buffer.append("< ");
-
- int len = bytes.length;
- boolean trimming = false;
- if (len > TRIM_VALUES_THRESHOLD) {
- len = TRIM_VALUES_THRESHOLD;
- trimming = true;
- }
-
- for (int i = 0; i < len; i++) {
- if (i > 0) {
- buffer.append(",");
- }
- appendFormattedByte(buffer, bytes[i]);
- }
-
- if (trimming) {
- buffer.append("...");
- }
-
- buffer.append('>');
- } catch (IOException e) {
- throw new CayenneRuntimeException("Error appending data to buffer", e);
- }
- }
-
/**
* @param length the length of returned byte[]
* @return A pseudo-unique byte array of the specified length. Length must be at least
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/test/java/org/apache/cayenne/access/types/MockExtendedType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/types/MockExtendedType.java b/cayenne-server/src/test/java/org/apache/cayenne/access/types/MockExtendedType.java
index 0f7a2af..4a81ed7 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/types/MockExtendedType.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/types/MockExtendedType.java
@@ -63,7 +63,7 @@ public class MockExtendedType implements ExtendedType<Object> {
@Override
public String toString(Object value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return value.toString();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/test/java/org/apache/cayenne/testdo/extended_type/StringET1ExtendedType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/extended_type/StringET1ExtendedType.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/extended_type/StringET1ExtendedType.java
index 826c5ea..28cd3db 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/extended_type/StringET1ExtendedType.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/extended_type/StringET1ExtendedType.java
@@ -18,12 +18,12 @@
****************************************************************/
package org.apache.cayenne.testdo.extended_type;
+import org.apache.cayenne.access.types.ExtendedType;
+
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
-import org.apache.cayenne.access.types.ExtendedType;
-
public class StringET1ExtendedType implements ExtendedType<StringET1> {
@Override
@@ -63,7 +63,7 @@ public class StringET1ExtendedType implements ExtendedType<StringET1> {
@Override
public String toString(StringET1 value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return value.toString();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_207StringType1.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_207StringType1.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_207StringType1.java
index 7c70441..1284e70 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_207StringType1.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_207StringType1.java
@@ -19,12 +19,12 @@
package org.apache.cayenne.unit.jira;
+import org.apache.cayenne.access.types.ExtendedType;
+
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
-import org.apache.cayenne.access.types.ExtendedType;
-
public class CAY_207StringType1 implements ExtendedType<CAY_207String1> {
@Override
@@ -62,7 +62,7 @@ public class CAY_207StringType1 implements ExtendedType<CAY_207String1> {
@Override
public String toString(CAY_207String1 value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return value.toString();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_207StringType2.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_207StringType2.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_207StringType2.java
index 8483651..0d1a54f 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_207StringType2.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_207StringType2.java
@@ -19,12 +19,12 @@
package org.apache.cayenne.unit.jira;
+import org.apache.cayenne.access.types.ExtendedType;
+
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
-import org.apache.cayenne.access.types.ExtendedType;
-
/**
*/
public class CAY_207StringType2 implements ExtendedType<CAY_207String2> {
@@ -64,7 +64,7 @@ public class CAY_207StringType2 implements ExtendedType<CAY_207String2> {
@Override
public String toString(CAY_207String2 value) {
if (value == null) {
- return "\'null\'";
+ return "NULL";
}
return value.toString();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/27849ce5/docs/doc/src/main/resources/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/docs/doc/src/main/resources/RELEASE-NOTES.txt b/docs/doc/src/main/resources/RELEASE-NOTES.txt
index bdd5abc..9572224 100644
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@ -14,6 +14,7 @@ Date:
Changes/New Features:
CAY-2139 Upgrade HSQLDB dependency to the most recent version (2.3.4)
+CAY-2150 Refactoring: ParameterBinding to contain ExtendedType property
CAY-2163 Property.path() , ExpressionFactory.pathExp()
CAY-2164 Relocate builder bootstrap methods from ServerRuntimeBuilder to ServerRuntime
CAY-2165 Explicit "contribution" API for easier expansion of DI collections and maps
[4/7] cayenne git commit: CAY-2050 | Choosing ExtendedType based on
object class
Posted by aa...@apache.org.
CAY-2050 | Choosing ExtendedType based on object class
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/b99c2b4b
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/b99c2b4b
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/b99c2b4b
Branch: refs/heads/master
Commit: b99c2b4b1200a4acfb6a44fc7312b020dc3b1e25
Parents: efa48e5
Author: Savva Kolbachev <s....@gmail.com>
Authored: Sat Jan 21 17:17:34 2017 +0300
Committer: Savva Kolbachev <s....@gmail.com>
Committed: Sat Jan 21 18:16:02 2017 +0300
----------------------------------------------------------------------
.../cayenne/access/jdbc/SQLTemplateAction.java | 33 ++++++------
.../access/translator/DbAttributeBinding.java | 5 +-
.../access/translator/ParameterBinding.java | 11 ++--
.../translator/ProcedureParameterBinding.java | 5 +-
.../translator/batch/DeleteBatchTranslator.java | 20 ++++----
.../translator/batch/InsertBatchTranslator.java | 18 ++++---
.../batch/SoftDeleteBatchTranslator.java | 11 ++--
.../translator/batch/UpdateBatchTranslator.java | 31 ++++++------
.../procedure/ProcedureTranslator.java | 23 +++++----
.../translator/select/QueryAssembler.java | 23 +++++----
.../org/apache/cayenne/dba/JdbcAdapter.java | 37 +++++++-------
.../dba/oracle/Oracle8LOBBatchAction.java | 53 ++++++++++++--------
.../dba/oracle/Oracle8LOBBatchTranslator.java | 22 ++++----
13 files changed, 160 insertions(+), 132 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java
index eea8470..c8369a0 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java
@@ -19,6 +19,19 @@
package org.apache.cayenne.access.jdbc;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
import org.apache.cayenne.CayenneException;
import org.apache.cayenne.DataRow;
import org.apache.cayenne.ResultIterator;
@@ -40,19 +53,6 @@ import org.apache.cayenne.query.SQLTemplate;
import org.apache.cayenne.util.Util;
import org.apache.commons.collections.IteratorUtils;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
/**
* Implements a strategy for execution of SQLTemplates.
*
@@ -235,9 +235,7 @@ public class SQLTemplateAction implements SQLAction {
RowDescriptorBuilder builder = configureRowDescriptorBuilder(compiled, resultSet);
RowReader<?> rowReader = dataNode.rowReader(builder.getDescriptor(types), queryMetadata);
- JDBCResultIterator result = new JDBCResultIterator(statement, resultSet, rowReader);
-
- ResultIterator it = result;
+ ResultIterator it = new JDBCResultIterator(statement, resultSet, rowReader);
if (iteratedResult) {
@@ -357,10 +355,11 @@ public class SQLTemplateAction implements SQLAction {
? getAdapter().getExtendedTypes().getRegisteredType(value.getClass())
: getAdapter().getExtendedTypes().getDefaultType();
- ParameterBinding binding = new ParameterBinding(extendedType);
+ ParameterBinding binding = new ParameterBinding();
binding.setType(bindings[i].getJdbcType());
binding.setStatementPosition(i + 1);
binding.setValue(value);
+ binding.setExtendedType(extendedType);
dataNode.getAdapter().bindParameter(preparedStatement, binding);
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/DbAttributeBinding.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/DbAttributeBinding.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/DbAttributeBinding.java
index 523c473..78b6d71 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/DbAttributeBinding.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/DbAttributeBinding.java
@@ -18,7 +18,6 @@
****************************************************************/
package org.apache.cayenne.access.translator;
-import org.apache.cayenne.access.types.ExtendedType;
import org.apache.cayenne.map.DbAttribute;
/**
@@ -30,8 +29,8 @@ public class DbAttributeBinding extends ParameterBinding {
private final DbAttribute attribute;
- public DbAttributeBinding(DbAttribute attribute, ExtendedType extendedType) {
- super(extendedType);
+ public DbAttributeBinding(DbAttribute attribute) {
+ super();
this.attribute = attribute;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ParameterBinding.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ParameterBinding.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ParameterBinding.java
index 8ef6b28..68d68ba 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ParameterBinding.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ParameterBinding.java
@@ -35,9 +35,8 @@ public class ParameterBinding {
private Integer type;
private int scale;
- public ParameterBinding(ExtendedType extendedType) {
+ public ParameterBinding() {
this.statementPosition = EXCLUDED_POSITION;
- this.extendedType = extendedType;
}
public Object getValue() {
@@ -64,21 +63,27 @@ public class ParameterBinding {
return extendedType;
}
+ public void setExtendedType(ExtendedType extendedType) {
+ this.extendedType = extendedType;
+ }
+
/**
* Marks the binding object as excluded for the current iteration.
*/
public void exclude() {
this.statementPosition = EXCLUDED_POSITION;
this.value = null;
+ this.extendedType = null;
}
/**
* Sets the value of the binding and initializes statement position var,
* thus "including" this binding in the current iteration.
*/
- public void include(int statementPosition, Object value) {
+ public void include(int statementPosition, Object value, ExtendedType extendedType) {
this.statementPosition = statementPosition;
this.value = value;
+ this.extendedType = extendedType;
}
public Integer getType() {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ProcedureParameterBinding.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ProcedureParameterBinding.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ProcedureParameterBinding.java
index df15c96..6ccfaf2 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ProcedureParameterBinding.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ProcedureParameterBinding.java
@@ -18,7 +18,6 @@
****************************************************************/
package org.apache.cayenne.access.translator;
-import org.apache.cayenne.access.types.ExtendedType;
import org.apache.cayenne.map.ProcedureParameter;
/**
@@ -30,8 +29,8 @@ public class ProcedureParameterBinding extends ParameterBinding {
private final ProcedureParameter parameter;
- public ProcedureParameterBinding(ProcedureParameter procedureParameter, ExtendedType extendedType) {
- super(extendedType);
+ public ProcedureParameterBinding(ProcedureParameter procedureParameter) {
+ super();
this.parameter = procedureParameter;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslator.java
index 9660b3f..d42240e 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/DeleteBatchTranslator.java
@@ -19,18 +19,17 @@
package org.apache.cayenne.access.translator.batch;
+import java.util.Iterator;
+import java.util.List;
+
import org.apache.cayenne.access.translator.DbAttributeBinding;
import org.apache.cayenne.access.types.ExtendedType;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
-import org.apache.cayenne.dba.TypesMapping;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.query.BatchQueryRow;
import org.apache.cayenne.query.DeleteBatchQuery;
-import java.util.Iterator;
-import java.util.List;
-
/**
* Translator for delete BatchQueries. Creates parameterized DELETE SQL
* statements.
@@ -82,11 +81,7 @@ public class DeleteBatchTranslator extends DefaultBatchTranslator {
DbAttributeBinding[] bindings = new DbAttributeBinding[len];
for (int i = 0; i < len; i++) {
- DbAttribute a = attributes.get(i);
-
- String typeName = TypesMapping.getJavaBySqlType(a.getType());
- ExtendedType extendedType = adapter.getExtendedTypes().getRegisteredType(typeName);
- bindings[i] = new DbAttributeBinding(a, extendedType);
+ bindings[i] = new DbAttributeBinding(attributes.get(i));
}
return bindings;
@@ -107,7 +102,12 @@ public class DeleteBatchTranslator extends DefaultBatchTranslator {
if (deleteBatch.isNull(b.getAttribute())) {
b.exclude();
} else {
- b.include(j++, row.getValue(i));
+ Object value = row.getValue(i);
+ ExtendedType extendedType = value != null
+ ? adapter.getExtendedTypes().getRegisteredType(value.getClass())
+ : adapter.getExtendedTypes().getDefaultType();
+
+ b.include(j++, value, extendedType);
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java
index cf52929..d597f38 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/InsertBatchTranslator.java
@@ -19,17 +19,16 @@
package org.apache.cayenne.access.translator.batch;
+import java.util.List;
+
import org.apache.cayenne.access.translator.DbAttributeBinding;
import org.apache.cayenne.access.types.ExtendedType;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
-import org.apache.cayenne.dba.TypesMapping;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.query.BatchQueryRow;
import org.apache.cayenne.query.InsertBatchQuery;
-import java.util.List;
-
/**
* Translator of InsertBatchQueries.
*/
@@ -93,16 +92,14 @@ public class InsertBatchTranslator extends DefaultBatchTranslator {
for (int i = 0; i < len; i++) {
DbAttribute a = attributes.get(i);
- String typeName = TypesMapping.getJavaBySqlType(a.getType());
- ExtendedType extendedType = adapter.getExtendedTypes().getRegisteredType(typeName);
- bindings[i] = new DbAttributeBinding(a, extendedType);
+ bindings[i] = new DbAttributeBinding(a);
// include/exclude state depends on DbAttribute only and can be
// precompiled here
if (includeInBatch(a)) {
// setting fake position here... all we care about is that it is
// > -1
- bindings[i].include(1, null);
+ bindings[i].include(1, null, null);
} else {
bindings[i].exclude();
}
@@ -121,7 +118,12 @@ public class InsertBatchTranslator extends DefaultBatchTranslator {
// exclusions are permanent
if (!b.isExcluded()) {
- b.include(j++, row.getValue(i));
+ Object value = row.getValue(i);
+ ExtendedType extendedType = value != null
+ ? adapter.getExtendedTypes().getRegisteredType(value.getClass())
+ : adapter.getExtendedTypes().getDefaultType();
+
+ b.include(j++, value, extendedType);
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslator.java
index 514ca26..ed28cc5 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/SoftDeleteBatchTranslator.java
@@ -68,8 +68,8 @@ public class SoftDeleteBatchTranslator extends DeleteBatchTranslator {
String typeName = TypesMapping.getJavaBySqlType(deleteAttribute.getType());
ExtendedType extendedType = adapter.getExtendedTypes().getRegisteredType(typeName);
- bindings[0] = new DbAttributeBinding(deleteAttribute, extendedType);
- bindings[0].include(1, true);
+ bindings[0] = new DbAttributeBinding(deleteAttribute);
+ bindings[0].include(1, true, extendedType);
System.arraycopy(superBindings, 0, bindings, 1, slen);
@@ -91,7 +91,12 @@ public class SoftDeleteBatchTranslator extends DeleteBatchTranslator {
if (deleteBatch.isNull(b.getAttribute())) {
b.exclude();
} else {
- b.include(j++, row.getValue(i - 1));
+ Object value = row.getValue(i - 1);
+ ExtendedType extendedType = value != null
+ ? adapter.getExtendedTypes().getRegisteredType(value.getClass())
+ : adapter.getExtendedTypes().getDefaultType();
+
+ b.include(j++, value, extendedType);
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslator.java
index cb34b99..ecd2619 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/UpdateBatchTranslator.java
@@ -19,18 +19,17 @@
package org.apache.cayenne.access.translator.batch;
+import java.util.Iterator;
+import java.util.List;
+
import org.apache.cayenne.access.translator.DbAttributeBinding;
import org.apache.cayenne.access.types.ExtendedType;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
-import org.apache.cayenne.dba.TypesMapping;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.query.BatchQueryRow;
import org.apache.cayenne.query.UpdateBatchQuery;
-import java.util.Iterator;
-import java.util.List;
-
/**
* A translator for UpdateBatchQueries that produces parameterized SQL.
*/
@@ -93,19 +92,11 @@ public class UpdateBatchTranslator extends DefaultBatchTranslator {
DbAttributeBinding[] bindings = new DbAttributeBinding[ul + ql];
for (int i = 0; i < ul; i++) {
- DbAttribute a = updatedDbAttributes.get(i);
-
- String typeName = TypesMapping.getJavaBySqlType(a.getType());
- ExtendedType extendedType = adapter.getExtendedTypes().getRegisteredType(typeName);
- bindings[i] = new DbAttributeBinding(a, extendedType);
+ bindings[i] = new DbAttributeBinding(updatedDbAttributes.get(i));
}
for (int i = 0; i < ql; i++) {
- DbAttribute a = qualifierAttributes.get(i);
-
- String typeName = TypesMapping.getJavaBySqlType(a.getType());
- ExtendedType extendedType = adapter.getExtendedTypes().getRegisteredType(typeName);
- bindings[ul + i] = new DbAttributeBinding(a, extendedType);
+ bindings[ul + i] = new DbAttributeBinding(qualifierAttributes.get(i));
}
return bindings;
@@ -126,7 +117,11 @@ public class UpdateBatchTranslator extends DefaultBatchTranslator {
for (int i = 0; i < ul; i++) {
Object value = row.getValue(i);
- bindings[i].include(j++, value);
+ ExtendedType extendedType = value != null
+ ? adapter.getExtendedTypes().getRegisteredType(value.getClass())
+ : adapter.getExtendedTypes().getDefaultType();
+
+ bindings[i].include(j++, value, extendedType);
}
for (int i = 0; i < ql; i++) {
@@ -139,7 +134,11 @@ public class UpdateBatchTranslator extends DefaultBatchTranslator {
}
Object value = row.getValue(ul + i);
- bindings[ul + i].include(j++, value);
+ ExtendedType extendedType = value != null
+ ? adapter.getExtendedTypes().getRegisteredType(value.getClass())
+ : adapter.getExtendedTypes().getDefaultType();
+
+ bindings[ul + i].include(j++, value, extendedType);
}
return bindings;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/procedure/ProcedureTranslator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/procedure/ProcedureTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/procedure/ProcedureTranslator.java
index f919a8b..92feb2c 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/procedure/ProcedureTranslator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/procedure/ProcedureTranslator.java
@@ -19,6 +19,13 @@
package org.apache.cayenne.access.translator.procedure;
+import java.sql.CallableStatement;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
import org.apache.cayenne.access.translator.ProcedureParameterBinding;
import org.apache.cayenne.access.types.ExtendedType;
import org.apache.cayenne.dba.DbAdapter;
@@ -29,13 +36,6 @@ import org.apache.cayenne.map.Procedure;
import org.apache.cayenne.map.ProcedureParameter;
import org.apache.cayenne.query.ProcedureQuery;
-import java.sql.CallableStatement;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
/**
* Stored procedure query translator.
*/
@@ -229,11 +229,14 @@ public class ProcedureTranslator {
ProcedureParameter param,
Object val,
int pos) throws Exception {
- ExtendedType extendedType = val != null ? adapter.getExtendedTypes().getRegisteredType(val.getClass())
+ ExtendedType extendedType = val != null
+ ? adapter.getExtendedTypes().getRegisteredType(val.getClass())
: adapter.getExtendedTypes().getDefaultType();
- ProcedureParameterBinding binding = new ProcedureParameterBinding(param, extendedType);
- binding.setValue(val);
+
+ ProcedureParameterBinding binding = new ProcedureParameterBinding(param);
binding.setStatementPosition(pos);
+ binding.setValue(val);
+ binding.setExtendedType(extendedType);
adapter.bindParameter(stmt, binding);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/QueryAssembler.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/QueryAssembler.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/QueryAssembler.java
index 1128e22..3293168 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/QueryAssembler.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/QueryAssembler.java
@@ -19,10 +19,13 @@
package org.apache.cayenne.access.translator.select;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
import org.apache.cayenne.access.translator.DbAttributeBinding;
import org.apache.cayenne.access.types.ExtendedType;
import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dba.TypesMapping;
import org.apache.cayenne.exp.Expression;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbRelationship;
@@ -31,10 +34,6 @@ import org.apache.cayenne.map.JoinType;
import org.apache.cayenne.query.Query;
import org.apache.cayenne.query.QueryMetadata;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
/**
* Abstract superclass of Query translators.
*/
@@ -155,13 +154,15 @@ public abstract class QueryAssembler {
* DbAttribute being processed.
*/
public void addToParamList(DbAttribute dbAttr, Object anObject) {
- String typeName = TypesMapping.SQL_NULL;
- if (dbAttr != null) typeName = TypesMapping.getJavaBySqlType(dbAttr.getType());
- ExtendedType extendedType = adapter.getExtendedTypes().getRegisteredType(typeName);
-
- DbAttributeBinding binding = new DbAttributeBinding(dbAttr, extendedType);
- binding.setValue(anObject);
+ ExtendedType extendedType = anObject != null
+ ? adapter.getExtendedTypes().getRegisteredType(anObject.getClass())
+ : adapter.getExtendedTypes().getDefaultType();
+
+ DbAttributeBinding binding = new DbAttributeBinding(dbAttr);
binding.setStatementPosition(bindings.size() + 1);
+ binding.setValue(anObject);
+ binding.setExtendedType(extendedType);
+
bindings.add(binding);
if(addBindingListener != null) {
addBindingListener.onAdd(binding);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
index 979b425..b058719 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
@@ -19,6 +19,15 @@
package org.apache.cayenne.dba;
+import java.net.URL;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.translator.ParameterBinding;
@@ -48,15 +57,6 @@ import org.apache.cayenne.resource.Resource;
import org.apache.cayenne.resource.ResourceLocator;
import org.apache.cayenne.util.Util;
-import java.net.URL;
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.sql.Types;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
/**
* A generic DbAdapter implementation. Can be used as a default adapter or as a
* superclass of a concrete adapter implementation.
@@ -443,7 +443,7 @@ public class JdbcAdapter implements DbAdapter {
@Override
public String createFkConstraint(DbRelationship rel) {
- DbEntity source = (DbEntity) rel.getSourceEntity();
+ DbEntity source = rel.getSourceEntity();
StringBuilder buf = new StringBuilder();
StringBuilder refBuf = new StringBuilder();
@@ -468,7 +468,7 @@ public class JdbcAdapter implements DbAdapter {
buf.append(") REFERENCES ");
- buf.append(quotingStrategy.quotedFullyQualifiedName((DbEntity) rel.getTargetEntity()));
+ buf.append(quotingStrategy.quotedFullyQualifiedName(rel.getTargetEntity()));
buf.append(" (").append(refBuf.toString()).append(')');
return buf.toString();
@@ -545,12 +545,15 @@ public class JdbcAdapter implements DbAdapter {
if (binding.getValue() == null) {
statement.setNull(binding.getStatementPosition(), binding.getType());
} else {
- ExtendedType typeProcessor = getExtendedTypes().getRegisteredType(binding.getValue().getClass());
- typeProcessor.setJdbcObject(statement
- , binding.getValue()
- , binding.getStatementPosition()
- , binding.getType()
- , binding.getScale());
+ ExtendedType typeProcessor = binding.getExtendedType() != null
+ ? binding.getExtendedType()
+ : getExtendedTypes().getRegisteredType(binding.getValue().getClass());
+
+ typeProcessor.setJdbcObject(statement,
+ binding.getValue(),
+ binding.getStatementPosition(),
+ binding.getType(),
+ binding.getScale());
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchAction.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchAction.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchAction.java
index 8cfdc2c..93fda77 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchAction.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchAction.java
@@ -19,23 +19,34 @@
package org.apache.cayenne.dba.oracle;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.lang.reflect.Method;
+import java.sql.Blob;
+import java.sql.Clob;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.Collections;
+import java.util.List;
+
import org.apache.cayenne.CayenneException;
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.access.OperationObserver;
import org.apache.cayenne.access.translator.DbAttributeBinding;
+import org.apache.cayenne.access.types.ExtendedType;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.log.JdbcEventLogger;
import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.query.*;
+import org.apache.cayenne.query.BatchQuery;
+import org.apache.cayenne.query.BatchQueryRow;
+import org.apache.cayenne.query.InsertBatchQuery;
+import org.apache.cayenne.query.SQLAction;
+import org.apache.cayenne.query.UpdateBatchQuery;
import org.apache.cayenne.util.Util;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.lang.reflect.Method;
-import java.sql.*;
-import java.util.Collections;
-import java.util.List;
-
/**
* @since 3.0
*/
@@ -49,8 +60,7 @@ class Oracle8LOBBatchAction implements SQLAction {
throws SQLException, Exception {
for (DbAttributeBinding b : bindings) {
- DbAttributeBinding binding = new DbAttributeBinding(b.getAttribute(), adapter.getExtendedTypes()
- .getRegisteredType(b.getValue().getClass()));
+ DbAttributeBinding binding = new DbAttributeBinding(b.getAttribute());
adapter.bindParameter(statement, binding);
}
}
@@ -95,7 +105,7 @@ class Oracle8LOBBatchAction implements SQLAction {
// 1. run row update
logger.logQuery(updateStr, Collections.EMPTY_LIST);
- try (PreparedStatement statement = connection.prepareStatement(updateStr);) {
+ try (PreparedStatement statement = connection.prepareStatement(updateStr)) {
DbAttributeBinding[] bindings = translator.updateBindings(row);
logger.logQueryParameters("bind", bindings);
@@ -136,19 +146,22 @@ class Oracle8LOBBatchAction implements SQLAction {
logger.logQueryParameters("write LOB", null, lobValues, false);
}
- try (PreparedStatement selectStatement = con.prepareStatement(selectStr);) {
+ try (PreparedStatement selectStatement = con.prepareStatement(selectStr)) {
for (int i = 0; i < parametersSize; i++) {
- Object value = qualifierValues.get(i);
DbAttribute attribute = qualifierAttributes.get(i);
+ Object value = qualifierValues.get(i);
+ ExtendedType extendedType = value != null
+ ? adapter.getExtendedTypes().getRegisteredType(value.getClass())
+ : adapter.getExtendedTypes().getDefaultType();
- DbAttributeBinding binding = new DbAttributeBinding(attribute, adapter.getExtendedTypes()
- .getRegisteredType(value.getClass()));
+ DbAttributeBinding binding = new DbAttributeBinding(attribute);
binding.setStatementPosition(i + 1);
binding.setValue(value);
- adapter.bindParameter(selectStatement,binding);
+ binding.setExtendedType(extendedType);
+ adapter.bindParameter(selectStatement, binding);
}
- try (ResultSet result = selectStatement.executeQuery();) {
+ try (ResultSet result = selectStatement.executeQuery()) {
if (!result.next()) {
throw new CayenneRuntimeException("Missing LOB row.");
}
@@ -200,7 +213,7 @@ class Oracle8LOBBatchAction implements SQLAction {
Method getBinaryStreamMethod = Oracle8Adapter.getOutputStreamFromBlobMethod();
try {
- try (OutputStream out = (OutputStream) getBinaryStreamMethod.invoke(blob, (Object[]) null);) {
+ try (OutputStream out = (OutputStream) getBinaryStreamMethod.invoke(blob, (Object[]) null)) {
out.write(value);
out.flush();
}
@@ -217,7 +230,7 @@ class Oracle8LOBBatchAction implements SQLAction {
Method getWriterMethod = Oracle8Adapter.getWriterFromClobMethod();
try {
- try (Writer out = (Writer) getWriterMethod.invoke(clob, (Object[]) null);) {
+ try (Writer out = (Writer) getWriterMethod.invoke(clob, (Object[]) null)) {
out.write(value);
out.flush();
}
@@ -235,7 +248,7 @@ class Oracle8LOBBatchAction implements SQLAction {
Method getWriterMethod = Oracle8Adapter.getWriterFromClobMethod();
try {
- try (Writer out = (Writer) getWriterMethod.invoke(clob, (Object[]) null);) {
+ try (Writer out = (Writer) getWriterMethod.invoke(clob, (Object[]) null)) {
out.write(value);
out.flush();
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b99c2b4b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchTranslator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchTranslator.java
index d25d32f..4900ec0 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchTranslator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/Oracle8LOBBatchTranslator.java
@@ -19,6 +19,10 @@
package org.apache.cayenne.dba.oracle;
+import java.sql.Types;
+import java.util.Iterator;
+import java.util.List;
+
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.access.translator.DbAttributeBinding;
import org.apache.cayenne.access.translator.batch.DefaultBatchTranslator;
@@ -30,10 +34,6 @@ import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.query.BatchQuery;
import org.apache.cayenne.query.BatchQueryRow;
-import java.sql.Types;
-import java.util.Iterator;
-import java.util.List;
-
/**
* Superclass of query builders for the DML operations involving LOBs.
*
@@ -76,7 +76,7 @@ abstract class Oracle8LOBBatchTranslator extends DefaultBatchTranslator {
it = qualifierAttributes.iterator();
while (it.hasNext()) {
- DbAttribute attribute = (DbAttribute) it.next();
+ DbAttribute attribute = it.next();
appendDbAttribute(buf, attribute);
buf.append(" = ?");
if (it.hasNext()) {
@@ -118,11 +118,7 @@ abstract class Oracle8LOBBatchTranslator extends DefaultBatchTranslator {
DbAttributeBinding[] bindings = new DbAttributeBinding[len];
for (int i = 0; i < len; i++) {
- DbAttribute attribute = dbAttributes.get(i);
-
- String typeName = TypesMapping.getJavaBySqlType(attribute.getType());
- ExtendedType extendedType = adapter.getExtendedTypes().getRegisteredType(typeName);
- bindings[i] = new DbAttributeBinding(attribute, extendedType);
+ bindings[i] = new DbAttributeBinding(dbAttributes.get(i));
}
return bindings;
@@ -144,7 +140,11 @@ abstract class Oracle8LOBBatchTranslator extends DefaultBatchTranslator {
// TODO: (Andrus) This works as long as there is no LOBs in
// qualifier
if (isUpdateableColumn(value, type)) {
- b.include(j++, value);
+ ExtendedType extendedType = value != null
+ ? adapter.getExtendedTypes().getRegisteredType(value.getClass())
+ : adapter.getExtendedTypes().getDefaultType();
+
+ b.include(j++, value, extendedType);
} else {
b.exclude();
}
[2/7] cayenne git commit: CAY-2050 | Generics for ExtendedType |
Improving CommonsJdbcEventLogger parameter logging
Posted by aa...@apache.org.
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/TimestampType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/TimestampType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/TimestampType.java
index 9f2581f..8b877a0 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/TimestampType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/TimestampType.java
@@ -26,7 +26,7 @@ import java.sql.Timestamp;
/**
* @since 3.0
*/
-public class TimestampType implements ExtendedType {
+public class TimestampType implements ExtendedType<Timestamp> {
@Override
public String getClassName() {
@@ -47,7 +47,7 @@ public class TimestampType implements ExtendedType {
@Override
public void setJdbcObject(
PreparedStatement statement,
- Object value,
+ Timestamp value,
int pos,
int type,
int scale) throws Exception {
@@ -56,8 +56,16 @@ public class TimestampType implements ExtendedType {
statement.setNull(pos, type);
}
else {
- statement.setTimestamp(pos, (Timestamp) value);
+ statement.setTimestamp(pos, value);
}
}
+ @Override
+ public String toString(Timestamp value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return '\'' + value.toString() + '\'';
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/UUIDType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/UUIDType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/UUIDType.java
index 9e488c3..8ff5eae 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/UUIDType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/UUIDType.java
@@ -30,7 +30,7 @@ import org.apache.cayenne.CayenneRuntimeException;
*
* @since 3.0
*/
-public class UUIDType implements ExtendedType {
+public class UUIDType implements ExtendedType<UUID> {
@Override
public String getClassName() {
@@ -38,7 +38,7 @@ public class UUIDType implements ExtendedType {
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public UUID materializeObject(ResultSet rs, int index, int type) throws Exception {
String uuid = rs.getString(index);
if (uuid == null) {
return null;
@@ -53,7 +53,7 @@ public class UUIDType implements ExtendedType {
}
@Override
- public Object materializeObject(CallableStatement rs, int index, int type)
+ public UUID materializeObject(CallableStatement rs, int index, int type)
throws Exception {
String uuid = rs.getString(index);
@@ -72,21 +72,24 @@ public class UUIDType implements ExtendedType {
@Override
public void setJdbcObject(
PreparedStatement statement,
- Object value,
+ UUID value,
int pos,
int type,
int scale) throws Exception {
if (value == null) {
statement.setNull(pos, type);
- }
- else if (value instanceof UUID) {
+ } else {
statement.setObject(pos, value.toString(), type);
}
- else {
- throw new IllegalArgumentException("Expected java.util.UUID, got "
- + value.getClass().getName());
- }
}
+ @Override
+ public String toString(UUID value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return value.toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/UtilDateType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/UtilDateType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/UtilDateType.java
index febfe5d..dafd472 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/UtilDateType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/UtilDateType.java
@@ -31,7 +31,7 @@ import org.apache.cayenne.dba.TypesMapping;
* Maps <code>java.util.Date</code> to any of the three database date/time types: TIME,
* DATE, TIMESTAMP.
*/
-public class UtilDateType implements ExtendedType {
+public class UtilDateType implements ExtendedType<Date> {
/**
* Returns "java.util.Date".
@@ -41,13 +41,13 @@ public class UtilDateType implements ExtendedType {
return Date.class.getName();
}
- protected Object convertToJdbcObject(Object val, int type) throws Exception {
+ protected Object convertToJdbcObject(Date val, int type) throws Exception {
if (type == Types.DATE)
- return new java.sql.Date(((Date) val).getTime());
+ return new java.sql.Date(val.getTime());
else if (type == Types.TIME)
- return new java.sql.Time(((Date) val).getTime());
+ return new java.sql.Time(val.getTime());
else if (type == Types.TIMESTAMP)
- return new java.sql.Timestamp(((Date) val).getTime());
+ return new java.sql.Timestamp(val.getTime());
else
throw new IllegalArgumentException(
"Only DATE, TIME or TIMESTAMP can be mapped as '"
@@ -106,7 +106,7 @@ public class UtilDateType implements ExtendedType {
@Override
public void setJdbcObject(
PreparedStatement statement,
- Object value,
+ Date value,
int pos,
int type,
int scale) throws Exception {
@@ -118,4 +118,14 @@ public class UtilDateType implements ExtendedType {
statement.setObject(pos, convertToJdbcObject(value, type), type);
}
}
+
+ @Override
+ public String toString(Date value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ long time = value.getTime();
+ return "\'" + new java.sql.Timestamp(time) + "\'";
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/VoidType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/VoidType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/VoidType.java
index 561187c..52ff9fb 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/VoidType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/VoidType.java
@@ -29,7 +29,7 @@ import java.sql.ResultSet;
*
* @since 1.2
*/
-public class VoidType implements ExtendedType {
+public class VoidType implements ExtendedType<Void> {
@Override
public String getClassName() {
@@ -39,7 +39,7 @@ public class VoidType implements ExtendedType {
@Override
public void setJdbcObject(
PreparedStatement statement,
- Object value,
+ Void value,
int pos,
int type,
int precision) throws Exception {
@@ -47,13 +47,22 @@ public class VoidType implements ExtendedType {
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public Void materializeObject(ResultSet rs, int index, int type) throws Exception {
return null;
}
@Override
- public Object materializeObject(CallableStatement rs, int index, int type)
+ public Void materializeObject(CallableStatement rs, int index, int type)
throws Exception {
return null;
}
+
+ @Override
+ public String toString(Void value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return null;
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java
index 6ad3f5a..6e9245a 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java
@@ -19,6 +19,10 @@
package org.apache.cayenne.dba.db2;
+import java.sql.PreparedStatement;
+import java.sql.Types;
+import java.util.List;
+
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.translator.ParameterBinding;
@@ -42,10 +46,6 @@ import org.apache.cayenne.query.Query;
import org.apache.cayenne.query.SQLAction;
import org.apache.cayenne.resource.ResourceLocator;
-import java.sql.PreparedStatement;
-import java.sql.Types;
-import java.util.List;
-
/**
* DbAdapter implementation for the <a href="http://www.ibm.com/db2/"> DB2 RDBMS </a>.
* Sample connection settings to use with DB2 are shown below:
@@ -203,9 +203,9 @@ public class DB2Adapter extends JdbcAdapter {
final class DB2BooleanType extends BooleanType {
@Override
- public void setJdbcObject(PreparedStatement st, Object val, int pos, int type, int precision) throws Exception {
+ public void setJdbcObject(PreparedStatement st, Boolean val, int pos, int type, int precision) throws Exception {
if (val != null) {
- st.setInt(pos, ((Boolean) val) ? 1 : 0);
+ st.setInt(pos, val ? 1 : 0);
} else {
st.setNull(pos, type);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseBooleanType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseBooleanType.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseBooleanType.java
index fb7d29f..a617453 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseBooleanType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseBooleanType.java
@@ -35,7 +35,7 @@ class FrontBaseBooleanType extends BooleanType {
@Override
public void setJdbcObject(
PreparedStatement st,
- Object val,
+ Boolean val,
int pos,
int type,
int precision) throws Exception {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseByteArrayType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseByteArrayType.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseByteArrayType.java
index 981ed6b..db3ce13 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseByteArrayType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseByteArrayType.java
@@ -36,7 +36,7 @@ class FrontBaseByteArrayType extends ByteArrayType {
@Override
public void setJdbcObject(
PreparedStatement st,
- Object val,
+ byte[] val,
int pos,
int type,
int precision) throws Exception {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseCharType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseCharType.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseCharType.java
index b4ad09b..8a70ac8 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseCharType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseCharType.java
@@ -42,13 +42,13 @@ class FrontBaseCharType extends CharType {
@Override
public void setJdbcObject(
PreparedStatement st,
- Object val,
+ String val,
int pos,
int type,
int precision) throws Exception {
if (type == Types.CLOB) {
- st.setClob(pos, writeClob((String) val));
+ st.setClob(pos, writeClob(val));
}
else {
super.setJdbcObject(st, val, pos, type, precision);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/dba/ingres/IngresBooleanType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/ingres/IngresBooleanType.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/ingres/IngresBooleanType.java
index 4b4c88f..15f2ebd 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/ingres/IngresBooleanType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/ingres/IngresBooleanType.java
@@ -28,13 +28,13 @@ public class IngresBooleanType extends BooleanType {
@Override
public void setJdbcObject(
PreparedStatement st,
- Object val,
+ Boolean val,
int pos,
int type,
int precision) throws Exception {
if (val != null) {
- st.setInt(pos, ((Boolean) val).booleanValue() ? 1 : 0);
+ st.setInt(pos, val.booleanValue() ? 1 : 0);
} else {
st.setNull(pos, type);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/dba/ingres/IngresCharType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/ingres/IngresCharType.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/ingres/IngresCharType.java
index 53ea69b..2635d77 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/ingres/IngresCharType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/ingres/IngresCharType.java
@@ -36,13 +36,13 @@ class IngresCharType extends CharType {
@Override
public void setJdbcObject(
PreparedStatement st,
- Object val,
+ String val,
int pos,
int type,
int precision) throws Exception {
if (val != null && type == Types.CHAR) {
- st.setString(pos, val.toString());
+ st.setString(pos, val);
}
else {
super.setJdbcObject(st, val, pos, type, precision);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/dba/openbase/OpenBaseAdapter.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/openbase/OpenBaseAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/openbase/OpenBaseAdapter.java
index a426332..2f244f1 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/openbase/OpenBaseAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/openbase/OpenBaseAdapter.java
@@ -19,6 +19,13 @@
package org.apache.cayenne.dba.openbase;
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.Types;
+import java.util.Iterator;
+import java.util.List;
+
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.access.translator.select.QualifierTranslator;
import org.apache.cayenne.access.translator.select.QueryAssembler;
@@ -42,13 +49,6 @@ import org.apache.cayenne.map.EntityResolver;
import org.apache.cayenne.query.SelectQuery;
import org.apache.cayenne.resource.ResourceLocator;
-import java.sql.CallableStatement;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.Types;
-import java.util.Iterator;
-import java.util.List;
-
/**
* DbAdapter implementation for <a href="http://www.openbase.com">OpenBase</a>.
* Sample connection settings to use with OpenBase are shown below:
@@ -259,19 +259,19 @@ public class OpenBaseAdapter extends JdbcAdapter {
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public Byte materializeObject(ResultSet rs, int index, int type) throws Exception {
// read value as int, and then narrow it down
int val = rs.getInt(index);
- return (rs.wasNull()) ? null : Byte.valueOf((byte) val);
+ return (rs.wasNull()) ? null : (byte) val;
}
@Override
- public Object materializeObject(CallableStatement rs, int index, int type) throws Exception {
+ public Byte materializeObject(CallableStatement rs, int index, int type) throws Exception {
// read value as int, and then narrow it down
int val = rs.getInt(index);
- return (rs.wasNull()) ? null : Byte.valueOf((byte) val);
+ return (rs.wasNull()) ? null : (byte) val;
}
}
@@ -282,12 +282,12 @@ public class OpenBaseAdapter extends JdbcAdapter {
}
@Override
- public void setJdbcObject(PreparedStatement st, Object val, int pos, int type, int precision) throws Exception {
+ public void setJdbcObject(PreparedStatement st, String val, int pos, int type, int precision) throws Exception {
// These to types map to "text"; and when setting "text" as object
// OB assumes that the object is the actual CLOB... weird
if (type == Types.CLOB || type == Types.LONGVARCHAR) {
- st.setString(pos, (String) val);
+ st.setString(pos, val);
} else {
super.setJdbcObject(st, val, pos, type, precision);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
index 668676f..c0ac4f0 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
@@ -19,6 +19,16 @@
package org.apache.cayenne.dba.oracle;
+import java.lang.reflect.Field;
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.translator.ParameterBinding;
@@ -47,24 +57,14 @@ import org.apache.cayenne.query.SelectQuery;
import org.apache.cayenne.query.UpdateBatchQuery;
import org.apache.cayenne.resource.ResourceLocator;
-import java.lang.reflect.Field;
-import java.sql.CallableStatement;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Types;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
/**
* DbAdapter implementation for <a href="http://www.oracle.com">Oracle RDBMS
* </a>. Sample connection settings to use with Oracle are shown below:
- *
+ *
* <pre>
* test-oracle.jdbc.username = test
* test-oracle.jdbc.password = secret
- * test-oracle.jdbc.url = jdbc:oracle:thin:@//192.168.0.20:1521/ora1
+ * test-oracle.jdbc.url = jdbc:oracle:thin:@//192.168.0.20:1521/ora1
* test-oracle.jdbc.driver = oracle.jdbc.driver.OracleDriver
* </pre>
*/
@@ -116,7 +116,7 @@ public class OracleAdapter extends JdbcAdapter {
/**
* Utility method that returns <code>true</code> if the query will update at
* least one BLOB or CLOB DbAttribute.
- *
+ *
* @since 1.2
*/
static boolean updatesLOBColumns(BatchQuery query) {
@@ -220,7 +220,7 @@ public class OracleAdapter extends JdbcAdapter {
* Returns a query string to drop a table corresponding to <code>ent</code>
* DbEntity. Changes superclass behavior to drop all related foreign key
* constraints.
- *
+ *
* @since 3.0
*/
@Override
@@ -290,7 +290,7 @@ public class OracleAdapter extends JdbcAdapter {
/**
* Uses OracleActionBuilder to create the right action.
- *
+ *
* @since 1.2
*/
@Override
@@ -301,7 +301,7 @@ public class OracleAdapter extends JdbcAdapter {
/**
* @since 3.0
*/
- final class OracleBooleanType implements ExtendedType {
+ final class OracleBooleanType implements ExtendedType<Boolean> {
@Override
public String getClassName() {
@@ -309,7 +309,7 @@ public class OracleAdapter extends JdbcAdapter {
}
@Override
- public void setJdbcObject(PreparedStatement st, Object val, int pos, int type, int precision) throws Exception {
+ public void setJdbcObject(PreparedStatement st, Boolean val, int pos, int type, int precision) throws Exception {
// Oracle does not support Types.BOOLEAN, so we have to override
// user mapping
@@ -323,7 +323,7 @@ public class OracleAdapter extends JdbcAdapter {
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public Boolean materializeObject(ResultSet rs, int index, int type) throws Exception {
// Oracle does not support Types.BOOLEAN, so we have to override
// user mapping
@@ -333,7 +333,7 @@ public class OracleAdapter extends JdbcAdapter {
}
@Override
- public Object materializeObject(CallableStatement st, int index, int type) throws Exception {
+ public Boolean materializeObject(CallableStatement st, int index, int type) throws Exception {
// Oracle does not support Types.BOOLEAN, so we have to override
// user mapping
@@ -341,5 +341,15 @@ public class OracleAdapter extends JdbcAdapter {
int i = st.getInt(index);
return st.wasNull() ? null : i == 0 ? Boolean.FALSE : Boolean.TRUE;
}
+
+ @Override
+ public String toString(Boolean value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return '\'' + value.toString() + '\'';
+ }
+
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleByteArrayType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleByteArrayType.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleByteArrayType.java
index 74e4662..752cce0 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleByteArrayType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleByteArrayType.java
@@ -34,7 +34,7 @@ public class OracleByteArrayType extends ByteArrayType {
@Override
public void setJdbcObject(
PreparedStatement st,
- Object val,
+ byte[] val,
int pos,
int type,
int scale) throws Exception {
@@ -42,11 +42,11 @@ public class OracleByteArrayType extends ByteArrayType {
if (isUsingBlobs()) {
Blob blob = st.getConnection().createBlob();
- blob.setBytes(1, (byte[]) val);
+ blob.setBytes(1, val);
st.setBlob(pos, blob);
} else {
- st.setBytes(pos, (byte[]) val);
+ st.setBytes(pos, val);
}
}
else {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleCharType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleCharType.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleCharType.java
index 179e244..55beef1 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleCharType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleCharType.java
@@ -41,7 +41,7 @@ public class OracleCharType extends CharType {
@Override
public void setJdbcObject(
PreparedStatement st,
- Object val,
+ String val,
int pos,
int type,
int precision) throws Exception {
@@ -50,11 +50,11 @@ public class OracleCharType extends CharType {
if (isUsingClobs()) {
Clob clob = st.getConnection().createClob();
- clob.setString(1, (String) val);
+ clob.setString(1, val);
st.setClob(pos, clob);
} else {
- st.setString(pos, (String) val);
+ st.setString(pos, val);
}
}
else {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresByteArrayType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresByteArrayType.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresByteArrayType.java
index 0c2388b..4af5fd3 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresByteArrayType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresByteArrayType.java
@@ -40,7 +40,7 @@ class PostgresByteArrayType extends ByteArrayType {
@Override
public void setJdbcObject(
PreparedStatement st,
- Object val,
+ byte[] val,
int pos,
int type,
int precision) throws Exception {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteBigDecimalType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteBigDecimalType.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteBigDecimalType.java
index 44d6562..e834bbc 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteBigDecimalType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteBigDecimalType.java
@@ -28,7 +28,7 @@ import org.apache.cayenne.access.types.ExtendedType;
/**
* @since 3.0
*/
-class SQLiteBigDecimalType implements ExtendedType {
+class SQLiteBigDecimalType implements ExtendedType<BigDecimal> {
@Override
public String getClassName() {
@@ -36,7 +36,7 @@ class SQLiteBigDecimalType implements ExtendedType {
}
@Override
- public Object materializeObject(CallableStatement rs, int index, int type)
+ public BigDecimal materializeObject(CallableStatement rs, int index, int type)
throws Exception {
// BigDecimals are not supported by the zentus driver... in addition the driver
// throws an NPE on 'getDouble' if the value is null, and also there are rounding
@@ -46,7 +46,7 @@ class SQLiteBigDecimalType implements ExtendedType {
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public BigDecimal materializeObject(ResultSet rs, int index, int type) throws Exception {
// BigDecimals are not supported by the zentus driver... in addition the driver
// throws an NPE on 'getDouble' if the value is null, and also there are rounding
// errors. So will read it as a String...
@@ -57,7 +57,7 @@ class SQLiteBigDecimalType implements ExtendedType {
@Override
public void setJdbcObject(
PreparedStatement st,
- Object val,
+ BigDecimal val,
int pos,
int type,
int scale) throws Exception {
@@ -69,4 +69,13 @@ class SQLiteBigDecimalType implements ExtendedType {
st.setObject(pos, val, type);
}
}
+
+ @Override
+ public String toString(BigDecimal value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return value.toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteByteArrayType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteByteArrayType.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteByteArrayType.java
index 9267d9c..11526e0 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteByteArrayType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteByteArrayType.java
@@ -23,11 +23,12 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.apache.cayenne.access.types.ExtendedType;
+import org.apache.cayenne.util.IDUtil;
/**
* @since 3.0
*/
-class SQLiteByteArrayType implements ExtendedType {
+class SQLiteByteArrayType implements ExtendedType<byte[]> {
@Override
public String getClassName() {
@@ -37,13 +38,13 @@ class SQLiteByteArrayType implements ExtendedType {
@Override
public void setJdbcObject(
PreparedStatement st,
- Object val,
+ byte[] val,
int pos,
int type,
int scale) throws Exception {
- if (val instanceof byte[]) {
- st.setBytes(pos, (byte[]) val);
+ if (val != null) {
+ st.setBytes(pos, val);
}
else {
if (scale != -1) {
@@ -56,13 +57,24 @@ class SQLiteByteArrayType implements ExtendedType {
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public byte[] materializeObject(ResultSet rs, int index, int type) throws Exception {
return rs.getBytes(index);
}
@Override
- public Object materializeObject(CallableStatement rs, int index, int type)
+ public byte[] materializeObject(CallableStatement rs, int index, int type)
throws Exception {
return rs.getBytes(index);
}
+
+ @Override
+ public String toString(byte[] value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ StringBuilder buffer = new StringBuilder();
+ IDUtil.appendFormattedBytes(buffer, value);
+ return buffer.toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteCalendarType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteCalendarType.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteCalendarType.java
index 2fa21e7..e099b2b 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteCalendarType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteCalendarType.java
@@ -31,13 +31,13 @@ import org.apache.cayenne.access.types.ExtendedType;
/**
* @since 3.0
*/
-class SQLiteCalendarType implements ExtendedType {
+class SQLiteCalendarType<T extends Calendar> implements ExtendedType<Calendar> {
- protected ExtendedType delegateCalendarType;
- protected ExtendedType delegateDateType;
+ protected ExtendedType<Calendar> delegateCalendarType;
+ protected ExtendedType<Date> delegateDateType;
- public <T extends Calendar> SQLiteCalendarType(Class<T> calendarClass) {
- this.delegateCalendarType = new CalendarType<T>(calendarClass);
+ public SQLiteCalendarType(Class<T> calendarClass) {
+ this.delegateCalendarType = new CalendarType<>(calendarClass);
this.delegateDateType = new SQLiteDateType();
}
@@ -47,10 +47,10 @@ class SQLiteCalendarType implements ExtendedType {
}
@Override
- public Object materializeObject(CallableStatement rs, int index, int type)
+ public Calendar materializeObject(CallableStatement rs, int index, int type)
throws Exception {
- Date date = (Date) delegateDateType.materializeObject(rs, index, type);
+ Date date = delegateDateType.materializeObject(rs, index, type);
if (date == null) {
return null;
}
@@ -61,8 +61,8 @@ class SQLiteCalendarType implements ExtendedType {
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
- Date date = (Date) delegateDateType.materializeObject(rs, index, type);
+ public Calendar materializeObject(ResultSet rs, int index, int type) throws Exception {
+ Date date = delegateDateType.materializeObject(rs, index, type);
if (date == null) {
return null;
}
@@ -75,11 +75,19 @@ class SQLiteCalendarType implements ExtendedType {
@Override
public void setJdbcObject(
PreparedStatement statement,
- Object value,
+ Calendar value,
int pos,
int type,
int precision) throws Exception {
delegateCalendarType.setJdbcObject(statement, value, pos, type, precision);
}
+ @Override
+ public String toString(Calendar value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return value.getClass().getName() + '(' + new java.sql.Timestamp(value.getTimeInMillis()) + ')';
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteFloatType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteFloatType.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteFloatType.java
index d8db44b..c80961a 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteFloatType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteFloatType.java
@@ -27,7 +27,7 @@ import org.apache.cayenne.access.types.ExtendedType;
/**
* @since 3.0
*/
-class SQLiteFloatType implements ExtendedType {
+class SQLiteFloatType implements ExtendedType<Float> {
@Override
public String getClassName() {
@@ -35,26 +35,26 @@ class SQLiteFloatType implements ExtendedType {
}
@Override
- public Object materializeObject(CallableStatement rs, int index, int type)
+ public Float materializeObject(CallableStatement rs, int index, int type)
throws Exception {
// the driver throws an NPE on 'getFloat' if the value is null, so must read it as
// an object.
Number n = (Number) rs.getObject(index);
- return n == null ? null : new Float(n.floatValue());
+ return n == null ? null : n.floatValue();
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public Float materializeObject(ResultSet rs, int index, int type) throws Exception {
// the driver throws an NPE on 'getFloat' if the value is null, so must read it as
// an object.
Number n = (Number) rs.getObject(index);
- return n == null ? null : new Float(n.floatValue());
+ return n == null ? null : n.floatValue();
}
@Override
public void setJdbcObject(
PreparedStatement st,
- Object val,
+ Float val,
int pos,
int type,
int scale) throws Exception {
@@ -66,4 +66,13 @@ class SQLiteFloatType implements ExtendedType {
st.setObject(pos, val, type);
}
}
+
+ @Override
+ public String toString(Float value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return value.toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/log/CommonsJdbcEventLogger.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/log/CommonsJdbcEventLogger.java b/cayenne-server/src/main/java/org/apache/cayenne/log/CommonsJdbcEventLogger.java
index f9351bf..c10daad 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/log/CommonsJdbcEventLogger.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/log/CommonsJdbcEventLogger.java
@@ -46,7 +46,7 @@ public class CommonsJdbcEventLogger implements JdbcEventLogger {
private static final Log logger = LogFactory.getLog(CommonsJdbcEventLogger.class);
- private static final int TRIM_VALUES_THRESHOLD = 30;
+ public static final int TRIM_VALUES_THRESHOLD = 30;
protected long queryExecutionTimeLoggingThreshold;
@@ -263,7 +263,7 @@ public class CommonsJdbcEventLogger implements JdbcEventLogger {
while (attributeIterator != null && attributeIterator.hasNext()) {
attribute = attributeIterator.next();
- if (isInserting == false || attribute.isGenerated() == false)
+ if (!isInserting || !attribute.isGenerated())
break;
}
@@ -288,10 +288,7 @@ public class CommonsJdbcEventLogger implements JdbcEventLogger {
char firstCharacter = query.charAt(0);
- if (firstCharacter == 'I' || firstCharacter == 'i')
- return true;
- else
- return false;
+ return firstCharacter == 'I' || firstCharacter == 'i';
}
@Override
@@ -379,7 +376,7 @@ public class CommonsJdbcEventLogger implements JdbcEventLogger {
}
buffer.append(":");
- sqlLiteralForObject(buffer, b.getValue());
+ buffer.append(b.getExtendedType().toString(b.getValue()));
}
if (hasIncluded) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/util/IDUtil.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/util/IDUtil.java b/cayenne-server/src/main/java/org/apache/cayenne/util/IDUtil.java
index 0ed247e..6f4df35 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/util/IDUtil.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/util/IDUtil.java
@@ -26,9 +26,11 @@ import java.security.NoSuchAlgorithmException;
import org.apache.cayenne.CayenneRuntimeException;
+import static org.apache.cayenne.log.CommonsJdbcEventLogger.TRIM_VALUES_THRESHOLD;
+
/**
* helper class to generate pseudo-GUID sequences.
- *
+ *
*/
public class IDUtil {
@@ -69,7 +71,7 @@ public class IDUtil {
/**
* Prints a byte value to a StringBuffer as a double digit hex value.
- *
+ *
* @since 1.2 Since 3.0 signature has changed to take Appendable argument.
*/
public static void appendFormattedByte(Appendable buffer, byte byteValue) {
@@ -84,6 +86,34 @@ public class IDUtil {
}
}
+ public static void appendFormattedBytes(Appendable buffer, byte[] bytes) {
+ try {
+ buffer.append("< ");
+
+ int len = bytes.length;
+ boolean trimming = false;
+ if (len > TRIM_VALUES_THRESHOLD) {
+ len = TRIM_VALUES_THRESHOLD;
+ trimming = true;
+ }
+
+ for (int i = 0; i < len; i++) {
+ if (i > 0) {
+ buffer.append(",");
+ }
+ appendFormattedByte(buffer, bytes[i]);
+ }
+
+ if (trimming) {
+ buffer.append("...");
+ }
+
+ buffer.append('>');
+ } catch (IOException e) {
+ throw new CayenneRuntimeException("Error appending data to buffer", e);
+ }
+ }
+
/**
* @param length the length of returned byte[]
* @return A pseudo-unique byte array of the specified length. Length must be at least
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/test/java/org/apache/cayenne/access/types/MockExtendedType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/types/MockExtendedType.java b/cayenne-server/src/test/java/org/apache/cayenne/access/types/MockExtendedType.java
index c36f6c5..0f7a2af 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/types/MockExtendedType.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/types/MockExtendedType.java
@@ -23,7 +23,7 @@ import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
-public class MockExtendedType implements ExtendedType {
+public class MockExtendedType implements ExtendedType<Object> {
protected Class<?> objectClass;
@@ -59,4 +59,13 @@ public class MockExtendedType implements ExtendedType {
throws Exception {
return objectClass.newInstance();
}
+
+ @Override
+ public String toString(Object value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return value.toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/test/java/org/apache/cayenne/testdo/extended_type/StringET1ExtendedType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/extended_type/StringET1ExtendedType.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/extended_type/StringET1ExtendedType.java
index 69cfd39..826c5ea 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/extended_type/StringET1ExtendedType.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/extended_type/StringET1ExtendedType.java
@@ -18,13 +18,13 @@
****************************************************************/
package org.apache.cayenne.testdo.extended_type;
-import org.apache.cayenne.access.types.ExtendedType;
-
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
-public class StringET1ExtendedType implements ExtendedType {
+import org.apache.cayenne.access.types.ExtendedType;
+
+public class StringET1ExtendedType implements ExtendedType<StringET1> {
@Override
public String getClassName() {
@@ -32,13 +32,13 @@ public class StringET1ExtendedType implements ExtendedType {
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public StringET1 materializeObject(ResultSet rs, int index, int type) throws Exception {
String string = rs.getString(index);
return string != null ? new StringET1(string) : null;
}
@Override
- public Object materializeObject(CallableStatement rs, int index, int type)
+ public StringET1 materializeObject(CallableStatement rs, int index, int type)
throws Exception {
String string = rs.getString(index);
return string != null ? new StringET1(string) : null;
@@ -47,16 +47,25 @@ public class StringET1ExtendedType implements ExtendedType {
@Override
public void setJdbcObject(
PreparedStatement statement,
- Object value,
+ StringET1 value,
int pos,
int type,
int precision) throws Exception {
- if (value instanceof StringET1) {
- statement.setString(pos, ((StringET1) value).getString());
+ if (value != null) {
+ statement.setString(pos, value.getString());
}
else {
statement.setNull(pos, type);
}
}
+
+ @Override
+ public String toString(StringET1 value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return value.toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_207StringType1.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_207StringType1.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_207StringType1.java
index 4f010e2..7c70441 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_207StringType1.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_207StringType1.java
@@ -25,7 +25,7 @@ import java.sql.ResultSet;
import org.apache.cayenne.access.types.ExtendedType;
-public class CAY_207StringType1 implements ExtendedType {
+public class CAY_207StringType1 implements ExtendedType<CAY_207String1> {
@Override
public String getClassName() {
@@ -33,34 +33,38 @@ public class CAY_207StringType1 implements ExtendedType {
}
@Override
- public Object materializeObject(CallableStatement rs, int index, int type)
+ public CAY_207String1 materializeObject(CallableStatement rs, int index, int type)
throws Exception {
return new CAY_207String1(rs.getString(index));
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public CAY_207String1 materializeObject(ResultSet rs, int index, int type) throws Exception {
return new CAY_207String1(rs.getString(index));
}
@Override
public void setJdbcObject(
PreparedStatement statement,
- Object value,
+ CAY_207String1 value,
int pos,
int type,
int scale) throws Exception {
- if (value instanceof CAY_207String1) {
- value = ((CAY_207String1) value).string;
- }
-
if (scale != -1) {
- statement.setObject(pos, value, type, scale);
+ statement.setObject(pos, value.string, type, scale);
}
else {
- statement.setObject(pos, value, type);
+ statement.setObject(pos, value.string, type);
}
}
+ @Override
+ public String toString(CAY_207String1 value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return value.toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_207StringType2.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_207StringType2.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_207StringType2.java
index 2282847..8483651 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_207StringType2.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_207StringType2.java
@@ -27,7 +27,7 @@ import org.apache.cayenne.access.types.ExtendedType;
/**
*/
-public class CAY_207StringType2 implements ExtendedType {
+public class CAY_207StringType2 implements ExtendedType<CAY_207String2> {
@Override
public String getClassName() {
@@ -35,34 +35,38 @@ public class CAY_207StringType2 implements ExtendedType {
}
@Override
- public Object materializeObject(CallableStatement rs, int index, int type)
+ public CAY_207String2 materializeObject(CallableStatement rs, int index, int type)
throws Exception {
return new CAY_207String2(rs.getString(index));
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public CAY_207String2 materializeObject(ResultSet rs, int index, int type) throws Exception {
return new CAY_207String2(rs.getString(index));
}
@Override
public void setJdbcObject(
PreparedStatement statement,
- Object value,
+ CAY_207String2 value,
int pos,
int type,
int scale) throws Exception {
- if (value instanceof CAY_207String2) {
- value = ((CAY_207String2) value).string;
- }
-
if (scale != -1) {
- statement.setObject(pos, value, type, scale);
+ statement.setObject(pos, value.string, type, scale);
}
else {
- statement.setObject(pos, value, type);
+ statement.setObject(pos, value.string, type);
}
}
+ @Override
+ public String toString(CAY_207String2 value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return value.toString();
+ }
}
[6/7] cayenne git commit: CAY-2050 Refactoring: ParameterBinding to
contain ExtendedType property
Posted by aa...@apache.org.
CAY-2050 Refactoring: ParameterBinding to contain ExtendedType property
* explicit extended types in cayenne-crypto
* assuming ParameterBinding always has an ET
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/01618222
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/01618222
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/01618222
Branch: refs/heads/master
Commit: 0161822270ba51844073fdb292330af6ed742256
Parents: e6585ef
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Tue Jan 24 15:08:03 2017 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Tue Jan 24 15:08:03 2017 +0300
----------------------------------------------------------------------
.../CryptoBatchTranslatorFactoryDecorator.java | 4 ++--
.../transformer/DefaultBindingsTransformer.java | 16 +++++++++++--
.../transformer/DefaultTransformerFactory.java | 5 ++--
.../crypto/transformer/TransformerFactory.java | 3 ++-
.../org/apache/cayenne/dba/JdbcAdapter.java | 24 ++++++++------------
5 files changed, 31 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/01618222/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/batch/CryptoBatchTranslatorFactoryDecorator.java
----------------------------------------------------------------------
diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/batch/CryptoBatchTranslatorFactoryDecorator.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/batch/CryptoBatchTranslatorFactoryDecorator.java
index 4b8a471..5d3d319 100644
--- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/batch/CryptoBatchTranslatorFactoryDecorator.java
+++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/batch/CryptoBatchTranslatorFactoryDecorator.java
@@ -44,7 +44,7 @@ public class CryptoBatchTranslatorFactoryDecorator implements BatchTranslatorFac
}
@Override
- public BatchTranslator translator(BatchQuery query, DbAdapter adapter, String trimFunction) {
+ public BatchTranslator translator(BatchQuery query, final DbAdapter adapter, String trimFunction) {
final BatchTranslator delegateTranslator = delegate.translator(query, adapter, trimFunction);
return new BatchTranslator() {
@@ -54,7 +54,7 @@ public class CryptoBatchTranslatorFactoryDecorator implements BatchTranslatorFac
private void ensureEncryptorCompiled() {
if (!encryptorCompiled) {
- encryptor = cryptoFactory.encryptor(getBindings());
+ encryptor = cryptoFactory.encryptor(getBindings(), adapter.getExtendedTypes());
encryptorCompiled = true;
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/01618222/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultBindingsTransformer.java
----------------------------------------------------------------------
diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultBindingsTransformer.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultBindingsTransformer.java
index 4844795..3524b41 100644
--- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultBindingsTransformer.java
+++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultBindingsTransformer.java
@@ -19,6 +19,8 @@
package org.apache.cayenne.crypto.transformer;
import org.apache.cayenne.access.translator.DbAttributeBinding;
+import org.apache.cayenne.access.types.ExtendedType;
+import org.apache.cayenne.access.types.ExtendedTypeMap;
import org.apache.cayenne.crypto.transformer.bytes.BytesEncryptor;
import org.apache.cayenne.crypto.transformer.value.ValueEncryptor;
@@ -30,11 +32,16 @@ public class DefaultBindingsTransformer implements BindingsTransformer {
private int[] positions;
private ValueEncryptor[] transformers;
private BytesEncryptor encryptor;
+ private ExtendedTypeMap extendedTypeMap;
- public DefaultBindingsTransformer(int[] positions, ValueEncryptor[] transformers, BytesEncryptor encryptor) {
+ public DefaultBindingsTransformer(int[] positions,
+ ValueEncryptor[] transformers,
+ BytesEncryptor encryptor,
+ ExtendedTypeMap extendedTypeMap) {
this.positions = positions;
this.transformers = transformers;
this.encryptor = encryptor;
+ this.extendedTypeMap = extendedTypeMap;
}
@Override
@@ -46,7 +53,12 @@ public class DefaultBindingsTransformer implements BindingsTransformer {
DbAttributeBinding b = bindings[positions[i]];
Object transformed = transformers[i].encrypt(encryptor, b.getValue());
b.setValue(transformed);
- b.setExtendedType(null); // TODO fast hack
+
+ ExtendedType extendedType = transformed != null
+ ? extendedTypeMap.getRegisteredType(transformed.getClass())
+ : extendedTypeMap.getDefaultType();
+
+ b.setExtendedType(extendedType);
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/01618222/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultTransformerFactory.java
----------------------------------------------------------------------
diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultTransformerFactory.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultTransformerFactory.java
index 9e1cc72..935a2f8 100644
--- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultTransformerFactory.java
+++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultTransformerFactory.java
@@ -20,6 +20,7 @@ package org.apache.cayenne.crypto.transformer;
import org.apache.cayenne.access.jdbc.ColumnDescriptor;
import org.apache.cayenne.access.translator.DbAttributeBinding;
+import org.apache.cayenne.access.types.ExtendedTypeMap;
import org.apache.cayenne.crypto.map.ColumnMapper;
import org.apache.cayenne.crypto.transformer.bytes.BytesTransformerFactory;
import org.apache.cayenne.crypto.transformer.value.ValueDecryptor;
@@ -90,7 +91,7 @@ public class DefaultTransformerFactory implements TransformerFactory {
}
@Override
- public BindingsTransformer encryptor(DbAttributeBinding[] bindings) {
+ public BindingsTransformer encryptor(DbAttributeBinding[] bindings, ExtendedTypeMap extendedTypeMap) {
int len = bindings.length;
List<Integer> cryptoColumns = null;
@@ -120,7 +121,7 @@ public class DefaultTransformerFactory implements TransformerFactory {
transformers[i] = transformerFactory.encryptor(b.getAttribute());
}
- return new DefaultBindingsTransformer(positions, transformers, bytesTransformerFactory.encryptor());
+ return new DefaultBindingsTransformer(positions, transformers, bytesTransformerFactory.encryptor(), extendedTypeMap);
}
return null;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/01618222/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/TransformerFactory.java
----------------------------------------------------------------------
diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/TransformerFactory.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/TransformerFactory.java
index a8893d1..64f1389 100644
--- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/TransformerFactory.java
+++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/TransformerFactory.java
@@ -20,6 +20,7 @@ package org.apache.cayenne.crypto.transformer;
import org.apache.cayenne.access.jdbc.ColumnDescriptor;
import org.apache.cayenne.access.translator.DbAttributeBinding;
+import org.apache.cayenne.access.types.ExtendedTypeMap;
/**
* A factory that creates encryption transformers used for processing batch
@@ -29,7 +30,7 @@ import org.apache.cayenne.access.translator.DbAttributeBinding;
*/
public interface TransformerFactory {
- BindingsTransformer encryptor(DbAttributeBinding[] bindings);
+ BindingsTransformer encryptor(DbAttributeBinding[] bindings, ExtendedTypeMap extendedTypeMap);
MapTransformer decryptor(ColumnDescriptor[] columns, Object sampleRow);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/01618222/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
index b058719..74f9035 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
@@ -19,15 +19,6 @@
package org.apache.cayenne.dba;
-import java.net.URL;
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.sql.Types;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.translator.ParameterBinding;
@@ -57,6 +48,15 @@ import org.apache.cayenne.resource.Resource;
import org.apache.cayenne.resource.ResourceLocator;
import org.apache.cayenne.util.Util;
+import java.net.URL;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
/**
* A generic DbAdapter implementation. Can be used as a default adapter or as a
* superclass of a concrete adapter implementation.
@@ -545,11 +545,7 @@ public class JdbcAdapter implements DbAdapter {
if (binding.getValue() == null) {
statement.setNull(binding.getStatementPosition(), binding.getType());
} else {
- ExtendedType typeProcessor = binding.getExtendedType() != null
- ? binding.getExtendedType()
- : getExtendedTypes().getRegisteredType(binding.getValue().getClass());
-
- typeProcessor.setJdbcObject(statement,
+ binding.getExtendedType().setJdbcObject(statement,
binding.getValue(),
binding.getStatementPosition(),
binding.getType(),
[5/7] cayenne git commit: Merge branch '172'
Posted by aa...@apache.org.
Merge branch '172'
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/e6585efd
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/e6585efd
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/e6585efd
Branch: refs/heads/master
Commit: e6585efdaba30565dbe51c7a64ca314b40654783
Parents: ee02106 e9e1e73
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Tue Jan 24 14:37:20 2017 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Tue Jan 24 14:37:20 2017 +0300
----------------------------------------------------------------------
.../transformer/DefaultBindingsTransformer.java | 1 +
.../java8/access/types/LocalDateTimeType.java | 21 ++-
.../java8/access/types/LocalDateType.java | 18 +-
.../java8/access/types/LocalTimeType.java | 21 ++-
.../cayenne/joda/access/types/DateTimeType.java | 78 ++++----
.../joda/access/types/LocalDateTimeType.java | 79 ++++----
.../joda/access/types/LocalDateType.java | 88 ++++-----
.../joda/access/types/LocalTimeType.java | 90 +++++-----
.../cayenne/access/jdbc/SQLTemplateAction.java | 33 ++--
.../access/translator/DbAttributeBinding.java | 5 +-
.../access/translator/ParameterBinding.java | 11 +-
.../translator/ProcedureParameterBinding.java | 5 +-
.../translator/batch/DeleteBatchTranslator.java | 20 +--
.../translator/batch/InsertBatchTranslator.java | 18 +-
.../batch/SoftDeleteBatchTranslator.java | 11 +-
.../translator/batch/UpdateBatchTranslator.java | 31 ++--
.../procedure/ProcedureTranslator.java | 23 +--
.../translator/select/QueryAssembler.java | 23 +--
.../cayenne/access/types/BigDecimalType.java | 18 +-
.../cayenne/access/types/BigIntegerType.java | 17 +-
.../cayenne/access/types/BooleanType.java | 17 +-
.../cayenne/access/types/ByteArrayType.java | 24 ++-
.../access/types/ByteOrCharArrayFactory.java | 179 ++++++++++++++-----
.../apache/cayenne/access/types/ByteType.java | 31 ++--
.../cayenne/access/types/CalendarType.java | 33 ++--
.../apache/cayenne/access/types/CharType.java | 48 ++++-
.../apache/cayenne/access/types/DateType.java | 18 +-
.../apache/cayenne/access/types/DoubleType.java | 19 +-
.../apache/cayenne/access/types/EnumType.java | 47 +++--
.../cayenne/access/types/ExtendedEnumType.java | 44 +++--
.../cayenne/access/types/ExtendedType.java | 16 +-
.../access/types/ExtendedTypeDecorator.java | 25 ++-
.../apache/cayenne/access/types/FloatType.java | 18 +-
.../cayenne/access/types/IntegerType.java | 18 +-
.../apache/cayenne/access/types/LongType.java | 18 +-
.../apache/cayenne/access/types/ObjectType.java | 11 +-
.../access/types/SerializableTypeFactory.java | 27 +--
.../apache/cayenne/access/types/ShortType.java | 22 ++-
.../apache/cayenne/access/types/TimeType.java | 19 +-
.../cayenne/access/types/TimestampType.java | 14 +-
.../apache/cayenne/access/types/UUIDType.java | 23 +--
.../cayenne/access/types/UtilDateType.java | 22 ++-
.../apache/cayenne/access/types/VoidType.java | 17 +-
.../org/apache/cayenne/dba/JdbcAdapter.java | 37 ++--
.../org/apache/cayenne/dba/db2/DB2Adapter.java | 12 +-
.../dba/frontbase/FrontBaseBooleanType.java | 2 +-
.../dba/frontbase/FrontBaseByteArrayType.java | 2 +-
.../dba/frontbase/FrontBaseCharType.java | 4 +-
.../cayenne/dba/ingres/IngresBooleanType.java | 4 +-
.../cayenne/dba/ingres/IngresCharType.java | 4 +-
.../cayenne/dba/openbase/OpenBaseAdapter.java | 26 +--
.../dba/oracle/Oracle8LOBBatchAction.java | 53 +++---
.../dba/oracle/Oracle8LOBBatchTranslator.java | 22 +--
.../cayenne/dba/oracle/OracleAdapter.java | 48 +++--
.../cayenne/dba/oracle/OracleByteArrayType.java | 6 +-
.../cayenne/dba/oracle/OracleCharType.java | 6 +-
.../dba/postgres/PostgresByteArrayType.java | 2 +-
.../dba/sqlite/SQLiteBigDecimalType.java | 17 +-
.../cayenne/dba/sqlite/SQLiteByteArrayType.java | 24 ++-
.../cayenne/dba/sqlite/SQLiteCalendarType.java | 28 +--
.../cayenne/dba/sqlite/SQLiteFloatType.java | 21 ++-
.../cayenne/log/CommonsJdbcEventLogger.java | 16 +-
.../java/org/apache/cayenne/util/IDUtil.java | 34 +++-
.../cayenne/access/types/MockExtendedType.java | 11 +-
.../extended_type/StringET1ExtendedType.java | 25 ++-
.../cayenne/unit/jira/CAY_207StringType1.java | 24 +--
.../cayenne/unit/jira/CAY_207StringType2.java | 24 +--
67 files changed, 1136 insertions(+), 637 deletions(-)
----------------------------------------------------------------------
[3/7] cayenne git commit: CAY-2050 | Generics for ExtendedType |
Improving CommonsJdbcEventLogger parameter logging
Posted by aa...@apache.org.
CAY-2050 | Generics for ExtendedType | Improving CommonsJdbcEventLogger parameter logging
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/efa48e5c
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/efa48e5c
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/efa48e5c
Branch: refs/heads/master
Commit: efa48e5c26e38768ca6d719221b270ae5ab1757a
Parents: da222d2
Author: Savva Kolbachev <s....@gmail.com>
Authored: Wed Dec 28 20:34:53 2016 +0300
Committer: Savva Kolbachev <s....@gmail.com>
Committed: Sat Jan 21 18:16:02 2017 +0300
----------------------------------------------------------------------
.../java8/access/types/LocalDateTimeType.java | 21 ++-
.../java8/access/types/LocalDateType.java | 18 +-
.../java8/access/types/LocalTimeType.java | 21 ++-
.../cayenne/joda/access/types/DateTimeType.java | 78 ++++----
.../joda/access/types/LocalDateTimeType.java | 79 ++++----
.../joda/access/types/LocalDateType.java | 88 ++++-----
.../joda/access/types/LocalTimeType.java | 90 +++++-----
.../cayenne/access/types/BigDecimalType.java | 18 +-
.../cayenne/access/types/BigIntegerType.java | 17 +-
.../cayenne/access/types/BooleanType.java | 17 +-
.../cayenne/access/types/ByteArrayType.java | 24 ++-
.../access/types/ByteOrCharArrayFactory.java | 179 ++++++++++++++-----
.../apache/cayenne/access/types/ByteType.java | 31 ++--
.../cayenne/access/types/CalendarType.java | 33 ++--
.../apache/cayenne/access/types/CharType.java | 48 ++++-
.../apache/cayenne/access/types/DateType.java | 18 +-
.../apache/cayenne/access/types/DoubleType.java | 19 +-
.../apache/cayenne/access/types/EnumType.java | 47 +++--
.../cayenne/access/types/ExtendedEnumType.java | 44 +++--
.../cayenne/access/types/ExtendedType.java | 16 +-
.../access/types/ExtendedTypeDecorator.java | 25 ++-
.../apache/cayenne/access/types/FloatType.java | 18 +-
.../cayenne/access/types/IntegerType.java | 18 +-
.../apache/cayenne/access/types/LongType.java | 18 +-
.../apache/cayenne/access/types/ObjectType.java | 11 +-
.../access/types/SerializableTypeFactory.java | 27 +--
.../apache/cayenne/access/types/ShortType.java | 22 ++-
.../apache/cayenne/access/types/TimeType.java | 19 +-
.../cayenne/access/types/TimestampType.java | 14 +-
.../apache/cayenne/access/types/UUIDType.java | 23 +--
.../cayenne/access/types/UtilDateType.java | 22 ++-
.../apache/cayenne/access/types/VoidType.java | 17 +-
.../org/apache/cayenne/dba/db2/DB2Adapter.java | 12 +-
.../dba/frontbase/FrontBaseBooleanType.java | 2 +-
.../dba/frontbase/FrontBaseByteArrayType.java | 2 +-
.../dba/frontbase/FrontBaseCharType.java | 4 +-
.../cayenne/dba/ingres/IngresBooleanType.java | 4 +-
.../cayenne/dba/ingres/IngresCharType.java | 4 +-
.../cayenne/dba/openbase/OpenBaseAdapter.java | 26 +--
.../cayenne/dba/oracle/OracleAdapter.java | 48 +++--
.../cayenne/dba/oracle/OracleByteArrayType.java | 6 +-
.../cayenne/dba/oracle/OracleCharType.java | 6 +-
.../dba/postgres/PostgresByteArrayType.java | 2 +-
.../dba/sqlite/SQLiteBigDecimalType.java | 17 +-
.../cayenne/dba/sqlite/SQLiteByteArrayType.java | 24 ++-
.../cayenne/dba/sqlite/SQLiteCalendarType.java | 28 +--
.../cayenne/dba/sqlite/SQLiteFloatType.java | 21 ++-
.../cayenne/log/CommonsJdbcEventLogger.java | 11 +-
.../java/org/apache/cayenne/util/IDUtil.java | 34 +++-
.../cayenne/access/types/MockExtendedType.java | 11 +-
.../extended_type/StringET1ExtendedType.java | 25 ++-
.../cayenne/unit/jira/CAY_207StringType1.java | 24 +--
.../cayenne/unit/jira/CAY_207StringType2.java | 24 +--
53 files changed, 970 insertions(+), 505 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalDateTimeType.java
----------------------------------------------------------------------
diff --git a/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalDateTimeType.java b/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalDateTimeType.java
index aa47c22..f47e247 100644
--- a/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalDateTimeType.java
+++ b/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalDateTimeType.java
@@ -19,15 +19,15 @@
package org.apache.cayenne.java8.access.types;
-import org.apache.cayenne.access.types.ExtendedType;
-
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.time.LocalDateTime;
-public class LocalDateTimeType implements ExtendedType {
+import org.apache.cayenne.access.types.ExtendedType;
+
+public class LocalDateTimeType implements ExtendedType<LocalDateTime> {
@Override
public String getClassName() {
@@ -35,8 +35,8 @@ public class LocalDateTimeType implements ExtendedType {
}
@Override
- public void setJdbcObject(PreparedStatement statement, Object value, int pos, int type, int scale) throws Exception {
- statement.setTimestamp(pos, Timestamp.valueOf((LocalDateTime) value));
+ public void setJdbcObject(PreparedStatement statement, LocalDateTime value, int pos, int type, int scale) throws Exception {
+ statement.setTimestamp(pos, Timestamp.valueOf(value));
}
@Override
@@ -46,8 +46,17 @@ public class LocalDateTimeType implements ExtendedType {
}
@Override
- public Object materializeObject(CallableStatement rs, int index, int type) throws Exception {
+ public LocalDateTime materializeObject(CallableStatement rs, int index, int type) throws Exception {
Timestamp timestamp = rs.getTimestamp(index);
return timestamp != null ? timestamp.toLocalDateTime() : null;
}
+
+ @Override
+ public String toString(LocalDateTime value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return '\'' + value.toString() + '\'';
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalDateType.java
----------------------------------------------------------------------
diff --git a/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalDateType.java b/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalDateType.java
index 72cfff7..ee602d5 100644
--- a/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalDateType.java
+++ b/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalDateType.java
@@ -19,15 +19,15 @@
package org.apache.cayenne.java8.access.types;
-import org.apache.cayenne.access.types.ExtendedType;
-
import java.sql.CallableStatement;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.time.LocalDate;
-public class LocalDateType implements ExtendedType {
+import org.apache.cayenne.access.types.ExtendedType;
+
+public class LocalDateType implements ExtendedType<LocalDate> {
@Override
public String getClassName() {
@@ -35,8 +35,8 @@ public class LocalDateType implements ExtendedType {
}
@Override
- public void setJdbcObject(PreparedStatement statement, Object value, int pos, int type, int scale) throws Exception {
- statement.setDate(pos, Date.valueOf((LocalDate) value));
+ public void setJdbcObject(PreparedStatement statement, LocalDate value, int pos, int type, int scale) throws Exception {
+ statement.setDate(pos, Date.valueOf(value));
}
@Override
@@ -51,4 +51,12 @@ public class LocalDateType implements ExtendedType {
return date != null ? date.toLocalDate() : null;
}
+ @Override
+ public String toString(LocalDate value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return '\'' + value.toString() + '\'';
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalTimeType.java
----------------------------------------------------------------------
diff --git a/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalTimeType.java b/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalTimeType.java
index 2d109ba..f1a8dea 100644
--- a/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalTimeType.java
+++ b/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types/LocalTimeType.java
@@ -19,15 +19,15 @@
package org.apache.cayenne.java8.access.types;
-import org.apache.cayenne.access.types.ExtendedType;
-
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Time;
import java.time.LocalTime;
-public class LocalTimeType implements ExtendedType {
+import org.apache.cayenne.access.types.ExtendedType;
+
+public class LocalTimeType implements ExtendedType<LocalTime> {
@Override
public String getClassName() {
@@ -35,8 +35,8 @@ public class LocalTimeType implements ExtendedType {
}
@Override
- public void setJdbcObject(PreparedStatement statement, Object value, int pos, int type, int scale) throws Exception {
- statement.setTime(pos, Time.valueOf((LocalTime) value));
+ public void setJdbcObject(PreparedStatement statement, LocalTime value, int pos, int type, int scale) throws Exception {
+ statement.setTime(pos, Time.valueOf(value));
}
@Override
@@ -46,9 +46,18 @@ public class LocalTimeType implements ExtendedType {
}
@Override
- public Object materializeObject(CallableStatement rs, int index, int type) throws Exception {
+ public LocalTime materializeObject(CallableStatement rs, int index, int type) throws Exception {
Time time = rs.getTime(index);
return time != null ? time.toLocalTime() : null;
}
+ @Override
+ public String toString(LocalTime value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return '\'' + value.toString() + '\'';
+ }
+
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/DateTimeType.java
----------------------------------------------------------------------
diff --git a/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/DateTimeType.java b/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/DateTimeType.java
index 2af5e91..a042b3d 100644
--- a/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/DateTimeType.java
+++ b/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/DateTimeType.java
@@ -19,57 +19,61 @@
package org.apache.cayenne.joda.access.types;
-import org.apache.cayenne.access.types.ExtendedType;
-import org.joda.time.DateTime;
-
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
+import org.apache.cayenne.access.types.ExtendedType;
+import org.joda.time.DateTime;
+
/**
* Handles <code>org.joda.time.DateTime</code> type mapping.
- *
+ *
* @since 4.0
*/
-public class DateTimeType implements ExtendedType {
+public class DateTimeType implements ExtendedType<DateTime> {
- @Override
- public String getClassName() {
- return DateTime.class.getName();
- }
+ @Override
+ public String getClassName() {
+ return DateTime.class.getName();
+ }
- @Override
- public DateTime materializeObject(ResultSet rs, int index, int type) throws Exception {
- if (rs.getTimestamp(index) != null) {
- return new DateTime(rs.getTimestamp(index).getTime());
- } else {
- return null;
- }
- }
+ @Override
+ public void setJdbcObject(PreparedStatement statement, DateTime value, int pos, int type, int scale) throws Exception {
+ if (value == null) {
+ statement.setNull(pos, type);
+ } else {
+ Timestamp ts = new Timestamp(value.getMillis());
+ statement.setTimestamp(pos, ts);
+ }
+ }
- @Override
- public DateTime materializeObject(CallableStatement rs, int index, int type) throws Exception {
- if (rs.getTimestamp(index) != null) {
- return new DateTime(rs.getTimestamp(index).getTime());
- } else {
- return null;
- }
- }
+ @Override
+ public DateTime materializeObject(ResultSet rs, int index, int type) throws Exception {
+ if (rs.getTimestamp(index) != null) {
+ return new DateTime(rs.getTimestamp(index).getTime());
+ } else {
+ return null;
+ }
+ }
- @Override
- public void setJdbcObject(PreparedStatement statement, Object value, int pos, int type, int scale) throws Exception {
+ @Override
+ public DateTime materializeObject(CallableStatement rs, int index, int type) throws Exception {
+ if (rs.getTimestamp(index) != null) {
+ return new DateTime(rs.getTimestamp(index).getTime());
+ } else {
+ return null;
+ }
+ }
- if (value == null) {
- statement.setNull(pos, type);
- } else {
- Timestamp ts = new Timestamp(getMillis(value));
- statement.setTimestamp(pos, ts);
- }
- }
+ @Override
+ public String toString(DateTime value) {
+ if (value == null) {
+ return "\'null\'";
+ }
- protected long getMillis(Object value) {
- return ((DateTime) value).getMillis();
- }
+ return '\'' + value.toString() + '\'';
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalDateTimeType.java
----------------------------------------------------------------------
diff --git a/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalDateTimeType.java b/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalDateTimeType.java
index ea7fab7..97d3900 100644
--- a/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalDateTimeType.java
+++ b/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalDateTimeType.java
@@ -19,58 +19,61 @@
package org.apache.cayenne.joda.access.types;
-import org.apache.cayenne.access.types.ExtendedType;
-import org.joda.time.LocalDateTime;
-
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.sql.Types;
+import org.apache.cayenne.access.types.ExtendedType;
+import org.joda.time.LocalDateTime;
+
/**
* Handles <code>org.joda.time.LocalDateTime</code> type mapping.
- *
+ *
* @since 4.0
*/
-public class LocalDateTimeType implements ExtendedType {
-
- @Override
- public String getClassName() {
- return LocalDateTime.class.getName();
- }
+public class LocalDateTimeType implements ExtendedType<LocalDateTime> {
- @Override
- public LocalDateTime materializeObject(ResultSet rs, int index, int type) throws Exception {
- if (rs.getTimestamp(index) != null) {
- return new LocalDateTime(rs.getTimestamp(index).getTime());
- } else {
- return null;
- }
- }
+ @Override
+ public String getClassName() {
+ return LocalDateTime.class.getName();
+ }
- @Override
- public LocalDateTime materializeObject(CallableStatement rs, int index, int type) throws Exception {
- if (type == Types.TIMESTAMP && rs.getTimestamp(index) != null) {
- return new LocalDateTime(rs.getTimestamp(index).getTime());
- } else {
- return null;
- }
- }
+ @Override
+ public void setJdbcObject(PreparedStatement statement, LocalDateTime value, int pos, int type, int scale) throws Exception {
+ if (value == null) {
+ statement.setNull(pos, type);
+ } else {
+ Timestamp ts = new Timestamp(value.toDateTime().getMillis());
+ statement.setTimestamp(pos, ts);
+ }
+ }
- @Override
- public void setJdbcObject(PreparedStatement statement, Object value, int pos, int type, int scale) throws Exception {
+ @Override
+ public LocalDateTime materializeObject(ResultSet rs, int index, int type) throws Exception {
+ if (rs.getTimestamp(index) != null) {
+ return new LocalDateTime(rs.getTimestamp(index).getTime());
+ } else {
+ return null;
+ }
+ }
- if (value == null) {
- statement.setNull(pos, type);
- } else {
- Timestamp ts = new Timestamp(getMillis(value));
- statement.setTimestamp(pos, ts);
- }
- }
+ @Override
+ public LocalDateTime materializeObject(CallableStatement rs, int index, int type) throws Exception {
+ if (type == Types.TIMESTAMP && rs.getTimestamp(index) != null) {
+ return new LocalDateTime(rs.getTimestamp(index).getTime());
+ } else {
+ return null;
+ }
+ }
- protected long getMillis(Object value) {
- return ((LocalDateTime) value).toDateTime().getMillis();
- }
+ @Override
+ public String toString(LocalDateTime value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+ return '\'' + value.toString() + '\'';
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalDateType.java
----------------------------------------------------------------------
diff --git a/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalDateType.java b/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalDateType.java
index 7a0a9a0..19f05b6 100644
--- a/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalDateType.java
+++ b/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalDateType.java
@@ -31,54 +31,60 @@ import org.joda.time.LocalDate;
/**
* Handles <code>org.joda.time.LocalDate</code> type mapping.
- *
+ *
* @since 4.0
*/
-public class LocalDateType implements ExtendedType {
+public class LocalDateType implements ExtendedType<LocalDate> {
+
+ @Override
+ public String getClassName() {
+ return LocalDate.class.getName();
+ }
- @Override
- public String getClassName() {
- return LocalDate.class.getName();
- }
+ @Override
+ public void setJdbcObject(PreparedStatement statement, LocalDate value, int pos, int type, int scale) throws Exception {
+ if (value == null) {
+ statement.setNull(pos, type);
+ } else {
+ long time = value.toDate().getTime();
- @Override
- public LocalDate materializeObject(ResultSet rs, int index, int type) throws Exception {
- if (type == Types.DATE && rs.getDate(index) != null) {
- return new LocalDate(rs.getDate(index).getTime());
- } else if (type == Types.TIMESTAMP && rs.getTimestamp(index) != null) {
- return new LocalDate(rs.getTimestamp(index).getTime());
- } else {
- return null;
- }
- }
+ if (type == Types.DATE) {
+ statement.setDate(pos, new Date(time));
+ } else {
+ statement.setTimestamp(pos, new Timestamp(time));
+ }
+ }
+ }
- @Override
- public LocalDate materializeObject(CallableStatement rs, int index, int type) throws Exception {
- if (type == Types.DATE && rs.getDate(index) != null) {
- return new LocalDate(rs.getDate(index).getTime());
- } else if (type == Types.TIMESTAMP && rs.getTimestamp(index) != null) {
- return new LocalDate(rs.getTimestamp(index).getTime());
- } else {
- return null;
- }
- }
+ @Override
+ public LocalDate materializeObject(ResultSet rs, int index, int type) throws Exception {
+ if (type == Types.DATE && rs.getDate(index) != null) {
+ return new LocalDate(rs.getDate(index).getTime());
+ } else if (type == Types.TIMESTAMP && rs.getTimestamp(index) != null) {
+ return new LocalDate(rs.getTimestamp(index).getTime());
+ } else {
+ return null;
+ }
+ }
- @Override
- public void setJdbcObject(PreparedStatement statement, Object value, int pos, int type, int scale) throws Exception {
+ @Override
+ public LocalDate materializeObject(CallableStatement rs, int index, int type) throws Exception {
+ if (type == Types.DATE && rs.getDate(index) != null) {
+ return new LocalDate(rs.getDate(index).getTime());
+ } else if (type == Types.TIMESTAMP && rs.getTimestamp(index) != null) {
+ return new LocalDate(rs.getTimestamp(index).getTime());
+ } else {
+ return null;
+ }
+ }
- if (value == null) {
- statement.setNull(pos, type);
- } else {
- if (type == Types.DATE) {
- statement.setDate(pos, new Date(getMillis(value)));
- } else {
- statement.setTimestamp(pos, new Timestamp(getMillis(value)));
- }
- }
- }
+ @Override
+ public String toString(LocalDate value) {
+ if (value == null) {
+ return "\'null\'";
+ }
- protected long getMillis(Object value) {
- return ((LocalDate) value).toDate().getTime();
- }
+ return '\'' + value.toString() + '\'';
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalTimeType.java
----------------------------------------------------------------------
diff --git a/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalTimeType.java b/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalTimeType.java
index 765c4ad..501f889 100644
--- a/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalTimeType.java
+++ b/cayenne-joda/src/main/java/org/apache/cayenne/joda/access/types/LocalTimeType.java
@@ -33,56 +33,62 @@ import org.joda.time.LocalTime;
/**
* Handles <code>org.joda.time.LocalTime</code> type mapping.
- *
+ *
* @since 4.0
*/
-public class LocalTimeType implements ExtendedType {
+public class LocalTimeType implements ExtendedType<LocalTime> {
+
+ private static final LocalDate EPOCH = new LocalDate(0, DateTimeZone.UTC);
- private static final LocalDate EPOCH = new LocalDate(0, DateTimeZone.UTC);
+ @Override
+ public String getClassName() {
+ return LocalTime.class.getName();
+ }
- @Override
- public String getClassName() {
- return LocalTime.class.getName();
- }
+ @Override
+ public void setJdbcObject(PreparedStatement statement, LocalTime value, int pos, int type, int scale) throws Exception {
- @Override
- public LocalTime materializeObject(ResultSet rs, int index, int type) throws Exception {
- if (type == Types.TIME && rs.getTime(index) != null) {
- return new LocalTime(rs.getTime(index).getTime());
- } else if (type == Types.TIMESTAMP && rs.getTimestamp(index) != null) {
- return new LocalTime(rs.getTimestamp(index).getTime());
- } else {
- return null;
- }
- }
+ if (value == null) {
+ statement.setNull(pos, type);
+ } else {
+ long millis = EPOCH.toDateTime(value).getMillis();
- @Override
- public LocalTime materializeObject(CallableStatement rs, int index, int type) throws Exception {
- if (type == Types.TIME && rs.getTime(index) != null) {
- return new LocalTime(rs.getTime(index).getTime());
- } else if (type == Types.TIMESTAMP && rs.getTimestamp(index) != null) {
- return new LocalTime(rs.getTimestamp(index).getTime());
- } else {
- return null;
- }
- }
+ if (type == Types.TIME) {
+ statement.setTime(pos, new Time(millis));
+ } else {
+ statement.setTimestamp(pos, new Timestamp(millis));
+ }
+ }
+ }
- @Override
- public void setJdbcObject(PreparedStatement statement, Object value, int pos, int type, int scale) throws Exception {
+ @Override
+ public LocalTime materializeObject(ResultSet rs, int index, int type) throws Exception {
+ if (type == Types.TIME && rs.getTime(index) != null) {
+ return new LocalTime(rs.getTime(index).getTime());
+ } else if (type == Types.TIMESTAMP && rs.getTimestamp(index) != null) {
+ return new LocalTime(rs.getTimestamp(index).getTime());
+ } else {
+ return null;
+ }
+ }
- if (value == null) {
- statement.setNull(pos, type);
- } else {
- if (type == Types.TIME) {
- statement.setTime(pos, new Time(getMillis(value)));
- } else {
- statement.setTimestamp(pos, new Timestamp(getMillis(value)));
- }
- }
- }
+ @Override
+ public LocalTime materializeObject(CallableStatement rs, int index, int type) throws Exception {
+ if (type == Types.TIME && rs.getTime(index) != null) {
+ return new LocalTime(rs.getTime(index).getTime());
+ } else if (type == Types.TIMESTAMP && rs.getTimestamp(index) != null) {
+ return new LocalTime(rs.getTimestamp(index).getTime());
+ } else {
+ return null;
+ }
+ }
- protected long getMillis(Object value) {
- return EPOCH.toDateTime((LocalTime) value).getMillis();
- }
+ @Override
+ public String toString(LocalTime value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+ return '\'' + value.toString() + '\'';
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/BigDecimalType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/BigDecimalType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/BigDecimalType.java
index eb46adf..11e9860 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/BigDecimalType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/BigDecimalType.java
@@ -26,7 +26,7 @@ import java.sql.ResultSet;
/**
* @since 3.0
*/
-public class BigDecimalType implements ExtendedType {
+public class BigDecimalType implements ExtendedType<BigDecimal> {
@Override
public String getClassName() {
@@ -34,12 +34,12 @@ public class BigDecimalType implements ExtendedType {
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public BigDecimal materializeObject(ResultSet rs, int index, int type) throws Exception {
return rs.getBigDecimal(index);
}
@Override
- public Object materializeObject(CallableStatement rs, int index, int type)
+ public BigDecimal materializeObject(CallableStatement rs, int index, int type)
throws Exception {
return rs.getBigDecimal(index);
}
@@ -47,7 +47,7 @@ public class BigDecimalType implements ExtendedType {
@Override
public void setJdbcObject(
PreparedStatement statement,
- Object value,
+ BigDecimal value,
int pos,
int type,
int scale) throws Exception {
@@ -56,8 +56,16 @@ public class BigDecimalType implements ExtendedType {
statement.setNull(pos, type);
}
else {
- statement.setBigDecimal(pos, (BigDecimal) value);
+ statement.setBigDecimal(pos, value);
}
}
+ @Override
+ public String toString(BigDecimal value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return value.toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/BigIntegerType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/BigIntegerType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/BigIntegerType.java
index 3c5c645..a3d1752 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/BigIntegerType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/BigIntegerType.java
@@ -28,7 +28,7 @@ import org.apache.cayenne.dba.TypesMapping;
/**
* @since 3.0
*/
-public class BigIntegerType implements ExtendedType {
+public class BigIntegerType implements ExtendedType<BigInteger> {
@Override
public String getClassName() {
@@ -36,7 +36,7 @@ public class BigIntegerType implements ExtendedType {
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public BigInteger materializeObject(ResultSet rs, int index, int type) throws Exception {
Object object = rs.getObject(index);
if (object == null) {
return null;
@@ -46,7 +46,7 @@ public class BigIntegerType implements ExtendedType {
}
@Override
- public Object materializeObject(CallableStatement rs, int index, int type)
+ public BigInteger materializeObject(CallableStatement rs, int index, int type)
throws Exception {
Object object = rs.getObject(index);
if (object == null) {
@@ -59,7 +59,7 @@ public class BigIntegerType implements ExtendedType {
@Override
public void setJdbcObject(
PreparedStatement statement,
- Object value,
+ BigInteger value,
int pos,
int type,
int precision) throws Exception {
@@ -76,4 +76,13 @@ public class BigIntegerType implements ExtendedType {
+ TypesMapping.getSqlNameByType(type));
}
}
+
+ @Override
+ public String toString(BigInteger value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return value.toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/BooleanType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/BooleanType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/BooleanType.java
index a14dcd2..be0d597 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/BooleanType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/BooleanType.java
@@ -32,7 +32,7 @@ import java.sql.Types;
*
* @since 1.2
*/
-public class BooleanType implements ExtendedType {
+public class BooleanType implements ExtendedType<Boolean> {
@Override
public String getClassName() {
@@ -42,7 +42,7 @@ public class BooleanType implements ExtendedType {
@Override
public void setJdbcObject(
PreparedStatement st,
- Object val,
+ Boolean val,
int pos,
int type,
int precision) throws Exception {
@@ -60,15 +60,24 @@ public class BooleanType implements ExtendedType {
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public Boolean materializeObject(ResultSet rs, int index, int type) throws Exception {
boolean b = rs.getBoolean(index);
return (rs.wasNull()) ? null : b ? Boolean.TRUE : Boolean.FALSE;
}
@Override
- public Object materializeObject(CallableStatement st, int index, int type)
+ public Boolean materializeObject(CallableStatement st, int index, int type)
throws Exception {
boolean b = st.getBoolean(index);
return (st.wasNull()) ? null : b ? Boolean.TRUE : Boolean.FALSE;
}
+
+ @Override
+ public String toString(Boolean value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return '\'' + value.toString() + '\'';
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteArrayType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteArrayType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteArrayType.java
index 8b42a65..3ad6898 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteArrayType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteArrayType.java
@@ -30,13 +30,14 @@ import java.sql.SQLException;
import java.sql.Types;
import org.apache.cayenne.CayenneException;
+import org.apache.cayenne.util.IDUtil;
import org.apache.cayenne.util.MemoryBlob;
/**
* Handles <code>byte[]</code>, mapping it as either of JDBC types - BLOB or
* (VAR)BINARY. Can be configured to trim trailing zero bytes.
*/
-public class ByteArrayType implements ExtendedType {
+public class ByteArrayType implements ExtendedType<byte[]> {
private static final int BUF_SIZE = 8 * 1024;
@@ -76,7 +77,7 @@ public class ByteArrayType implements ExtendedType {
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public byte[] materializeObject(ResultSet rs, int index, int type) throws Exception {
byte[] bytes = null;
@@ -95,7 +96,7 @@ public class ByteArrayType implements ExtendedType {
}
@Override
- public Object materializeObject(CallableStatement cs, int index, int type) throws Exception {
+ public byte[] materializeObject(CallableStatement cs, int index, int type) throws Exception {
byte[] bytes = null;
@@ -118,15 +119,15 @@ public class ByteArrayType implements ExtendedType {
}
@Override
- public void setJdbcObject(PreparedStatement st, Object val, int pos, int type, int scale) throws Exception {
+ public void setJdbcObject(PreparedStatement st, byte[] val, int pos, int type, int scale) throws Exception {
// if this is a BLOB column, set the value as "bytes"
// instead. This should work with most drivers
if (type == Types.BLOB) {
if (isUsingBlobs()) {
- st.setBlob(pos, writeBlob((byte[]) val));
+ st.setBlob(pos, writeBlob(val));
} else {
- st.setBytes(pos, (byte[]) val);
+ st.setBytes(pos, val);
}
} else {
if (scale != -1) {
@@ -137,6 +138,17 @@ public class ByteArrayType implements ExtendedType {
}
}
+ @Override
+ public String toString(byte[] value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ StringBuilder buffer = new StringBuilder();
+ IDUtil.appendFormattedBytes(buffer, value);
+ return buffer.toString();
+ }
+
protected Blob writeBlob(byte[] bytes) {
// TODO: should we use Connection.createBlob() instead? (Like Oracle
// ByteArrayType does)
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteOrCharArrayFactory.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteOrCharArrayFactory.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteOrCharArrayFactory.java
index 11ae4a6..8db28ce 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteOrCharArrayFactory.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteOrCharArrayFactory.java
@@ -18,6 +18,12 @@
****************************************************************/
package org.apache.cayenne.access.types;
+import java.lang.reflect.Array;
+
+import org.apache.cayenne.util.IDUtil;
+
+import static org.apache.cayenne.log.CommonsJdbcEventLogger.TRIM_VALUES_THRESHOLD;
+
/**
* A factory that dynamically creates ExtendedTypes for Character, Character[], Byte[] and
* char[] based on adapter configured types for String and byte[].
@@ -40,38 +46,34 @@ class ByteOrCharArrayFactory implements ExtendedTypeFactory {
if (Character.class.isAssignableFrom(elementType)) {
// can't use "getRegisteredType" as it causes infinite recursion
- ExtendedType stringType = map
- .getExplictlyRegisteredType("java.lang.String");
-
+ ExtendedType<String> stringType = map.getExplictlyRegisteredType("java.lang.String");
return new CharacterArrayType(stringType);
}
else if (Character.TYPE.isAssignableFrom(elementType)) {
// can't use "getRegisteredType" as it causes infinite recursion
- ExtendedType stringType = map
- .getExplictlyRegisteredType("java.lang.String");
-
+ ExtendedType<String> stringType = map.getExplictlyRegisteredType("java.lang.String");
return new CharArrayType(stringType);
}
else if (Byte.class.isAssignableFrom(elementType)) {
// can't use "getRegisteredType" as it causes infinite recursion
- ExtendedType bytesType = map.getExplictlyRegisteredType("byte[]");
+ ExtendedType<byte[]> bytesType = map.getExplictlyRegisteredType("byte[]");
return new ByteWrapperArrayType(bytesType);
}
}
else if (Character.class.isAssignableFrom(objectClass)) {
// can't use "getRegisteredType" as it causes infinite recursion
- ExtendedType stringType = map.getExplictlyRegisteredType("java.lang.String");
+ ExtendedType<String> stringType = map.getExplictlyRegisteredType("java.lang.String");
return new CharacterType(stringType);
}
return null;
}
- final class CharacterType extends ExtendedTypeDecorator {
+ final class CharacterType extends ExtendedTypeDecorator<Character, String> {
- CharacterType(ExtendedType stringType) {
+ CharacterType(ExtendedType<String> stringType) {
super(stringType);
}
@@ -81,26 +83,25 @@ class ByteOrCharArrayFactory implements ExtendedTypeFactory {
}
@Override
- Object fromJavaObject(Object object) {
+ String fromJavaObject(Character object) {
return object != null
- ? String.valueOf(((Character) object).charValue())
+ ? String.valueOf(object.charValue())
: null;
}
@Override
- Object toJavaObject(Object object) {
- if (object == null) {
+ Character toJavaObject(String string) {
+ if (string == null) {
return null;
}
- String string = object.toString();
- return (string.length() > 0) ? Character.valueOf(string.charAt(0)) : null;
+ return (string.length() > 0) ? string.charAt(0) : null;
}
}
- final class CharArrayType extends ExtendedTypeDecorator {
+ final class CharArrayType extends ExtendedTypeDecorator<char[], String> {
- CharArrayType(ExtendedType stringType) {
+ CharArrayType(ExtendedType<String> stringType) {
super(stringType);
}
@@ -110,19 +111,50 @@ class ByteOrCharArrayFactory implements ExtendedTypeFactory {
}
@Override
- Object fromJavaObject(Object object) {
- return object != null ? new String((char[]) object) : null;
+ String fromJavaObject(char[] object) {
+ return object != null ? new String(object) : null;
}
@Override
- Object toJavaObject(Object object) {
- return object != null ? ((String) object).toCharArray() : null;
+ char[] toJavaObject(String object) {
+ return object != null ? object.toCharArray() : null;
+ }
+
+ @Override
+ public String toString(char[] value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ StringBuilder buffer = new StringBuilder();
+ buffer.append("< ");
+
+ int len = Array.getLength(value);
+ boolean trimming = false;
+ if (len > TRIM_VALUES_THRESHOLD) {
+ len = TRIM_VALUES_THRESHOLD;
+ trimming = true;
+ }
+
+ for (int i = 0; i < len; i++) {
+ if (i > 0) {
+ buffer.append(",");
+ }
+ buffer.append(Array.get(value, i));
+ }
+
+ if (trimming) {
+ buffer.append("...");
+ }
+
+ buffer.append('>');
+ return buffer.toString();
}
}
- final class CharacterArrayType extends ExtendedTypeDecorator {
+ final class CharacterArrayType extends ExtendedTypeDecorator<Character[], String> {
- CharacterArrayType(ExtendedType stringType) {
+ CharacterArrayType(ExtendedType<String> stringType) {
super(stringType);
}
@@ -132,39 +164,68 @@ class ByteOrCharArrayFactory implements ExtendedTypeFactory {
}
@Override
- Object fromJavaObject(Object object) {
+ String fromJavaObject(Character[] object) {
if (object == null) {
return null;
}
- Character[] chars = (Character[]) object;
- StringBuilder buffer = new StringBuilder(chars.length);
- for (Character aChar : chars) {
- buffer.append(aChar != null ? aChar.charValue() : 0);
+ StringBuilder buffer = new StringBuilder(object.length);
+ for (Character aChar : object) {
+ buffer.append(aChar != null ? aChar : 0);
}
return buffer.toString();
}
@Override
- Object toJavaObject(Object object) {
+ Character[] toJavaObject(String object) {
if (object == null) {
return null;
}
- String string = object.toString();
- Character[] chars = new Character[string.length()];
- for (int i = 0; i < string.length(); i++) {
- chars[i] = Character.valueOf(string.charAt(i));
+ Character[] chars = new Character[object.length()];
+ for (int i = 0; i < object.length(); i++) {
+ chars[i] = object.charAt(i);
}
return chars;
}
+
+ @Override
+ public String toString(Character[] value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ StringBuilder buffer = new StringBuilder();
+ buffer.append("< ");
+
+ int len = Array.getLength(value);
+ boolean trimming = false;
+ if (len > TRIM_VALUES_THRESHOLD) {
+ len = TRIM_VALUES_THRESHOLD;
+ trimming = true;
+ }
+
+ for (int i = 0; i < len; i++) {
+ if (i > 0) {
+ buffer.append(",");
+ }
+ buffer.append(Array.get(value, i));
+ }
+
+ if (trimming) {
+ buffer.append("...");
+ }
+
+ buffer.append('>');
+ return buffer.toString();
+ }
}
- final class ByteWrapperArrayType extends ExtendedTypeDecorator {
+ final class ByteWrapperArrayType extends ExtendedTypeDecorator<Byte[], byte[]> {
- ByteWrapperArrayType(ExtendedType byteArrayType) {
+ ByteWrapperArrayType(ExtendedType<byte[]> byteArrayType) {
super(byteArrayType);
}
@@ -174,34 +235,62 @@ class ByteOrCharArrayFactory implements ExtendedTypeFactory {
}
@Override
- Object fromJavaObject(Object object) {
- if (object == null) {
+ byte[] fromJavaObject(Byte[] bytes) {
+ if (bytes == null) {
return null;
}
- Byte[] bytes = (Byte[]) object;
byte[] buffer = new byte[bytes.length];
for (int i = 0; i < bytes.length; i++) {
- buffer[i] = bytes[i] != null ? bytes[i].byteValue() : 0;
+ buffer[i] = bytes[i] != null ? bytes[i] : 0;
}
return buffer;
}
@Override
- Object toJavaObject(Object object) {
- if (object == null) {
+ Byte[] toJavaObject(byte[] bytes) {
+ if (bytes == null) {
return null;
}
- byte[] bytes = (byte[]) object;
Byte[] byteWrappers = new Byte[bytes.length];
-
for (int i = 0; i < bytes.length; i++) {
- byteWrappers[i] = Byte.valueOf(bytes[i]);
+ byteWrappers[i] = bytes[i];
}
return byteWrappers;
}
+
+ @Override
+ public String toString(Byte[] value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ StringBuilder buffer = new StringBuilder();
+ buffer.append("< ");
+
+ int len = value.length;
+ boolean trimming = false;
+ if (len > TRIM_VALUES_THRESHOLD) {
+ len = TRIM_VALUES_THRESHOLD;
+ trimming = true;
+ }
+
+ for (int i = 0; i < len; i++) {
+ if (i > 0) {
+ buffer.append(",");
+ }
+ IDUtil.appendFormattedByte(buffer, value[i]);
+ }
+
+ if (trimming) {
+ buffer.append("...");
+ }
+
+ buffer.append('>');
+ return buffer.toString();
+ }
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteType.java
index 438707f..c11191d 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ByteType.java
@@ -23,15 +23,17 @@ import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
+import org.apache.cayenne.util.IDUtil;
+
/**
* Handles <code>java.lang.Byte</code> type mapping. Can be configured to recast
* java.lang.Byte to java.lang.Integer when binding values to PreparedStatement. This is a
* workaround for bugs in certain drivers. Drivers that are proven to have issues with
* byte values are Sybase and Oracle (Mac OS X only).
- *
+ *
* @since 1.0.3
*/
-public class ByteType implements ExtendedType {
+public class ByteType implements ExtendedType<Byte> {
protected boolean widenBytes;
@@ -45,13 +47,13 @@ public class ByteType implements ExtendedType {
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public Byte materializeObject(ResultSet rs, int index, int type) throws Exception {
byte b = rs.getByte(index);
return (rs.wasNull()) ? null : b;
}
@Override
- public Object materializeObject(CallableStatement st, int index, int type)
+ public Byte materializeObject(CallableStatement st, int index, int type)
throws Exception {
byte b = st.getByte(index);
return (st.wasNull()) ? null : b;
@@ -60,24 +62,33 @@ public class ByteType implements ExtendedType {
@Override
public void setJdbcObject(
PreparedStatement statement,
- Object value,
+ Byte value,
int pos,
int type,
int precision) throws Exception {
if (value == null) {
statement.setNull(pos, type);
- }
- else {
+ } else {
- Byte b = (Byte) value;
+ Byte b = value;
if (widenBytes) {
statement.setInt(pos, b.intValue());
- }
- else {
+ } else {
statement.setByte(pos, b.byteValue());
}
}
}
+ @Override
+ public String toString(Byte value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ StringBuilder buffer = new StringBuilder();
+ IDUtil.appendFormattedByte(buffer, value);
+
+ return buffer.toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/CalendarType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/CalendarType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/CalendarType.java
index 811e9cc..acc53b2 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/CalendarType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/CalendarType.java
@@ -34,7 +34,7 @@ import org.apache.cayenne.dba.TypesMapping;
*
* @since 3.0
*/
-public class CalendarType<T extends Calendar> implements ExtendedType {
+public class CalendarType<T extends Calendar> implements ExtendedType<Calendar> {
protected Class<T> calendarClass;
@@ -57,7 +57,7 @@ public class CalendarType<T extends Calendar> implements ExtendedType {
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public Calendar materializeObject(ResultSet rs, int index, int type) throws Exception {
Date val = null;
@@ -98,7 +98,7 @@ public class CalendarType<T extends Calendar> implements ExtendedType {
}
@Override
- public Object materializeObject(CallableStatement rs, int index, int type)
+ public Calendar materializeObject(CallableStatement rs, int index, int type)
throws Exception {
Date val = null;
@@ -141,7 +141,7 @@ public class CalendarType<T extends Calendar> implements ExtendedType {
@Override
public void setJdbcObject(
PreparedStatement statement,
- Object value,
+ Calendar value,
int pos,
int type,
int precision) throws Exception {
@@ -149,26 +149,18 @@ public class CalendarType<T extends Calendar> implements ExtendedType {
if (value == null) {
statement.setNull(pos, type);
}
- else if (value instanceof Calendar) {
-
- Calendar calendar = (Calendar) value;
- statement.setObject(pos, convertToJdbcObject(calendar, type));
- }
else {
- throw new IllegalArgumentException("Expected java.util.Calendar, got "
- + value.getClass().getName());
+ statement.setObject(pos, convertToJdbcObject(value, type));
}
}
protected Object convertToJdbcObject(Calendar value, int type) throws Exception {
- Calendar calendar = value;
-
if (type == Types.DATE)
- return new java.sql.Date(calendar.getTimeInMillis());
+ return new java.sql.Date(value.getTimeInMillis());
else if (type == Types.TIME)
- return new java.sql.Time(calendar.getTimeInMillis());
+ return new java.sql.Time(value.getTimeInMillis());
else if (type == Types.TIMESTAMP)
- return new java.sql.Timestamp(calendar.getTimeInMillis());
+ return new java.sql.Timestamp(value.getTimeInMillis());
else
throw new IllegalArgumentException(
"Only DATE, TIME or TIMESTAMP can be mapped as '"
@@ -177,4 +169,13 @@ public class CalendarType<T extends Calendar> implements ExtendedType {
+ TypesMapping.getSqlNameByType(type));
}
+ @Override
+ public String toString(Calendar value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return value.getClass().getName() + '(' + new java.sql.Timestamp(value.getTimeInMillis()) + ')';
+ }
+
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/CharType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/CharType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/CharType.java
index 9f6f990..5da2bae 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/CharType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/CharType.java
@@ -19,8 +19,6 @@
package org.apache.cayenne.access.types;
-import org.apache.cayenne.CayenneException;
-
import java.io.IOException;
import java.io.Reader;
import java.io.StringWriter;
@@ -31,13 +29,16 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
+import org.apache.cayenne.CayenneException;
+
/**
* Handles <code>java.lang.String</code>, mapping it as either of JDBC types -
* CLOB or (VAR)CHAR. Can be configured to trim trailing spaces.
*/
-public class CharType implements ExtendedType {
+public class CharType implements ExtendedType<String> {
private static final int BUF_SIZE = 8 * 1024;
+ private static final int TRIM_VALUES_THRESHOLD = 30;
protected boolean trimmingChars;
protected boolean usingClobs;
@@ -57,7 +58,7 @@ public class CharType implements ExtendedType {
/** Return trimmed string. */
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public String materializeObject(ResultSet rs, int index, int type) throws Exception {
if (type == Types.CLOB || type == Types.NCLOB) {
return isUsingClobs() ? readClob(rs.getClob(index)) : readCharStream(rs, index);
@@ -67,7 +68,7 @@ public class CharType implements ExtendedType {
}
@Override
- public Object materializeObject(CallableStatement cs, int index, int type) throws Exception {
+ public String materializeObject(CallableStatement cs, int index, int type) throws Exception {
if (type == Types.CLOB || type == Types.NCLOB) {
if (!isUsingClobs()) {
@@ -80,7 +81,7 @@ public class CharType implements ExtendedType {
return handleString(cs.getString(index), type);
}
- private Object handleString(String val, int type) throws SQLException {
+ private String handleString(String val, int type) throws SQLException {
// trim CHAR type
if (val != null && (type == Types.CHAR || type == Types.NCHAR) && isTrimmingChars()) {
return rtrim(val);
@@ -100,12 +101,12 @@ public class CharType implements ExtendedType {
}
@Override
- public void setJdbcObject(PreparedStatement st, Object value, int pos, int type, int scale) throws Exception {
+ public void setJdbcObject(PreparedStatement st, String value, int pos, int type, int scale) throws Exception {
// if this is a CLOB column, set the value as "String"
// instead. This should work with most drivers
if (type == Types.CLOB || type == Types.NCLOB) {
- st.setString(pos, (String) value);
+ st.setString(pos, value);
} else if (scale != -1) {
st.setObject(pos, value, type, scale);
} else {
@@ -113,6 +114,37 @@ public class CharType implements ExtendedType {
}
}
+ @Override
+ public String toString(String value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ StringBuilder buffer = new StringBuilder();
+
+ buffer.append('\'');
+ // lets escape quotes
+ String literal = value;
+ if (literal.length() > TRIM_VALUES_THRESHOLD) {
+ literal = literal.substring(0, TRIM_VALUES_THRESHOLD) + "...";
+ }
+
+ int curPos = 0;
+ int endPos = 0;
+
+ while ((endPos = literal.indexOf('\'', curPos)) >= 0) {
+ buffer.append(literal.substring(curPos, endPos + 1)).append('\'');
+ curPos = endPos + 1;
+ }
+
+ if (curPos < literal.length())
+ buffer.append(literal.substring(curPos));
+
+ buffer.append('\'');
+
+ return buffer.toString();
+ }
+
protected String readClob(Clob clob) throws IOException, SQLException {
if (clob == null) {
return null;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/DateType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/DateType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/DateType.java
index 853efba..0e158fc 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/DateType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/DateType.java
@@ -26,7 +26,7 @@ import java.sql.ResultSet;
/**
* @since 3.0
*/
-public class DateType implements ExtendedType {
+public class DateType implements ExtendedType<Date> {
@Override
public String getClassName() {
@@ -34,12 +34,12 @@ public class DateType implements ExtendedType {
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public Date materializeObject(ResultSet rs, int index, int type) throws Exception {
return rs.getDate(index);
}
@Override
- public Object materializeObject(CallableStatement rs, int index, int type)
+ public Date materializeObject(CallableStatement rs, int index, int type)
throws Exception {
return rs.getDate(index);
}
@@ -47,7 +47,7 @@ public class DateType implements ExtendedType {
@Override
public void setJdbcObject(
PreparedStatement statement,
- Object value,
+ Date value,
int pos,
int type,
int scale) throws Exception {
@@ -56,8 +56,16 @@ public class DateType implements ExtendedType {
statement.setNull(pos, type);
}
else {
- statement.setDate(pos, (Date) value);
+ statement.setDate(pos, value);
}
}
+ @Override
+ public String toString(Date value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return '\'' + value.toString() + '\'';
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/DoubleType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/DoubleType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/DoubleType.java
index 5464e0f..66186c6 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/DoubleType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/DoubleType.java
@@ -25,7 +25,7 @@ import java.sql.ResultSet;
/**
* @since 3.0
*/
-public class DoubleType implements ExtendedType {
+public class DoubleType implements ExtendedType<Double> {
@Override
public String getClassName() {
@@ -33,13 +33,13 @@ public class DoubleType implements ExtendedType {
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public Double materializeObject(ResultSet rs, int index, int type) throws Exception {
double d = rs.getDouble(index);
return rs.wasNull() ? null : d;
}
@Override
- public Object materializeObject(CallableStatement rs, int index, int type)
+ public Double materializeObject(CallableStatement rs, int index, int type)
throws Exception {
double d = rs.getDouble(index);
return rs.wasNull() ? null : d;
@@ -48,7 +48,7 @@ public class DoubleType implements ExtendedType {
@Override
public void setJdbcObject(
PreparedStatement statement,
- Object value,
+ Double value,
int pos,
int type,
int scale) throws Exception {
@@ -57,7 +57,16 @@ public class DoubleType implements ExtendedType {
statement.setNull(pos, type);
}
else {
- statement.setDouble(pos, ((Number) value).doubleValue());
+ statement.setDouble(pos, value);
}
}
+
+ @Override
+ public String toString(Double value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return value.toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/EnumType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/EnumType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/EnumType.java
index 1261a26..e1af1db 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/EnumType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/EnumType.java
@@ -24,6 +24,7 @@ import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
+import org.apache.cayenne.ExtendedEnumeration;
import org.apache.cayenne.dba.TypesMapping;
/**
@@ -36,10 +37,10 @@ import org.apache.cayenne.dba.TypesMapping;
*
* @since 1.2
*/
-public class EnumType<T extends Enum<T>> implements ExtendedType {
+public class EnumType<T extends Enum<T>> implements ExtendedType<T> {
protected Class<T> enumClass;
- protected Object[] values;
+ protected T[] values;
protected String canonicalName;
public EnumType(Class<T> enumClass) {
@@ -52,7 +53,7 @@ public class EnumType<T extends Enum<T>> implements ExtendedType {
try {
Method m = enumClass.getMethod("values");
- this.values = (Object[]) m.invoke(null);
+ this.values = (T[]) m.invoke(null);
}
catch (Exception e) {
throw new IllegalArgumentException("Class "
@@ -69,20 +70,17 @@ public class EnumType<T extends Enum<T>> implements ExtendedType {
@Override
public void setJdbcObject(
PreparedStatement statement,
- Object value,
+ T value,
int pos,
int type,
int precision) throws Exception {
- if (value instanceof Enum<?>) {
-
- Enum<?> e = (Enum<?>) value;
-
+ if (value != null) {
if (TypesMapping.isNumeric(type)) {
- statement.setInt(pos, e.ordinal());
+ statement.setInt(pos, value.ordinal());
}
else {
- statement.setString(pos, e.name());
+ statement.setString(pos, value.name());
}
}
else {
@@ -91,7 +89,7 @@ public class EnumType<T extends Enum<T>> implements ExtendedType {
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public T materializeObject(ResultSet rs, int index, int type) throws Exception {
if (TypesMapping.isNumeric(type)) {
int i = rs.getInt(index);
return (rs.wasNull() || index < 0) ? null : values[i];
@@ -103,9 +101,8 @@ public class EnumType<T extends Enum<T>> implements ExtendedType {
}
@Override
- public Object materializeObject(CallableStatement rs, int index, int type)
+ public T materializeObject(CallableStatement rs, int index, int type)
throws Exception {
-
if (TypesMapping.isNumeric(type)) {
int i = rs.getInt(index);
return (rs.wasNull() || index < 0) ? null : values[i];
@@ -115,4 +112,28 @@ public class EnumType<T extends Enum<T>> implements ExtendedType {
return string != null ? Enum.valueOf(enumClass, string) : null;
}
}
+
+ @Override
+ public String toString(T value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ StringBuilder buffer = new StringBuilder();
+ // buffer.append(object.getClass().getName()).append(".");
+ buffer.append(value.name()).append("=");
+ if (value instanceof ExtendedEnumeration) {
+ Object dbValue = ((ExtendedEnumeration) value).getDatabaseValue();
+ if (dbValue instanceof String)
+ buffer.append("'");
+ buffer.append(value);
+ if (dbValue instanceof String)
+ buffer.append("'");
+ } else {
+ buffer.append((value).ordinal());
+ // FIXME -- this isn't quite right
+ }
+
+ return buffer.toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedEnumType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedEnumType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedEnumType.java
index b37e07d..50dc48c 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedEnumType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedEnumType.java
@@ -38,10 +38,10 @@ import java.util.Map;
*
* @since 3.0
*/
-public class ExtendedEnumType<T extends Enum<T>> implements ExtendedType {
+public class ExtendedEnumType<T extends Enum<T>> implements ExtendedType<T> {
private Class<T> enumerationClass = null;
- private Object[] values = null;
+ private T[] values = null;
// Contains a mapping of database values (Integer or String) and the
// Enum for that value. This is to facilitate mapping database values
@@ -57,10 +57,10 @@ public class ExtendedEnumType<T extends Enum<T>> implements ExtendedType {
try {
Method m = enumerationClass.getMethod("values");
- values = (Object[]) m.invoke(null);
+ values = (T[]) m.invoke(null);
for (int i = 0; i < values.length; i++)
- register((Enum<T>) values[i], ((ExtendedEnumeration) values[i])
+ register(values[i], ((ExtendedEnumeration) values[i])
.getDatabaseValue());
}
@@ -77,7 +77,7 @@ public class ExtendedEnumType<T extends Enum<T>> implements ExtendedType {
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public T materializeObject(ResultSet rs, int index, int type) throws Exception {
if (TypesMapping.isNumeric(type)) {
int i = rs.getInt(index);
return (rs.wasNull() || index < 0) ? null : lookup(i);
@@ -89,7 +89,7 @@ public class ExtendedEnumType<T extends Enum<T>> implements ExtendedType {
}
@Override
- public Object materializeObject(CallableStatement rs, int index, int type)
+ public T materializeObject(CallableStatement rs, int index, int type)
throws Exception {
if (TypesMapping.isNumeric(type)) {
int i = rs.getInt(index);
@@ -104,7 +104,7 @@ public class ExtendedEnumType<T extends Enum<T>> implements ExtendedType {
@Override
public void setJdbcObject(
PreparedStatement statement,
- Object value,
+ T value,
int pos,
int type,
int precision) throws Exception {
@@ -138,8 +138,8 @@ public class ExtendedEnumType<T extends Enum<T>> implements ExtendedType {
/**
* Lookup the giving database value and return the matching enum.
*/
- private Enum<T> lookup(Object databaseValue) {
- if (enumerationMappings.containsKey(databaseValue) == false) {
+ private T lookup(Object databaseValue) {
+ if (!enumerationMappings.containsKey(databaseValue)) {
// All integers enums are mapped. Not necessarily all strings.
if (databaseValue instanceof Integer)
throw new CayenneRuntimeException("Missing enumeration mapping for "
@@ -153,7 +153,31 @@ public class ExtendedEnumType<T extends Enum<T>> implements ExtendedType {
}
// Mapped value->enum exists, return it.
- return enumerationMappings.get(databaseValue);
+ return (T) enumerationMappings.get(databaseValue);
+ }
+
+ @Override
+ public String toString(T value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ StringBuilder buffer = new StringBuilder();
+ // buffer.append(object.getClass().getName()).append(".");
+ buffer.append(value.name()).append("=");
+ if (value instanceof ExtendedEnumeration) {
+ Object dbValue = ((ExtendedEnumeration) value).getDatabaseValue();
+ if (dbValue instanceof String)
+ buffer.append("'");
+ buffer.append(value);
+ if (dbValue instanceof String)
+ buffer.append("'");
+ } else {
+ buffer.append((value).ordinal());
+ // FIXME -- this isn't quite right
+ }
+
+ return buffer.toString();
}
/**
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedType.java
index dd025bf..0836290 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedType.java
@@ -27,7 +27,7 @@ import java.sql.ResultSet;
* Defines methods to read Java objects from JDBC ResultSets and write as parameters of
* PreparedStatements.
*/
-public interface ExtendedType {
+public interface ExtendedType<T> {
/**
* Returns a full name of Java class that this ExtendedType supports.
@@ -39,7 +39,7 @@ public interface ExtendedType {
*/
void setJdbcObject(
PreparedStatement statement,
- Object value,
+ T value,
int pos,
int type,
int scale) throws Exception;
@@ -51,14 +51,20 @@ public interface ExtendedType {
* @throws Exception if read error occurred, or an object can't be converted to a
* target Java class.
*/
- Object materializeObject(ResultSet rs, int index, int type) throws Exception;
+ T materializeObject(ResultSet rs, int index, int type) throws Exception;
/**
* Reads an object from a stored procedure OUT parameter, converting it to class
* returned by 'getClassName' method.
*
- * @throws Exception if read error ocurred, or an object can't be converted to a
+ * @throws Exception if read error occurred, or an object can't be converted to a
* target Java class.
*/
- Object materializeObject(CallableStatement rs, int index, int type) throws Exception;
+ T materializeObject(CallableStatement rs, int index, int type) throws Exception;
+
+ /**
+ *
+ */
+ String toString(T value);
+
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedTypeDecorator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedTypeDecorator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedTypeDecorator.java
index a9c7f52..970aaa1 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedTypeDecorator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedTypeDecorator.java
@@ -27,39 +27,48 @@ import java.sql.ResultSet;
*
* @since 3.0
*/
-abstract class ExtendedTypeDecorator implements ExtendedType {
+abstract class ExtendedTypeDecorator<T, E> implements ExtendedType<T> {
- private ExtendedType decorated;
+ private ExtendedType<E> decorated;
- ExtendedTypeDecorator(ExtendedType decorated) {
+ ExtendedTypeDecorator(ExtendedType<E> decorated) {
this.decorated = decorated;
}
- abstract Object toJavaObject(Object object);
+ abstract T toJavaObject(E object);
- abstract Object fromJavaObject(Object object);
+ abstract E fromJavaObject(T object);
@Override
public abstract String getClassName();
@Override
- public Object materializeObject(CallableStatement rs, int index, int type)
+ public T materializeObject(CallableStatement rs, int index, int type)
throws Exception {
return toJavaObject(decorated.materializeObject(rs, index, type));
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public T materializeObject(ResultSet rs, int index, int type) throws Exception {
return toJavaObject(decorated.materializeObject(rs, index, type));
}
@Override
public void setJdbcObject(
PreparedStatement statement,
- Object value,
+ T value,
int pos,
int type,
int precision) throws Exception {
decorated.setJdbcObject(statement, fromJavaObject(value), pos, type, precision);
}
+
+ @Override
+ public String toString(T value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return value.toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/FloatType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/FloatType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/FloatType.java
index 8a63db4..822e9df 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/FloatType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/FloatType.java
@@ -25,7 +25,7 @@ import java.sql.ResultSet;
/**
* @since 3.0
*/
-public class FloatType implements ExtendedType {
+public class FloatType implements ExtendedType<Float> {
@Override
public String getClassName() {
@@ -33,13 +33,13 @@ public class FloatType implements ExtendedType {
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public Float materializeObject(ResultSet rs, int index, int type) throws Exception {
float f = rs.getFloat(index);
return rs.wasNull() ? null : f;
}
@Override
- public Object materializeObject(CallableStatement rs, int index, int type)
+ public Float materializeObject(CallableStatement rs, int index, int type)
throws Exception {
float f = rs.getFloat(index);
return rs.wasNull() ? null : f;
@@ -48,7 +48,7 @@ public class FloatType implements ExtendedType {
@Override
public void setJdbcObject(
PreparedStatement statement,
- Object value,
+ Float value,
int pos,
int type,
int scale) throws Exception {
@@ -57,8 +57,16 @@ public class FloatType implements ExtendedType {
statement.setNull(pos, type);
}
else {
- statement.setFloat(pos, ((Number) value).floatValue());
+ statement.setFloat(pos, value);
}
}
+ @Override
+ public String toString(Float value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return value.toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/IntegerType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/IntegerType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/IntegerType.java
index 8375562..64ee766 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/IntegerType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/IntegerType.java
@@ -25,7 +25,7 @@ import java.sql.ResultSet;
/**
* @since 3.0
*/
-public class IntegerType implements ExtendedType {
+public class IntegerType implements ExtendedType<Integer> {
@Override
public String getClassName() {
@@ -33,13 +33,13 @@ public class IntegerType implements ExtendedType {
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public Integer materializeObject(ResultSet rs, int index, int type) throws Exception {
int value = rs.getInt(index);
return (rs.wasNull()) ? null : value;
}
@Override
- public Object materializeObject(CallableStatement rs, int index, int type)
+ public Integer materializeObject(CallableStatement rs, int index, int type)
throws Exception {
int value = rs.getInt(index);
return (rs.wasNull()) ? null : value;
@@ -48,7 +48,7 @@ public class IntegerType implements ExtendedType {
@Override
public void setJdbcObject(
PreparedStatement statement,
- Object value,
+ Integer value,
int pos,
int type,
int scale) throws Exception {
@@ -57,8 +57,16 @@ public class IntegerType implements ExtendedType {
statement.setNull(pos, type);
}
else {
- statement.setInt(pos, ((Number) value).intValue());
+ statement.setInt(pos, value);
}
}
+ @Override
+ public String toString(Integer value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return value.toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/LongType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/LongType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/LongType.java
index 7287d66..decab14 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/LongType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/LongType.java
@@ -25,7 +25,7 @@ import java.sql.ResultSet;
/**
* @since 3.0
*/
-public class LongType implements ExtendedType {
+public class LongType implements ExtendedType<Long> {
@Override
public String getClassName() {
@@ -33,13 +33,13 @@ public class LongType implements ExtendedType {
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public Long materializeObject(ResultSet rs, int index, int type) throws Exception {
long value = rs.getLong(index);
return (rs.wasNull()) ? null : value;
}
@Override
- public Object materializeObject(CallableStatement rs, int index, int type)
+ public Long materializeObject(CallableStatement rs, int index, int type)
throws Exception {
long value = rs.getLong(index);
return (rs.wasNull()) ? null : value;
@@ -48,7 +48,7 @@ public class LongType implements ExtendedType {
@Override
public void setJdbcObject(
PreparedStatement statement,
- Object value,
+ Long value,
int pos,
int type,
int scale) throws Exception {
@@ -57,8 +57,16 @@ public class LongType implements ExtendedType {
statement.setNull(pos, type);
}
else {
- statement.setLong(pos, ((Number) value).longValue());
+ statement.setLong(pos, value);
}
}
+ @Override
+ public String toString(Long value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return value.toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/ObjectType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ObjectType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ObjectType.java
index c14c340..6fb2d3e 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ObjectType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ObjectType.java
@@ -27,7 +27,7 @@ import java.sql.ResultSet;
*
* @since 3.0
*/
-public class ObjectType implements ExtendedType {
+public class ObjectType implements ExtendedType<Object> {
@Override
public String getClassName() {
@@ -60,4 +60,13 @@ public class ObjectType implements ExtendedType {
}
}
+ @Override
+ public String toString(Object value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return value.toString();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/SerializableTypeFactory.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/SerializableTypeFactory.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/SerializableTypeFactory.java
index 214f84b..e37eed5 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/SerializableTypeFactory.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/SerializableTypeFactory.java
@@ -18,16 +18,16 @@
****************************************************************/
package org.apache.cayenne.access.types;
-import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
+import org.apache.cayenne.CayenneRuntimeException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
/**
* ExtendedTypeFactory for handling serializable objects. Returned ExtendedType
* is simply an object serialization wrapper on top of byte[] ExtendedType.
@@ -59,15 +59,7 @@ class SerializableTypeFactory implements ExtendedTypeFactory {
// note - can't use "getRegisteredType" as it causes infinite
// recursion
- ExtendedType bytesType = map.getExplictlyRegisteredType("byte[]");
-
- // not sure if this type of recursion can occur, still worth
- // checking
- if (bytesType instanceof SerializableType) {
- throw new IllegalStateException("Can't create Serializable ExtendedType for "
- + objectClass.getCanonicalName() + ": no ExtendedType exists for byte[]");
- }
-
+ ExtendedType<byte[]> bytesType = map.getExplictlyRegisteredType("byte[]");
return new SerializableType(objectClass, bytesType);
}
@@ -77,11 +69,11 @@ class SerializableTypeFactory implements ExtendedTypeFactory {
/**
* A serialization wrapper on top of byte[] ExtendedType
*/
- final class SerializableType extends ExtendedTypeDecorator {
+ final class SerializableType extends ExtendedTypeDecorator<Object, byte[]> {
private Class<?> javaClass;
- SerializableType(Class<?> javaClass, ExtendedType bytesType) {
+ SerializableType(Class<?> javaClass, ExtendedType<byte[]> bytesType) {
super(bytesType);
this.javaClass = javaClass;
}
@@ -92,7 +84,7 @@ class SerializableTypeFactory implements ExtendedTypeFactory {
}
@Override
- Object fromJavaObject(Object object) {
+ byte[] fromJavaObject(Object object) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream() {
// avoid unneeded array copy...
@@ -112,8 +104,7 @@ class SerializableTypeFactory implements ExtendedTypeFactory {
}
@Override
- Object toJavaObject(Object object) {
- byte[] bytes = (byte[]) object;
+ Object toJavaObject(byte[] bytes) {
try {
return bytes != null && bytes.length > 0 ? new ObjectInputStream(new ByteArrayInputStream(bytes))
.readObject() : null;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/ShortType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ShortType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ShortType.java
index cfd8ee2..72ed935 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ShortType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ShortType.java
@@ -31,7 +31,7 @@ import java.sql.ResultSet;
*
* @since 1.0.2
*/
-public class ShortType implements ExtendedType {
+public class ShortType implements ExtendedType<Short> {
protected boolean widenShorts;
@@ -45,13 +45,13 @@ public class ShortType implements ExtendedType {
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public Short materializeObject(ResultSet rs, int index, int type) throws Exception {
short s = rs.getShort(index);
return (rs.wasNull()) ? null : s;
}
@Override
- public Object materializeObject(CallableStatement st, int index, int type)
+ public Short materializeObject(CallableStatement st, int index, int type)
throws Exception {
short s = st.getShort(index);
return (st.wasNull()) ? null : s;
@@ -60,7 +60,7 @@ public class ShortType implements ExtendedType {
@Override
public void setJdbcObject(
PreparedStatement statement,
- Object value,
+ Short value,
int pos,
int type,
int precision) throws Exception {
@@ -70,13 +70,21 @@ public class ShortType implements ExtendedType {
}
else {
- Short s = (Short) value;
if (widenShorts) {
- statement.setInt(pos, s.intValue());
+ statement.setInt(pos, value.intValue());
}
else {
- statement.setShort(pos, s.shortValue());
+ statement.setShort(pos, value);
}
}
}
+
+ @Override
+ public String toString(Short value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return value.toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/efa48e5c/cayenne-server/src/main/java/org/apache/cayenne/access/types/TimeType.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/TimeType.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/TimeType.java
index 67b4bd0..3026954 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/TimeType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/TimeType.java
@@ -26,7 +26,7 @@ import java.sql.Time;
/**
* @since 3.0
*/
-public class TimeType implements ExtendedType {
+public class TimeType implements ExtendedType<Time> {
@Override
public String getClassName() {
@@ -34,12 +34,12 @@ public class TimeType implements ExtendedType {
}
@Override
- public Object materializeObject(ResultSet rs, int index, int type) throws Exception {
+ public Time materializeObject(ResultSet rs, int index, int type) throws Exception {
return rs.getTime(index);
}
@Override
- public Object materializeObject(CallableStatement rs, int index, int type)
+ public Time materializeObject(CallableStatement rs, int index, int type)
throws Exception {
return rs.getTime(index);
}
@@ -47,7 +47,7 @@ public class TimeType implements ExtendedType {
@Override
public void setJdbcObject(
PreparedStatement statement,
- Object value,
+ Time value,
int pos,
int type,
int scale) throws Exception {
@@ -56,7 +56,16 @@ public class TimeType implements ExtendedType {
statement.setNull(pos, type);
}
else {
- statement.setTime(pos, (Time) value);
+ statement.setTime(pos, value);
}
}
+
+ @Override
+ public String toString(Time value) {
+ if (value == null) {
+ return "\'null\'";
+ }
+
+ return '\'' + value.toString() + '\'';
+ }
}