diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/internal/TypecheckUtil.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/internal/TypecheckUtil.java index e15315f9c6..d1a0a5e077 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/internal/TypecheckUtil.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/internal/TypecheckUtil.java @@ -491,8 +491,8 @@ public class TypecheckUtil { } public static void assertOperable(SqmExpression left, SqmExpression right, BinaryArithmeticOperator op) { - final SqmExpressible leftNodeType = isGeneric( left ) ? left.getExpressible() : left.getNodeType(); - final SqmExpressible rightNodeType = isGeneric( right ) ? right.getExpressible() : right.getNodeType(); + final SqmExpressible leftNodeType = left.getExpressible(); + final SqmExpressible rightNodeType = right.getExpressible(); if ( leftNodeType != null && rightNodeType != null ) { final Class leftJavaType = leftNodeType.getRelationalJavaType().getJavaTypeClass(); final Class rightJavaType = rightNodeType.getRelationalJavaType().getJavaTypeClass(); @@ -590,11 +590,6 @@ public class TypecheckUtil { } } - public static boolean isGeneric(SqmTypedNode arg) { - return arg instanceof SqmPath && ( (SqmPath) arg ).getModel() instanceof SqmPathSource - && ( (SqmPathSource) ( (SqmPath) arg ).getModel() ).isGeneric(); - } - public static boolean isNumberArray(SqmExpressible expressible) { if ( expressible != null ) { final DomainType domainType = expressible.getSqmType(); @@ -633,9 +628,7 @@ public class TypecheckUtil { } public static void assertNumeric(SqmExpression expression, UnaryArithmeticOperator op) { - final SqmExpressible nodeType = isGeneric( expression ) - ? expression.getExpressible() - : expression.getNodeType(); + final SqmExpressible nodeType = expression.getExpressible(); if ( nodeType != null ) { if ( !( nodeType.getSqmType() instanceof JdbcMapping jdbcMapping ) || !jdbcMapping.getJdbcType().isNumber() ) { diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/SqmBinaryArithmetic.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/SqmBinaryArithmetic.java index a15f1de97e..3370403659 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/SqmBinaryArithmetic.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/SqmBinaryArithmetic.java @@ -9,12 +9,9 @@ import org.hibernate.query.sqm.BinaryArithmeticOperator; import org.hibernate.query.sqm.NodeBuilder; import org.hibernate.query.sqm.SemanticQueryWalker; import org.hibernate.query.sqm.SqmExpressible; -import org.hibernate.query.sqm.SqmPathSource; import org.hibernate.query.sqm.tree.SqmCopyContext; -import org.hibernate.query.sqm.tree.domain.SqmPath; import org.hibernate.query.sqm.tree.select.SqmSelectableNode; - import static org.hibernate.query.sqm.BinaryArithmeticOperator.ADD; import static org.hibernate.query.sqm.BinaryArithmeticOperator.SUBTRACT; import static org.hibernate.type.spi.TypeConfiguration.isDuration; @@ -36,8 +33,8 @@ public class SqmBinaryArithmetic extends AbstractSqmExpression implements //noinspection unchecked super( (SqmExpressible) domainModel.getTypeConfiguration().resolveArithmeticType( - getExpressibleNodeType( lhsOperand ), - getExpressibleNodeType( rhsOperand ), + lhsOperand.getExpressible(), + rhsOperand.getExpressible(), operator ), nodeBuilder @@ -51,20 +48,8 @@ public class SqmBinaryArithmetic extends AbstractSqmExpression implements ( operator == ADD || operator == SUBTRACT ) ) { return; } - this.lhsOperand.applyInferableType( getExpressibleNodeType( rhsOperand ) ); - this.rhsOperand.applyInferableType( getExpressibleNodeType( lhsOperand ) ); - } - - private static SqmExpressible getExpressibleNodeType(SqmExpression arg) { - if ( arg instanceof SqmPath ) { - SqmPath path = (SqmPath) arg; - if ( path.getModel() instanceof SqmPathSource ) { - if ( ( (SqmPathSource) path.getModel() ).isGeneric() ) { - return path.getResolvedModel(); - } - } - } - return arg.getNodeType(); + this.lhsOperand.applyInferableType( rhsOperand.getExpressible() ); + this.rhsOperand.applyInferableType( lhsOperand.getExpressible() ); } public SqmBinaryArithmetic( diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/SqmUnaryOperation.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/SqmUnaryOperation.java index b6af3f5efe..66bbbcf2d9 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/SqmUnaryOperation.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/SqmUnaryOperation.java @@ -10,8 +10,6 @@ import org.hibernate.query.sqm.UnaryArithmeticOperator; import org.hibernate.query.sqm.tree.SqmCopyContext; import org.hibernate.query.sqm.tree.select.SqmSelectableNode; -import static org.hibernate.query.sqm.internal.TypecheckUtil.isGeneric; - /** * @author Steve Ebersole */ @@ -23,11 +21,9 @@ public class SqmUnaryOperation extends AbstractSqmExpression implements Sq this( operation, operand, - isGeneric( operand ) ? - operand.getExpressible() : - operand.nodeBuilder().getTypeConfiguration().getBasicTypeForJavaType( - operand.getNodeType().getRelationalJavaType().getJavaType() - ) + operand.nodeBuilder().getTypeConfiguration().getBasicTypeForJavaType( + operand.getExpressible().getRelationalJavaType().getJavaType() + ) ); }