16
16
package org .mybatis .dynamic .sql .select .render ;
17
17
18
18
import java .util .Optional ;
19
+ import java .util .concurrent .atomic .AtomicInteger ;
19
20
20
21
import org .mybatis .dynamic .sql .render .RenderingStrategy ;
21
22
import org .mybatis .dynamic .sql .select .PagingModel ;
@@ -26,11 +27,13 @@ public class FetchFirstPagingModelRenderer {
26
27
private static final String OFFSET_PARAMETER = "_offset" ; //$NON-NLS-1$
27
28
private RenderingStrategy renderingStrategy ;
28
29
private PagingModel pagingModel ;
30
+ private AtomicInteger sequence ;
29
31
30
32
public FetchFirstPagingModelRenderer (RenderingStrategy renderingStrategy ,
31
- PagingModel pagingModel ) {
33
+ PagingModel pagingModel , AtomicInteger sequence ) {
32
34
this .renderingStrategy = renderingStrategy ;
33
35
this .pagingModel = pagingModel ;
36
+ this .sequence = sequence ;
34
37
}
35
38
36
39
public Optional <FragmentAndParameters > render () {
@@ -50,28 +53,36 @@ private Optional<FragmentAndParameters> renderFetchFirstRowsOnly() {
50
53
}
51
54
52
55
private Optional <FragmentAndParameters > renderFetchFirstRowsOnly (Long fetchFirstRows ) {
56
+ String mapKey = formatParameterMapKey (FETCH_FIRST_ROWS_PARAMETER );
53
57
return FragmentAndParameters
54
- .withFragment ("fetch first " + renderPlaceholder (FETCH_FIRST_ROWS_PARAMETER ) //$NON-NLS-1$
58
+ .withFragment ("fetch first " + renderPlaceholder (mapKey ) //$NON-NLS-1$
55
59
+ " rows only" ) //$NON-NLS-1$
56
- .withParameter (FETCH_FIRST_ROWS_PARAMETER , fetchFirstRows )
60
+ .withParameter (mapKey , fetchFirstRows )
57
61
.buildOptional ();
58
62
}
59
63
60
64
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$
62
67
+ " rows" ) //$NON-NLS-1$
63
- .withParameter (OFFSET_PARAMETER , offset )
68
+ .withParameter (mapKey , offset )
64
69
.buildOptional ();
65
70
}
66
71
67
72
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$
70
77
+ " 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 )
73
80
.buildOptional ();
74
81
}
82
+
83
+ private String formatParameterMapKey (String parameterMapKey ) {
84
+ return parameterMapKey + sequence .getAndIncrement (); //$NON-NLS-1$
85
+ }
75
86
76
87
private String renderPlaceholder (String parameterName ) {
77
88
return renderingStrategy .getFormattedJdbcPlaceholder (RenderingStrategy .DEFAULT_PARAMETER_PREFIX ,
0 commit comments