aboutsummaryrefslogtreecommitdiff
path: root/exec/java-exec
diff options
context:
space:
mode:
authorMehant Baid <mehantr@gmail.com>2014-12-25 04:37:32 -0800
committerMehant Baid <mehantr@gmail.com>2014-12-25 04:37:32 -0800
commitb6b139deaade3153a2fb1b9a1b6850fe6d9ee800 (patch)
treeef98f687d8bdce8117000e57b667bce7d2a2a780 /exec/java-exec
parente95e43bd01af2163a026f681f30059f2a2f4ec57 (diff)
DRILL-1898: Add compare_to function for boolean type
Diffstat (limited to 'exec/java-exec')
-rw-r--r--exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/BitFunctions.java13
-rw-r--r--exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/HashFunctions.java34
-rw-r--r--exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestAggregateFunctions.java10
3 files changed, 57 insertions, 0 deletions
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/BitFunctions.java b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/BitFunctions.java
index 35e35b085..3fe489fd9 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/BitFunctions.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/BitFunctions.java
@@ -87,4 +87,17 @@ public class BitFunctions {
}
}
+ @FunctionTemplate(name = "compare_to", scope = FunctionTemplate.FunctionScope.SIMPLE, nulls = NullHandling.NULL_IF_NULL)
+ public static class CompareBitBit implements DrillSimpleFunc {
+
+ @Param BitHolder left;
+ @Param BitHolder right;
+ @Output IntHolder out;
+
+ public void setup(RecordBatch b) {}
+
+ public void eval() {
+ out.value = left.value < right.value ? -1 : ((left.value == right.value)? 0 : 1);
+ }
+ }
}
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
index dd8ac8810..9658fdb18 100644
--- 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
@@ -23,6 +23,7 @@ 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;
@@ -32,6 +33,7 @@ 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;
@@ -538,4 +540,36 @@ public class HashFunctions {
}
}
+ @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(RecordBatch incoming) {
+ }
+
+ 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(RecordBatch incoming) {
+ }
+
+ public void eval() {
+ out.value = org.apache.drill.exec.expr.fn.impl.XXHash.hash32(in.value, 0);
+ }
+ }
+
}
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestAggregateFunctions.java b/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestAggregateFunctions.java
index 14f5a4c0e..c5cc4f7b2 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestAggregateFunctions.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestAggregateFunctions.java
@@ -36,4 +36,14 @@ public class TestAggregateFunctions extends BaseTestQuery {
.baselineValues(3l, 4l)
.build().run();
}
+
+ @Test
+ public void testCountDistinctOnBoolColumn() throws Exception {
+ testBuilder()
+ .sqlQuery("select count(distinct `bool_val`) as cnt from `sys`.`options`")
+ .ordered()
+ .baselineColumns("cnt")
+ .baselineValues(2l)
+ .build().run();
+ }
}