From 1606953a32426bc41a36371afdbc694a8fabb1a2 Mon Sep 17 00:00:00 2001 From: Gavin Date: Wed, 11 Jan 2023 11:12:24 +0100 Subject: [PATCH] make SelfRenderingFunctionSqlAstExpression not blow up with NPE this doesn't exactly *fix* cases with a nonsensible argument list, but it at least gives us a chance to produce a more meaningful error --- ...SelfRenderingFunctionSqlAstExpression.java | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/function/SelfRenderingFunctionSqlAstExpression.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/function/SelfRenderingFunctionSqlAstExpression.java index ddaeabe91c..a6e65ce0f9 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/function/SelfRenderingFunctionSqlAstExpression.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/function/SelfRenderingFunctionSqlAstExpression.java @@ -73,10 +73,9 @@ public List getArguments() { @Override public JdbcMappingContainer getExpressionType() { - if ( type instanceof SqlExpressible) { - return (JdbcMappingContainer) type; - } - return expressible; + return type instanceof SqlExpressible + ? (JdbcMappingContainer) type + : expressible; } protected FunctionRenderingSupport getRenderer() { @@ -107,10 +106,14 @@ public DomainResult createDomainResult( jdbcJavaType = jdbcMapping.getJdbcJavaType(); converter = jdbcMapping.getValueConverter(); } - else { + else if ( type != null ) { jdbcJavaType = type.getExpressibleJavaType(); converter = null; } + else { + jdbcJavaType = null; + converter = null; + } final SqlAstCreationState sqlAstCreationState = creationState.getSqlAstCreationState(); return new BasicResult( sqlAstCreationState.getSqlExpressionResolver() @@ -123,7 +126,7 @@ public DomainResult createDomainResult( ) .getValuesArrayPosition(), resultVariable, - type.getExpressibleJavaType(), + type == null ? null : type.getExpressibleJavaType(), converter ); } @@ -178,9 +181,15 @@ public String getCustomWriteExpression() { @Override public JdbcMapping getJdbcMapping() { - return type instanceof SqlExpressible - ? ( (SqlExpressible) type ).getJdbcMapping() - : ( (SqlExpressible) expressible ).getJdbcMapping(); + if ( type instanceof SqlExpressible ) { + return ( (SqlExpressible) type ).getJdbcMapping(); + } + else if ( expressible instanceof SqlExpressible ) { + return ( (SqlExpressible) expressible ).getJdbcMapping(); + } + else { + return null; + } } @Override