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 <nhub...@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); + } + } +}