[ 
https://issues.apache.org/jira/browse/DRILL-4081?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15006133#comment-15006133
 ] 

ASF GitHub Bot commented on DRILL-4081:
---------------------------------------

Github user jacques-n commented on a diff in the pull request:

    https://github.com/apache/drill/pull/257#discussion_r44882947
  
    --- Diff: 
exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/UnionFunctions.java
 ---
    @@ -32,16 +33,72 @@
     import org.apache.drill.exec.expr.holders.UnionHolder;
     import org.apache.drill.exec.expr.holders.IntHolder;
     import org.apache.drill.exec.expr.holders.VarCharHolder;
    +import org.apache.drill.exec.resolver.TypeCastRules;
     import org.apache.drill.exec.vector.complex.impl.UnionReader;
     import org.apache.drill.exec.vector.complex.reader.FieldReader;
     
     import javax.inject.Inject;
    +import java.util.Set;
     
     /**
      * The class contains additional functions for union types in addition to 
those in GUnionFunctions
      */
     public class UnionFunctions {
     
    +  /**
    +   * Returns zero if the inputs have equivalent types. Two numeric types 
are considered equivalent, as are a combination
    +   * of date/timestamp. If not equivalent, returns a value determined by 
the numeric value of the MinorType enum
    +   */
    +  @FunctionTemplate(names = {"compareType"},
    +          scope = FunctionTemplate.FunctionScope.SIMPLE,
    +          nulls = NullHandling.INTERNAL)
    +  public static class CompareType implements DrillSimpleFunc {
    +
    +    @Param
    +    FieldReader input1;
    +    @Param
    +    FieldReader input2;
    +    @Output
    +    IntHolder out;
    +
    +    public void setup() {}
    +
    +    public void eval() {
    +      org.apache.drill.common.types.TypeProtos.MinorType type1;
    +      if (input1.isSet()) {
    +        type1 = input1.getType().getMinorType();
    +      } else {
    +        type1 = org.apache.drill.common.types.TypeProtos.MinorType.NULL;
    +      }
    +      org.apache.drill.common.types.TypeProtos.MinorType type2;
    +      if (input2.isSet()) {
    +        type2 = input2.getType().getMinorType();
    +      } else {
    +        type2 = org.apache.drill.common.types.TypeProtos.MinorType.NULL;
    +      }
    +
    +      out.value = 
org.apache.drill.exec.expr.fn.impl.UnionFunctions.compareTypes(type1, type2);
    +    }
    +  }
    +
    +  public static int compareTypes(MinorType type1, MinorType type2) {
    +    int typeValue1 = getTypeValue(type1);
    +    int typeValue2 = getTypeValue(type2);
    +    return typeValue1 - typeValue2;
    +  }
    +
    +  private static int getTypeValue(MinorType type) {
    +    if (TypeCastRules.isNumericType(type)) {
    --- End diff --
    
    would be good to add comments here.


> Handle schema changes in ExternalSort
> -------------------------------------
>
>                 Key: DRILL-4081
>                 URL: https://issues.apache.org/jira/browse/DRILL-4081
>             Project: Apache Drill
>          Issue Type: Improvement
>            Reporter: Steven Phillips
>            Assignee: Steven Phillips
>
> This improvement will make use of the Union vector to handle schema changes. 
> When a new schema appears, the schema will be "merged" with the previous 
> schema. The result will be a new schema that uses Union type to store the 
> columns where this is a type conflict. All of the batches (including the 
> batches that have already arrived) will be coerced into this new schema.
> A new comparison function will be included to handle the comparison of Union 
> type. Comparison of union type will work as follows:
> 1. All numeric types can be mutually compared, and will be compared using 
> Drill implicit cast rules.
> 2. All other types will not be compared against other types, but only among 
> values of the same type.
> 3. There will be an overall precedence of types with regards to ordering. 
> This precedence is not yet defined, but will be as part of the work on this 
> issue.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to