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 2020/11/04 11:49:53 UTC

[cayenne] branch master updated: CAY-2685 JsonType should use the actual JDBC type, not OTHER

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 <st...@gmail.com>
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