You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by am...@apache.org on 2015/12/01 01:28:27 UTC
[2/2] drill git commit: DRILL-4119: Modify hash32 functions to
combine the msb and lsb bytes of a 64-bit hash value (previously,
we were casting to integer).
DRILL-4119: Modify hash32 functions to combine the msb and lsb bytes of a 64-bit hash value (previously, we were casting to integer).
- Use this new set of functions (for all data types) for creating the hash values needed for hash distribution, hash joins etc.
- Rename HashFunctions to Hash32Functions to be consistent with the Hash64 counterpart.
- Many data types did not have a hash32AsDouble equivalent...added these.
- Add hash32 functions with seed.
- Fix unit tests, add "hash" as a synonym for "hash32".
- Rename HashBigInt to BigIntHash everywhere to be consistent with other names.
close apache/drill#279
Project: http://git-wip-us.apache.org/repos/asf/drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/ff76078b
Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/ff76078b
Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/ff76078b
Branch: refs/heads/master
Commit: ff76078b61a54001da1de3dbd95d01004da4b791
Parents: 5cc3448
Author: Aman Sinha <as...@maprtech.com>
Authored: Sat Nov 21 10:23:52 2015 -0800
Committer: Aman Sinha <as...@maprtech.com>
Committed: Mon Nov 30 16:25:28 2015 -0800
----------------------------------------------------------------------
.../drill/exec/expr/fn/impl/Hash32AsDouble.java | 336 +++++++++++
.../exec/expr/fn/impl/Hash32Functions.java | 541 +++++++++++++++++
.../expr/fn/impl/Hash32FunctionsWithSeed.java | 584 +++++++++++++++++++
.../expr/fn/impl/Hash32WithSeedAsDouble.java | 340 +++++++++++
.../drill/exec/expr/fn/impl/Hash64AsDouble.java | 2 +-
.../exec/expr/fn/impl/Hash64Functions.java | 2 +-
.../expr/fn/impl/Hash64FunctionsWithSeed.java | 2 +-
.../expr/fn/impl/Hash64WithSeedAsDouble.java | 2 +-
.../drill/exec/expr/fn/impl/HashFunctions.java | 542 -----------------
.../apache/drill/exec/expr/fn/impl/XXHash.java | 23 +-
.../exec/planner/physical/HashPrelUtil.java | 13 +-
.../org/apache/drill/TestFunctionsQuery.java | 25 +-
.../exec/physical/impl/TestLocalExchange.java | 4 +-
13 files changed, 1856 insertions(+), 560 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/drill/blob/ff76078b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash32AsDouble.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash32AsDouble.java b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash32AsDouble.java
new file mode 100644
index 0000000..5a8e10a
--- /dev/null
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash32AsDouble.java
@@ -0,0 +1,336 @@
+/**
+ * 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.drill.exec.expr.fn.impl;
+
+import org.apache.drill.exec.expr.DrillSimpleFunc;
+import org.apache.drill.exec.expr.annotations.FunctionTemplate;
+import org.apache.drill.exec.expr.annotations.Output;
+import org.apache.drill.exec.expr.annotations.Param;
+import org.apache.drill.exec.expr.annotations.FunctionTemplate.FunctionScope;
+import org.apache.drill.exec.expr.holders.BigIntHolder;
+import org.apache.drill.exec.expr.holders.Decimal18Holder;
+import org.apache.drill.exec.expr.holders.Decimal28SparseHolder;
+import org.apache.drill.exec.expr.holders.Decimal38SparseHolder;
+import org.apache.drill.exec.expr.holders.Decimal9Holder;
+import org.apache.drill.exec.expr.holders.Float4Holder;
+import org.apache.drill.exec.expr.holders.Float8Holder;
+import org.apache.drill.exec.expr.holders.IntHolder;
+import org.apache.drill.exec.expr.holders.NullableBigIntHolder;
+import org.apache.drill.exec.expr.holders.NullableDecimal18Holder;
+import org.apache.drill.exec.expr.holders.NullableDecimal28SparseHolder;
+import org.apache.drill.exec.expr.holders.NullableDecimal38SparseHolder;
+import org.apache.drill.exec.expr.holders.NullableDecimal9Holder;
+import org.apache.drill.exec.expr.holders.NullableFloat4Holder;
+import org.apache.drill.exec.expr.holders.NullableFloat8Holder;
+import org.apache.drill.exec.expr.holders.NullableIntHolder;
+
+/**
+ * hash32 function definitions for numeric data types. These functions cast the input numeric value to a
+ * double before doing the hashing. See comments in {@link Hash64AsDouble} for the reason for doing this.
+ */
+public class Hash32AsDouble {
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableFloatHash implements DrillSimpleFunc {
+
+ @Param
+ NullableFloat4Holder in;
+ @Output
+ IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = 0;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32((double) in.value, 0);
+ }
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class FloatHash implements DrillSimpleFunc {
+
+ @Param
+ Float4Holder in;
+ @Output
+ IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32((double) in.value, 0);
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableDoubleHash implements DrillSimpleFunc {
+
+ @Param
+ NullableFloat8Holder in;
+ @Output
+ IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = 0;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32((double) in.value, 0);
+ }
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class DoubleHash implements DrillSimpleFunc {
+
+ @Param
+ Float8Holder in;
+ @Output
+ IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableBigIntHash implements DrillSimpleFunc {
+
+ @Param
+ NullableBigIntHolder in;
+ @Output
+ IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = 0;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32((double) in.value, 0);
+ }
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableIntHash implements DrillSimpleFunc {
+ @Param
+ NullableIntHolder in;
+ @Output
+ IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = 0;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32((double) in.value, 0);
+ }
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class BigIntHash implements DrillSimpleFunc {
+
+ @Param
+ BigIntHolder in;
+ @Output
+ IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32((double) in.value, 0);
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class IntHash implements DrillSimpleFunc {
+ @Param
+ IntHolder in;
+ @Output
+ IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32((double) in.value, 0);
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class Decimal9Hash implements DrillSimpleFunc {
+ @Param
+ Decimal9Holder in;
+ @Output
+ IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ java.math.BigDecimal input = new java.math.BigDecimal(java.math.BigInteger.valueOf(in.value), in.scale);
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(input.doubleValue(), 0);
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableDecimal9Hash implements DrillSimpleFunc {
+ @Param
+ NullableDecimal9Holder in;
+ @Output
+ IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = 0;
+ } else {
+ java.math.BigDecimal input = new java.math.BigDecimal(java.math.BigInteger.valueOf(in.value), in.scale);
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(input.doubleValue(), 0);
+ }
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class Decimal18Hash implements DrillSimpleFunc {
+ @Param
+ Decimal18Holder in;
+ @Output
+ IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ java.math.BigDecimal input = new java.math.BigDecimal(java.math.BigInteger.valueOf(in.value), in.scale);
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(input.doubleValue(), 0);
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableDecimal18Hash implements DrillSimpleFunc {
+ @Param
+ NullableDecimal18Holder in;
+ @Output
+ IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = 0;
+ } else {
+ java.math.BigDecimal input = new java.math.BigDecimal(java.math.BigInteger.valueOf(in.value), in.scale);
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(input.doubleValue(), 0);
+ }
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class Decimal28Hash implements DrillSimpleFunc {
+ @Param
+ Decimal28SparseHolder in;
+ @Output
+ IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ java.math.BigDecimal input = org.apache.drill.exec.util.DecimalUtility.getBigDecimalFromSparse(in.buffer,
+ in.start, in.nDecimalDigits, in.scale);
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(input.doubleValue(), 0);
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableDecimal28Hash implements DrillSimpleFunc {
+ @Param
+ NullableDecimal28SparseHolder in;
+ @Output
+ IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = 0;
+ } else {
+ java.math.BigDecimal input = org.apache.drill.exec.util.DecimalUtility.getBigDecimalFromSparse(in.buffer,
+ in.start, in.nDecimalDigits, in.scale);
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(input.doubleValue(), 0);
+ }
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class Decimal38Hash implements DrillSimpleFunc {
+ @Param
+ Decimal38SparseHolder in;
+ @Output
+ IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ java.math.BigDecimal input = org.apache.drill.exec.util.DecimalUtility.getBigDecimalFromSparse(in.buffer,
+ in.start, in.nDecimalDigits, in.scale);
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(input.doubleValue(), 0);
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableDecimal38Hash implements DrillSimpleFunc {
+ @Param
+ NullableDecimal38SparseHolder in;
+ @Output
+ IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = 0;
+ } else {
+ java.math.BigDecimal input = org.apache.drill.exec.util.DecimalUtility.getBigDecimalFromSparse(in.buffer,
+ in.start, in.nDecimalDigits, in.scale);
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(input.doubleValue(), 0);
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/drill/blob/ff76078b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash32Functions.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash32Functions.java b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash32Functions.java
new file mode 100644
index 0000000..f4b0c56
--- /dev/null
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash32Functions.java
@@ -0,0 +1,541 @@
+/**
+ * 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.drill.exec.expr.fn.impl;
+
+import org.apache.drill.exec.expr.DrillSimpleFunc;
+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.holders.BigIntHolder;
+import org.apache.drill.exec.expr.holders.BitHolder;
+import org.apache.drill.exec.expr.holders.DateHolder;
+import org.apache.drill.exec.expr.holders.Decimal18Holder;
+import org.apache.drill.exec.expr.holders.Decimal28SparseHolder;
+import org.apache.drill.exec.expr.holders.Decimal38SparseHolder;
+import org.apache.drill.exec.expr.holders.Decimal9Holder;
+import org.apache.drill.exec.expr.holders.Float4Holder;
+import org.apache.drill.exec.expr.holders.Float8Holder;
+import org.apache.drill.exec.expr.holders.IntHolder;
+import org.apache.drill.exec.expr.holders.NullableBigIntHolder;
+import org.apache.drill.exec.expr.holders.NullableBitHolder;
+import org.apache.drill.exec.expr.holders.NullableDateHolder;
+import org.apache.drill.exec.expr.holders.NullableDecimal18Holder;
+import org.apache.drill.exec.expr.holders.NullableDecimal28SparseHolder;
+import org.apache.drill.exec.expr.holders.NullableDecimal38SparseHolder;
+import org.apache.drill.exec.expr.holders.NullableDecimal9Holder;
+import org.apache.drill.exec.expr.holders.NullableFloat4Holder;
+import org.apache.drill.exec.expr.holders.NullableFloat8Holder;
+import org.apache.drill.exec.expr.holders.NullableIntHolder;
+import org.apache.drill.exec.expr.holders.NullableTimeHolder;
+import org.apache.drill.exec.expr.holders.NullableTimeStampHolder;
+import org.apache.drill.exec.expr.holders.NullableVar16CharHolder;
+import org.apache.drill.exec.expr.holders.NullableVarBinaryHolder;
+import org.apache.drill.exec.expr.holders.NullableVarCharHolder;
+import org.apache.drill.exec.expr.holders.TimeHolder;
+import org.apache.drill.exec.expr.holders.TimeStampHolder;
+import org.apache.drill.exec.expr.holders.Var16CharHolder;
+import org.apache.drill.exec.expr.holders.VarBinaryHolder;
+import org.apache.drill.exec.expr.holders.VarCharHolder;
+
+public class Hash32Functions {
+
+ @FunctionTemplate(names = {"hash", "hash32"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
+ public static class NullableFloatHash implements DrillSimpleFunc {
+
+ @Param NullableFloat4Holder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = 0;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
+ }
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
+ public static class FloatHash implements DrillSimpleFunc {
+
+ @Param Float4Holder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
+ public static class NullableDoubleHash implements DrillSimpleFunc {
+
+ @Param NullableFloat8Holder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = 0;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
+ }
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
+ public static class DoubleHash implements DrillSimpleFunc {
+
+ @Param Float8Holder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
+ public static class NullableVarBinaryHash implements DrillSimpleFunc {
+
+ @Param NullableVarBinaryHolder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = 0;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.start, in.end, in.buffer, 0);
+ }
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
+ public static class NullableVarCharHash implements DrillSimpleFunc {
+
+ @Param NullableVarCharHolder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = 0;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.start, in.end, in.buffer, 0);
+ }
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
+ public static class NullableVar16CharHash implements DrillSimpleFunc {
+
+ @Param NullableVar16CharHolder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = 0;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.start, in.end, in.buffer, 0);
+ }
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableBigIntHash implements DrillSimpleFunc {
+
+ @Param NullableBigIntHolder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = 0;
+ }
+ else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
+ }
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableIntHash implements DrillSimpleFunc {
+ @Param NullableIntHolder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = 0;
+ }
+ else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
+ }
+ }
+ }
+
+ @FunctionTemplate(names = {"hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class VarBinaryHash implements DrillSimpleFunc {
+
+ @Param VarBinaryHolder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.start, in.end, in.buffer, 0);
+ }
+ }
+
+ @FunctionTemplate(names = {"hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class VarCharHash implements DrillSimpleFunc {
+
+ @Param VarCharHolder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.start, in.end, in.buffer, 0);
+ }
+ }
+
+ @FunctionTemplate(names = {"hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class Var16CharHash implements DrillSimpleFunc {
+
+ @Param Var16CharHolder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.start, in.end, in.buffer, 0);
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class BigIntHash implements DrillSimpleFunc {
+
+ @Param BigIntHolder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class IntHash implements DrillSimpleFunc {
+ @Param IntHolder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
+ }
+ }
+ @FunctionTemplate(names = {"hash", "hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class DateHash implements DrillSimpleFunc {
+ @Param DateHolder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableDateHash implements DrillSimpleFunc {
+ @Param NullableDateHolder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = 0;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
+ }
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class TimeStampHash implements DrillSimpleFunc {
+ @Param TimeStampHolder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableTimeStampHash implements DrillSimpleFunc {
+ @Param NullableTimeStampHolder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = 0;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
+ }
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class TimeHash implements DrillSimpleFunc {
+ @Param TimeHolder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32" ,"hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableTimeHash implements DrillSimpleFunc {
+ @Param NullableTimeHolder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = 0;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
+ }
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class Decimal9Hash implements DrillSimpleFunc {
+ @Param Decimal9Holder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableDecimal9Hash implements DrillSimpleFunc {
+ @Param NullableDecimal9Holder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = 0;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
+ }
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class Decimal18Hash implements DrillSimpleFunc {
+ @Param Decimal18Holder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableDecimal18Hash implements DrillSimpleFunc {
+ @Param NullableDecimal18Holder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = 0;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
+ }
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class Decimal28Hash implements DrillSimpleFunc {
+ @Param Decimal28SparseHolder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+
+ int xor = 0;
+ for (int i = 0; i < in.nDecimalDigits; i++) {
+ xor = xor ^ Decimal28SparseHolder.getInteger(i, in.start, in.buffer);
+ }
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(xor, 0);
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableDecimal28Hash implements DrillSimpleFunc {
+ @Param NullableDecimal28SparseHolder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = 0;
+ } else {
+ int xor = 0;
+ for (int i = 0; i < in.nDecimalDigits; i++) {
+ xor = xor ^ NullableDecimal28SparseHolder.getInteger(i, in.start, in.buffer);
+ }
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(xor, 0);
+ }
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class Decimal38Hash implements DrillSimpleFunc {
+ @Param Decimal38SparseHolder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+
+ int xor = 0;
+ for (int i = 0; i < in.nDecimalDigits; i++) {
+ xor = xor ^ Decimal38SparseHolder.getInteger(i, in.start, in.buffer);
+ }
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(xor, 0);
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableDecimal38Hash implements DrillSimpleFunc {
+ @Param NullableDecimal38SparseHolder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = 0;
+ } else {
+ int xor = 0;
+ for (int i = 0; i < in.nDecimalDigits; i++) {
+ xor = xor ^ NullableDecimal38SparseHolder.getInteger(i, in.start, in.buffer);
+ }
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(xor, 0);
+ }
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
+ public static class NullableBitHash implements DrillSimpleFunc {
+
+ @Param NullableBitHolder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = 0;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
+ }
+ }
+ }
+
+ @FunctionTemplate(names = {"hash", "hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
+ public static class BitHash implements DrillSimpleFunc {
+
+ @Param BitHolder in;
+ @Output IntHolder out;
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/drill/blob/ff76078b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash32FunctionsWithSeed.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash32FunctionsWithSeed.java b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash32FunctionsWithSeed.java
new file mode 100644
index 0000000..5851956
--- /dev/null
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash32FunctionsWithSeed.java
@@ -0,0 +1,584 @@
+/**
+ * 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.drill.exec.expr.fn.impl;
+
+import org.apache.drill.exec.expr.DrillSimpleFunc;
+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.holders.BigIntHolder;
+import org.apache.drill.exec.expr.holders.BitHolder;
+import org.apache.drill.exec.expr.holders.DateHolder;
+import org.apache.drill.exec.expr.holders.Decimal18Holder;
+import org.apache.drill.exec.expr.holders.Decimal28SparseHolder;
+import org.apache.drill.exec.expr.holders.Decimal38SparseHolder;
+import org.apache.drill.exec.expr.holders.Decimal9Holder;
+import org.apache.drill.exec.expr.holders.Float4Holder;
+import org.apache.drill.exec.expr.holders.Float8Holder;
+import org.apache.drill.exec.expr.holders.IntHolder;
+import org.apache.drill.exec.expr.holders.NullableBigIntHolder;
+import org.apache.drill.exec.expr.holders.NullableBitHolder;
+import org.apache.drill.exec.expr.holders.NullableDateHolder;
+import org.apache.drill.exec.expr.holders.NullableDecimal18Holder;
+import org.apache.drill.exec.expr.holders.NullableDecimal28SparseHolder;
+import org.apache.drill.exec.expr.holders.NullableDecimal38SparseHolder;
+import org.apache.drill.exec.expr.holders.NullableDecimal9Holder;
+import org.apache.drill.exec.expr.holders.NullableFloat4Holder;
+import org.apache.drill.exec.expr.holders.NullableFloat8Holder;
+import org.apache.drill.exec.expr.holders.NullableIntHolder;
+import org.apache.drill.exec.expr.holders.NullableTimeHolder;
+import org.apache.drill.exec.expr.holders.NullableTimeStampHolder;
+import org.apache.drill.exec.expr.holders.NullableVar16CharHolder;
+import org.apache.drill.exec.expr.holders.NullableVarBinaryHolder;
+import org.apache.drill.exec.expr.holders.NullableVarCharHolder;
+import org.apache.drill.exec.expr.holders.TimeHolder;
+import org.apache.drill.exec.expr.holders.TimeStampHolder;
+import org.apache.drill.exec.expr.holders.Var16CharHolder;
+import org.apache.drill.exec.expr.holders.VarBinaryHolder;
+import org.apache.drill.exec.expr.holders.VarCharHolder;
+
+/*
+ * Class contains hash32 function definitions for different data types.
+ */
+public class Hash32FunctionsWithSeed {
+ @FunctionTemplate(name = "hash32", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
+ public static class NullableFloatHash implements DrillSimpleFunc {
+
+ @Param NullableFloat4Holder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = seed.value;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, seed.value);
+ }
+ }
+ }
+
+ @FunctionTemplate(name = "hash32", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
+ public static class FloatHash implements DrillSimpleFunc {
+
+ @Param Float4Holder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, seed.value);
+ }
+ }
+
+ @FunctionTemplate(name = "hash32", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
+ public static class NullableDoubleHash implements DrillSimpleFunc {
+
+ @Param NullableFloat8Holder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = seed.value;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, seed.value);
+ }
+ }
+ }
+
+ @FunctionTemplate(name = "hash32", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
+ public static class DoubleHash implements DrillSimpleFunc {
+
+ @Param Float8Holder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, seed.value);
+ }
+ }
+
+ @FunctionTemplate(names = {"hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
+ public static class NullableVarBinaryHash implements DrillSimpleFunc {
+
+ @Param NullableVarBinaryHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = seed.value;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.start, in.end, in.buffer, seed.value);
+ }
+ }
+ }
+
+ @FunctionTemplate(names = {"hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
+ public static class NullableVarCharHash implements DrillSimpleFunc {
+
+ @Param NullableVarCharHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = seed.value;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.start, in.end, in.buffer, seed.value);
+ }
+ }
+ }
+
+ @FunctionTemplate(names = {"hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
+ public static class NullableVar16CharHash implements DrillSimpleFunc {
+
+ @Param NullableVar16CharHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = seed.value;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.start, in.end, in.buffer, seed.value);
+ }
+ }
+ }
+
+ @FunctionTemplate(name = "hash32", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableBigIntHash implements DrillSimpleFunc {
+
+ @Param NullableBigIntHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = seed.value;
+ }
+ else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, seed.value);
+ }
+ }
+ }
+
+ @FunctionTemplate(name = "hash32", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableIntHash implements DrillSimpleFunc {
+ @Param NullableIntHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = seed.value;
+ }
+ else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, seed.value);
+ }
+ }
+ }
+
+ @FunctionTemplate(names = {"hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class VarBinaryHash implements DrillSimpleFunc {
+
+ @Param VarBinaryHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.start, in.end, in.buffer, seed.value);
+ }
+ }
+
+ @FunctionTemplate(names = {"hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class VarCharHash implements DrillSimpleFunc {
+
+ @Param VarCharHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.start, in.end, in.buffer, seed.value);
+ }
+ }
+
+ @FunctionTemplate(names = {"hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class Var16CharHash implements DrillSimpleFunc {
+
+ @Param Var16CharHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.start, in.end, in.buffer, seed.value);
+ }
+ }
+
+ @FunctionTemplate(name = "hash32", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class BigIntHash implements DrillSimpleFunc {
+
+ @Param BigIntHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, seed.value);
+ }
+ }
+
+ @FunctionTemplate(name = "hash32", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class IntHash implements DrillSimpleFunc {
+ @Param IntHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ // TODO: implement hash function for other types
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, seed.value);
+ }
+ }
+ @FunctionTemplate(names = {"hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class DateHash implements DrillSimpleFunc {
+ @Param DateHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, seed.value);
+ }
+ }
+
+ @FunctionTemplate(names = {"hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableDateHash implements DrillSimpleFunc {
+ @Param NullableDateHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = seed.value;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, seed.value);
+ }
+ }
+ }
+
+ @FunctionTemplate(names = {"hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class TimeStampHash implements DrillSimpleFunc {
+ @Param TimeStampHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, seed.value);
+ }
+ }
+
+ @FunctionTemplate(names = {"hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableTimeStampHash implements DrillSimpleFunc {
+ @Param NullableTimeStampHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = seed.value;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, seed.value);
+ }
+ }
+ }
+
+ @FunctionTemplate(names = {"hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class TimeHash implements DrillSimpleFunc {
+ @Param TimeHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, seed.value);
+ }
+ }
+
+ @FunctionTemplate(names = {"hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableTimeHash implements DrillSimpleFunc {
+ @Param NullableTimeHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = seed.value;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, seed.value);
+ }
+ }
+ }
+
+ @FunctionTemplate(name = "hash32", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class Decimal9Hash implements DrillSimpleFunc {
+ @Param Decimal9Holder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, seed.value);
+ }
+ }
+
+ @FunctionTemplate(name = "hash32", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableDecimal9Hash implements DrillSimpleFunc {
+ @Param NullableDecimal9Holder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = seed.value;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, seed.value);
+ }
+ }
+ }
+
+ @FunctionTemplate(name = "hash32", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class Decimal18Hash implements DrillSimpleFunc {
+ @Param Decimal18Holder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, seed.value);
+ }
+ }
+
+ @FunctionTemplate(name = "hash32", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableDecimal18Hash implements DrillSimpleFunc {
+ @Param NullableDecimal18Holder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = seed.value;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, seed.value);
+ }
+ }
+ }
+
+ @FunctionTemplate(name = "hash32", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class Decimal28Hash implements DrillSimpleFunc {
+ @Param Decimal28SparseHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.start, in.start + Decimal28SparseHolder.WIDTH, in.buffer, seed.value);
+ }
+ }
+
+ @FunctionTemplate(name = "hash32", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableDecimal28Hash implements DrillSimpleFunc {
+ @Param NullableDecimal28SparseHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = seed.value;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.start, in.start + NullableDecimal28SparseHolder.WIDTH, in.buffer, seed.value);
+ }
+ }
+ }
+
+ @FunctionTemplate(name = "hash32", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class Decimal38Hash implements DrillSimpleFunc {
+ @Param Decimal38SparseHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.start, in.start + Decimal38SparseHolder.WIDTH, in.buffer, seed.value);
+ }
+ }
+
+ @FunctionTemplate(name = "hash32", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableDecimal38Hash implements DrillSimpleFunc {
+ @Param NullableDecimal38SparseHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = seed.value;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.start, in.start + NullableDecimal38SparseHolder.WIDTH, in.buffer, seed.value);
+ }
+ }
+ }
+
+ @FunctionTemplate(names = {"hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
+ public static class NullableBitHash implements DrillSimpleFunc {
+
+ @Param NullableBitHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = seed.value;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, seed.value);
+ }
+ }
+ }
+
+ @FunctionTemplate(names = {"hash32", "hash32AsDouble"}, scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
+ public static class BitHash implements DrillSimpleFunc {
+
+ @Param BitHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, seed.value);
+ }
+ }}
http://git-wip-us.apache.org/repos/asf/drill/blob/ff76078b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash32WithSeedAsDouble.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash32WithSeedAsDouble.java b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash32WithSeedAsDouble.java
new file mode 100644
index 0000000..cd4dfa2
--- /dev/null
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash32WithSeedAsDouble.java
@@ -0,0 +1,340 @@
+/**
+ * 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.drill.exec.expr.fn.impl;
+
+import org.apache.drill.exec.expr.DrillSimpleFunc;
+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.holders.BigIntHolder;
+import org.apache.drill.exec.expr.holders.Decimal18Holder;
+import org.apache.drill.exec.expr.holders.Decimal28SparseHolder;
+import org.apache.drill.exec.expr.holders.Decimal38SparseHolder;
+import org.apache.drill.exec.expr.holders.Decimal9Holder;
+import org.apache.drill.exec.expr.holders.Float4Holder;
+import org.apache.drill.exec.expr.holders.Float8Holder;
+import org.apache.drill.exec.expr.holders.IntHolder;
+import org.apache.drill.exec.expr.holders.NullableBigIntHolder;
+import org.apache.drill.exec.expr.holders.NullableDecimal18Holder;
+import org.apache.drill.exec.expr.holders.NullableDecimal28SparseHolder;
+import org.apache.drill.exec.expr.holders.NullableDecimal38SparseHolder;
+import org.apache.drill.exec.expr.holders.NullableDecimal9Holder;
+import org.apache.drill.exec.expr.holders.NullableFloat4Holder;
+import org.apache.drill.exec.expr.holders.NullableFloat8Holder;
+import org.apache.drill.exec.expr.holders.NullableIntHolder;
+
+/**
+ * hash32 with seed function definitions for numeric data types. These functions cast the input numeric value to a
+ * double before doing the hashing. See comments in {@link Hash64AsDouble} for the reason for doing this.
+ */
+public class Hash32WithSeedAsDouble {
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
+ public static class NullableFloatHash implements DrillSimpleFunc {
+
+ @Param NullableFloat4Holder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = seed.value;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32((double) in.value, seed.value);
+ }
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
+ public static class FloatHash implements DrillSimpleFunc {
+
+ @Param Float4Holder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32((double) in.value, seed.value);
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
+ public static class NullableDoubleHash implements DrillSimpleFunc {
+
+ @Param NullableFloat8Holder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = seed.value;
+ } else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, seed.value);
+ }
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
+ public static class DoubleHash implements DrillSimpleFunc {
+
+ @Param Float8Holder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, seed.value);
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableBigIntHash implements DrillSimpleFunc {
+
+ @Param NullableBigIntHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = seed.value;
+ }
+ else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32((double) in.value, seed.value);
+ }
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableIntHash implements DrillSimpleFunc {
+ @Param NullableIntHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = seed.value;
+ }
+ else {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32((double) in.value, seed.value);
+ }
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class BigIntHash implements DrillSimpleFunc {
+
+ @Param BigIntHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32((double) in.value, seed.value);
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class IntHash implements DrillSimpleFunc {
+ @Param IntHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ // TODO: implement hash function for other types
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32((double) in.value, seed.value);
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class Decimal9Hash implements DrillSimpleFunc {
+ @Param Decimal9Holder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ java.math.BigDecimal input = new java.math.BigDecimal(java.math.BigInteger.valueOf(in.value), in.scale);
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(input.doubleValue(), seed.value);
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableDecimal9Hash implements DrillSimpleFunc {
+ @Param NullableDecimal9Holder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = seed.value;
+ } else {
+ java.math.BigDecimal input = new java.math.BigDecimal(java.math.BigInteger.valueOf(in.value), in.scale);
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(input.doubleValue(), seed.value);
+ }
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class Decimal18Hash implements DrillSimpleFunc {
+ @Param Decimal18Holder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ java.math.BigDecimal input = new java.math.BigDecimal(java.math.BigInteger.valueOf(in.value), in.scale);
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(input.doubleValue(), seed.value);
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableDecimal18Hash implements DrillSimpleFunc {
+ @Param NullableDecimal18Holder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = seed.value;
+ } else {
+ java.math.BigDecimal input = new java.math.BigDecimal(java.math.BigInteger.valueOf(in.value), in.scale);
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(input.doubleValue(), seed.value);
+ }
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class Decimal28Hash implements DrillSimpleFunc {
+ @Param Decimal28SparseHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ java.math.BigDecimal input = org.apache.drill.exec.util.DecimalUtility.getBigDecimalFromSparse(in.buffer,
+ in.start, in.nDecimalDigits, in.scale);
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(input.doubleValue(), 0);
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableDecimal28Hash implements DrillSimpleFunc {
+ @Param NullableDecimal28SparseHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = seed.value;
+ } else {
+ java.math.BigDecimal input = org.apache.drill.exec.util.DecimalUtility.getBigDecimalFromSparse(in.buffer,
+ in.start, in.nDecimalDigits, in.scale);
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(input.doubleValue(), 0);
+ }
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class Decimal38Hash implements DrillSimpleFunc {
+ @Param Decimal38SparseHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ java.math.BigDecimal input = org.apache.drill.exec.util.DecimalUtility.getBigDecimalFromSparse(in.buffer,
+ in.start, in.nDecimalDigits, in.scale);
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(input.doubleValue(), 0);
+ }
+ }
+
+ @FunctionTemplate(name = "hash32AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
+ public static class NullableDecimal38Hash implements DrillSimpleFunc {
+ @Param NullableDecimal38SparseHolder in;
+ @Param IntHolder seed;
+ @Output IntHolder out;
+
+
+ public void setup() {
+ }
+
+ public void eval() {
+ if (in.isSet == 0) {
+ out.value = seed.value;
+ } else {
+ java.math.BigDecimal input = org.apache.drill.exec.util.DecimalUtility.getBigDecimalFromSparse(in.buffer,
+ in.start, in.nDecimalDigits, in.scale);
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(input.doubleValue(), 0);
+ }
+ }
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/drill/blob/ff76078b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash64AsDouble.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash64AsDouble.java b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash64AsDouble.java
index b3e4cc1..91caafc 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash64AsDouble.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash64AsDouble.java
@@ -160,7 +160,7 @@ public class Hash64AsDouble {
}
@FunctionTemplate(name = "hash64AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class HashBigInt implements DrillSimpleFunc {
+ public static class BigIntHash implements DrillSimpleFunc {
@Param
BigIntHolder in;
http://git-wip-us.apache.org/repos/asf/drill/blob/ff76078b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash64Functions.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash64Functions.java b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash64Functions.java
index 3e390a4..5145af2 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash64Functions.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash64Functions.java
@@ -277,7 +277,7 @@ public class Hash64Functions {
}
@FunctionTemplate(name = "hash64", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class HashBigInt implements DrillSimpleFunc {
+ public static class BigIntHash implements DrillSimpleFunc {
@Param
BigIntHolder in;
http://git-wip-us.apache.org/repos/asf/drill/blob/ff76078b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash64FunctionsWithSeed.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash64FunctionsWithSeed.java b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash64FunctionsWithSeed.java
index e162b94..004a221 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash64FunctionsWithSeed.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash64FunctionsWithSeed.java
@@ -279,7 +279,7 @@ public class Hash64FunctionsWithSeed {
}
@FunctionTemplate(name = "hash64", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class HashBigInt implements DrillSimpleFunc {
+ public static class BigIntHash implements DrillSimpleFunc {
@Param BigIntHolder in;
@Param BigIntHolder seed;
http://git-wip-us.apache.org/repos/asf/drill/blob/ff76078b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash64WithSeedAsDouble.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash64WithSeedAsDouble.java b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash64WithSeedAsDouble.java
index 6922c31..fbe1868 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash64WithSeedAsDouble.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/Hash64WithSeedAsDouble.java
@@ -162,7 +162,7 @@ public class Hash64WithSeedAsDouble {
}
@FunctionTemplate(name = "hash64AsDouble", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class HashBigInt implements DrillSimpleFunc {
+ public static class BigIntHash implements DrillSimpleFunc {
@Param BigIntHolder in;
@Param BigIntHolder seed;
http://git-wip-us.apache.org/repos/asf/drill/blob/ff76078b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/HashFunctions.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/HashFunctions.java b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/HashFunctions.java
deleted file mode 100644
index 4652cc0..0000000
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/HashFunctions.java
+++ /dev/null
@@ -1,542 +0,0 @@
-/**
- * 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.drill.exec.expr.fn.impl;
-
-import org.apache.drill.exec.expr.DrillSimpleFunc;
-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.holders.BigIntHolder;
-import org.apache.drill.exec.expr.holders.BitHolder;
-import org.apache.drill.exec.expr.holders.DateHolder;
-import org.apache.drill.exec.expr.holders.Decimal18Holder;
-import org.apache.drill.exec.expr.holders.Decimal28SparseHolder;
-import org.apache.drill.exec.expr.holders.Decimal38SparseHolder;
-import org.apache.drill.exec.expr.holders.Decimal9Holder;
-import org.apache.drill.exec.expr.holders.Float4Holder;
-import org.apache.drill.exec.expr.holders.Float8Holder;
-import org.apache.drill.exec.expr.holders.IntHolder;
-import org.apache.drill.exec.expr.holders.NullableBigIntHolder;
-import org.apache.drill.exec.expr.holders.NullableBitHolder;
-import org.apache.drill.exec.expr.holders.NullableDateHolder;
-import org.apache.drill.exec.expr.holders.NullableDecimal18Holder;
-import org.apache.drill.exec.expr.holders.NullableDecimal28SparseHolder;
-import org.apache.drill.exec.expr.holders.NullableDecimal38SparseHolder;
-import org.apache.drill.exec.expr.holders.NullableDecimal9Holder;
-import org.apache.drill.exec.expr.holders.NullableFloat4Holder;
-import org.apache.drill.exec.expr.holders.NullableFloat8Holder;
-import org.apache.drill.exec.expr.holders.NullableIntHolder;
-import org.apache.drill.exec.expr.holders.NullableTimeHolder;
-import org.apache.drill.exec.expr.holders.NullableTimeStampHolder;
-import org.apache.drill.exec.expr.holders.NullableVar16CharHolder;
-import org.apache.drill.exec.expr.holders.NullableVarBinaryHolder;
-import org.apache.drill.exec.expr.holders.NullableVarCharHolder;
-import org.apache.drill.exec.expr.holders.TimeHolder;
-import org.apache.drill.exec.expr.holders.TimeStampHolder;
-import org.apache.drill.exec.expr.holders.Var16CharHolder;
-import org.apache.drill.exec.expr.holders.VarBinaryHolder;
-import org.apache.drill.exec.expr.holders.VarCharHolder;
-
-public class HashFunctions {
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
- public static class NullableFloatHash implements DrillSimpleFunc {
-
- @Param NullableFloat4Holder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- if (in.isSet == 0) {
- out.value = 0;
- } else {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
- }
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
- public static class FloatHash implements DrillSimpleFunc {
-
- @Param Float4Holder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
- public static class NullableDoubleHash implements DrillSimpleFunc {
-
- @Param NullableFloat8Holder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- if (in.isSet == 0) {
- out.value = 0;
- } else {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
- }
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
- public static class DoubleHash implements DrillSimpleFunc {
-
- @Param Float8Holder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
- public static class NullableVarBinaryHash implements DrillSimpleFunc {
-
- @Param NullableVarBinaryHolder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- if (in.isSet == 0) {
- out.value = 0;
- } else {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.start, in.end, in.buffer, 0);
- }
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
- public static class NullableVarCharHash implements DrillSimpleFunc {
-
- @Param NullableVarCharHolder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- if (in.isSet == 0) {
- out.value = 0;
- } else {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.start, in.end, in.buffer, 0);
- }
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
- public static class NullableVar16CharHash implements DrillSimpleFunc {
-
- @Param NullableVar16CharHolder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- if (in.isSet == 0) {
- out.value = 0;
- } else {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.start, in.end, in.buffer, 0);
- }
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class NullableBigIntHash implements DrillSimpleFunc {
-
- @Param NullableBigIntHolder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- if (in.isSet == 0) {
- out.value = 0;
- }
- else {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
- }
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class NullableIntHash implements DrillSimpleFunc {
- @Param NullableIntHolder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- if (in.isSet == 0) {
- out.value = 0;
- }
- else {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
- }
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class VarBinaryHash implements DrillSimpleFunc {
-
- @Param VarBinaryHolder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.start, in.end, in.buffer, 0);
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class VarCharHash implements DrillSimpleFunc {
-
- @Param VarCharHolder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.start, in.end, in.buffer, 0);
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class Var16CharHash implements DrillSimpleFunc {
-
- @Param Var16CharHolder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.start, in.end, in.buffer, 0);
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class HashBigInt implements DrillSimpleFunc {
-
- @Param BigIntHolder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class IntHash implements DrillSimpleFunc {
- @Param IntHolder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- // TODO: implement hash function for other types
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
- }
- }
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class DateHash implements DrillSimpleFunc {
- @Param DateHolder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class NullableDateHash implements DrillSimpleFunc {
- @Param NullableDateHolder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- if (in.isSet == 0) {
- out.value = 0;
- } else {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
- }
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class TimeStampHash implements DrillSimpleFunc {
- @Param TimeStampHolder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class NullableTimeStampHash implements DrillSimpleFunc {
- @Param NullableTimeStampHolder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- if (in.isSet == 0) {
- out.value = 0;
- } else {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
- }
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class TimeHash implements DrillSimpleFunc {
- @Param TimeHolder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class NullableTimeHash implements DrillSimpleFunc {
- @Param NullableTimeHolder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- if (in.isSet == 0) {
- out.value = 0;
- } else {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
- }
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class Decimal9Hash implements DrillSimpleFunc {
- @Param Decimal9Holder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class NullableDecimal9Hash implements DrillSimpleFunc {
- @Param NullableDecimal9Holder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- if (in.isSet == 0) {
- out.value = 0;
- } else {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
- }
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class Decimal18Hash implements DrillSimpleFunc {
- @Param Decimal18Holder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class NullableDecimal18Hash implements DrillSimpleFunc {
- @Param NullableDecimal18Holder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- if (in.isSet == 0) {
- out.value = 0;
- } else {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
- }
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class Decimal28Hash implements DrillSimpleFunc {
- @Param Decimal28SparseHolder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
-
- int xor = 0;
- for (int i = 0; i < in.nDecimalDigits; i++) {
- xor = xor ^ Decimal28SparseHolder.getInteger(i, in.start, in.buffer);
- }
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(xor, 0);
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class NullableDecimal28Hash implements DrillSimpleFunc {
- @Param NullableDecimal28SparseHolder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- if (in.isSet == 0) {
- out.value = 0;
- } else {
- int xor = 0;
- for (int i = 0; i < in.nDecimalDigits; i++) {
- xor = xor ^ NullableDecimal28SparseHolder.getInteger(i, in.start, in.buffer);
- }
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(xor, 0);
- }
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class Decimal38Hash implements DrillSimpleFunc {
- @Param Decimal38SparseHolder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
-
- int xor = 0;
- for (int i = 0; i < in.nDecimalDigits; i++) {
- xor = xor ^ Decimal38SparseHolder.getInteger(i, in.start, in.buffer);
- }
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(xor, 0);
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL)
- public static class NullableDecimal38Hash implements DrillSimpleFunc {
- @Param NullableDecimal38SparseHolder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- if (in.isSet == 0) {
- out.value = 0;
- } else {
- int xor = 0;
- for (int i = 0; i < in.nDecimalDigits; i++) {
- xor = xor ^ NullableDecimal38SparseHolder.getInteger(i, in.start, in.buffer);
- }
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(xor, 0);
- }
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
- public static class NullableBitHash implements DrillSimpleFunc {
-
- @Param NullableBitHolder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- if (in.isSet == 0) {
- out.value = 0;
- } else {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
- }
- }
- }
-
- @FunctionTemplate(name = "hash", scope = FunctionScope.SIMPLE, nulls = FunctionTemplate.NullHandling.INTERNAL )
- public static class BitHash implements DrillSimpleFunc {
-
- @Param BitHolder in;
- @Output IntHolder out;
-
- public void setup() {
- }
-
- public void eval() {
- out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/drill/blob/ff76078b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/XXHash.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/XXHash.java b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/XXHash.java
index b18daed..033e2cb 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/XXHash.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/XXHash.java
@@ -180,23 +180,36 @@ public final class XXHash {
/* 32 bit variations */
public static int hash32(int val, long seed){
- return (int) hash64(val, seed);
+ return convert64To32(hash64(val, seed));
}
public static int hash32(long val, long seed){
- return (int) hash64(val, seed);
+ return convert64To32(hash64(val, seed));
}
public static int hash32(float val, long seed){
- return (int) hash64(val, seed);
+ return convert64To32(hash64(val, seed));
}
public static int hash32(double val, long seed){
- return (int) hash64(val, seed);
+ return convert64To32(hash64(val, seed));
}
public static int hash32(int start, int end, DrillBuf buffer, long seed){
- return (int) hash64(start, end, buffer, seed);
+ return convert64To32(hash64(start, end, buffer, seed));
+ }
+
+ /**
+ * Convert a 64 bit hash value to a 32 bit by taking the XOR of the
+ * most significant 4 bytes with the least significant 4 bytes.
+ * @param val the input 64 bit hash value
+ * @return converted 32 bit hash value
+ */
+ private static int convert64To32(long val) {
+
+ int msb = (int) ((val >>> 32) & 0xFFFFFFFF);
+ int lsb = (int) (val);
+ return (msb ^ lsb);
}
}
http://git-wip-us.apache.org/repos/asf/drill/blob/ff76078b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashPrelUtil.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashPrelUtil.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashPrelUtil.java
index 5ce5ac1..caf21bc 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashPrelUtil.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashPrelUtil.java
@@ -55,9 +55,10 @@ public class HashPrelUtil {
}
};
- private static final String HASH64_FUNCTION_NAME = "hash64";
- private static final String HASH64_DOUBLE_FUNCTION_NAME = "hash64AsDouble";
- private static final String CAST_TO_INT_FUNCTION_NAME = "castInt";
+ // The hash32 functions actually use hash64 underneath. The reason we want to call hash32 is that
+ // the hash based operators make use of 4 bytes of hash value, not 8 bytes (for reduced memory use).
+ private static final String HASH32_FUNCTION_NAME = "hash32";
+ private static final String HASH32_DOUBLE_FUNCTION_NAME = "hash32AsDouble";
/**
* Create hash based partition expression based on the given distribution fields.
@@ -93,18 +94,18 @@ public class HashPrelUtil {
assert inputExprs.size() > 0;
- final String functionName = hashAsDouble ? HASH64_DOUBLE_FUNCTION_NAME : HASH64_FUNCTION_NAME;
+ final String functionName = hashAsDouble ? HASH32_DOUBLE_FUNCTION_NAME : HASH32_FUNCTION_NAME;
T func = helper.createCall(functionName, ImmutableList.of(inputExprs.get(0)));
for (int i = 1; i<inputExprs.size(); i++) {
func = helper.createCall(functionName, ImmutableList.of(inputExprs.get(i), func));
}
- return helper.createCall(CAST_TO_INT_FUNCTION_NAME, ImmutableList.of(func));
+ return func;
}
/**
- * Return a hash expression : (int) hash(field1, hash(field2, hash(field3, 0)));
+ * Return a hash expression : hash32(field1, hash32(field2, hash32(field3, 0)));
*/
public static LogicalExpression getHashExpression(List<LogicalExpression> fields, boolean hashAsDouble){
return createHashExpression(fields, HASH_HELPER_LOGICALEXPRESSION, hashAsDouble);