DB2: Adapted Noemi's patch to new ebean version

This commit is contained in:
Roland Praml
2022-01-26 16:28:30 +01:00
parent 56b2db785f
commit 0504b88923
3 changed files with 39 additions and 2 deletions
@@ -53,6 +53,7 @@ public final class SqlTreeBuilder {
private final SpiQuery.TemporalMode temporalMode;
private SqlTreeNode rootNode;
private boolean sqlDistinct;
private final boolean distinctNoLobs;
/**
* Construct for RawSql query.
@@ -65,6 +66,7 @@ public final class SqlTreeBuilder {
this.query = null;
this.subQuery = false;
this.distinctOnPlatform = false;
this.distinctNoLobs = false;
this.queryDetail = queryDetail;
this.predicates = predicates;
this.temporalMode = SpiQuery.TemporalMode.CURRENT;
@@ -97,6 +99,7 @@ public final class SqlTreeBuilder {
this.predicates = predicates;
this.alias = new SqlTreeAlias(request.baseTableAlias(), temporalMode);
this.distinctOnPlatform = builder.isPlatformDistinctOn();
this.distinctNoLobs = builder.isPlatformDistinctNoLobs();
String fromForUpdate = builder.fromForUpdate(query);
CQueryHistorySupport historySupport = builder.getHistorySupport(query);
CQueryDraftSupport draftSupport = builder.getDraftSupport(query);
@@ -266,6 +269,9 @@ public final class SqlTreeBuilder {
if (joinList != null) {
joinList.add(selectNode);
}
if (sqlDistinct && distinctNoLobs) {
selectNode.unselectLobs();
}
return selectNode;
}
@@ -78,4 +78,6 @@ interface SqlTreeNode {
* Create the loader for this node.
*/
SqlTreeLoad createLoad();
default void unselectLobs() {};
}
@@ -26,8 +26,8 @@ class SqlTreeNodeBean implements SqlTreeNode {
/**
* Set to true if this is a partial object fetch.
*/
final boolean partialObject;
final STreeProperty[] properties;
boolean partialObject;
STreeProperty[] properties;
/**
* Extra where clause added by Where annotation on associated many.
*/
@@ -399,4 +399,33 @@ class SqlTreeNodeBean implements SqlTreeNode {
}
return false;
}
@Override
public void unselectLobs() {
if (children != null) {
for (SqlTreeNode child : children) {
child.unselectLobs();
}
}
if (hasLob()) {
List<STreeProperty> lst = new ArrayList<>();
for (STreeProperty prop : properties) {
if (!prop.isDbLob()) {
lst.add(prop);
}
}
properties = lst.toArray(new STreeProperty[0]);
partialObject = true;
}
}
private boolean hasLob() {
for (STreeProperty prop : properties) {
if (prop.isDbLob()) {
return true;
}
}
return false;
}
}