in exec/java-exec/src/main/codegen/templates/DateIntervalFunctionTemplates/DateTruncFunctions.java [90:295]
public void eval() {
<#if type == "Time"> <#-- Start InputType -->
<#if toUnit == "Hour"> <#-- Start UnitType -->
dateTime.setMillis(right.value);
dateTime.setRounding(dateTime.getChronology().hourOfDay());
out.value = (int) dateTime.getMillis();
<#elseif toUnit == "Minute">
dateTime.setMillis(right.value);
dateTime.setRounding(dateTime.getChronology().minuteOfHour());
out.value = (int) dateTime.getMillis();
<#elseif toUnit == "Second">
dateTime.setMillis(right.value);
dateTime.setRounding(dateTime.getChronology().secondOfMinute());
out.value = (int) dateTime.getMillis();
<#else>
<#-- For all other units truncate the whole thing -->
out.value = 0;
</#if> <#-- End UnitType -->
<#elseif type == "Date">
<#if toUnit == "Second" || toUnit == "Minute" || toUnit == "Hour" || toUnit == "Day"> <#-- Start UnitType -->
// No truncation as there is no time part in date
out.value = right.value;
<#elseif toUnit == "Year">
dateTime.setMillis(right.value);
dateTime.setRounding(dateTime.getChronology().year());
out.value = dateTime.getMillis();
<#elseif toUnit == "Month">
dateTime.setMillis(right.value);
dateTime.setRounding(dateTime.getChronology().monthOfYear());
out.value = dateTime.getMillis();
<#elseif toUnit == "Week">
dateTime.setMillis(right.value);
dateTime.setRounding(dateTime.getChronology().weekOfWeekyear());
out.value = dateTime.getMillis();
<#elseif toUnit == "Quarter">
dateTime.setMillis(right.value);
int month = dateTime.getMonthOfYear();
dateTime.setRounding(dateTime.getChronology().year());
dateTime2.setMillis(dateTime.getMillis());
dateTime2.add(org.joda.time.DurationFieldType.months(), ((month-1)/3)*3);
out.value = dateTime2.getMillis();
<#elseif toUnit == "Decade">
dateTime.setMillis(right.value);
int year = dateTime.getYear();
dateTime.setRounding(dateTime.getChronology().centuryOfEra());
dateTime2.setMillis(dateTime.getMillis());
dateTime2.add(org.joda.time.DurationFieldType.years(), ((year%100)/10)*10);
out.value = dateTime2.getMillis();
<#elseif toUnit == "Century">
dateTime.setMillis(right.value);
dateTime.add(org.joda.time.DurationFieldType.years(), -1);
dateTime.setRounding(dateTime.getChronology().centuryOfEra());
dateTime2.setMillis(dateTime.getMillis());
dateTime2.add(org.joda.time.DurationFieldType.years(), 1);
out.value = dateTime2.getMillis();
<#elseif toUnit == "Millennium">
dateTime.setMillis(right.value);
int year = dateTime.getYear();
dateTime.setRounding(dateTime.getChronology().era());
dateTime2.setMillis(dateTime.getMillis());
dateTime2.add(org.joda.time.DurationFieldType.years(), ((year-1)/1000)*1000);
out.value = dateTime2.getMillis();
</#if> <#-- End UnitType -->
<#elseif type == "TimeStamp">
<#if toUnit == "Year"> <#-- Start UnitType -->
dateTime.setMillis(right.value);
dateTime.setRounding(dateTime.getChronology().year());
out.value = dateTime.getMillis();
<#elseif toUnit == "Month">
dateTime.setMillis(right.value);
dateTime.setRounding(dateTime.getChronology().monthOfYear());
out.value = dateTime.getMillis();
<#elseif toUnit == "Day">
dateTime.setMillis(right.value);
dateTime.setRounding(dateTime.getChronology().dayOfMonth());
out.value = dateTime.getMillis();
<#elseif toUnit == "Hour">
dateTime.setMillis(right.value);
dateTime.setRounding(dateTime.getChronology().hourOfDay());
out.value = dateTime.getMillis();
<#elseif toUnit == "Minute">
dateTime.setMillis(right.value);
dateTime.setRounding(dateTime.getChronology().minuteOfHour());
out.value = dateTime.getMillis();
<#elseif toUnit == "Second">
dateTime.setMillis(right.value);
dateTime.setRounding(dateTime.getChronology().secondOfMinute());
out.value = dateTime.getMillis();
<#elseif toUnit == "Week">
dateTime.setMillis(right.value);
dateTime.setRounding(dateTime.getChronology().weekOfWeekyear());
out.value = dateTime.getMillis();
<#elseif toUnit == "Quarter">
dateTime.setMillis(right.value);
int month = dateTime.getMonthOfYear();
dateTime.setRounding(dateTime.getChronology().year());
dateTime2.setMillis(dateTime.getMillis());
dateTime2.add(org.joda.time.DurationFieldType.months(), ((month-1)/3)*3);
out.value = dateTime2.getMillis();
<#elseif toUnit == "Decade">
dateTime.setMillis(right.value);
int year = dateTime.getYear();
dateTime.setRounding(dateTime.getChronology().centuryOfEra());
dateTime2.setMillis(dateTime.getMillis());
dateTime2.add(org.joda.time.DurationFieldType.years(), ((year%100)/10)*10);
out.value = dateTime2.getMillis();
<#elseif toUnit == "Century">
dateTime.setMillis(right.value);
dateTime.add(org.joda.time.DurationFieldType.years(), -1);
dateTime.setRounding(dateTime.getChronology().centuryOfEra());
dateTime2.setMillis(dateTime.getMillis());
dateTime2.add(org.joda.time.DurationFieldType.years(), 1);
out.value = dateTime2.getMillis();
<#elseif toUnit == "Millennium">
dateTime.setMillis(right.value);
int year = dateTime.getYear();
dateTime.setRounding(dateTime.getChronology().era());
dateTime2.setMillis(dateTime.getMillis());
dateTime2.add(org.joda.time.DurationFieldType.years(), ((year-1)/1000)*1000);
out.value = dateTime2.getMillis();
</#if> <#-- End UnitType -->
<#elseif type == "Interval">
<#if toUnit == "Second"> <#-- Start UnitType -->
out.months = right.months;
out.days = right.days;
out.milliseconds = (right.milliseconds/(org.apache.drill.exec.vector.DateUtilities.secondsToMillis))*
(org.apache.drill.exec.vector.DateUtilities.secondsToMillis);
<#elseif toUnit == "Minute">
out.months = right.months;
out.days = right.days;
out.milliseconds = (right.milliseconds/(org.apache.drill.exec.vector.DateUtilities.minutesToMillis))*
(org.apache.drill.exec.vector.DateUtilities.minutesToMillis);
<#elseif toUnit == "Hour">
out.months = right.months;
out.days = right.days;
out.milliseconds =
(right.milliseconds/(org.apache.drill.exec.vector.DateUtilities.hoursToMillis))*
(org.apache.drill.exec.vector.DateUtilities.hoursToMillis);
<#elseif toUnit == "Day">
out.months = right.months;
out.days = right.days;
out.milliseconds = 0;
<#elseif toUnit == "Month">
out.months = right.months;
out.days = 0;
out.milliseconds = 0;
<#elseif toUnit == "Quarter">
out.months = (right.months / 3) * 3;
out.days = 0;
out.milliseconds = 0;
<#elseif toUnit == "Year">
out.months = (right.months / 12) * 12;
out.days = 0;
out.milliseconds = 0;
<#elseif toUnit == "Decade">
out.months = (right.months / 120) * 120;
out.days = 0;
out.milliseconds = 0;
<#elseif toUnit == "Century">
out.months = (right.months / 1200) * 1200;
out.days = 0;
out.milliseconds = 0;
<#elseif toUnit == "Millennium">
out.months = (right.months / 12000) * 12000;
out.days = 0;
out.milliseconds = 0;
</#if> <#-- End UnitType -->
<#elseif type == "IntervalDay">
<#if toUnit == "Second"> <#-- Start UnitType -->
out.days = right.days;
out.milliseconds = (right.milliseconds/(org.apache.drill.exec.vector.DateUtilities.secondsToMillis))*
(org.apache.drill.exec.vector.DateUtilities.secondsToMillis);
<#elseif toUnit == "Minute">
out.days = right.days;
out.milliseconds = (right.milliseconds/(org.apache.drill.exec.vector.DateUtilities.minutesToMillis))*
(org.apache.drill.exec.vector.DateUtilities.minutesToMillis);
<#elseif toUnit == "Hour">
out.days = right.days;
out.milliseconds =
(right.milliseconds/(org.apache.drill.exec.vector.DateUtilities.hoursToMillis))*
(org.apache.drill.exec.vector.DateUtilities.hoursToMillis);
<#elseif toUnit == "Day">
out.days = right.days;
out.milliseconds = 0;
<#elseif toUnit == "Month" || toUnit == "Quarter" || toUnit == "Year" || toUnit == "Decade" || toUnit == "Century" || toUnit == "Millennium">
out.days = 0;
out.milliseconds = 0;
</#if> <#-- End UnitType -->
<#elseif type == "IntervalYear">
<#if toUnit == "Second" || toUnit == "Minute" || toUnit == "Hour" || toUnit == "Day"> <#-- Start UnitType -->
out.value = right.value;
<#elseif toUnit == "Month">
out.value = right.value;
<#elseif toUnit == "Quarter">
out.value = (right.value / 3) * 3;
<#elseif toUnit == "Year">
out.value = (right.value / 12) * 12;
<#elseif toUnit == "Decade">
out.value = (right.value / 120) * 120;
<#elseif toUnit == "Century">
out.value = (right.value / 1200) * 1200;
<#elseif toUnit == "Millennium">
out.value = (right.value / 12000) * 12000;
</#if> <#-- End UnitType -->
</#if> <#-- End InputType -->
}