From 9adf374d1dedb1adaeeb4c2a549f2b1562ed7849 Mon Sep 17 00:00:00 2001 From: John Shahid Date: Fri, 18 Oct 2013 11:07:44 -0400 Subject: [PATCH] pvt #59002514. default start and end time set properly. Start time defaults to 1 hour before end time if it wasn't specified in the query. End time defaults to the current time. If neither start or end time are given, the query defaults to all points between an hour ago and current time. --- src/parser/parser.go | 20 ++++++++++++-------- src/parser/query_api_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/src/parser/parser.go b/src/parser/parser.go index 8c235ad6c9..4662384e3d 100644 --- a/src/parser/parser.go +++ b/src/parser/parser.go @@ -321,14 +321,6 @@ func ParseQuery(query string) (*Query, error) { } var startTime, endTime time.Time - goQuery.Condition, startTime, err = getTime(goQuery.GetWhereCondition(), true) - if err != nil { - return nil, err - } - - if startTime.Unix() > 0 { - goQuery.startTime = startTime - } goQuery.Condition, endTime, err = getTime(goQuery.GetWhereCondition(), false) if err != nil { @@ -338,5 +330,17 @@ func ParseQuery(query string) (*Query, error) { if endTime.Unix() > 0 { goQuery.endTime = endTime } + + goQuery.Condition, startTime, err = getTime(goQuery.GetWhereCondition(), true) + if err != nil { + return nil, err + } + + if startTime.Unix() > 0 { + goQuery.startTime = startTime + } else if endTime.Unix() > 0 { + goQuery.startTime = endTime.Add(-1 * time.Hour) + } + return goQuery, nil } diff --git a/src/parser/query_api_test.go b/src/parser/query_api_test.go index b991beeaa9..ab49cfdc28 100644 --- a/src/parser/query_api_test.go +++ b/src/parser/query_api_test.go @@ -100,6 +100,32 @@ func (self *QueryApiSuite) TestGetReferencedColumnsReturnsGroupByColumn(c *C) { } } +func (self *QueryApiSuite) TestDefaultStartTime(c *C) { + for queryStr, t := range map[string]time.Time{ + "select * from t where time < now() - 1d;": time.Now().Add(-24 * time.Hour).Add(-1 * time.Hour).Round(time.Minute), + "select * from t;": time.Now().Add(-1 * time.Hour).Round(time.Minute), + } { + query, err := ParseQuery(queryStr) + c.Assert(err, IsNil) + startTime := query.GetStartTime() + roundedStartTime := startTime.Round(time.Minute) + c.Assert(roundedStartTime, Equals, t) + } +} + +func (self *QueryApiSuite) TestDefaultEndTime(c *C) { + for queryStr, t := range map[string]time.Time{ + "select * from t where time > now() - 1d;": time.Now().Round(time.Minute), + "select * from t;": time.Now().Round(time.Minute), + } { + query, err := ParseQuery(queryStr) + c.Assert(err, IsNil) + endTime := query.GetEndTime() + roundedEndTime := endTime.Round(time.Minute) + c.Assert(roundedEndTime, Equals, t) + } +} + func (self *QueryApiSuite) TestGetStartTimeWithOr(c *C) { for _, queryStr := range []string{ "select * from t where time > now() - 1d and (value > 90 or value < 10);",