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
This commit is contained in:
Gavin 2023-01-11 11:12:24 +01:00 committed by Gavin King
parent 296cbb88bd
commit 1606953a32

View File

@ -73,10 +73,9 @@ public List<? extends SqlAstNode> getArguments() {
@Override @Override
public JdbcMappingContainer getExpressionType() { public JdbcMappingContainer getExpressionType() {
if ( type instanceof SqlExpressible) { return type instanceof SqlExpressible
return (JdbcMappingContainer) type; ? (JdbcMappingContainer) type
} : expressible;
return expressible;
} }
protected FunctionRenderingSupport getRenderer() { protected FunctionRenderingSupport getRenderer() {
@ -107,10 +106,14 @@ public DomainResult<?> createDomainResult(
jdbcJavaType = jdbcMapping.getJdbcJavaType(); jdbcJavaType = jdbcMapping.getJdbcJavaType();
converter = jdbcMapping.getValueConverter(); converter = jdbcMapping.getValueConverter();
} }
else { else if ( type != null ) {
jdbcJavaType = type.getExpressibleJavaType(); jdbcJavaType = type.getExpressibleJavaType();
converter = null; converter = null;
} }
else {
jdbcJavaType = null;
converter = null;
}
final SqlAstCreationState sqlAstCreationState = creationState.getSqlAstCreationState(); final SqlAstCreationState sqlAstCreationState = creationState.getSqlAstCreationState();
return new BasicResult( return new BasicResult(
sqlAstCreationState.getSqlExpressionResolver() sqlAstCreationState.getSqlExpressionResolver()
@ -123,7 +126,7 @@ public DomainResult<?> createDomainResult(
) )
.getValuesArrayPosition(), .getValuesArrayPosition(),
resultVariable, resultVariable,
type.getExpressibleJavaType(), type == null ? null : type.getExpressibleJavaType(),
converter converter
); );
} }
@ -178,9 +181,15 @@ public String getCustomWriteExpression() {
@Override @Override
public JdbcMapping getJdbcMapping() { public JdbcMapping getJdbcMapping() {
return type instanceof SqlExpressible if ( type instanceof SqlExpressible ) {
? ( (SqlExpressible) type ).getJdbcMapping() return ( (SqlExpressible) type ).getJdbcMapping();
: ( (SqlExpressible) expressible ).getJdbcMapping(); }
else if ( expressible instanceof SqlExpressible ) {
return ( (SqlExpressible) expressible ).getJdbcMapping();
}
else {
return null;
}
} }
@Override @Override