From 63bff5a349206d7d1b55cf77c0d4f20243dd9c61 Mon Sep 17 00:00:00 2001 From: Gian Merlino Date: Tue, 6 Feb 2018 13:18:55 -0800 Subject: [PATCH] Fix two improper casts in HavingSpecMetricComparator. (#5352) * Fix two improper casts in HavingSpecMetricComparator. Fixes two things: 1. An improper double-to-long cast when comparing double metrics to any kind of value, which was a regression from #4883. 2. An improper double-to-long cast when comparing a long/int metric to a double/float value: the value was cast to long/int, drawing strange conclusions like int 100 matching a havingSpec of equalTo(100.5). * Add comments. * Remove extraneous comment. * Simplify code a bit. --- .../having/HavingSpecMetricComparator.java | 47 ++++++++++----- .../query/groupby/having/HavingSpecTest.java | 58 ++++++++++++++++++- 2 files changed, 88 insertions(+), 17 deletions(-) diff --git a/processing/src/main/java/io/druid/query/groupby/having/HavingSpecMetricComparator.java b/processing/src/main/java/io/druid/query/groupby/having/HavingSpecMetricComparator.java index ff08202bf7cb..1b041dc1be5a 100644 --- a/processing/src/main/java/io/druid/query/groupby/having/HavingSpecMetricComparator.java +++ b/processing/src/main/java/io/druid/query/groupby/having/HavingSpecMetricComparator.java @@ -20,13 +20,12 @@ package io.druid.query.groupby.having; import com.google.common.primitives.Doubles; -import com.google.common.primitives.Floats; -import com.google.common.primitives.Ints; import com.google.common.primitives.Longs; import io.druid.data.input.Row; -import io.druid.query.aggregation.AggregatorFactory; import io.druid.java.util.common.ISE; +import io.druid.query.aggregation.AggregatorFactory; +import java.math.BigDecimal; import java.util.Map; import java.util.regex.Pattern; @@ -46,18 +45,29 @@ static int compare(Row row, String aggregationName, Number value, Map