26
26
import java .time .Instant ;
27
27
import java .util .Arrays ;
28
28
import java .util .Date ;
29
+ import java .util .HashMap ;
29
30
import java .util .LinkedList ;
30
31
import java .util .List ;
32
+ import java .util .Map ;
31
33
import java .util .Random ;
32
34
import java .util .UUID ;
33
35
@@ -243,7 +245,61 @@ public void testToPOJO_SeriesFromQueryResultIsNull() {
243
245
// Then...
244
246
assertTrue ("there must NO entry in the result list" , myList .isEmpty ());
245
247
}
246
-
248
+
249
+ @ Test
250
+ public void testToPOJO_QueryResultCreatedByGroupByClause () {
251
+ // Given...
252
+ mapper .cacheMeasurementClass (GroupByCarrierDeviceOS .class );
253
+
254
+ List <String > columnList = Arrays .asList ("time" , "median" , "min" , "max" );
255
+
256
+ // InfluxDB client returns the time representation as Double.
257
+ Double now = Long .valueOf (System .currentTimeMillis ()).doubleValue ();
258
+
259
+ List <Object > firstSeriesResult = Arrays .asList (now , new Double ("233.8" ), new Double ("0.0" ),
260
+ new Double ("3090744.0" ));
261
+ // When the "GROUP BY" clause is used, "tags" are returned as Map<String,String>
262
+ Map <String , String > firstSeriesTagMap = new HashMap <>();
263
+ firstSeriesTagMap .put ("CARRIER" , "000/00" );
264
+ firstSeriesTagMap .put ("DEVICE_OS_VERSION" , "4.4.2" );
265
+
266
+ List <Object > secondSeriesResult = Arrays .asList (now , new Double ("552.0" ), new Double ("135.0" ),
267
+ new Double ("267705.0" ));
268
+ Map <String , String > secondSeriesTagMap = new HashMap <>();
269
+ secondSeriesTagMap .put ("CARRIER" , "000/01" );
270
+ secondSeriesTagMap .put ("DEVICE_OS_VERSION" , "9.3.5" );
271
+
272
+ QueryResult .Series firstSeries = new QueryResult .Series ();
273
+ firstSeries .setColumns (columnList );
274
+ firstSeries .setValues (Arrays .asList (firstSeriesResult ));
275
+ firstSeries .setTags (firstSeriesTagMap );
276
+ firstSeries .setName ("tb_network" );
277
+
278
+ QueryResult .Series secondSeries = new QueryResult .Series ();
279
+ secondSeries .setColumns (columnList );
280
+ secondSeries .setValues (Arrays .asList (secondSeriesResult ));
281
+ secondSeries .setTags (secondSeriesTagMap );
282
+ secondSeries .setName ("tb_network" );
283
+
284
+ QueryResult .Result internalResult = new QueryResult .Result ();
285
+ internalResult .setSeries (Arrays .asList (firstSeries , secondSeries ));
286
+
287
+ QueryResult queryResult = new QueryResult ();
288
+ queryResult .setResults (Arrays .asList (internalResult ));
289
+
290
+ // When...
291
+ List <GroupByCarrierDeviceOS > myList = mapper .toPOJO (queryResult , GroupByCarrierDeviceOS .class );
292
+
293
+ // Then...
294
+ GroupByCarrierDeviceOS firstGroupByEntry = myList .get (0 );
295
+ assertEquals ("field 'carrier' does not match" , "000/00" , firstGroupByEntry .carrier );
296
+ assertEquals ("field 'deviceOsVersion' does not match" , "4.4.2" , firstGroupByEntry .deviceOsVersion );
297
+
298
+ GroupByCarrierDeviceOS secondGroupByEntry = myList .get (1 );
299
+ assertEquals ("field 'carrier' does not match" , "000/01" , secondGroupByEntry .carrier );
300
+ assertEquals ("field 'deviceOsVersion' does not match" , "9.3.5" , secondGroupByEntry .deviceOsVersion );
301
+ }
302
+
247
303
@ Measurement (name = "CustomMeasurement" )
248
304
static class MyCustomMeasurement {
249
305
@@ -297,4 +353,35 @@ static class MyPojoWithUnsupportedField {
297
353
@ Column (name = "bar" )
298
354
private Date myDate ;
299
355
}
356
+
357
+ /**
358
+ * Class created based on example from https://github.com/influxdata/influxdb-java/issues/343
359
+ */
360
+ @ Measurement (name = "tb_network" )
361
+ static class GroupByCarrierDeviceOS {
362
+
363
+ @ Column (name = "time" )
364
+ private Instant time ;
365
+
366
+ @ Column (name = "CARRIER" , tag = true )
367
+ private String carrier ;
368
+
369
+ @ Column (name = "DEVICE_OS_VERSION" , tag = true )
370
+ private String deviceOsVersion ;
371
+
372
+ @ Column (name = "median" )
373
+ private Double median ;
374
+
375
+ @ Column (name = "min" )
376
+ private Double min ;
377
+
378
+ @ Column (name = "max" )
379
+ private Double max ;
380
+
381
+ @ Override
382
+ public String toString () {
383
+ return "GroupByCarrierDeviceOS [time=" + time + ", carrier=" + carrier + ", deviceOsVersion=" + deviceOsVersion
384
+ + ", median=" + median + ", min=" + min + ", max=" + max + "]" ;
385
+ }
386
+ }
300
387
}
0 commit comments