This is an automated email from the ASF dual-hosted git repository.

ntimofeev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit 47b5fab7db7eb7dfe141a170cad67ac4ab727579
Author: Nigel Huband <[email protected]>
AuthorDate: Thu Jan 27 05:25:06 2022 +0300

    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 04a04c7..128321b 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
@@ -23,6 +23,7 @@ import org.apache.cayenne.access.DataNode;
 import org.apache.cayenne.access.sqlbuilder.sqltree.SQLTreeProcessor;
 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;
@@ -83,6 +84,19 @@ public class H2Adapter extends JdbcAdapter {
         return query.createSQLAction(new H2ActionBuilder(node));
     }
 
+    /**
+     * 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);
+        }
+    }
+}

Reply via email to