You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by me...@apache.org on 2015/05/10 21:53:21 UTC

[2/2] drill git commit: DRILL-2870: Part1 - Separate count aggregate functions from others Count is the only aggregate function with required type as output, this will reduce some of the conditional logic in the templates

DRILL-2870: Part1 - Separate count aggregate functions from others
Count is the only aggregate function with required type as output, this will reduce some of the conditional logic in the templates


Project: http://git-wip-us.apache.org/repos/asf/drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/e0070e2d
Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/e0070e2d
Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/e0070e2d

Branch: refs/heads/master
Commit: e0070e2db2c718318e2f0b0b47ecbabba6a2af53
Parents: 87051d4
Author: Mehant Baid <me...@gmail.com>
Authored: Sat May 9 12:31:36 2015 -0700
Committer: Mehant Baid <me...@gmail.com>
Committed: Sun May 10 11:30:33 2015 -0700

----------------------------------------------------------------------
 exec/java-exec/src/main/codegen/config.fmpp     |  3 +-
 .../src/main/codegen/data/AggrTypes1.tdd        | 29 -------
 .../src/main/codegen/data/CountAggrTypes.tdd    | 39 ++++++++++
 .../src/main/codegen/data/DecimalAggrTypes1.tdd | 13 +---
 .../templates/CountAggregateFunctions.java      | 80 ++++++++++++++++++++
 5 files changed, 122 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/e0070e2d/exec/java-exec/src/main/codegen/config.fmpp
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/codegen/config.fmpp b/exec/java-exec/src/main/codegen/config.fmpp
index 8db120d..c70f6da 100644
--- a/exec/java-exec/src/main/codegen/config.fmpp
+++ b/exec/java-exec/src/main/codegen/config.fmpp
@@ -43,7 +43,8 @@ data: {
     extract:                  tdd(../data/ExtractTypes.tdd),
     sumzero:                  tdd(../data/SumZero.tdd),
     numericTypes:             tdd(../data/NumericTypes.tdd),
-    casthigh:                 tdd(../data/CastHigh.tdd)
+    casthigh:                 tdd(../data/CastHigh.tdd),
+    countAggrTypes:           tdd(../data/CountAggrTypes.tdd)
 }
 freemarkerLinks: {
     includes: includes/

http://git-wip-us.apache.org/repos/asf/drill/blob/e0070e2d/exec/java-exec/src/main/codegen/data/AggrTypes1.tdd
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/codegen/data/AggrTypes1.tdd b/exec/java-exec/src/main/codegen/data/AggrTypes1.tdd
index 8952417..1a98a07 100644
--- a/exec/java-exec/src/main/codegen/data/AggrTypes1.tdd
+++ b/exec/java-exec/src/main/codegen/data/AggrTypes1.tdd
@@ -88,35 +88,6 @@
       {inputType: "Interval", outputType: "Interval", runningType: "Interval", major: "Date", initialValue: "0"},
       {inputType: "NullableInterval", outputType: "Interval", runningType: "Interval", major: "Date", initialValue: "0"}
      ]
