From 7201001834b02e5f1fb90f1b7b0d14def825dad2 Mon Sep 17 00:00:00 2001 From: Gavin King Date: Sun, 21 Sep 2025 19:00:31 +0200 Subject: [PATCH] HHH-19795 better error message for an illegal use of ? in a pattern --- .../function/internal/PatternRenderer.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/internal/PatternRenderer.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/internal/PatternRenderer.java index 1d66b15d270c..bb14a6d012b7 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/internal/PatternRenderer.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/produce/function/internal/PatternRenderer.java @@ -96,7 +96,7 @@ else if ( c == '?' ) { vararg = paramList.size(); } else { - final int paramNumber = parseInt( index.toString() ); + final int paramNumber = parameterIndex( pattern, index.toString() ); paramList.add( paramNumber ); index.setLength(0); if ( paramNumber > max ) { @@ -126,6 +126,21 @@ else if ( c == '?' ) { this.argumentRenderingModes = argumentRenderingModes; } + private static int parameterIndex(String pattern, String index) { + if ( index.isEmpty() ) { + throw new IllegalArgumentException( "Missing parameter index in pattern: '" + pattern + "'" ); + } + final int paramNumber; + try { + paramNumber = parseInt( index ); + } + catch (NumberFormatException nfe) { + throw new IllegalArgumentException( "Illegal parameter index '" + index + + "' in pattern: '" + pattern + "'", nfe ); + } + return paramNumber; + } + public boolean hasVarargs() { return varargParam >= 0; }