[
https://issues.apache.org/jira/browse/DRILL-549?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13983430#comment-13983430
]
ASF GitHub Bot commented on DRILL-549:
--------------------------------------
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.
> Implement functions for date and interval data types
> ----------------------------------------------------
>
> Key: DRILL-549
> URL: https://issues.apache.org/jira/browse/DRILL-549
> Project: Apache Drill
> Issue Type: New Feature
> Reporter: Mehant Baid
> Assignee: Mehant Baid
> Attachments: DRILL-549.patch
>
>
> Below is the list of functions to be supported as part of this task:
> Date & Interval Arithmetic Functions:
> date +/- integer
> date + interval
> time + interval
> timestamp + interval
> timestamptz + interval
> date + intervalday
> time + intervalday
> timestamp + intervalday
> timestamptz + intervalday
> date + intervalyear
> time + intervalyear
> timestamp + intervalyear
> timestamptz + intervalyear
> date + time
> date - date
> time - time
> timestamp - timestamp
> timestamptz - timestamptz
> interval +/- interval
> intervalday +/- intervalday
> intervalyear +/- intervalyear
> interval *//(div) integer or float or double
> intervalday *//(div) integer or float or double
> intervalyear *//(div) integer or float or double
> -interval
> -intervalday
> -intervalyear
> Date Utility Functions:
> CURRENT_DATE
> CURRENT_TIME
> CURRENT_TIMESTAMP
> LOCALTIME
> LOCALTIMESTAMP
> now()
> timeofday()
> clock_timestamp()
> // For each of the below functions, the 'text' parameter can be one of the
> following {year, month, day, hour, minute, second}
> date_part(text, date)
> date_part(text, time)
> date_part(text, timestamp)
> date_part(text, timestamptz)
> date_part(text, interval)
> date_part(text, intervalday)
> date_part(text, intervalyear)
> // Extract functions similar to date_part
> extract(field from date)
> extract(field from time)
> extract(field from timestamp)
> extract(field from timestamptz)
> extract(field from interval)
> extract(field from intervalday)
> extract(field from intervalyear)
> Date Formatting Functions:
> // 'text' parameter represents the desired output format
> to_char(date, text)
> to_char(time, text)
> to_char(timestamp, text)
> to_char(timestamptz, text)
> // In the below functions first 'text' param represents the string to be
> converted to date type
> // Second 'text' param represents the format its in
> to_date(text, text)
> to_time(text, text)
> to_timestamp(text, text)
> to_timestamptz(text, text)
> // Input is long milliseconds from epoch
> to_date(long)
> to_time(long)
> to_timestamp(long)
> to_timestamptz(long)
--
This message was sent by Atlassian JIRA
(v6.2#6252)