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

Reply via email to