From a48e96c7e976cd2d3d49237fa14f6496f67c5172 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Mon, 4 Mar 2024 10:02:05 +0100 Subject: [PATCH 1/2] FIX broken test for DB2 --- .../java/io/ebeaninternal/server/deploy/BeanProperty.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java index 5f592a540..a7dd9c813 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java @@ -41,8 +41,8 @@ import io.ebeanservice.docstore.api.mapping.DocMappingBuilder; import io.ebeanservice.docstore.api.mapping.DocPropertyMapping; import io.ebeanservice.docstore.api.mapping.DocPropertyOptions; import io.ebeanservice.docstore.api.support.DocStructure; - import jakarta.persistence.PersistenceException; + import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; @@ -1189,7 +1189,7 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty { switch (dbType) { case DbPlatformType.JSON: case DbPlatformType.JSONB: - return dbLength == 0; // must be analog to DbPlatformTypeMapping.lookup + return dbLength == 0 || dbLength > 255; // must be analog to DbPlatformTypeMapping.lookup case DbPlatformType.JSONBlob: case DbPlatformType.JSONClob: return true; From a48b2f4ebee8e0f8ba8a57a3a84032fcc3753318 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Thu, 7 Mar 2024 20:45:40 +1300 Subject: [PATCH 2/2] #3354 Use 4000 for DB Lob detection with distinct query - Use 4000 to match the DB2 logic for considering a column a lob (for distinct etc) - Rename distinctNoLobs -> platformDistinctNoLobs - Rename isDbLob() -> isLobForPlatform() - Rename unselectLobs() -> unselectLobsForPlatform() --- .../io/ebeaninternal/server/deploy/BeanProperty.java | 4 ++-- .../deploy/DynamicPropertyAggregationFormula.java | 2 +- .../io/ebeaninternal/server/query/STreeProperty.java | 2 +- .../io/ebeaninternal/server/query/SqlTreeBuilder.java | 10 +++++----- .../io/ebeaninternal/server/query/SqlTreeNode.java | 2 +- .../io/ebeaninternal/server/query/SqlTreeNodeBean.java | 8 ++++---- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java index a7dd9c813..72bd24966 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java @@ -1182,14 +1182,14 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty { * Returns true if this isLob() or the type will effectively map to a lob. */ @Override - public boolean isDbLob() { + public boolean isLobForPlatform() { if (lob) { return true; } switch (dbType) { case DbPlatformType.JSON: case DbPlatformType.JSONB: - return dbLength == 0 || dbLength > 255; // must be analog to DbPlatformTypeMapping.lookup + return dbLength == 0 || dbLength > 4000; // must be analog to DbPlatformTypeMapping.lookup case DbPlatformType.JSONBlob: case DbPlatformType.JSONClob: return true; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DynamicPropertyAggregationFormula.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DynamicPropertyAggregationFormula.java index 8931819a8..2b9899c56 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DynamicPropertyAggregationFormula.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DynamicPropertyAggregationFormula.java @@ -63,7 +63,7 @@ class DynamicPropertyAggregationFormula extends DynamicPropertyBase { } @Override - public boolean isDbLob() { + public boolean isLobForPlatform() { return false; } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/STreeProperty.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/STreeProperty.java index df7ee17d1..e83c7a084 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/STreeProperty.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/STreeProperty.java @@ -33,7 +33,7 @@ public interface STreeProperty extends ScalarDataReader { /** * Returns true, if this is a lob property from db-perspective. */ - boolean isDbLob(); + boolean isLobForPlatform(); /** * Return true if the property is an embedded type. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeBuilder.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeBuilder.java index 8a2465293..25ca77d87 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeBuilder.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeBuilder.java @@ -48,7 +48,7 @@ public final class SqlTreeBuilder { private final SpiQuery.TemporalMode temporalMode; private SqlTreeNode rootNode; private boolean sqlDistinct; - private final boolean distinctNoLobs; + private final boolean platformDistinctNoLobs; private final SqlTreeCommon common; /** @@ -63,7 +63,7 @@ public final class SqlTreeBuilder { this.query = null; this.subQuery = false; this.distinctOnPlatform = false; - this.distinctNoLobs = false; + this.platformDistinctNoLobs = false; this.queryDetail = queryDetail; this.predicates = predicates; this.temporalMode = SpiQuery.TemporalMode.CURRENT; @@ -98,7 +98,7 @@ public final class SqlTreeBuilder { this.predicates = predicates; this.alias = new SqlTreeAlias(request.baseTableAlias(), temporalMode); this.distinctOnPlatform = builder.isPlatformDistinctOn(); - this.distinctNoLobs = builder.isPlatformDistinctNoLobs(); + this.platformDistinctNoLobs = builder.isPlatformDistinctNoLobs(); String fromForUpdate = builder.fromForUpdate(query); CQueryHistorySupport historySupport = builder.historySupport(query); CQueryDraftSupport draftSupport = builder.draftSupport(query); @@ -269,8 +269,8 @@ public final class SqlTreeBuilder { if (joinList != null) { joinList.add(selectNode); } - if (sqlDistinct && distinctNoLobs) { - selectNode.unselectLobs(); + if (sqlDistinct && platformDistinctNoLobs) { + selectNode.unselectLobsForPlatform(); } return selectNode; } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNode.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNode.java index 5aff65c43..afab4c5cf 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNode.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNode.java @@ -82,6 +82,6 @@ interface SqlTreeNode { /** * Unselect lobs (for distinct queries on DB2 and Oracle). */ - default void unselectLobs() { + default void unselectLobsForPlatform() { } } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeBean.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeBean.java index f37715131..e8c11be55 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeBean.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeBean.java @@ -379,16 +379,16 @@ class SqlTreeNodeBean implements SqlTreeNode { @Override - public void unselectLobs() { + public void unselectLobsForPlatform() { if (children != null) { for (SqlTreeNode child : children) { - child.unselectLobs(); + child.unselectLobsForPlatform(); } } if (hasLob()) { List lst = new ArrayList<>(); for (STreeProperty prop : properties) { - if (!prop.isDbLob()) { + if (!prop.isLobForPlatform()) { lst.add(prop); } } @@ -399,7 +399,7 @@ class SqlTreeNodeBean implements SqlTreeNode { private boolean hasLob() { for (STreeProperty prop : properties) { - if (prop.isDbLob()) { + if (prop.isLobForPlatform()) { return true; } }