1818import org .hibernate .query .spi .QueryParameterImplementor ;
1919import org .hibernate .query .sql .spi .ParameterOccurrence ;
2020import org .hibernate .query .sql .spi .ParameterRecognizer ;
21- import org .hibernate .sql .ast .internal .ParameterMarkerStrategyStandard ;
2221import org .hibernate .sql .ast .spi .ParameterMarkerStrategy ;
2322
2423/**
@@ -36,15 +35,19 @@ private enum ParameterStyle {
3635 private Map <String , QueryParameterImplementor <?>> namedQueryParameters ;
3736 private Map <Integer , QueryParameterImplementor <?>> positionalQueryParameters ;
3837
39- private int parameterImplicitPosition ;
38+ private int ordinalParameterImplicitPosition ;
39+
40+ private int nextParameterMarkerPosition ;
4041 private final ParameterMarkerStrategy parameterMarkerStrategy ;
4142
4243 private List <ParameterOccurrence > parameterList ;
4344 private final StringBuilder sqlStringBuffer = new StringBuilder ();
4445
4546 public ParameterRecognizerImpl (ParameterMarkerStrategy parameterMarkerStrategy ) {
46- this .parameterMarkerStrategy = parameterMarkerStrategy == null ? ParameterMarkerStrategyStandard .INSTANCE : parameterMarkerStrategy ;
47- parameterImplicitPosition = 1 ;
47+ assert parameterMarkerStrategy != null ;
48+ ordinalParameterImplicitPosition = 1 ;
49+ nextParameterMarkerPosition = 1 ;
50+ this .parameterMarkerStrategy = parameterMarkerStrategy ;
4851 }
4952
5053 @ Override
@@ -61,13 +64,13 @@ public void complete() {
6164 if ( first ) {
6265 throw new ParameterLabelException (
6366 "Ordinal parameter labels start from '?" + position + "'"
64- + " (ordinal parameters must be labelled from '?1')"
67+ + " (ordinal parameters must be labelled from '?1')"
6568 );
6669 }
6770 else {
6871 throw new ParameterLabelException (
6972 "Gap between '?" + previous + "' and '?" + position + "' in ordinal parameter labels"
70- + " (ordinal parameters must be labelled sequentially)"
73+ + " (ordinal parameters must be labelled sequentially)"
7174 );
7275 }
7376 }
@@ -105,7 +108,7 @@ else if ( parameterStyle != ParameterStyle.JDBC ) {
105108 throw new ParameterRecognitionException ( "Cannot mix parameter styles between JDBC-style, ordinal and named in the same query" );
106109 }
107110
108- int implicitPosition = parameterImplicitPosition ++;
111+ int implicitPosition = ordinalParameterImplicitPosition ++;
109112
110113 QueryParameterImplementor <?> parameter = null ;
111114
@@ -121,7 +124,7 @@ else if ( parameterStyle != ParameterStyle.JDBC ) {
121124 positionalQueryParameters .put ( implicitPosition , parameter );
122125 }
123126
124- recognizeParameter ( parameter , implicitPosition );
127+ recognizeParameter ( parameter );
125128 }
126129
127130 @ Override
@@ -147,7 +150,7 @@ else if ( parameterStyle != ParameterStyle.NAMED ) {
147150 namedQueryParameters .put ( name , parameter );
148151 }
149152
150- recognizeParameter ( parameter , parameterImplicitPosition ++ );
153+ recognizeParameter ( parameter );
151154 }
152155
153156 @ Override
@@ -177,16 +180,16 @@ else if ( parameterStyle != ParameterStyle.NAMED ) {
177180 positionalQueryParameters .put ( position , parameter );
178181 }
179182
180- recognizeParameter ( parameter , parameterImplicitPosition ++ );
183+ recognizeParameter ( parameter );
181184 }
182185
183186 @ Override
184187 public void other (char character ) {
185188 sqlStringBuffer .append ( character );
186189 }
187190
188- private void recognizeParameter (QueryParameterImplementor parameter , int position ) {
189- final String marker = parameterMarkerStrategy .createMarker ( position , null );
191+ private void recognizeParameter (QueryParameterImplementor <?> parameter ) {
192+ final String marker = parameterMarkerStrategy .createMarker ( nextParameterMarkerPosition ++ , null );
190193 final int markerLength = marker .length ();
191194 if ( parameterList == null ) {
192195 parameterList = new ArrayList <>();
0 commit comments