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

Reply via email to