Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -75,14 +75,14 @@ public static NavigablePath buildSubNavigablePath(SqmPath<?> lhs, String subNavi
return buildSubNavigablePath( navigablePath, subNavigable, alias );
}

public static SqmPredicate combinePredicates(SqmPredicate baseRestriction, List<SqmPredicate> incomingRestrictions) {
public static SqmPredicate combinePredicates(SqmPredicate baseRestriction, List<Predicate> incomingRestrictions) {
if ( isEmpty( incomingRestrictions ) ) {
return baseRestriction;
}

SqmPredicate combined = combinePredicates( null, baseRestriction );
for ( int i = 0; i < incomingRestrictions.size(); i++ ) {
combined = combinePredicates( combined, incomingRestrictions.get(i) );
combined = combinePredicates( combined, (SqmPredicate) incomingRestrictions.get(i) );
}
return combined;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ public SqmPredicate in(Expression<Collection<?>> values) {

@Override
public @Nullable JavaType<T> getJavaTypeDescriptor() {
return getNodeType() == null ? null : getNodeType().getExpressibleJavaType();
final SqmBindableType<T> nodeType = getNodeType();
return nodeType == null ? null : nodeType.getExpressibleJavaType();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -127,24 +127,28 @@ public SqmPath<?> resolveIndexedAccess(
);
}

private Integer ordinalValue() {
return getExpressibleJavaType().toOrdinal( enumValue );
}

@Override
public SqmExpression<Long> asLong() {
return nodeBuilder().literal( getExpressibleJavaType().toOrdinal( enumValue ).longValue() );
return nodeBuilder().literal( ordinalValue().longValue() );
}

@Override
public SqmExpression<Integer> asInteger() {
return nodeBuilder().literal( getExpressibleJavaType().toOrdinal( enumValue ) );
return nodeBuilder().literal( ordinalValue() );
}

@Override
public SqmExpression<Float> asFloat() {
return nodeBuilder().literal( getExpressibleJavaType().toOrdinal( enumValue ).floatValue() );
return nodeBuilder().literal( ordinalValue().floatValue() );
}

@Override
public SqmExpression<Double> asDouble() {
return nodeBuilder().literal( getExpressibleJavaType().toOrdinal( enumValue ).doubleValue() );
return nodeBuilder().literal( ordinalValue().doubleValue() );
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,9 +153,9 @@ public String getEntityName() {

@Override
public String toString() {
return getExplicitAlias() == null
? getEntityName()
: getEntityName() + " as " + getExplicitAlias();
final String entityName = getEntityName();
final String explicitAlias = getExplicitAlias();
return explicitAlias == null ? entityName : entityName + " as " + explicitAlias;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -188,17 +188,9 @@ public SqmQuerySpec<T> getQuerySpec() {
}

public boolean producesUniqueResults() {
return producesUniqueResults( getQueryPart() );
}

private boolean producesUniqueResults(SqmQueryPart<?> queryPart) {
if ( queryPart instanceof SqmQuerySpec<?> querySpec ) {
return querySpec.producesUniqueResults();
}
else {
// For query groups we have to assume that duplicates are possible
return true;
}
// For query groups we have to assume that duplicates are possible
return !( getQueryPart() instanceof SqmQuerySpec<?> querySpec )
|| querySpec.producesUniqueResults();
}

public boolean containsCollectionFetches() {
Expand Down Expand Up @@ -322,8 +314,8 @@ public SqmSelectStatement<T> where(List<Predicate> restrictions) {

@Override
public SqmSelectStatement<T> having(List<Predicate> restrictions) {
//noinspection unchecked,rawtypes
final SqmPredicate combined = combinePredicates( getQuerySpec().getHavingClausePredicate(), (List) restrictions );
final SqmPredicate combined =
combinePredicates( getQuerySpec().getHavingClausePredicate(), restrictions );
getQuerySpec().setHavingClausePredicate( combined );
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -238,9 +238,8 @@ public SqmQuery<?> getContainingQuery() {

@Override
public SqmSelectQuery<?> getParent() {
final SqmQuery<?> containingQuery = getContainingQuery();
// JPA only allows sub-queries on select queries
if ( containingQuery instanceof SqmSelectQuery<?> sqmSelectQuery ) {
// JPA only allows subqueries on select queries
if ( getContainingQuery() instanceof SqmSelectQuery<?> sqmSelectQuery ) {
return sqmSelectQuery;
}
else {
Expand Down Expand Up @@ -656,39 +655,43 @@ private void applyInferableType(Class<T> type) {
}
}

private <B> SqmExpression<B> castToBasicType(Class<B> type) {
return castAs( nodeBuilder().getTypeConfiguration().getBasicTypeForJavaType( type ) );
}

@Override
public SqmExpression<Long> asLong() {
return castAs( nodeBuilder().getTypeConfiguration().getBasicTypeForJavaType( Long.class ) );
return castToBasicType( Long.class );
}

@Override
public SqmExpression<Integer> asInteger() {
return castAs( nodeBuilder().getTypeConfiguration().getBasicTypeForJavaType( Integer.class ) );
return castToBasicType( Integer.class );
}

@Override
public SqmExpression<Float> asFloat() {
return castAs( nodeBuilder().getTypeConfiguration().getBasicTypeForJavaType( Float.class ) );
return castToBasicType( Float.class );
}

@Override
public SqmExpression<Double> asDouble() {
return castAs( nodeBuilder().getTypeConfiguration().getBasicTypeForJavaType( Double.class ) );
return castToBasicType( Double.class );
}

@Override
public SqmExpression<BigDecimal> asBigDecimal() {
return castAs( nodeBuilder().getTypeConfiguration().getBasicTypeForJavaType( BigDecimal.class ) );
return castToBasicType( BigDecimal.class );
}

@Override
public SqmExpression<BigInteger> asBigInteger() {
return castAs( nodeBuilder().getTypeConfiguration().getBasicTypeForJavaType( BigInteger.class ) );
return castToBasicType( BigInteger.class );
}

@Override
public SqmExpression<String> asString() {
return castAs( nodeBuilder().getTypeConfiguration().getBasicTypeForJavaType( String.class ) );
return castToBasicType( String.class );
}

@Override
Expand All @@ -698,10 +701,8 @@ public <X> SqmExpression<X> as(Class<X> type) {

@Override
public JavaType<T> getJavaTypeDescriptor() {
if ( getNodeType() == null ) {
return null;
}
return getNodeType().getExpressibleJavaType();
final SqmBindableType<T> nodeType = getNodeType();
return nodeType == null ? null : nodeType.getExpressibleJavaType();
}

@Override
Expand All @@ -728,8 +729,8 @@ public Subquery<T> where(List<Predicate> restrictions) {

@Override
public Subquery<T> having(List<Predicate> restrictions) {
//noinspection unchecked,rawtypes
final SqmPredicate combined = combinePredicates( getQuerySpec().getHavingClausePredicate(), (List) restrictions );
final SqmPredicate combined =
combinePredicates( getQuerySpec().getHavingClausePredicate(), restrictions );
getQuerySpec().setHavingClausePredicate( combined );
return this;
}
Expand Down