This is an automated email from the ASF dual-hosted git repository.

jonwei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-druid.git


The following commit(s) were added to refs/heads/master by this push:
     new c55b37d  Add optional `name` to top level of FilteredAggregatorFactory 
(#6219)
c55b37d is described below

commit c55b37d7ec8dfdecaa5a6349692ed34895d32edb
Author: Charles Allen <char...@allen-net.com>
AuthorDate: Thu Oct 11 11:56:53 2018 -0700

    Add optional `name` to top level of FilteredAggregatorFactory (#6219)
    
    * Add optional `name` to top level of FilteredAggregatorFactory
    
    * Add compat constructor for tests
    
    * Address comments
    
    * Add equals and hash code updates
    
    * Rename test
    
    * Fix imports and code style
---
 .../aggregation/FilteredAggregatorFactory.java     | 64 +++++++++++++---------
 .../aggregation/FilteredAggregatorFactoryTest.java | 47 ++++++++++++++++
 2 files changed, 86 insertions(+), 25 deletions(-)

diff --git 
a/processing/src/main/java/org/apache/druid/query/aggregation/FilteredAggregatorFactory.java
 
b/processing/src/main/java/org/apache/druid/query/aggregation/FilteredAggregatorFactory.java
index 313bec1..62ee3ea 100644
--- 
a/processing/src/main/java/org/apache/druid/query/aggregation/FilteredAggregatorFactory.java
+++ 
b/processing/src/main/java/org/apache/druid/query/aggregation/FilteredAggregatorFactory.java
@@ -19,8 +19,10 @@
 
 package org.apache.druid.query.aggregation;
 
+import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
 import org.apache.druid.query.PerSegmentQueryOptimizationContext;
 import org.apache.druid.query.filter.DimFilter;
 import org.apache.druid.query.filter.IntervalDimFilter;
@@ -34,15 +36,28 @@ import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
+import java.util.Objects;
 
 public class FilteredAggregatorFactory extends AggregatorFactory
 {
   private final AggregatorFactory delegate;
   private final DimFilter filter;
+  private final String name;
 
+  // Constructor for backwards compat only
+  public FilteredAggregatorFactory(
+      AggregatorFactory delegate,
+      DimFilter filter
+  )
+  {
+    this(delegate, filter, null);
+  }
+
+  @JsonCreator
   public FilteredAggregatorFactory(
       @JsonProperty("aggregator") AggregatorFactory delegate,
-      @JsonProperty("filter") DimFilter filter
+      @JsonProperty("filter") DimFilter filter,
+      @JsonProperty("name") String name
   )
   {
     Preconditions.checkNotNull(delegate);
@@ -50,6 +65,7 @@ public class FilteredAggregatorFactory extends 
AggregatorFactory
 
     this.delegate = delegate;
     this.filter = filter;
+    this.name = name;
   }
 
   @Override
@@ -108,11 +124,16 @@ public class FilteredAggregatorFactory extends 
AggregatorFactory
     return delegate.finalizeComputation(object);
   }
 
+  // See 
https://github.com/apache/incubator-druid/pull/6219#pullrequestreview-148919845
   @JsonProperty
   @Override
   public String getName()
   {
-    return delegate.getName();
+    String name = this.name;
+    if (Strings.isNullOrEmpty(name)) {
+      name = delegate.getName();
+    }
+    return name;
   }
 
   @Override
@@ -198,7 +219,8 @@ public class FilteredAggregatorFactory extends 
AggregatorFactory
               intervalDimFilter.getDimension(),
               effectiveFilterIntervals,
               intervalDimFilter.getExtractionFn()
-          )
+          ),
+          this.name
       );
     } else {
       return this;
@@ -224,15 +246,6 @@ public class FilteredAggregatorFactory extends 
AggregatorFactory
   }
 
   @Override
-  public String toString()
-  {
-    return "FilteredAggregatorFactory{" +
-           "delegate=" + delegate +
-           ", filter=" + filter +
-           '}';
-  }
-
-  @Override
   public boolean equals(Object o)
   {
     if (this == o) {
@@ -241,24 +254,25 @@ public class FilteredAggregatorFactory extends 
AggregatorFactory
     if (o == null || getClass() != o.getClass()) {
       return false;
     }
-
     FilteredAggregatorFactory that = (FilteredAggregatorFactory) o;
-
-    if (delegate != null ? !delegate.equals(that.delegate) : that.delegate != 
null) {
-      return false;
-    }
-    if (filter != null ? !filter.equals(that.filter) : that.filter != null) {
-      return false;
-    }
-
-    return true;
+    return Objects.equals(delegate, that.delegate) &&
+           Objects.equals(filter, that.filter) &&
+           Objects.equals(name, that.name);
   }
 
   @Override
   public int hashCode()
   {
-    int result = delegate != null ? delegate.hashCode() : 0;
-    result = 31 * result + (filter != null ? filter.hashCode() : 0);
-    return result;
+    return Objects.hash(delegate, filter, name);
+  }
+
+  @Override
+  public String toString()
+  {
+    return "FilteredAggregatorFactory{" +
+           "delegate=" + delegate +
+           ", filter=" + filter +
+           ", name='" + name + '\'' +
+           '}';
   }
 }
diff --git 
a/processing/src/test/java/org/apache/druid/query/aggregation/FilteredAggregatorFactoryTest.java
 
b/processing/src/test/java/org/apache/druid/query/aggregation/FilteredAggregatorFactoryTest.java
new file mode 100644
index 0000000..4db7b0e
--- /dev/null
+++ 
b/processing/src/test/java/org/apache/druid/query/aggregation/FilteredAggregatorFactoryTest.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.druid.query.aggregation;
+
+import org.apache.druid.query.filter.TrueDimFilter;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class FilteredAggregatorFactoryTest
+{
+  @Test
+  public void testSimpleNaming()
+  {
+    Assert.assertEquals("overrideName", new FilteredAggregatorFactory(
+        new CountAggregatorFactory("foo"),
+        new TrueDimFilter(),
+        "overrideName"
+    ).getName());
+    Assert.assertEquals("delegateName", new FilteredAggregatorFactory(
+        new CountAggregatorFactory("delegateName"),
+        new TrueDimFilter(),
+        ""
+    ).getName());
+    Assert.assertEquals("delegateName", new FilteredAggregatorFactory(
+        new CountAggregatorFactory("delegateName"),
+        new TrueDimFilter(),
+        null
+    ).getName());
+  }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@druid.apache.org
For additional commands, e-mail: commits-h...@druid.apache.org

Reply via email to