-   },
-   {className: "Count", funcName: "count", types: [
-      {inputType: "Bit", outputType: "BigInt", runningType: "BigInt", major: "Numeric"},
-      {inputType: "Int", outputType: "BigInt", runningType: "BigInt", major: "Numeric"},
-      {inputType: "BigInt", outputType: "BigInt", runningType: "BigInt", major: "Numeric"},
-      {inputType: "NullableBit", outputType: "BigInt", runningType: "BigInt", major: "Numeric"},
-      {inputType: "NullableInt", outputType: "BigInt", runningType: "BigInt", major: "Numeric"},
-      {inputType: "NullableBigInt", outputType: "BigInt", runningType: "BigInt", major: "Numeric"},
-      {inputType: "Float4", outputType: "BigInt", runningType: "BigInt", major: "Numeric"},
-      {inputType: "Float8", outputType: "BigInt", runningType: "BigInt", major: "Numeric"},
-      {inputType: "NullableFloat4", outputType: "BigInt", runningType: "BigInt", major: "Numeric"},
-      {inputType: "NullableFloat8", outputType: "BigInt", runningType: "BigInt", major: "Numeric"},
-      {inputType: "Date", outputType: "BigInt", runningType: "BigInt", major: "Date", initialValue: "0"},
-      {inputType: "NullableDate", outputType: "BigInt", runningType: "BigInt", major: "Date", initialValue: "0"},
-      {inputType: "TimeStamp", outputType: "BigInt", runningType: "BigInt", major: "Date", initialValue: "0"},
-      {inputType: "NullableTimeStamp", outputType: "BigInt", runningType: "BigInt", major: "Date", initialValue: "0"},
-      {inputType: "Time", outputType: "BigInt", runningType: "BigInt", major: "Date", initialValue: "0"},
-      {inputType: "NullableTime", outputType: "BigInt", runningType: "BigInt", major: "Date", initialValue: "0"},
-      {inputType: "IntervalDay", outputType: "BigInt", runningType: "BigInt", major: "Date", initialValue: "0"},
-      {inputType: "NullableIntervalDay", outputType: "BigInt", runningType: "BigInt", major: "Date", initialValue: "0"},
-      {inputType: "IntervalYear", outputType: "BigInt", runningType: "BigInt", major: "Date", initialValue: "0"},
-      {inputType: "NullableIntervalYear", outputType: "BigInt", runningType: "BigInt", major: "Date", initialValue: "0"},
-      {inputType: "Interval", outputType: "BigInt", runningType: "BigInt", major: "Date", initialValue: "0"},
-      {inputType: "NullableInterval", outputType: "BigInt", runningType: "BigInt", major: "Date", initialValue: "0"},
-      {inputType: "VarChar", outputType: "BigInt", runningType: "BigInt", major: "VarBytes"},
-      {inputType: "NullableVarChar", outputType: "BigInt", runningType: "BigInt", major: "VarBytes"},
-      {inputType: "VarBinary", outputType: "BigInt", runningType: "BigInt", major: "VarBytes"},
-      {inputType: "NullableVarBinary", outputType: "BigInt", runningType: "BigInt", major: "VarBytes"}
-     ]
    }
   ]
 }

http://git-wip-us.apache.org/repos/asf/drill/blob/e0070e2d/exec/java-exec/src/main/codegen/data/CountAggrTypes.tdd
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/codegen/data/CountAggrTypes.tdd b/exec/java-exec/src/main/codegen/data/CountAggrTypes.tdd
new file mode 100644
index 0000000..53e25f7
--- /dev/null
+++ b/exec/java-exec/src/main/codegen/data/CountAggrTypes.tdd
@@ -0,0 +1,39 @@
+{
+  countFunctionsInput: [
+    "Bit",
+    "NullableBit",
+    "Int",
+    "NullableInt",
+    "BigInt",
+    "NullableBigInt",
+    "Float4",
+    "NullableFloat4",
+    "Float8",
+    "NullableFloat8",
+    "Date",
+    "NullableDate",
+    "TimeStamp",
+    "NullableTimeStamp",
+    "Time",
+    "NullableTime",
+    "IntervalDay",
+    "NullableIntervalDay",
+    "IntervalYear",
+    "NullableIntervalYear",
+    "Interval",
+    "NullableInterval",
+    "VarChar",
+    "NullableVarChar",
+    "VarBinary"
+    "NullableVarBinary",
+    "Decimal9",
+    "NullableDecimal9",
+    "Decimal18",
+    "NullableDecimal18",
+    "Decimal28Sparse",
+    "NullableDecimal28Sparse",
+    "Decimal38Sparse",
+    "NullableDecimal38Sparse"
+  ]
+}
+

http://git-wip-us.apache.org/repos/asf/drill/blob/e0070e2d/exec/java-exec/src/main/codegen/data/DecimalAggrTypes1.tdd
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/codegen/data/DecimalAggrTypes1.tdd b/exec/java-exec/src/main/codegen/data/DecimalAggrTypes1.tdd
index 5ac299c..92e93bb 100644
--- a/exec/java-exec/src/main/codegen/data/DecimalAggrTypes1.tdd
+++ b/exec/java-exec/src/main/codegen/data/DecimalAggrTypes1.tdd
@@ -37,18 +37,7 @@
       {inputType: "Decimal38Sparse", outputType: "Decimal38Sparse", runningType: "Decimal38Sparse"},
       {inputType: "NullableDecimal38Sparse", outputType: "Decimal38Sparse", runningType: "Decimal38Sparse"}
      ]
