Skip to content

Commit

Permalink
HHH-17377 - Migrate to JPA 3.2
Browse files Browse the repository at this point in the history
https://hibernate.atlassian.net/browse/HHH-17377

Test compilation success!!  95 test failures next
  • Loading branch information
sebersole committed Mar 28, 2024
1 parent 899e7ee commit d5247f8
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 37 deletions.
Expand Up @@ -187,30 +187,8 @@ default <T> JpaSubQuery<T> unionAll(Subquery<? extends T> query1, Subquery<?>...
@Override
<T> JpaCriteriaQuery<T> union(CriteriaQuery<? extends T> left, CriteriaQuery<? extends T> right);

@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
default <T> JpaCriteriaQuery<T> unionAll(CriteriaQuery<? extends T> left, CriteriaQuery<? extends T> right) {
// for now at least...
assert left instanceof SqmSelectStatement;
final SqmSelectStatement<? extends T> leftSqm = (SqmSelectStatement<? extends T>) left;
final SqmSelectStatement<? extends T> rightSqm = (SqmSelectStatement<? extends T>) right;


// SqmQueryGroup is the UNION ALL between the two
final SqmQueryGroup sqmQueryGroup = new SqmQueryGroup(
leftSqm.nodeBuilder(),
SetOperator.UNION_ALL,
List.of( leftSqm.getQueryPart(), rightSqm.getQueryPart() )
);

final SqmSelectStatement sqmSelectStatement = new SqmSelectStatement<>(
leftSqm.getResultType(),
SqmQuerySource.CRITERIA,
leftSqm.nodeBuilder()
);
sqmSelectStatement.setQueryPart( sqmQueryGroup );
return sqmSelectStatement;
}
@Override
<T> JpaCriteriaQuery<T> unionAll(CriteriaQuery<? extends T> left, CriteriaQuery<? extends T> right);

default <T> JpaSubQuery<T> union(Subquery<? extends T> query1, Subquery<?>... queries) {
return union( false, query1, queries );
Expand Down
Expand Up @@ -529,43 +529,117 @@ public <X, T extends X> SqmRoot<T> treat(Root<X> root, Class<T> type) {

@Override
public <T> JpaCriteriaQuery<T> union(CriteriaQuery<? extends T> left, CriteriaQuery<? extends T> right) {
// todo (jpa 3.2) : implement
throw new UnsupportedOperationException( "Not yet implemented" );
return createUnionSet( SetOperator.UNION, left, right );
}

@Override
public <T> JpaCriteriaQuery<T> unionAll(CriteriaQuery<? extends T> left, CriteriaQuery<? extends T> right) {
// todo (jpa 3.2) : implement
throw new UnsupportedOperationException( "Not yet implemented" );
return createUnionSet( SetOperator.UNION_ALL, left, right );
}

@SuppressWarnings({ "rawtypes", "unchecked" })
private static <T> JpaCriteriaQuery<T> createUnionSet(
SetOperator operator,
CriteriaQuery<? extends T> left,
CriteriaQuery<? extends T> right) {
assert operator == SetOperator.UNION || operator == SetOperator.UNION_ALL;
assert left instanceof SqmSelectStatement;
assert right instanceof SqmSelectStatement;
final SqmSelectStatement<? extends T> leftSqm = (SqmSelectStatement<? extends T>) left;
final SqmSelectStatement<? extends T> rightSqm = (SqmSelectStatement<? extends T>) right;

// SqmQueryGroup is the UNION ALL between the two
final SqmQueryGroup sqmQueryGroup = new SqmQueryGroup(
leftSqm.nodeBuilder(),
operator,
List.of( leftSqm.getQueryPart(), rightSqm.getQueryPart() )
);

final SqmSelectStatement sqmSelectStatement = new SqmSelectStatement<>(
leftSqm.getResultType(),
SqmQuerySource.CRITERIA,
leftSqm.nodeBuilder()
);
sqmSelectStatement.setQueryPart( sqmQueryGroup );
return sqmSelectStatement;
}

@Override
public <T> JpaCriteriaQuery<T> intersect(CriteriaQuery<? super T> left, CriteriaQuery<? super T> right) {
// todo (jpa 3.2) : implement
throw new UnsupportedOperationException( "Not yet implemented" );
return createIntersectSet( SetOperator.INTERSECT, left, right );
}

@Override
public <T> JpaCriteriaQuery<T> intersectAll(CriteriaQuery<? super T> left, CriteriaQuery<? super T> right) {
// todo (jpa 3.2) : implement
throw new UnsupportedOperationException( "Not yet implemented" );
return createIntersectSet( SetOperator.INTERSECT_ALL, left, right );
}

@SuppressWarnings({ "rawtypes", "unchecked" })
private static <T> JpaCriteriaQuery<T> createIntersectSet(
SetOperator operator,
CriteriaQuery<? super T> left,
CriteriaQuery<? super T> right) {
assert operator == SetOperator.INTERSECT || operator == SetOperator.INTERSECT_ALL;
assert left instanceof SqmSelectStatement;
assert right instanceof SqmSelectStatement;
final SqmSelectStatement<? extends T> leftSqm = (SqmSelectStatement<? extends T>) left;
final SqmSelectStatement<? extends T> rightSqm = (SqmSelectStatement<? extends T>) right;

// SqmQueryGroup is the UNION ALL between the two
final SqmQueryGroup sqmQueryGroup = new SqmQueryGroup(
leftSqm.nodeBuilder(),
operator,
List.of( leftSqm.getQueryPart(), rightSqm.getQueryPart() )
);

final SqmSelectStatement sqmSelectStatement = new SqmSelectStatement<>(
leftSqm.getResultType(),
SqmQuerySource.CRITERIA,
leftSqm.nodeBuilder()
);
sqmSelectStatement.setQueryPart( sqmQueryGroup );
return sqmSelectStatement;
}

@Override
public <T> JpaCriteriaQuery<T> except(CriteriaQuery<T> left, CriteriaQuery<?> right) {
// todo (jpa 3.2) : implement
throw new UnsupportedOperationException( "Not yet implemented" );
return createExceptSet( SetOperator.EXCEPT, left, right );
}

@Override
public <T> JpaCriteriaQuery<T> exceptAll(CriteriaQuery<T> left, CriteriaQuery<?> right) {
// todo (jpa 3.2) : implement
throw new UnsupportedOperationException( "Not yet implemented" );
return createExceptSet( SetOperator.EXCEPT_ALL, left, right );
}

@SuppressWarnings({ "rawtypes", "unchecked" })
private static <T> JpaCriteriaQuery<T> createExceptSet(
SetOperator operator,
CriteriaQuery<T> left,
CriteriaQuery<?> right) {
assert operator == SetOperator.EXCEPT || operator == SetOperator.EXCEPT_ALL;
assert left instanceof SqmSelectStatement;
assert right instanceof SqmSelectStatement;
final SqmSelectStatement<? extends T> leftSqm = (SqmSelectStatement<? extends T>) left;
final SqmSelectStatement<? extends T> rightSqm = (SqmSelectStatement<? extends T>) right;

// SqmQueryGroup is the UNION ALL between the two
final SqmQueryGroup sqmQueryGroup = new SqmQueryGroup(
leftSqm.nodeBuilder(),
operator,
List.of( leftSqm.getQueryPart(), rightSqm.getQueryPart() )
);

final SqmSelectStatement sqmSelectStatement = new SqmSelectStatement<>(
leftSqm.getResultType(),
SqmQuerySource.CRITERIA,
leftSqm.nodeBuilder()
);
sqmSelectStatement.setQueryPart( sqmQueryGroup );
return sqmSelectStatement;
}

@Override
public <X, T, V extends T> SqmSingularJoin<X, V> treat(Join<X, T> join, Class<V> type) {
//noinspection unchecked
return (SqmTreatedSingularJoin<X,T,V>) ( (SqmSingularJoin<X, T>) join ).treatAs( type );
}

Expand Down

0 comments on commit d5247f8

Please sign in to comment.