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

(Updated March 12, 2014, 11:42 a.m.)


Review request for drill.


Changes
-------

Added two new interval types: IntervalYear, IntervalDay.
Integrate with the latest JDBC thinning changes.
Addressed initial round of review comments


Repository: drill-git


Description
-------

Added value vectors, holders, cast and comparison functions for the following 
data types.

Date
DateTime
Time
TimeStamp
Interval

Internal representation of these data types:
For the data types Date, DateTime, TimeStamp we internally store milliseconds 
(from epoch) in UTC. We use a 'long' to store the milliseconds. Since TimeStamp 
has a timezone associated with it, we use another field (int) to store the 
index of the timezone into a static list of timezones we maintain (in 
DateUtility class)

For the Time data type we again store milliseconds, but since Time has a small 
range (00:00:00.000 - 23:59:59.999) we use an 'int' to store the value.

For Interval data type, which can be used to express an interval of time using 
one or more of the parameters: years, months, days, hours, minutes, seconds, 
milliseconds we internally store three fields. Months (int), days (int) and 
milliseconds (long). Using these three fields we can express all the above 
parameters with simple conversions. Eg: Years (parameter) - Months (internal) 
is a simple 1 Year = 12 months conversion. Similar conversion can be applied to 
hours, minutes and seconds to convert them to milliseconds. 

Sorting, comparison functions for Date, DateTime, TimeStamp, Time are straight 
forward as internally they are stored as long or int.

In addition to these types we also have a way to represent each type as a 
literal. For eg: a Date literal can be expressed using the expression: 
"datetype(2008, 1, 20)", a TimeStamp literal can be expressed using the 
expression: "timestamptype(2008, 1, 27, 0, 0, 0, 0, 'UTC')" and so on for all 
the types. 

For performing date functions the design is to use the internal representation 
to construct a Joda object (MutableDateTime) and use Joda for date arithmetic 
and other functions. As an example in this patch I've added a date_add() 
function that adds a Date and an Interval (DateTypeFunctions class)


Diffs (updated)
-----

  common/src/main/antlr3/org/apache/drill/common/expression/parser/ExprLexer.g 
be2a3f2 
  common/src/main/antlr3/org/apache/drill/common/expression/parser/ExprParser.g 
b5cf292 
  common/src/main/java/org/apache/drill/common/expression/FunctionRegistry.java 
7cb386a 
  
common/src/main/java/org/apache/drill/common/expression/OutputTypeDeterminer.java
 69acf12 
  
common/src/main/java/org/apache/drill/common/expression/fn/CastFunctionDefs.java
 4be3820 
  common/src/main/java/org/apache/drill/common/types/Types.java fd8991d 
  exec/java-exec/pom.xml bb044ad 
  exec/java-exec/src/main/codegen/config.fmpp 8f1060a 
  exec/java-exec/src/main/codegen/data/Casts.tdd fde63cf 
  exec/java-exec/src/main/codegen/data/DateTypes.tdd PRE-CREATION 
  exec/java-exec/src/main/codegen/data/ValueVectorTypes.tdd 88a5974 
  exec/java-exec/src/main/codegen/includes/vv_imports.ftl 5083f74 
  exec/java-exec/src/main/codegen/templates/DateCastFunctions.java PRE-CREATION 
  exec/java-exec/src/main/codegen/templates/DateFunctions.java PRE-CREATION 
  exec/java-exec/src/main/codegen/templates/FixedValueVectors.java 2d81299 
  exec/java-exec/src/main/codegen/templates/NullableValueVectors.java 051c62d 
  exec/java-exec/src/main/codegen/templates/SqlAccessors.java efaf9a6 
  exec/java-exec/src/main/codegen/templates/ValueHolders.java 41dc049 
  
exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/DateTypeFunctions.java
 PRE-CREATION 
  
exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/DateUtility.java
 PRE-CREATION 
  exec/java-exec/src/main/java/org/apache/drill/exec/ops/FragmentContext.java 
8462622 
  
exec/java-exec/src/main/java/org/apache/drill/exec/planner/fragment/SimpleParallelizer.java
 ffb4c5b 
  
exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillOptiq.java
 13f5494 
  
exec/java-exec/src/test/java/org/apache/drill/exec/record/vector/TestDateTypes.java
 PRE-CREATION 
  exec/java-exec/src/test/resources/record/vector/test_all_date_literals.json 
PRE-CREATION 
  exec/java-exec/src/test/resources/record/vector/test_date.json PRE-CREATION 
  exec/java-exec/src/test/resources/record/vector/test_date_add.json 
PRE-CREATION 
  exec/java-exec/src/test/resources/record/vector/test_datetime.json 
PRE-CREATION 
  exec/java-exec/src/test/resources/record/vector/test_interval.json 
PRE-CREATION 
  exec/java-exec/src/test/resources/test_simple_date.json PRE-CREATION 
  exec/java-exec/src/test/resources/test_simple_interval.json PRE-CREATION 
  protocol/src/main/java/org/apache/drill/common/types/TypeProtos.java e4fd94a 
  protocol/src/main/java/org/apache/drill/exec/proto/BitControl.java 761f19f 
  protocol/src/main/protobuf/BitControl.proto d96f7cf 
  protocol/src/main/protobuf/Types.proto 3434110 

Diff: https://reviews.apache.org/r/18055/diff/


Testing
-------

Added unit tests and some manual testing. 


Thanks,

Mehant Baid

Reply via email to