Github user vvysotskyi commented on a diff in the pull request:
https://github.com/apache/drill/pull/1242#discussion_r185435469
--- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/UnionFunctions.java
---
@@ -146,16 +139,131 @@ private static int getTypeValue(MinorType type) {
@Inject
DrillBuf buf;
+ @Override
public void setup() {}
+ @Override
public void eval() {
- byte[] type;
+ String typeName;
if (input.isSet()) {
- type = input.getType().getMinorType().name().getBytes();
+ typeName = input.getType().getMinorType().name();
} else {
- type = org.apache.drill.common.types.TypeProtos.MinorType.NULL.name().getBytes();
+ typeName = org.apache.drill.common.types.TypeProtos.MinorType.NULL.name();
}
+ byte[] type = typeName.getBytes();
+ buf = buf.reallocIfNeeded(type.length);
+ buf.setBytes(0, type);
+ out.buffer = buf;
+ out.start = 0;
+ out.end = type.length;
+ }
+ }
+
+ @FunctionTemplate(name = "sqlTypeOf",
+ scope = FunctionTemplate.FunctionScope.SIMPLE,
+ nulls = NullHandling.INTERNAL)
+ public static class GetSqlType implements DrillSimpleFunc {
+
+ @Param
+ FieldReader input;
+ @Output
+ VarCharHolder out;
+ @Inject
+ DrillBuf buf;
+
+ @Override
+ public void setup() {}
+
+ @Override
+ public void eval() {
+
+ org.apache.drill.common.types.TypeProtos.MajorType type = input.getType();
+
+ // Note: extendType is a static function because the byte code magic
+ // for UDFS can't handle switch statements.
+
+ String typeName =
+ org.apache.drill.exec.expr.fn.impl.UnionFunctions.extendType(
+ type,
+ org.apache.drill.common.types.Types.getBaseSqlTypeName(type));
+
+ org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.varCharOutput(
--- End diff --
I think passing a holder into the method may prevent scalar replacement for this holder.
---
|