From 1359d534d50cced77bee7e539678ebf841e34e36 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Sat, 29 Jan 2022 17:05:12 +1300 Subject: [PATCH] Yugabyte - Use Postgres ScalarTypes for JSON/JSONB but not HSTORE --- .../server/type/DefaultTypeManager.java | 17 ++++++++++++----- ebean-test/src/test/resources/extra-ddl.xml | 2 +- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeManager.java index 94ebb0572..747208ecc 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeManager.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeManager.java @@ -95,6 +95,7 @@ public final class DefaultTypeManager implements TypeManager { private final TypeJsonManager jsonManager; private final boolean offlineMigrationGeneration; private final EnumType defaultEnumType; + private final DatabasePlatform databasePlatform; // OPTIONAL ScalarTypes registered if Jackson/JsonNode is in the classpath @@ -132,7 +133,8 @@ public final class DefaultTypeManager implements TypeManager { this.typeMap = new ConcurrentHashMap<>(); this.nativeMap = new ConcurrentHashMap<>(); this.logicalMap = new ConcurrentHashMap<>(); - this.postgres = isPostgres(config.getDatabasePlatform()); + this.databasePlatform = config.getDatabasePlatform(); + this.postgres = isPostgresCompatible(config.getDatabasePlatform()); this.objectMapperPresent = config.getClassLoadConfig().isJacksonObjectMapperPresent(); this.objectMapper = (objectMapperPresent) ? initObjectMapper(config) : null; this.jsonManager = (objectMapperPresent) ? new TypeJsonManager(postgres, objectMapper, config.getJsonMutationDetection()) : null; @@ -198,8 +200,13 @@ public final class DefaultTypeManager implements TypeManager { } } - private boolean isPostgres(DatabasePlatform databasePlatform) { - return databasePlatform.getPlatform().base() == Platform.POSTGRES; + private boolean isPostgresCompatible(DatabasePlatform databasePlatform) { + return databasePlatform.isPlatform(Platform.POSTGRES) + || databasePlatform.isPlatform(Platform.YUGABYTE); + } + + private boolean hstoreSupport() { + return databasePlatform.isPlatform(Platform.POSTGRES); } /** @@ -302,7 +309,7 @@ public final class DefaultTypeManager implements TypeManager { @Override public ScalarType getDbMapScalarType() { - return (postgres) ? hstoreType : ScalarTypeJsonMap.typeFor(false, Types.VARCHAR, false); + return hstoreSupport() ? hstoreType : ScalarTypeJsonMap.typeFor(false, Types.VARCHAR, false); } @Override @@ -740,7 +747,7 @@ public final class DefaultTypeManager implements TypeManager { jsonNodeVarchar = new ScalarTypeJsonNode.Varchar(mapper); jsonNodeJson = jsonNodeClob; // Default for non-Postgres databases jsonNodeJsonb = jsonNodeClob; // Default for non-Postgres databases - if (isPostgres(config.getDatabasePlatform())) { + if (postgres) { jsonNodeJson = new ScalarTypeJsonNodePostgres.JSON(mapper); jsonNodeJsonb = new ScalarTypeJsonNodePostgres.JSONB(mapper); } diff --git a/ebean-test/src/test/resources/extra-ddl.xml b/ebean-test/src/test/resources/extra-ddl.xml index ae128968c..9bc702735 100644 --- a/ebean-test/src/test/resources/extra-ddl.xml +++ b/ebean-test/src/test/resources/extra-ddl.xml @@ -5,7 +5,7 @@ drop view order_agg_vw if exists; - + create or replace view order_agg_vw as select d.order_id, sum(d.order_qty * d.unit_price) as order_total, sum(d.ship_qty * d.unit_price) as ship_total