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