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


The following commit(s) were added to refs/heads/master by this push:
     new a7b3629  CAY-2685 JsonType should use the actual JDBC type, not OTHER
a7b3629 is described below

commit a7b36294d0559ef7c3dd4b75055fd96d99c05db4
Author: Nikita Timofeev <[email protected]>
AuthorDate: Wed Nov 4 14:49:43 2020 +0300

    CAY-2685 JsonType should use the actual JDBC type, not OTHER
---
 .../java/org/apache/cayenne/access/types/JsonType.java     | 14 ++++++++------
 .../apache/cayenne/configuration/server/ServerModule.java  |  3 +--
 .../java/org/apache/cayenne/dba/derby/DerbyAdapter.java    |  5 ++++-
 .../java/org/apache/cayenne/dba/mysql/MySQLAdapter.java    |  5 ++++-
 .../org/apache/cayenne/dba/postgres/PostgresAdapter.java   |  5 ++++-
 5 files changed, 21 insertions(+), 11 deletions(-)

diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/access/types/JsonType.java 
b/cayenne-server/src/main/java/org/apache/cayenne/access/types/JsonType.java
index f14b509..1e19118 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/JsonType.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/JsonType.java
@@ -31,10 +31,12 @@ import org.apache.cayenne.value.Json;
  */
 public class JsonType implements ExtendedType<Json> {
 
-    private CharType delegate;
+    private final CharType delegate;
+    private final boolean useRealType;
 
-    public JsonType() {
-        this.delegate = new CharType(true, false);
+    public JsonType(CharType delegate, boolean useRealType) {
+        this.delegate = delegate;
+        this.useRealType = useRealType;
     }
 
     @Override
@@ -45,18 +47,18 @@ public class JsonType implements ExtendedType<Json> {
     @Override
     public void setJdbcObject(PreparedStatement statement, Json json, int pos, 
int type, int scale) throws Exception {
         String value = json != null ? json.getRawJson() : null;
-        delegate.setJdbcObject(statement, value, pos, Types.OTHER, scale);
+        delegate.setJdbcObject(statement, value, pos, useRealType ? type : 
Types.OTHER, scale);
     }
 
     @Override
     public Json materializeObject(ResultSet rs, int index, int type) throws 
Exception {
-        String value = delegate.materializeObject(rs, index, Types.OTHER);
+        String value = delegate.materializeObject(rs, index, useRealType ? 
type : Types.OTHER);
         return value != null ? new Json(value) : null;
     }
 
     @Override
     public Json materializeObject(CallableStatement rs, int index, int type) 
throws Exception {
-        String value = delegate.materializeObject(rs, index, Types.OTHER);
+        String value = delegate.materializeObject(rs, index, useRealType ? 
type : Types.OTHER);
         return value != null ? new Json(value) : null;
     }
 
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/ServerModule.java
 
b/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/ServerModule.java
index d7eb35a..1d12d8f 100644
--- 
a/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/ServerModule.java
+++ 
b/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/ServerModule.java
@@ -432,8 +432,7 @@ public class ServerModule implements Module {
                 .add(new CalendarType<>(Calendar.class))
                 // non-standard types
                 .add(GeoJsonType.class)
-                .add(WktType.class)
-                .add(JsonType.class);
+                .add(WktType.class);
         contributeUserTypes(binder);
         contributeTypeFactories(binder);
 
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java 
b/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java
index 81cb1bd..e7471fe 100644
--- 
a/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java
+++ 
b/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java
@@ -30,6 +30,7 @@ import org.apache.cayenne.access.types.CharType;
 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.JsonType;
 import org.apache.cayenne.access.types.ShortType;
 import org.apache.cayenne.access.types.ValueObjectTypeRegistry;
 import org.apache.cayenne.configuration.Constants;
@@ -114,11 +115,13 @@ public class DerbyAdapter extends JdbcAdapter {
         super.configureExtendedTypes(map);
 
         // create specially configured CharType handler
-        map.registerType(new CharType(true, true));
+        CharType charType = new CharType(true, true);
+        map.registerType(charType);
 
         // address Derby driver inability to handle java.lang.Short and 
java.lang.Byte
         map.registerType(new ShortType(true));
         map.registerType(new ByteType(true));
+        map.registerType(new JsonType(charType, true));
     }
 
     /**
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java 
b/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
index 6c9eee9..b8f68e9 100644
--- 
a/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
+++ 
b/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
@@ -39,6 +39,7 @@ import org.apache.cayenne.access.types.CharType;
 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.JsonType;
 import org.apache.cayenne.access.types.ValueObjectTypeRegistry;
 import org.apache.cayenne.configuration.Constants;
 import org.apache.cayenne.configuration.RuntimeProperties;
@@ -148,8 +149,10 @@ public class MySQLAdapter extends JdbcAdapter {
                // are problems with NULL clobs that are treated
                // as empty strings... somehow this doesn't happen
                // for BLOBs (ConnectorJ v. 3.0.9)
-               map.registerType(new CharType(false, false));
+               CharType charType = new CharType(false, false);
+               map.registerType(charType);
                map.registerType(new ByteArrayType(false, false));
+               map.registerType(new JsonType(charType, true));
        }
 
        @Override
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java
 
b/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java
index 9ebd27f..1765c3b 100644
--- 
a/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java
+++ 
b/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java
@@ -36,6 +36,7 @@ import org.apache.cayenne.access.types.CharType;
 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.JsonType;
 import org.apache.cayenne.access.types.ValueObjectTypeRegistry;
 import org.apache.cayenne.configuration.Constants;
 import org.apache.cayenne.configuration.RuntimeProperties;
@@ -106,8 +107,10 @@ public class PostgresAdapter extends JdbcAdapter {
 
                super.configureExtendedTypes(map);
 
-               map.registerType(new CharType(true, false));
+               CharType charType = new CharType(true, false);
+               map.registerType(charType);
                map.registerType(new PostgresByteArrayType(true, true));
+               map.registerType(new JsonType(charType, false));
        }
 
        @Override

Reply via email to