Github user jinfengni commented on a diff in the pull request:
https://github.com/apache/incubator-drill/pull/52#discussion_r12062732
--- Diff:
exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/DateTypeFunctions.java
---
@@ -201,125 +210,96 @@ public void eval() {
}
}
- @FunctionTemplate(names = {"date_add", "add"}, scope =
FunctionTemplate.FunctionScope.SIMPLE, nulls =
FunctionTemplate.NullHandling.NULL_IF_NULL)
- public static class DateIntervalAdd implements DrillSimpleFunc{
-
- @Param DateHolder dateType;
- @Param IntervalHolder intervalType;
+ @FunctionTemplate(name = "current_date", scope =
FunctionTemplate.FunctionScope.SIMPLE, nulls = NullHandling.NULL_IF_NULL)
+ public static class CurrentDate implements DrillSimpleFunc {
+ @Workspace long queryStartDate;
@Output DateHolder out;
- public void setup(RecordBatch b){}
-
- public void eval(){
-
- org.joda.time.MutableDateTime temp = new
org.joda.time.MutableDateTime(dateType.value, org.joda.time.DateTimeZone.UTC);
- temp.addMonths(intervalType.months);
- temp.addDays(intervalType.days);
- temp.add(intervalType.milliSeconds);
+ public void setup(RecordBatch incoming) {
- out.value = temp.getMillis();
+ org.joda.time.DateTime now = new
org.joda.time.DateTime(incoming.getContext().getQueryStartTime());
+ queryStartDate = (new
org.joda.time.DateMidnight(now.getYear(), now.getMonthOfYear(),
now.getDayOfMonth(), org.joda.time.DateTimeZone.UTC)).getMillis();
}
- }
-
- @FunctionTemplate(names = {"date_add", "add"}, scope =
FunctionTemplate.FunctionScope.SIMPLE, nulls =
FunctionTemplate.NullHandling.NULL_IF_NULL)
- public static class IntervalDateAdd implements DrillSimpleFunc{
- @Param IntervalHolder intervalType;
- @Param DateHolder dateType;
- @Output DateHolder out;
-
- public void setup(RecordBatch b){}
-
- public void eval(){
-
- org.joda.time.MutableDateTime temp = new
org.joda.time.MutableDateTime(dateType.value, org.joda.time.DateTimeZone.UTC);
- temp.addMonths(intervalType.months);
- temp.addDays(intervalType.days);
- temp.add(intervalType.milliSeconds);
-
- out.value = temp.getMillis();
+ public void eval() {
+ out.value = queryStartDate;
}
- }
-
-
- @FunctionTemplate(names = {"date_sub", "subtract"}, scope =
FunctionTemplate.FunctionScope.SIMPLE, nulls =
FunctionTemplate.NullHandling.NULL_IF_NULL)
- public static class DateIntervalSub implements DrillSimpleFunc{
-
- @Param DateHolder dateType;
- @Param IntervalHolder intervalType;
- @Output DateHolder out;
- public void setup(RecordBatch b){}
+ }
- public void eval(){
+ @FunctionTemplate(names = {"current_timestamp", "now"}, scope =
FunctionTemplate.FunctionScope.SIMPLE, nulls = NullHandling.NULL_IF_NULL)
+ public static class CurrentTimeStamp implements DrillSimpleFunc {
+ @Workspace long queryStartDate;
+ @Workspace int timezoneIndex;
+ @Output TimeStampTZHolder out;
- org.joda.time.MutableDateTime temp = new
org.joda.time.MutableDateTime(dateType.value, org.joda.time.DateTimeZone.UTC);
- temp.addMonths(intervalType.months * -1);
- temp.addDays(intervalType.days * -1);
- temp.add(intervalType.milliSeconds * -1);
+ public void setup(RecordBatch incoming) {
- out.value = temp.getMillis();
+ org.joda.time.DateTime now = new
org.joda.time.DateTime(incoming.getContext().getQueryStartTime());
--- End diff --
If two different drill bits have different time zone, will this line get
different value of DateTime?
Let's say getQueryStartTime() return 10000 milliseconds.
Bit 1 : UTC-8:00
BIT2 : UTC.
Then, Bit1 will have 10000 miliseconds in UTC-8:00, and Bit2 will have
10000 millseconds in UTC.
Is this the expected result?
Similiar issue for current_date.
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---