-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/15871/
-----------------------------------------------------------
(Updated Dec. 7, 2013, 8:33 p.m.)
Review request for drill.
Changes
-------
1) cast function when either src or target type has varied length, or both.
2) Use function template to generate cast function code.
2) add unit test cases to cover different combinations of cast from one type to
another:
int, bigint, float4, float8, varchar, varbinary.
Repository: drill-git
Description (updated)
-------
The explicit cast function is treated as a special function call. Its syntax in
logical/physical plan:
cast (input_expr as int | bigint | float4 | float8 | varchar(length) |
varbinary(length) )
The main code changes :
1) parser change to read expression in logical/physical plan, which may contain
an explicit cast function
2) FunctionRegistry.java is added with two methods to build a logical
expression for cast function.
3) Add 3 function template to generate the different type of cast functions :
CastFunctionsSrcVarLen.java : when source type has varied length, target
type has fixed length.
CastFunctionsTargetVarLen.java: when source type has fixed length, target
type has varied length.
CastFunctionsSrcVarLenTargetVarLen.java: when both source and target type
have varied length.
Currently, the following 6 types can be cast into each other
float4, float8, int, bigint, varchar, varbinary.
Diffs (updated)
-----
common/src/main/antlr3/org/apache/drill/common/expression/parser/ExprLexer.g
76da965
common/src/main/antlr3/org/apache/drill/common/expression/parser/ExprParser.g
7fc1651
common/src/main/java/org/apache/drill/common/expression/FunctionCall.java
a8b7e01
common/src/main/java/org/apache/drill/common/expression/FunctionDefinition.java
fb00dc7
common/src/main/java/org/apache/drill/common/expression/FunctionRegistry.java
73e1925
common/src/main/java/org/apache/drill/common/expression/OutputTypeDeterminer.java
2f583d5
common/src/main/java/org/apache/drill/common/expression/fn/CastFunctionDefs.java
PRE-CREATION
exec/java-exec/src/main/codegen/data/Casts.tdd 760b0f9
exec/java-exec/src/main/codegen/templates/CastFunctions.java 85a00b0
exec/java-exec/src/main/codegen/templates/CastFunctionsSrcVarLen.java
PRE-CREATION
exec/java-exec/src/main/codegen/templates/CastFunctionsSrcVarLenTargetVarLen.java
PRE-CREATION
exec/java-exec/src/main/codegen/templates/CastFunctionsTargetVarLen.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/vector/ValueHolderHelper.java
077c693
exec/java-exec/src/main/java/org/apache/drill/exec/work/FragmentRunner.java
d003972
exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/TestCastFunctions.java
PRE-CREATION
exec/java-exec/src/test/resources/functions/cast/testCastBigInt.json
PRE-CREATION
exec/java-exec/src/test/resources/functions/cast/testCastFloat4.json
PRE-CREATION
exec/java-exec/src/test/resources/functions/cast/testCastFloat8.json
PRE-CREATION
exec/java-exec/src/test/resources/functions/cast/testCastInt.json
PRE-CREATION
exec/java-exec/src/test/resources/functions/cast/testCastNested.json
PRE-CREATION
exec/java-exec/src/test/resources/functions/cast/testCastVarBinary.json
PRE-CREATION
exec/java-exec/src/test/resources/functions/cast/testCastVarChar.json
PRE-CREATION
exec/java-exec/src/test/resources/functions/mytest.json PRE-CREATION
exec/java-exec/src/test/resources/functions/mytest2.json PRE-CREATION
Diff: https://reviews.apache.org/r/15871/diff/
Testing (updated)
-------
7 physical plans are used in junit testcase testCastFunctions.java
1) testCastInt.json : when target type is int, and src type is bigint, float4,
float8, varchar, varbinary.
2) testCastBigInt.json: when target type is bigint, and src type is int,
float4, float8, varchar, varbinary.
3) testCastFloat4.json: when target type is float4, and src type is int,
bigint, float8, varchar, varbinary.
4) testCastFloat8.json: when target type is float8, and src type is int,
bigint, float4, varchar, varbinary
5) testCastVarChar.json: when target tyep is varchar, and src type is int,
bigint, float4,float8, varbinary
6) testCastVarBinary.json: when target type is varbinary, and src type is int,
bigint, float4, float8, varchar.
7) testCastNested.json: test cast functions is nested in another cast function,
or another normal functions.
Thanks,
Jinfeng Ni