-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/16490/#review31211
-----------------------------------------------------------



exec/java-exec/src/main/java/org/apache/drill/exec/resolver/TypeCastRules.java
<https://reviews.apache.org/r/16490/#comment59611>

    Should have put that through a JSON validator before posting, here is a 
revised version that is valid http://pastebin.com/kaZPM9Zr


- Jason Altekruse


On Jan. 3, 2014, 10:57 p.m., Jinfeng Ni wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/16490/
> -----------------------------------------------------------
> 
> (Updated Jan. 3, 2014, 10:57 p.m.)
> 
> 
> Review request for drill.
> 
> 
> Repository: drill-git
> 
> 
> Description
> -------
> 
> This patch is to provide implicit cast support in Drill.
> 
> The code change is mainly in two areas:
> 
> 1. Function Resolver and related type cast rules : used to choose the best 
> matched function implementation corresponding to a function name and its list 
> of argument types. Type promotion would be implied, if there is no function 
> implementation whose parameter types exactly match the argument types. Type 
> promotion is implemented using the type precedence list. Type promotion is 
> checked against a rule which will help implement a isCastable(from, to) 
> method.  
> New files: 1) DefaultFunctionResolver.java
>            2) FunctionResolver
>            3) FunctionResolverFactor.java
>            4) OperatorFunctionResolver.java : reserved for future use. 
>            5) ResolverTypePrecedence.java
>            6) TypeCastRules.java
>            7) UDFFunctionResolver.java : reserved for future use. 
> 
> 2. ImplicitCastBuilder : to inject implicit cast whenever necessary. After 
> the function resolver returns a best matched function implementation, if the 
> param type does not match the argument type, an implicit cast will be 
> inserted on top of the argument. 
>    - ImplicitCastBuilder uses a visitor to inject implicit cast. 
>    - ImplicitCastBuilder will be part of ExpressionTreeMateralizer, after we 
> materialize the expression tree.
>    - ExpressionValidator will be called after implicit cast is injected, in 
> stead of after expression materialization.
>    - Because ImplicitCastBuilder requires a FunctionImplementationRegistry 
> (to decide the best matched function implementation), and ImplicitCastBuilder 
> is part of ExpressionTreeMaterializer, all the call of 
> ExpressionTreeMaterializer is modified by adding a 
> FunctionImplementationRegistry. 
> 
> New files or modified files:
>             1)CastFunctionDefs.java
>             2)ExpressionTreeMaterializer.java
>             3)ImplicitCastBuilder.java
>             4)DrillFuncHolder.java : expose param type and size
>             5)FunctionImplementationRegistry.java : expose the list of 
> function implementation.
>             6) other files because of the change to 
> ExpressionTreeMaterializer.java. 
> 
> Some other minor changes:
> 
> 1. ArgumentValidator.ComparableArguments :
>   change allSame from true to false, since currently we have comparison 
> operators defined over different types of inputs.
> 
> 2. VectorUtil:
>   Add code to handle null value when display the result.
> 
> 
> Diffs
> -----
> 
>   
> common/src/main/java/org/apache/drill/common/expression/ArgumentValidators.java
>  cd30a06 
>   
> common/src/main/java/org/apache/drill/common/expression/TypedNullConstant.java
>  PRE-CREATION 
>   
> common/src/main/java/org/apache/drill/common/expression/fn/CastFunctionDefs.java
>  PRE-CREATION 
>   exec/java-exec/src/main/java/org/apache/drill/exec/ExecConstants.java 
> 5336c0e 
>   
> exec/java-exec/src/main/java/org/apache/drill/exec/expr/EvaluationVisitor.java
>  587fe3c 
>   
> exec/java-exec/src/main/java/org/apache/drill/exec/expr/ExpressionTreeMaterializer.java
>  5d576b1 
>   
> exec/java-exec/src/main/java/org/apache/drill/exec/expr/ImplicitCastBuilder.java
>  PRE-CREATION 
>   
> exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/DrillFuncHolder.java
>  e001ffe 
>   
> exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/FunctionImplementationRegistry.java
>  5bbab76 
>   
> exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/MathFunctions.java
>  288760b 
>   
> exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/aggregate/AggBatch.java
>  f652e35 
>   
> exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/filter/FilterRecordBatch.java
>  fe298d6 
>   
> exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/MergeJoinBatch.java
>  f3a32cd 
>   
> exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/mergereceiver/MergingRecordBatch.java
>  fd392a3 
>   
> exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/orderedpartitioner/OrderedPartitionRecordBatch.java
>  a3d1d09 
>   
> exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/partitionsender/PartitionSenderRootExec.java
>  bc53bd2 
>   
> exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/project/ProjectRecordBatch.java
>  41a4c4d 
>   
> exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/sort/SortBatch.java
>  7881115 
>   
> exec/java-exec/src/main/java/org/apache/drill/exec/resolver/DefaultFunctionResolver.java
>  PRE-CREATION 
>   
> exec/java-exec/src/main/java/org/apache/drill/exec/resolver/FunctionResolver.java
>  PRE-CREATION 
>   
> exec/java-exec/src/main/java/org/apache/drill/exec/resolver/FunctionResolverFactory.java
>  PRE-CREATION 
>   
> exec/java-exec/src/main/java/org/apache/drill/exec/resolver/ResolverTypePrecedence.java
>  PRE-CREATION 
>   
> exec/java-exec/src/main/java/org/apache/drill/exec/resolver/TypeCastRules.java
>  PRE-CREATION 
>   exec/java-exec/src/main/java/org/apache/drill/exec/util/VectorUtil.java 
> 8b23bcd 
>   exec/java-exec/src/test/java/org/apache/drill/exec/expr/ExpressionTest.java 
> 4bff5a3 
>   
> exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/TestImplicitCastFunctions.java
>  PRE-CREATION 
>   
> exec/java-exec/src/test/java/org/apache/drill/exec/record/ExpressionTreeMaterializerTest.java
>  7ee1718 
>   exec/java-exec/src/test/resources/functions/cast/testICastConstant.json 
> PRE-CREATION 
>   exec/java-exec/src/test/resources/functions/cast/testICastMockCol.json 
> PRE-CREATION 
>   exec/java-exec/src/test/resources/functions/cast/testICastNullExp.json 
> PRE-CREATION 
>   exec/ref/src/test/resources/simple_plan.json c0837e6 
> 
> Diff: https://reviews.apache.org/r/16490/diff/
> 
> 
> Testing
> -------
> 
> testImplicitCastFunctions.java is used for unit test. It uses two physical 
> plans
> 1. testICastConstant.json : the input expression is a literal constants.  eg, 
> 1 + 1.2, etc. Also, cover the nested function cases.
> 2. testICastMockCol.json  : the input expression is a column from mock scan 
> operator. 
> 
> 
> Thanks,
> 
> Jinfeng Ni
> 
>

Reply via email to