drill-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From vvysotskyi <...@git.apache.org>
Subject [GitHub] drill pull request #1242: DRILL-6361: Revised typeOf() function versions
Date Wed, 02 May 2018 09:10:41 GMT
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.


---

Mime
View raw message