@@ -194,32 +194,31 @@ private static QueryParams parseParams(XContentParser p) throws IOException {
194194 namedParams .add (currentParam );
195195 }
196196 } else {
197- paramValue = null ;
198- if (token == XContentParser .Token .VALUE_STRING ) {
199- paramValue = p .text ();
200- type = DataType .KEYWORD ;
201- } else if (token == XContentParser .Token .VALUE_NUMBER ) {
202- XContentParser .NumberType numberType = p .numberType ();
203- if (numberType == XContentParser .NumberType .INT ) {
204- paramValue = p .intValue ();
205- type = DataType .INTEGER ;
206- } else if (numberType == XContentParser .NumberType .LONG ) {
207- paramValue = p .longValue ();
208- type = DataType .LONG ;
209- } else if (numberType == XContentParser .NumberType .DOUBLE ) {
210- paramValue = p .doubleValue ();
211- type = DataType .DOUBLE ;
197+ if (token == XContentParser .Token .START_ARRAY ) {
198+ DataType currentType = null ;
199+ List <Object > paramValues = new ArrayList <>();
200+ while ((p .nextToken ()) != XContentParser .Token .END_ARRAY ) {
201+ ParamValueAndType valueAndDataType = parseSingleParamValue (p , errors );
202+ if (currentType == null ) {
203+ currentType = valueAndDataType .type ;
204+ } else if (currentType != valueAndDataType .type ) {
205+ errors .add (
206+ new XContentParseException (
207+ loc ,
208+ "Unnamed parameter has values from different types, found "
209+ + currentType
210+ + " and "
211+ + valueAndDataType .type
212+ )
213+ );
214+ }
215+ paramValues .add (valueAndDataType .value );
212216 }
213- } else if (token == XContentParser .Token .VALUE_BOOLEAN ) {
214- paramValue = p .booleanValue ();
215- type = DataType .BOOLEAN ;
216- } else if (token == XContentParser .Token .VALUE_NULL ) {
217- type = DataType .NULL ;
217+ unNamedParams .add (new QueryParam (null , paramValues , currentType , VALUE ));
218218 } else {
219- errors .add (new XContentParseException (loc , token + " is not supported as a parameter" ));
219+ ParamValueAndType valueAndDataType = parseSingleParamValue (p , errors );
220+ unNamedParams .add (new QueryParam (null , valueAndDataType .value , valueAndDataType .type , VALUE ));
220221 }
221- currentParam = new QueryParam (null , paramValue , type , VALUE );
222- unNamedParams .add (currentParam );
223222 }
224223 }
225224 }
@@ -243,6 +242,39 @@ private static QueryParams parseParams(XContentParser p) throws IOException {
243242 return new QueryParams (namedParams .isEmpty () ? unNamedParams : namedParams );
244243 }
245244
245+ private record ParamValueAndType (Object value , DataType type ) {}
246+
247+ private static ParamValueAndType parseSingleParamValue (XContentParser p , List <XContentParseException > errors ) throws IOException {
248+ Object paramValue = null ;
249+ DataType type = null ;
250+ XContentParser .Token token = p .currentToken ();
251+ if (token == XContentParser .Token .VALUE_STRING ) {
252+ paramValue = p .text ();
253+ type = DataType .KEYWORD ;
254+ } else if (token == XContentParser .Token .VALUE_NUMBER ) {
255+ XContentParser .NumberType numberType = p .numberType ();
256+ if (numberType == XContentParser .NumberType .INT ) {
257+ paramValue = p .intValue ();
258+ type = DataType .INTEGER ;
259+ } else if (numberType == XContentParser .NumberType .LONG ) {
260+ paramValue = p .longValue ();
261+ type = DataType .LONG ;
262+ } else if (numberType == XContentParser .NumberType .DOUBLE ) {
263+ paramValue = p .doubleValue ();
264+ type = DataType .DOUBLE ;
265+ }
266+ } else if (token == XContentParser .Token .VALUE_BOOLEAN ) {
267+ paramValue = p .booleanValue ();
268+ type = DataType .BOOLEAN ;
269+ } else if (token == XContentParser .Token .VALUE_NULL ) {
270+ type = DataType .NULL ;
271+ } else {
272+ XContentLocation loc = p .getTokenLocation ();
273+ errors .add (new XContentParseException (loc , token + " is not supported as a parameter" ));
274+ }
275+ return new ParamValueAndType (paramValue , type );
276+ }
277+
246278 private static void checkParamNameValidity (String name , List <XContentParseException > errors , XContentLocation loc ) {
247279 if (isValidParamName (name ) == false ) {
248280 errors .add (
0 commit comments