[ https://issues.apache.org/jira/browse/DRILL-6361?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16461366#comment-16461366 ]
ASF GitHub Bot commented on DRILL-6361: --------------------------------------- paul-rogers commented on a change in pull request #1242: DRILL-6361: Revised typeOf() function versions URL: https://github.com/apache/drill/pull/1242#discussion_r185576220 ########## File path: 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( Review comment: Removed the convenience functions and the use of those functions. Reverted code to repeating the required lines inline in each function. ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > Provide sqlTypeOf() and modeOf() functions > ------------------------------------------ > > Key: DRILL-6361 > URL: https://issues.apache.org/jira/browse/DRILL-6361 > Project: Apache Drill > Issue Type: Improvement > Affects Versions: 1.13.0 > Reporter: Paul Rogers > Assignee: Paul Rogers > Priority: Minor > Labels: doc-impacting > Fix For: 1.14.0 > > > Drill provides a {{typeof()}} function to return the type of a column. The > returned string, however, has only the base data type. A Drill data type (a > "major type") also includes a cardinality (a "mode"). For example, {{Optional > Int}} or {{Required VarChar}}. > This type information is useful for handling data conversions. For example, > if I could tell that a column value was a {{Nullable Int}}, I could guess > that it is one Drill invented, and I could merge it, by hand, with the type > from another file that had actual values. > The two options are equivalent. Either provide a {{modeOf()}} to just return > cardinality, or a {{dataTypeOf()}} that returns both. (Maybe the {{modeOf()}} > might be more useful.) -- This message was sent by Atlassian JIRA (v7.6.3#76005)