1616package org .mybatis .dynamic .sql .select .render ;
1717
1818import java .util .Optional ;
19+ import java .util .concurrent .atomic .AtomicInteger ;
1920
2021import org .mybatis .dynamic .sql .render .RenderingStrategy ;
2122import org .mybatis .dynamic .sql .select .PagingModel ;
@@ -26,11 +27,13 @@ public class FetchFirstPagingModelRenderer {
2627 private static final String OFFSET_PARAMETER = "_offset" ; //$NON-NLS-1$
2728 private RenderingStrategy renderingStrategy ;
2829 private PagingModel pagingModel ;
30+ private AtomicInteger sequence ;
2931
3032 public FetchFirstPagingModelRenderer (RenderingStrategy renderingStrategy ,
31- PagingModel pagingModel ) {
33+ PagingModel pagingModel , AtomicInteger sequence ) {
3234 this .renderingStrategy = renderingStrategy ;
3335 this .pagingModel = pagingModel ;
36+ this .sequence = sequence ;
3437 }
3538
3639 public Optional <FragmentAndParameters > render () {
@@ -50,28 +53,36 @@ private Optional<FragmentAndParameters> renderFetchFirstRowsOnly() {
5053 }
5154
5255 private Optional <FragmentAndParameters > renderFetchFirstRowsOnly (Long fetchFirstRows ) {
56+ String mapKey = formatParameterMapKey (FETCH_FIRST_ROWS_PARAMETER );
5357 return FragmentAndParameters
54- .withFragment ("fetch first " + renderPlaceholder (FETCH_FIRST_ROWS_PARAMETER ) //$NON-NLS-1$
58+ .withFragment ("fetch first " + renderPlaceholder (mapKey ) //$NON-NLS-1$
5559 + " rows only" ) //$NON-NLS-1$
56- .withParameter (FETCH_FIRST_ROWS_PARAMETER , fetchFirstRows )
60+ .withParameter (mapKey , fetchFirstRows )
5761 .buildOptional ();
5862 }
5963
6064 private Optional <FragmentAndParameters > renderOffsetOnly (Long offset ) {
61- return FragmentAndParameters .withFragment ("offset " + renderPlaceholder (OFFSET_PARAMETER ) //$NON-NLS-1$
65+ String mapKey = formatParameterMapKey (OFFSET_PARAMETER );
66+ return FragmentAndParameters .withFragment ("offset " + renderPlaceholder (mapKey ) //$NON-NLS-1$
6267 + " rows" ) //$NON-NLS-1$
63- .withParameter (OFFSET_PARAMETER , offset )
68+ .withParameter (mapKey , offset )
6469 .buildOptional ();
6570 }
6671
6772 private Optional <FragmentAndParameters > renderOffsetAndFetchFirstRows (Long offset , Long fetchFirstRows ) {
68- return FragmentAndParameters .withFragment ("offset " + renderPlaceholder (OFFSET_PARAMETER ) //$NON-NLS-1$
69- + " rows fetch first " + renderPlaceholder (FETCH_FIRST_ROWS_PARAMETER ) //$NON-NLS-1$
73+ String mapKey1 = formatParameterMapKey (OFFSET_PARAMETER );
74+ String mapKey2 = formatParameterMapKey (FETCH_FIRST_ROWS_PARAMETER );
75+ return FragmentAndParameters .withFragment ("offset " + renderPlaceholder (mapKey1 ) //$NON-NLS-1$
76+ + " rows fetch first " + renderPlaceholder (mapKey2 ) //$NON-NLS-1$
7077 + " rows only" ) //$NON-NLS-1$
71- .withParameter (OFFSET_PARAMETER , offset )
72- .withParameter (FETCH_FIRST_ROWS_PARAMETER , fetchFirstRows )
78+ .withParameter (mapKey1 , offset )
79+ .withParameter (mapKey2 , fetchFirstRows )
7380 .buildOptional ();
7481 }
82+
83+ private String formatParameterMapKey (String parameterMapKey ) {
84+ return parameterMapKey + sequence .getAndIncrement (); //$NON-NLS-1$
85+ }
7586
7687 private String renderPlaceholder (String parameterName ) {
7788 return renderingStrategy .getFormattedJdbcPlaceholder (RenderingStrategy .DEFAULT_PARAMETER_PREFIX ,
0 commit comments