You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2022/01/31 14:52:30 UTC
[cayenne] 01/03: fix H2 clob streaming
This is an automated email from the ASF dual-hosted git repository.
ntimofeev pushed a commit to branch STABLE-4.1
in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit 5db5220d3500b0307f9b374569f79c2453c9f93c
Author: Nigel Huband <nh...@gmail.com>
AuthorDate: Thu Jan 27 13:25:06 2022 +1100
fix H2 clob streaming
---
.../java/org/apache/cayenne/dba/h2/H2Adapter.java | 14 ++++++++
.../java/org/apache/cayenne/dba/h2/H2CharType.java | 38 ++++++++++++++++++++++
2 files changed, 52 insertions(+)
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java
index ee35d45..7f20148 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java
@@ -21,6 +21,7 @@ package org.apache.cayenne.dba.h2;
import org.apache.cayenne.access.types.ExtendedType;
import org.apache.cayenne.access.types.ExtendedTypeFactory;
+import org.apache.cayenne.access.types.ExtendedTypeMap;
import org.apache.cayenne.access.types.ValueObjectTypeRegistry;
import org.apache.cayenne.configuration.Constants;
import org.apache.cayenne.configuration.RuntimeProperties;
@@ -66,6 +67,19 @@ public class H2Adapter extends JdbcAdapter {
}
}
+ /**
+ * Installs appropriate ExtendedTypes as converters for passing values
+ * between JDBC and Java layers.
+ * @since 4.1.2
+ */
+ @Override
+ protected void configureExtendedTypes(ExtendedTypeMap map) {
+ super.configureExtendedTypes(map);
+
+ // create specially configured CharType handler
+ map.registerType(new H2CharType());
+ }
+
@Override
protected PkGenerator createPkGenerator() {
return new H2PkGenerator(this);
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/h2/H2CharType.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/h2/H2CharType.java
new file mode 100644
index 0000000..edfcc11
--- /dev/null
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/h2/H2CharType.java
@@ -0,0 +1,38 @@
+package org.apache.cayenne.dba.h2;
+
+import org.apache.cayenne.access.types.CharType;
+
+import java.sql.Clob;
+import java.sql.PreparedStatement;
+import java.sql.Types;
+
+/**
+ * H2 specific char type handling - used to handle the correct setting of clobs
+ *
+ * @since 4.1.2
+ */
+public class H2CharType extends CharType {
+
+ public H2CharType() {
+ super(true, true);
+ }
+
+ @Override
+ public void setJdbcObject(PreparedStatement st, String val, int pos, int type, int precision) throws Exception {
+
+ if (type == Types.CLOB) {
+
+ if (isUsingClobs()) {
+
+ Clob clob = st.getConnection().createClob();
+ clob.setString(1, val);
+ st.setClob(pos, clob);
+
+ } else {
+ st.setString(pos, val);
+ }
+ } else {
+ st.setObject(pos, val);
+ }
+ }
+}