@@ -41,23 +41,26 @@ class ParameterMetadataProvider {
41
41
@ Nullable
42
42
private final Iterator <Object > bindableParameterValueIterator ;
43
43
private final List <ParameterMetadata > parameterMetadata = new ArrayList <>();
44
+ private final LikeEscaper likeEscaper ;
44
45
45
46
/**
46
47
* Creates new instance of this class with the given {@link RelationalParameterAccessor}.
47
48
*
48
49
* @param accessor relational parameter accessor (must not be {@literal null}).
50
+ * @param likeEscaper escaper for LIKE operator parameters (must not be {@literal null})
49
51
*/
50
- ParameterMetadataProvider (RelationalParameterAccessor accessor ) {
51
- this (accessor .getBindableParameters (), accessor .iterator ());
52
+ ParameterMetadataProvider (RelationalParameterAccessor accessor , LikeEscaper likeEscaper ) {
53
+ this (accessor .getBindableParameters (), accessor .iterator (), likeEscaper );
52
54
}
53
55
54
56
/**
55
57
* Creates new instance of this class with the given {@link Parameters}.
56
58
*
57
- * @param parameters method parameters (must not be {@literal null})
59
+ * @param parameters method parameters (must not be {@literal null})
60
+ * @param likeEscaper escaper for LIKE operator parameters (must not be {@literal null})
58
61
*/
59
- ParameterMetadataProvider (Parameters <?, ?> parameters ) {
60
- this (parameters , null );
62
+ ParameterMetadataProvider (Parameters <?, ?> parameters , LikeEscaper likeEscaper ) {
63
+ this (parameters , null , likeEscaper );
61
64
}
62
65
63
66
/**
@@ -66,25 +69,33 @@ class ParameterMetadataProvider {
66
69
*
67
70
* @param bindableParameterValueIterator iterator over bindable parameter values
68
71
* @param parameters method parameters (must not be {@literal null})
72
+ * @param likeEscaper escaper for LIKE operator parameters (must not be {@literal null})
69
73
*/
70
74
private ParameterMetadataProvider (Parameters <?, ?> parameters ,
71
- @ Nullable Iterator <Object > bindableParameterValueIterator ) {
75
+ @ Nullable Iterator <Object > bindableParameterValueIterator ,
76
+ LikeEscaper likeEscaper ) {
72
77
Assert .notNull (parameters , "Parameters must not be null!" );
78
+ Assert .notNull (likeEscaper , "Like escaper must not be null!" );
79
+
73
80
this .bindableParameterIterator = parameters .getBindableParameters ().iterator ();
74
81
this .bindableParameterValueIterator = bindableParameterValueIterator ;
82
+ this .likeEscaper = likeEscaper ;
75
83
}
76
84
77
85
/**
78
86
* Creates new instance of {@link ParameterMetadata} for the given {@link Part} and next {@link Parameter}.
79
87
*/
80
88
public ParameterMetadata next (Part part ) {
81
- Assert .isTrue (bindableParameterIterator .hasNext (), () -> String .format ("No parameter available for part %s." , part ));
89
+ Assert .isTrue (bindableParameterIterator .hasNext (),
90
+ () -> String .format ("No parameter available for part %s." , part ));
82
91
Parameter parameter = bindableParameterIterator .next ();
83
- String name = getParameterName (parameter );
84
- Class <?> type = parameter .getType ();
85
- Object value = getParameterValue ();
86
- boolean isNullProperty = value == null && Part .Type .SIMPLE_PROPERTY .equals (part .getType ());
87
- ParameterMetadata metadata = new ParameterMetadata (name , type , isNullProperty );
92
+ ParameterMetadata metadata = ParameterMetadata .builder ()
93
+ .type (parameter .getType ())
94
+ .partType (part .getType ())
95
+ .name (getParameterName (parameter ))
96
+ .isNullParameter (getParameterValue () == null && Part .Type .SIMPLE_PROPERTY .equals (part .getType ()))
97
+ .likeEscaper (likeEscaper )
98
+ .build ();
88
99
parameterMetadata .add (metadata );
89
100
return metadata ;
90
101
}
@@ -105,43 +116,4 @@ private String getParameterName(Parameter parameter) {
105
116
private Object getParameterValue () {
106
117
return bindableParameterValueIterator == null ? VALUE_PLACEHOLDER : bindableParameterValueIterator .next ();
107
118
}
108
-
109
- /**
110
- * Helper class to hold information about query parameter.
111
- */
112
- static class ParameterMetadata {
113
- @ Nullable
114
- private final String name ;
115
- private final Class <?> type ;
116
- private final boolean isNullParameter ;
117
-
118
- /**
119
- * Creates new instance of this class with the given method name part, parameter name, parameter type and
120
- * parameter value.
121
- *
122
- * @param name parameter name
123
- * @param type parameter type (must not be {@literal null})
124
- * @param isNullParameter whether parameter value should be translated to {@literal IS NULL} condition
125
- */
126
- public ParameterMetadata (@ Nullable String name , Class <?> type , boolean isNullParameter ) {
127
- Assert .notNull (type , "Type must not be null" );
128
-
129
- this .name = name ;
130
- this .type = type ;
131
- this .isNullParameter = isNullParameter ;
132
- }
133
-
134
- @ Nullable
135
- public String getName () {
136
- return name ;
137
- }
138
-
139
- public Class <?> getType () {
140
- return type ;
141
- }
142
-
143
- public boolean isIsNullParameter () {
144
- return isNullParameter ;
145
- }
146
- }
147
119
}
0 commit comments