You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@drill.apache.org by ja...@apache.org on 2013/08/06 01:47:45 UTC
[3/3] git commit: s/bin_substr/byte_substr
s/bin_substr/byte_substr
Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/31f19649
Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/31f19649
Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/31f19649
Branch: refs/heads/master
Commit: 31f196497e7e0d1bd6cdc852ff3e9f16dd8c5072
Parents: 71e8ffe
Author: Ben Becker <be...@gmail.com>
Authored: Sun Aug 4 00:35:33 2013 -0700
Committer: Jacques Nadeau <ja...@apache.org>
Committed: Mon Aug 5 16:44:58 2013 -0700
----------------------------------------------------------------------
.../drill/exec/expr/fn/impl/BinSubstring.java | 104 -------------------
.../drill/exec/expr/fn/impl/ByteSubstring.java | 103 ++++++++++++++++++
.../exec/physical/impl/TestSimpleFunctions.java | 4 +-
.../resources/functions/testByteSubstring.json | 37 +++++++
.../functions/testSubstringBinary.json | 37 -------
5 files changed, 142 insertions(+), 143 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/31f19649/sandbox/prototype/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/BinSubstring.java
----------------------------------------------------------------------
diff --git a/sandbox/prototype/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/BinSubstring.java b/sandbox/prototype/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/BinSubstring.java
deleted file mode 100644
index e608a34..0000000
--- a/sandbox/prototype/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/BinSubstring.java
+++ /dev/null
@@ -1,104 +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.common.expression.*;
-import org.apache.drill.common.types.TypeProtos;
-import org.apache.drill.common.types.TypeProtos.MajorType;
-import org.apache.drill.common.types.Types;
-import org.apache.drill.exec.expr.DrillFunc;
-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.record.RecordBatch;
-import org.apache.drill.exec.vector.*;
-
-// TODO: implement optional length parameter
-
-/**
- * Evaluate a substring expression for a given value; specifying the start
- * position, and optionally the end position.
- *
- * - If the start position is negative, start from abs(start) characters from
- * the end of the buffer.
- *
- * - If no length is specified, continue to the end of the string.
- *
- * - If the substring expression's length exceeds the value's upward bound, the
- * value's length will be used.
- *
- * - If the substring is invalid, return an empty string.
- */
-@FunctionTemplate(name = "binsubstring",
- scope = FunctionTemplate.FunctionScope.SIMPLE,
- nulls = FunctionTemplate.NullHandling.NULL_IF_NULL)
-public class BinSubstring implements DrillFunc {
-
- @Param VarBinaryHolder string;
- @Param BigIntHolder offset;
- @Param BigIntHolder length;
- @Output VarBinaryHolder out;
-
- @Override
- public void setup(RecordBatch incoming) { }
-
- @Override
- public void eval() {
- out.buffer = string.buffer;
-
- // handle invalid values; e.g. SUBSTRING(value, 0, x) or SUBSTRING(value, x, 0)
- if (offset.value == 0 || length.value <= 0) {
-
- out.start = 0;
- out.end = 0;
-
- } else {
-
- // handle negative and positive offset values
- if (offset.value < 0)
- out.start = string.end + (int)offset.value;
- else
- out.start = (int)offset.value - 1;
-
- // calculate end position from length and truncate to upper value bounds
- if (out.start + length.value > string.end)
- out.end = string.end;
- else
- out.end = out.start + (int)length.value;
-
- }
- }
-
- public static class Provider implements CallProvider {
-
- @Override
- public FunctionDefinition[] getFunctionDefintions() {
- return new FunctionDefinition[] {
- FunctionDefinition.simple("binsubstring",
- new BasicArgumentValidator(new Arg(Types.required(TypeProtos.MinorType.VARBINARY),
- Types.optional(TypeProtos.MinorType.VARBINARY)),
- new Arg(false, false, "offset", TypeProtos.MinorType.BIGINT),
- new Arg(false, false, "length", TypeProtos.MinorType.BIGINT)),
- new OutputTypeDeterminer.SameAsFirstInput(),
- "bin_substring",
- "bin_substr")
- };
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/31f19649/sandbox/prototype/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/ByteSubstring.java
----------------------------------------------------------------------
diff --git a/sandbox/prototype/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/ByteSubstring.java b/sandbox/prototype/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/ByteSubstring.java
new file mode 100644
index 0000000..3cc22a9
--- /dev/null
+++ b/sandbox/prototype/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/ByteSubstring.java
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * 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.common.expression.*;
+import org.apache.drill.common.types.TypeProtos;
+import org.apache.drill.common.types.TypeProtos.MajorType;
+import org.apache.drill.common.types.Types;
+import org.apache.drill.exec.expr.DrillFunc;
+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.record.RecordBatch;
+import org.apache.drill.exec.vector.*;
+
+// TODO: implement optional length parameter
+
+/**
+ * Evaluate a substring expression for a given value; specifying the start
+ * position, and optionally the end position.
+ *
+ * - If the start position is negative, start from abs(start) characters from
+ * the end of the buffer.
+ *
+ * - If no length is specified, continue to the end of the string.
+ *
+ * - If the substring expression's length exceeds the value's upward bound, the
+ * value's length will be used.
+ *
+ * - If the substring is invalid, return an empty string.
+ */
+@FunctionTemplate(name = "bytesubstring",
+ scope = FunctionTemplate.FunctionScope.SIMPLE,
+ nulls = FunctionTemplate.NullHandling.NULL_IF_NULL)
+public class ByteSubstring implements DrillFunc {
+
+ @Param VarBinaryHolder string;
+ @Param BigIntHolder offset;
+ @Param BigIntHolder length;
+ @Output VarBinaryHolder out;
+
+ @Override
+ public void setup(RecordBatch incoming) { }
+
+ @Override
+ public void eval() {
+ out.buffer = string.buffer;
+
+ // handle invalid values; e.g. SUBSTRING(value, 0, x) or SUBSTRING(value, x, 0)
+ if (offset.value == 0 || length.value <= 0) {
+
+ out.start = 0;
+ out.end = 0;
+
+ } else {
+
+ // handle negative and positive offset values
+ if (offset.value < 0)
+ out.start = string.end + (int)offset.value;
+ else
+ out.start = (int)offset.value - 1;
+
+ // calculate end position from length and truncate to upper value bounds
+ if (out.start + length.value > string.end)
+ out.end = string.end;
+ else
+ out.end = out.start + (int)length.value;
+
+ }
+ }
+
+ public static class Provider implements CallProvider {
+
+ @Override
+ public FunctionDefinition[] getFunctionDefintions() {
+ return new FunctionDefinition[] {
+ FunctionDefinition.simple("bytesubstring",
+ new BasicArgumentValidator(new Arg(Types.required(TypeProtos.MinorType.VARBINARY),
+ Types.optional(TypeProtos.MinorType.VARBINARY)),
+ new Arg(false, false, "offset", TypeProtos.MinorType.BIGINT),
+ new Arg(false, false, "length", TypeProtos.MinorType.BIGINT)),
+ new OutputTypeDeterminer.SameAsFirstInput(),
+ "byte_substr")
+ };
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/31f19649/sandbox/prototype/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/TestSimpleFunctions.java
----------------------------------------------------------------------
diff --git a/sandbox/prototype/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/TestSimpleFunctions.java b/sandbox/prototype/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/TestSimpleFunctions.java
index 4211db1..ce5dccd 100644
--- a/sandbox/prototype/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/TestSimpleFunctions.java
+++ b/sandbox/prototype/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/TestSimpleFunctions.java
@@ -185,7 +185,7 @@ public class TestSimpleFunctions {
}
@Test
- public void testSubstringBinary(@Injectable final DrillbitContext bitContext,
+ public void testByteSubstring(@Injectable final DrillbitContext bitContext,
@Injectable UserServer.UserClientConnection connection) throws Throwable{
new NonStrictExpectations(){{
@@ -194,7 +194,7 @@ public class TestSimpleFunctions {
}};
PhysicalPlanReader reader = new PhysicalPlanReader(c, c.getMapper(), CoordinationProtos.DrillbitEndpoint.getDefaultInstance());
- PhysicalPlan plan = reader.readPhysicalPlan(Files.toString(FileUtils.getResourceAsFile("/functions/testSubstringBinary.json"), Charsets.UTF_8));
+ PhysicalPlan plan = reader.readPhysicalPlan(Files.toString(FileUtils.getResourceAsFile("/functions/testByteSubstring.json"), Charsets.UTF_8));
FunctionImplementationRegistry registry = new FunctionImplementationRegistry(c);
FragmentContext context = new FragmentContext(bitContext, ExecProtos.FragmentHandle.getDefaultInstance(), connection, null, registry);
SimpleRootExec exec = new SimpleRootExec(ImplCreator.getExec(context, (FragmentRoot) plan.getSortedOperators(false).iterator().next()));
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/31f19649/sandbox/prototype/exec/java-exec/src/test/resources/functions/testByteSubstring.json
----------------------------------------------------------------------
diff --git a/sandbox/prototype/exec/java-exec/src/test/resources/functions/testByteSubstring.json b/sandbox/prototype/exec/java-exec/src/test/resources/functions/testByteSubstring.json
new file mode 100644
index 0000000..3c246c5
--- /dev/null
+++ b/sandbox/prototype/exec/java-exec/src/test/resources/functions/testByteSubstring.json
@@ -0,0 +1,37 @@
+{
+ head:{
+ type:"APACHE_DRILL_PHYSICAL",
+ version:"1",
+ generator:{
+ type:"manual"
+ }
+ },
+ graph:[
+ {
+ @id:1,
+ pop:"mock-scan",
+ url: "http://apache.org",
+ entries:[
+ {records: 100, types: [
+ {name: "blue", type: "INT", mode: "REQUIRED"},
+ {name: "red", type: "BIGINT", mode: "REQUIRED"},
+ {name: "yellow", type: "VARBINARY", mode: "OPTIONAL"},
+ {name: "green", type: "INT", mode: "REQUIRED"}
+ ]}
+ ]
+ },
+ {
+ @id:2,
+ child: 1,
+ pop:"project",
+ exprs: [
+ { ref: "col3", expr:"byte_substr(yellow, -3, 2)" }
+ ]
+ },
+ {
+ @id: 3,
+ child: 2,
+ pop: "screen"
+ }
+ ]
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/31f19649/sandbox/prototype/exec/java-exec/src/test/resources/functions/testSubstringBinary.json
----------------------------------------------------------------------
diff --git a/sandbox/prototype/exec/java-exec/src/test/resources/functions/testSubstringBinary.json b/sandbox/prototype/exec/java-exec/src/test/resources/functions/testSubstringBinary.json
deleted file mode 100644
index f68c179..0000000
--- a/sandbox/prototype/exec/java-exec/src/test/resources/functions/testSubstringBinary.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
- head:{
- type:"APACHE_DRILL_PHYSICAL",
- version:"1",
- generator:{
- type:"manual"
- }
- },
- graph:[
- {
- @id:1,
- pop:"mock-scan",
- url: "http://apache.org",
- entries:[
- {records: 100, types: [
- {name: "blue", type: "INT", mode: "REQUIRED"},
- {name: "red", type: "BIGINT", mode: "REQUIRED"},
- {name: "yellow", type: "VARBINARY", mode: "OPTIONAL"},
- {name: "green", type: "INT", mode: "REQUIRED"}
- ]}
- ]
- },
- {
- @id:2,
- child: 1,
- pop:"project",
- exprs: [
- { ref: "col3", expr:"bin_substring(yellow, -3, 2)" }
- ]
- },
- {
- @id: 3,
- child: 2,
- pop: "screen"
- }
- ]
-}
\ No newline at end of file