Skip to content

Commit

Permalink
HHH-16733 Reuse correct navigable path for correlated and treated copy
Browse files Browse the repository at this point in the history
  • Loading branch information
mbladel committed Jun 27, 2023
1 parent c06d605 commit c1c912d
Show file tree
Hide file tree
Showing 17 changed files with 206 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ private SqmCorrelatedBagJoin(
NodeBuilder nodeBuilder,
SqmCorrelatedRootJoin<O> correlatedRootJoin,
SqmBagJoin<O, T> correlationParent) {
super( lhs, attribute, alias, sqmJoinType, fetched, nodeBuilder );
super( lhs, correlationParent.getNavigablePath(), attribute, alias, sqmJoinType, fetched, nodeBuilder );
this.correlatedRootJoin = correlatedRootJoin;
this.correlationParent = correlationParent;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ private SqmCorrelatedCrossJoin(
SqmRoot<?> sqmRoot,
SqmCorrelatedRootJoin<T> correlatedRootJoin,
SqmCrossJoin<T> correlationParent) {
super( joinedEntityDescriptor, alias, sqmRoot );
super( correlationParent.getNavigablePath(), joinedEntityDescriptor, alias, sqmRoot );
this.correlatedRootJoin = correlatedRootJoin;
this.correlationParent = correlationParent;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public SqmCorrelatedEntityJoin(
SqmRoot<?> sqmRoot,
SqmCorrelatedRootJoin<T> correlatedRootJoin,
SqmEntityJoin<T> correlationParent) {
super( joinedEntityDescriptor, alias, joinType, sqmRoot );
super( correlationParent.getNavigablePath(), joinedEntityDescriptor, alias, joinType, sqmRoot );
this.correlatedRootJoin = correlatedRootJoin;
this.correlationParent = correlationParent;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ private SqmCorrelatedListJoin(
NodeBuilder nodeBuilder,
SqmCorrelatedRootJoin<O> correlatedRootJoin,
SqmListJoin<O, T> correlationParent) {
super( lhs, attribute, alias, sqmJoinType, fetched, nodeBuilder );
super( lhs, correlationParent.getNavigablePath(), attribute, alias, sqmJoinType, fetched, nodeBuilder );
this.correlatedRootJoin = correlatedRootJoin;
this.correlationParent = correlationParent;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ private SqmCorrelatedMapJoin(
NodeBuilder nodeBuilder,
SqmCorrelatedRootJoin<O> correlatedRootJoin,
SqmMapJoin<O, K, V> correlationParent) {
super( lhs, attribute, alias, sqmJoinType, fetched, nodeBuilder );
super( lhs, correlationParent.getNavigablePath(), attribute, alias, sqmJoinType, fetched, nodeBuilder );
this.correlatedRootJoin = correlatedRootJoin;
this.correlationParent = correlationParent;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ private SqmCorrelatedSetJoin(
NodeBuilder nodeBuilder,
SqmCorrelatedRootJoin<O> correlatedRootJoin,
SqmSetJoin<O, T> correlationParent) {
super( lhs, attribute, alias, sqmJoinType, fetched, nodeBuilder );
super( lhs, correlationParent.getNavigablePath(), attribute, alias, sqmJoinType, fetched, nodeBuilder );
this.correlatedRootJoin = correlatedRootJoin;
this.correlationParent = correlationParent;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ private SqmCorrelatedSingularJoin(
NodeBuilder nodeBuilder,
SqmCorrelatedRootJoin<O> correlatedRootJoin,
SqmSingularJoin<O, T> correlationParent) {
super( lhs, joinedNavigable, alias, joinType, fetched, nodeBuilder );
super( lhs, correlationParent.getNavigablePath(), joinedNavigable, alias, joinType, fetched, nodeBuilder );
this.correlatedRootJoin = correlatedRootJoin;
this.correlationParent = correlationParent;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import org.hibernate.query.sqm.SqmPathSource;
import org.hibernate.query.sqm.tree.SqmCopyContext;
import org.hibernate.query.sqm.tree.from.SqmAttributeJoin;
import org.hibernate.query.sqm.tree.from.SqmJoin;
import org.hibernate.spi.NavigablePath;

/**
* @author Steve Ebersole
Expand Down Expand Up @@ -42,6 +42,28 @@ public SqmTreatedBagJoin(
this.wrappedPath = wrappedPath;
}

private SqmTreatedBagJoin(
NavigablePath navigablePath,
SqmBagJoin<O, T> wrappedPath,
EntityDomainType<S> treatTarget,
String alias) {
//noinspection unchecked
super(
wrappedPath.getLhs(),
wrappedPath.getNavigablePath().treatAs(
treatTarget.getHibernateEntityName(),
alias
),
(BagPersistentAttribute<O, S>) wrappedPath.getAttribute(),
alias,
wrappedPath.getSqmJoinType(),
wrappedPath.isFetched(),
wrappedPath.nodeBuilder()
);
this.treatTarget = treatTarget;
this.wrappedPath = wrappedPath;
}

@Override
public SqmTreatedBagJoin<O, T, S> copy(SqmCopyContext context) {
final SqmTreatedBagJoin<O, T, S> existing = context.getCopy( this );
Expand All @@ -51,6 +73,7 @@ public SqmTreatedBagJoin<O, T, S> copy(SqmCopyContext context) {
final SqmTreatedBagJoin<O, T, S> path = context.registerCopy(
this,
new SqmTreatedBagJoin<>(
getNavigablePath(),
wrappedPath.copy( context ),
treatTarget,
getExplicitAlias()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import org.hibernate.query.sqm.SqmPathSource;
import org.hibernate.query.sqm.tree.SqmCopyContext;
import org.hibernate.query.sqm.tree.from.SqmCrossJoin;
import org.hibernate.query.sqm.tree.from.SqmJoin;
import org.hibernate.spi.NavigablePath;

/**
* @author Steve Ebersole
Expand All @@ -34,6 +34,22 @@ public SqmTreatedCrossJoin(
this.treatTarget = treatTarget;
}

private SqmTreatedCrossJoin(
NavigablePath navigablePath,
SqmCrossJoin<T> wrappedPath,
EntityDomainType<S> treatTarget,
String alias) {
//noinspection unchecked
super(
navigablePath,
(EntityDomainType<S>) wrappedPath.getReferencedPathSource().getSqmPathType(),
alias,
wrappedPath.getRoot()
);
this.wrappedPath = wrappedPath;
this.treatTarget = treatTarget;
}

@Override
public SqmTreatedCrossJoin<T, S> copy(SqmCopyContext context) {
final SqmTreatedCrossJoin<T, S> existing = context.getCopy( this );
Expand All @@ -43,6 +59,7 @@ public SqmTreatedCrossJoin<T, S> copy(SqmCopyContext context) {
final SqmTreatedCrossJoin<T, S> path = context.registerCopy(
this,
new SqmTreatedCrossJoin<>(
getNavigablePath(),
wrappedPath.copy( context ),
treatTarget,
getExplicitAlias()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import org.hibernate.query.sqm.SqmPathSource;
import org.hibernate.query.sqm.tree.SqmCopyContext;
import org.hibernate.query.sqm.tree.from.SqmEntityJoin;
import org.hibernate.query.sqm.tree.from.SqmJoin;
import org.hibernate.spi.NavigablePath;

/**
* @author Steve Ebersole
Expand All @@ -37,6 +37,22 @@ public SqmTreatedEntityJoin(
this.treatTarget = treatTarget;
}

private SqmTreatedEntityJoin(
NavigablePath navigablePath,
SqmEntityJoin<T> wrappedPath,
EntityDomainType<S> treatTarget,
String alias) {
super(
navigablePath,
treatTarget,
alias,
wrappedPath.getSqmJoinType(),
wrappedPath.getRoot()
);
this.wrappedPath = wrappedPath;
this.treatTarget = treatTarget;
}

@Override
public SqmTreatedEntityJoin<T, S> copy(SqmCopyContext context) {
final SqmTreatedEntityJoin<T, S> existing = context.getCopy( this );
Expand All @@ -46,6 +62,7 @@ public SqmTreatedEntityJoin<T, S> copy(SqmCopyContext context) {
final SqmTreatedEntityJoin<T, S> path = context.registerCopy(
this,
new SqmTreatedEntityJoin<>(
getNavigablePath(),
wrappedPath.copy( context ),
treatTarget,
getExplicitAlias()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import org.hibernate.query.sqm.tree.SqmCopyContext;
import org.hibernate.query.sqm.tree.expression.SqmExpression;
import org.hibernate.query.sqm.tree.from.SqmAttributeJoin;
import org.hibernate.query.sqm.tree.from.SqmJoin;
import org.hibernate.spi.NavigablePath;

/**
* @author Steve Ebersole
Expand Down Expand Up @@ -44,6 +44,25 @@ public SqmTreatedListJoin(
this.wrappedPath = wrappedPath;
}

private SqmTreatedListJoin(
NavigablePath navigablePath,
SqmListJoin<O, T> wrappedPath,
EntityDomainType<S> treatTarget,
String alias) {
//noinspection unchecked
super(
wrappedPath.getLhs(),
navigablePath,
(ListPersistentAttribute<O, S>) wrappedPath.getAttribute(),
alias,
wrappedPath.getSqmJoinType(),
wrappedPath.isFetched(),
wrappedPath.nodeBuilder()
);
this.treatTarget = treatTarget;
this.wrappedPath = wrappedPath;
}

@Override
public SqmTreatedListJoin<O, T, S> copy(SqmCopyContext context) {
final SqmTreatedListJoin<O, T, S> existing = context.getCopy( this );
Expand All @@ -53,6 +72,7 @@ public SqmTreatedListJoin<O, T, S> copy(SqmCopyContext context) {
final SqmTreatedListJoin<O, T, S> path = context.registerCopy(
this,
new SqmTreatedListJoin<>(
getNavigablePath(),
wrappedPath.copy( context ),
treatTarget,
getExplicitAlias()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import org.hibernate.query.hql.spi.SqmCreationProcessingState;
import org.hibernate.query.sqm.SqmPathSource;
import org.hibernate.query.sqm.tree.SqmCopyContext;
import org.hibernate.query.sqm.tree.from.SqmJoin;
import org.hibernate.spi.NavigablePath;

/**
* @author Steve Ebersole
Expand Down Expand Up @@ -40,6 +40,25 @@ public SqmTreatedMapJoin(
this.wrappedPath = wrappedPath;
}

private SqmTreatedMapJoin(
NavigablePath navigablePath,
SqmMapJoin<O, K, V> wrappedPath,
EntityDomainType<S> treatTarget,
String alias) {
//noinspection unchecked
super(
wrappedPath.getLhs(),
navigablePath,
( (SqmMapJoin<O, K, S>) wrappedPath ).getModel(),
alias,
wrappedPath.getSqmJoinType(),
wrappedPath.isFetched(),
wrappedPath.nodeBuilder()
);
this.treatTarget = treatTarget;
this.wrappedPath = wrappedPath;
}

@Override
public SqmTreatedMapJoin<O, K, V, S> copy(SqmCopyContext context) {
final SqmTreatedMapJoin<O, K, V, S> existing = context.getCopy( this );
Expand All @@ -49,6 +68,7 @@ public SqmTreatedMapJoin<O, K, V, S> copy(SqmCopyContext context) {
final SqmTreatedMapJoin<O, K, V, S> path = context.registerCopy(
this,
new SqmTreatedMapJoin<>(
getNavigablePath(),
wrappedPath.copy( context ),
treatTarget,
getExplicitAlias()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import org.hibernate.query.sqm.SqmPathSource;
import org.hibernate.query.sqm.tree.SqmCopyContext;
import org.hibernate.query.sqm.tree.from.SqmFrom;
import org.hibernate.query.sqm.tree.from.SqmJoin;
import org.hibernate.spi.NavigablePath;

/**
* @author Steve Ebersole
Expand Down Expand Up @@ -39,6 +39,24 @@ public SqmTreatedPluralPartJoin(
this.wrappedPath = wrappedPath;
}

private SqmTreatedPluralPartJoin(
NavigablePath navigablePath,
SqmPluralPartJoin<O,T> wrappedPath,
EntityDomainType<S> treatTarget,
String alias) {
//noinspection unchecked
super(
(SqmFrom<?, O>) wrappedPath.getLhs(),
navigablePath,
(SqmPathSource<S>) wrappedPath.getReferencedPathSource(),
alias,
wrappedPath.getSqmJoinType(),
wrappedPath.nodeBuilder()
);
this.treatTarget = treatTarget;
this.wrappedPath = wrappedPath;
}

@Override
public SqmTreatedPluralPartJoin<O, T, S> copy(SqmCopyContext context) {
final SqmTreatedPluralPartJoin<O, T, S> existing = context.getCopy( this );
Expand All @@ -48,6 +66,7 @@ public SqmTreatedPluralPartJoin<O, T, S> copy(SqmCopyContext context) {
final SqmTreatedPluralPartJoin<O, T, S> path = context.registerCopy(
this,
new SqmTreatedPluralPartJoin<>(
getNavigablePath(),
wrappedPath.copy( context ),
treatTarget,
getExplicitAlias()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
import org.hibernate.query.sqm.SemanticQueryWalker;
import org.hibernate.query.sqm.SqmPathSource;
import org.hibernate.query.sqm.tree.SqmCopyContext;
import org.hibernate.query.sqm.tree.from.SqmJoin;
import org.hibernate.query.sqm.tree.from.SqmRoot;
import org.hibernate.spi.NavigablePath;

/**
* @author Steve Ebersole
Expand All @@ -37,6 +37,21 @@ public SqmTreatedRoot(
this.treatTarget = treatTarget;
}

@SuppressWarnings({ "unchecked", "rawtypes" })
private SqmTreatedRoot(
NavigablePath navigablePath,
SqmRoot<T> wrappedPath,
EntityDomainType<S> treatTarget) {
super(
navigablePath,
(EntityDomainType) wrappedPath.getReferencedPathSource(),
null,
wrappedPath.nodeBuilder()
);
this.wrappedPath = wrappedPath;
this.treatTarget = treatTarget;
}

@Override
public SqmRoot<S> copy(SqmCopyContext context) {
final SqmTreatedRoot<T, S> existing = context.getCopy( this );
Expand All @@ -46,6 +61,7 @@ public SqmRoot<S> copy(SqmCopyContext context) {
final SqmTreatedRoot<T, S> path = context.registerCopy(
this,
new SqmTreatedRoot<>(
getNavigablePath(),
wrappedPath.copy( context ),
treatTarget
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import org.hibernate.query.sqm.SqmPathSource;
import org.hibernate.query.sqm.tree.SqmCopyContext;
import org.hibernate.query.sqm.tree.from.SqmAttributeJoin;
import org.hibernate.query.sqm.tree.from.SqmJoin;
import org.hibernate.spi.NavigablePath;

/**
* @author Steve Ebersole
Expand Down Expand Up @@ -42,6 +42,25 @@ public SqmTreatedSetJoin(
this.wrappedPath = wrappedPath;
}

private SqmTreatedSetJoin(
NavigablePath navigablePath,
SqmSetJoin<O, T> wrappedPath,
EntityDomainType<S> treatTarget,
String alias) {
//noinspection unchecked
super(
wrappedPath.getLhs(),
navigablePath,
(SetPersistentAttribute<O, S>) wrappedPath.getAttribute(),
alias,
wrappedPath.getSqmJoinType(),
wrappedPath.isFetched(),
wrappedPath.nodeBuilder()
);
this.treatTarget = treatTarget;
this.wrappedPath = wrappedPath;
}

@Override
public SqmTreatedSetJoin<O, T, S> copy(SqmCopyContext context) {
final SqmTreatedSetJoin<O, T, S> existing = context.getCopy( this );
Expand All @@ -51,6 +70,7 @@ public SqmTreatedSetJoin<O, T, S> copy(SqmCopyContext context) {
final SqmTreatedSetJoin<O, T, S> path = context.registerCopy(
this,
new SqmTreatedSetJoin<>(
getNavigablePath(),
wrappedPath.copy( context ),
treatTarget,
getExplicitAlias()
Expand Down

0 comments on commit c1c912d

Please sign in to comment.