-   },
-      {className: "Count", funcName: "count", types: [
-         {inputType: "Decimal9", outputType: "BigInt", runningType: "BigInt", major: "Numeric"},
-         {inputType: "NullableDecimal9", outputType: "BigInt", runningType: "BigInt", major: "Numeric"},
-         {inputType: "Decimal18", outputType: "BigInt", runningType: "BigInt", major: "Numeric"},
-         {inputType: "NullableDecimal18", outputType: "BigInt", runningType: "BigInt", major: "Numeric"},
-         {inputType: "Decimal28Sparse", outputType: "BigInt", runningType: "BigInt", major: "Numeric"},
-         {inputType: "NullableDecimal28Sparse", outputType: "BigInt", runningType: "BigInt", major: "Numeric"},
-         {inputType: "Decimal38Sparse", outputType: "BigInt", runningType: "BigInt", major: "Numeric"},
-         {inputType: "NullableDecimal38Sparse", outputType: "BigInt", runningType: "BigInt", major: "Numeric"}
-        ]
-      },
+   }
       {className: "Sum", funcName: "sum", types: [
         {inputType: "Decimal9", outputType: "Decimal38Sparse", major: "Numeric"},
         {inputType: "NullableDecimal9", outputType: "Decimal38Sparse", major: "Numeric"},

http://git-wip-us.apache.org/repos/asf/drill/blob/e0070e2d/exec/java-exec/src/main/codegen/templates/CountAggregateFunctions.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/codegen/templates/CountAggregateFunctions.java b/exec/java-exec/src/main/codegen/templates/CountAggregateFunctions.java
new file mode 100644
index 0000000..71ac6a7
--- /dev/null
+++ b/exec/java-exec/src/main/codegen/templates/CountAggregateFunctions.java
@@ -0,0 +1,80 @@
+/**
+ * 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.
+ */
+
+import java.lang.Override;
+
+<@pp.dropOutputFile />
+
+<#-- A utility class that is used to generate java code for count aggregate functions -->
+
+<@pp.changeOutputFile name="/org/apache/drill/exec/expr/fn/impl/gaggr/CountFunctions.java" />
+
+<#include "/@includes/license.ftl" />
+
+// Source code generated using FreeMarker template ${.template_name}
+
+package org.apache.drill.exec.expr.fn.impl.gaggr;
+
+import org.apache.drill.exec.expr.DrillAggFunc;
+import org.apache.drill.exec.expr.annotations.FunctionTemplate;
+import org.apache.drill.exec.expr.annotations.FunctionTemplate.FunctionScope;
+import org.apache.drill.exec.expr.annotations.Output;
+import org.apache.drill.exec.expr.annotations.Param;
+import org.apache.drill.exec.expr.annotations.Workspace;
+import org.apache.drill.exec.expr.holders.*;
+
+@SuppressWarnings("unused")
+
+public class CountFunctions {
+  <#list countAggrTypes.countFunctionsInput as inputType>
+  @FunctionTemplate(name = "count", scope = FunctionTemplate.FunctionScope.POINT_AGGREGATE)
+  public static class ${inputType}CountFunction implements DrillAggFunc {
+
+    @Param ${inputType}Holder in;
+    @Workspace BigIntHolder value;
+    @Output BigIntHolder out;
+
+    @Override
+    public void setup() {
+	    value = new BigIntHolder();
+      value.value = 0;
+    }
+
+    @Override
+    public void add() {
+      <#if inputType?starts_with("Nullable")>
+        if (in.isSet == 1) {
+          value.value++;
+        }
+      <#else>
+        value.value++;
+      </#if>
+    }
+
+    @Override
+    public void output() {
+      out.value = value.value;
+    }
+
+    @Override
+    public void reset() {
+      value.value = 0;
+    }
+  }
+  </#list>
+}
\ No newline at end of file