----------------------------------------------------------- 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 > >
