use of org.hibernate.sql.ast.tree.from.LazyTableGroup in project hibernate-orm by hibernate.
the class EntityCollectionPart method createTableGroupJoin.
@Override
public TableGroupJoin createTableGroupJoin(NavigablePath navigablePath, TableGroup collectionTableGroup, String explicitSourceAlias, SqlAstJoinType requestedJoinType, boolean fetched, boolean addsPredicate, SqlAliasBaseGenerator aliasBaseGenerator, SqlExpressionResolver sqlExpressionResolver, FromClauseAccess fromClauseAccess, SqlAstCreationContext creationContext) {
final SqlAstJoinType joinType;
if (requestedJoinType == null) {
joinType = SqlAstJoinType.INNER;
} else {
joinType = requestedJoinType;
}
if (collectionDescriptor.isOneToMany() && nature == Nature.ELEMENT) {
// If this is a one-to-many, the element part is already available, so we return a TableGroupJoin "hull"
return new TableGroupJoin(navigablePath, joinType, ((OneToManyTableGroup) collectionTableGroup).getElementTableGroup(), null);
}
final LazyTableGroup lazyTableGroup = createRootTableGroupJoin(navigablePath, collectionTableGroup, explicitSourceAlias, requestedJoinType, fetched, null, aliasBaseGenerator, sqlExpressionResolver, fromClauseAccess, creationContext);
final TableGroupJoin join = new TableGroupJoin(navigablePath, joinType, lazyTableGroup, null);
lazyTableGroup.setTableGroupInitializerCallback(tableGroup -> join.applyPredicate(fkDescriptor.generateJoinPredicate(tableGroup.getPrimaryTableReference(), collectionTableGroup.resolveTableReference(fkDescriptor.getKeyTable()), sqlExpressionResolver, creationContext)));
return join;
}
use of org.hibernate.sql.ast.tree.from.LazyTableGroup in project hibernate-orm by hibernate.
the class SqlTreePrinter method logTableGroupDetails.
private void logTableGroupDetails(TableGroup tableGroup) {
if (tableGroup instanceof LazyTableGroup) {
TableGroup underlyingTableGroup = ((LazyTableGroup) tableGroup).getUnderlyingTableGroup();
if (underlyingTableGroup != null) {
logTableGroupDetails(underlyingTableGroup);
}
return;
}
if (tableGroup.getPrimaryTableReference() instanceof NamedTableReference) {
logWithIndentation("primaryTableReference : %s as %s", tableGroup.getPrimaryTableReference().getTableId(), tableGroup.getPrimaryTableReference().getIdentificationVariable());
} else {
if (tableGroup.getPrimaryTableReference() instanceof ValuesTableReference) {
logWithIndentation("primaryTableReference : values (..) as %s", tableGroup.getPrimaryTableReference().getIdentificationVariable());
} else if (tableGroup.getPrimaryTableReference() instanceof FunctionTableReference) {
logWithIndentation("primaryTableReference : %s(...) as %s", ((FunctionTableReference) tableGroup.getPrimaryTableReference()).getFunctionExpression().getFunctionName(), tableGroup.getPrimaryTableReference().getIdentificationVariable());
} else {
logNode("PrimaryTableReference as " + tableGroup.getPrimaryTableReference().getIdentificationVariable(), () -> {
QueryPart queryPart = ((QueryPartTableReference) tableGroup.getPrimaryTableReference()).getQueryPart();
visitQueryPart(queryPart);
});
}
}
final List<TableReferenceJoin> tableReferenceJoins = tableGroup.getTableReferenceJoins();
if (!tableReferenceJoins.isEmpty()) {
logNode("TableReferenceJoins", () -> {
for (TableReferenceJoin join : tableReferenceJoins) {
logWithIndentation("%s join %s as %s", join.getJoinType().getText(), join.getJoinedTableReference().getTableExpression(), join.getJoinedTableReference().getIdentificationVariable());
}
});
}
final List<TableGroupJoin> nestedTableGroupJoins = tableGroup.getNestedTableGroupJoins();
if (!nestedTableGroupJoins.isEmpty()) {
logNode("NestedTableGroupJoins", () -> tableGroup.visitNestedTableGroupJoins(this::visitTableGroupJoin));
}
final List<TableGroupJoin> tableGroupJoins = tableGroup.getTableGroupJoins();
if (!tableGroupJoins.isEmpty()) {
logNode("TableGroupJoins", () -> tableGroup.visitTableGroupJoins(this::visitTableGroupJoin));
}
}
Aggregations