From d67633d1fd5e3354b6bba16abe0edd1eee0cbfcd Mon Sep 17 00:00:00 2001 From: Gian Merlino Date: Mon, 5 Feb 2018 22:12:54 -0800 Subject: [PATCH 1/4] 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). --- .../having/HavingSpecMetricComparator.java | 27 +++++---- .../query/groupby/having/HavingSpecTest.java | 58 ++++++++++++++++++- 2 files changed, 72 insertions(+), 13 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..20349b26c110 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 @@ -24,9 +24,10 @@ 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 +47,22 @@ static int compare(Row row, String aggregationName, Number value, Map Date: Tue, 6 Feb 2018 07:45:53 -0800 Subject: [PATCH 2/4] Add comments. --- .../query/groupby/having/HavingSpecMetricComparator.java | 4 ++++ 1 file changed, 4 insertions(+) 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 20349b26c110..70198b8f8abe 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 @@ -48,11 +48,15 @@ static int compare(Row row, String aggregationName, Number value, Map Date: Tue, 6 Feb 2018 07:48:22 -0800 Subject: [PATCH 3/4] Remove extraneous comment. --- .../test/java/io/druid/query/groupby/having/HavingSpecTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/processing/src/test/java/io/druid/query/groupby/having/HavingSpecTest.java b/processing/src/test/java/io/druid/query/groupby/having/HavingSpecTest.java index d25cfae3ad8a..16417c5b7f9c 100644 --- a/processing/src/test/java/io/druid/query/groupby/having/HavingSpecTest.java +++ b/processing/src/test/java/io/druid/query/groupby/having/HavingSpecTest.java @@ -168,7 +168,7 @@ public void testEqualHavingSpec() assertFalse(spec.eval(getTestRow(100L))); assertFalse(spec.eval(getTestRow(100.0))); assertFalse(spec.eval(getTestRow(100d))); - assertTrue(spec.eval(getTestRow(100.56d))); // True since 100.56f == (float) 100.56d + assertTrue(spec.eval(getTestRow(100.56d))); assertFalse(spec.eval(getTestRow(90.53d))); assertTrue(spec.eval(getTestRow(100.56f))); assertFalse(spec.eval(getTestRow(90.53f))); From 27677e05ed5a8116fba60c3a3cb770c246b3f243 Mon Sep 17 00:00:00 2001 From: Gian Merlino Date: Tue, 6 Feb 2018 10:56:17 -0800 Subject: [PATCH 4/4] Simplify code a bit. --- .../having/HavingSpecMetricComparator.java | 34 ++++++++++++------- .../query/groupby/having/HavingSpecTest.java | 2 +- 2 files changed, 22 insertions(+), 14 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 70198b8f8abe..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,8 +20,6 @@ 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.java.util.common.ISE; @@ -48,25 +46,28 @@ static int compare(Row row, String aggregationName, Number value, Map