@@ -16,23 +16,23 @@ const UnboundedInterval = "*"
1616// 1) in Clickhouse's proper format, e.g. toStartOfDay(subDate(now(), INTERVAL 3 week))
1717// 2) * (UnboundedInterval), which means no bound
1818type DateTimeInterval struct {
19- Begin string
20- End string
19+ begin string
20+ end string
2121}
2222
2323func NewDateTimeInterval (begin , end string ) DateTimeInterval {
2424 return DateTimeInterval {
25- Begin : begin ,
26- End : end ,
25+ begin : begin ,
26+ end : end ,
2727 }
2828}
2929
3030// BeginTimestampToSQL returns SQL select for the begin timestamp, and a boolean indicating if the select is needed
3131// We query Clickhouse for this timestamp, as it's defined in Clickhouse's format, e.g. now()-1d.
3232// It's only 1 more field to our SELECT query, so it shouldn't be a performance issue.
3333func (interval DateTimeInterval ) BeginTimestampToSQL () (sqlSelect model.Expr , selectNeeded bool ) {
34- if interval .Begin != UnboundedInterval {
35- return model .NewFunction ("toInt64" , model .NewFunction ("toUnixTimestamp" , model .NewLiteral (interval .Begin ))), true
34+ if interval .begin != UnboundedInterval {
35+ return model .NewFunction ("toInt64" , model .NewFunction ("toUnixTimestamp" , model .NewLiteral (interval .begin ))), true
3636 }
3737 return nil , false
3838}
@@ -41,21 +41,21 @@ func (interval DateTimeInterval) BeginTimestampToSQL() (sqlSelect model.Expr, se
4141// We query Clickhouse for this timestamp, as it's defined in Clickhouse's format, e.g. now()-1d.
4242// It's only 1 more field to our SELECT query, so it isn't a performance issue.
4343func (interval DateTimeInterval ) EndTimestampToSQL () (sqlSelect model.Expr , selectNeeded bool ) {
44- if interval .End != UnboundedInterval {
45- return model .NewFunction ("toInt64" , model .NewFunction ("toUnixTimestamp" , model .NewLiteral (interval .End ))), true
44+ if interval .end != UnboundedInterval {
45+ return model .NewFunction ("toInt64" , model .NewFunction ("toUnixTimestamp" , model .NewLiteral (interval .end ))), true
4646 }
4747 return nil , false
4848}
4949
50- func (interval DateTimeInterval ) ToWhereClause (fieldName string ) model.Expr {
50+ func (interval DateTimeInterval ) ToWhereClause (field model. Expr ) model.Expr {
5151 begin , isBegin := interval .BeginTimestampToSQL ()
5252 end , isEnd := interval .EndTimestampToSQL ()
5353
5454 if isBegin {
55- begin = model .NewInfixExpr (model . NewColumnRef ( fieldName ) , ">=" , begin )
55+ begin = model .NewInfixExpr (field , ">=" , begin )
5656 }
5757 if isEnd {
58- end = model .NewInfixExpr (model . NewColumnRef ( fieldName ) , "<" , end )
58+ end = model .NewInfixExpr (field , "<" , end )
5959 }
6060
6161 if isBegin && isEnd {
@@ -65,20 +65,20 @@ func (interval DateTimeInterval) ToWhereClause(fieldName string) model.Expr {
6565 } else if isEnd {
6666 return end
6767 } else {
68- return model .NewLiteral ( "TRUE" )
68+ return model .TrueExpr
6969 }
7070}
7171
7272type DateRange struct {
7373 ctx context.Context
74- FieldName string
75- Format string
76- Intervals []DateTimeInterval
77- SelectColumnsNr int // how many columns we add to the query because of date_range aggregation, e.g. SELECT x,y,z -> 3
74+ field model. Expr
75+ format string
76+ intervals []DateTimeInterval
77+ selectColumnsNr int // how many columns we add to the query because of date_range aggregation, e.g. SELECT x,y,z -> 3
7878}
7979
80- func NewDateRange (ctx context.Context , fieldName string , format string , intervals []DateTimeInterval , selectColumnsNr int ) DateRange {
81- return DateRange {ctx : ctx , FieldName : fieldName , Format : format , Intervals : intervals , SelectColumnsNr : selectColumnsNr }
80+ func NewDateRange (ctx context.Context , field model. Expr , format string , intervals []DateTimeInterval , selectColumnsNr int ) DateRange {
81+ return DateRange {ctx : ctx , field : field , format : format , intervals : intervals , selectColumnsNr : selectColumnsNr }
8282}
8383
8484func (query DateRange ) AggregationType () model.AggregationType {
@@ -92,15 +92,15 @@ func (query DateRange) TranslateSqlResponseToJson(rows []model.QueryResultRow) m
9292 }
9393
9494 response := make ([]model.JsonMap , 0 )
95- startIteration := len (rows [0 ].Cols ) - 1 - query .SelectColumnsNr
95+ startIteration := len (rows [0 ].Cols ) - 1 - query .selectColumnsNr
9696 if startIteration < 0 || startIteration >= len (rows [0 ].Cols ) {
9797 logger .ErrorWithCtx (query .ctx ).Msgf (
9898 "unexpected column nr in aggregation response, startIteration: %d, len(rows[0].Cols): %d" ,
9999 startIteration , len (rows [0 ].Cols ),
100100 )
101101 return nil
102102 }
103- for intervalIdx , columnIdx := 0 , startIteration ; intervalIdx < len (query .Intervals ); intervalIdx ++ {
103+ for intervalIdx , columnIdx := 0 , startIteration ; intervalIdx < len (query .intervals ); intervalIdx ++ {
104104 responseForInterval , nextColumnIdx := query .responseForInterval (& rows [0 ], intervalIdx , columnIdx )
105105 response = append (response , responseForInterval )
106106 columnIdx = nextColumnIdx
@@ -111,7 +111,7 @@ func (query DateRange) TranslateSqlResponseToJson(rows []model.QueryResultRow) m
111111}
112112
113113func (query DateRange ) String () string {
114- return "date_range, intervals: " + fmt .Sprintf ("%v" , query .Intervals )
114+ return "date_range, intervals: " + fmt .Sprintf ("%v" , query .intervals )
115115}
116116
117117func (query DateRange ) responseForInterval (row * model.QueryResultRow , intervalIdx , columnIdx int ) (
@@ -123,7 +123,7 @@ func (query DateRange) responseForInterval(row *model.QueryResultRow, intervalId
123123
124124 var from , to int64
125125 var fromString , toString string
126- if query .Intervals [intervalIdx ].Begin == UnboundedInterval {
126+ if query .intervals [intervalIdx ].begin == UnboundedInterval {
127127 fromString = UnboundedInterval
128128 } else {
129129 if columnIdx >= len (row .Cols ) {
@@ -137,7 +137,7 @@ func (query DateRange) responseForInterval(row *model.QueryResultRow, intervalId
137137 columnIdx ++
138138 }
139139
140- if query .Intervals [intervalIdx ].End == UnboundedInterval {
140+ if query .intervals [intervalIdx ].end == UnboundedInterval {
141141 toString = UnboundedInterval
142142 } else {
143143 if columnIdx >= len (row .Cols ) {
@@ -173,16 +173,16 @@ func (query DateRange) DoesNotHaveGroupBy() bool {
173173}
174174
175175func (query DateRange ) CombinatorGroups () (result []CombinatorGroup ) {
176- for intervalIdx , interval := range query .Intervals {
176+ for intervalIdx , interval := range query .intervals {
177177 prefix := fmt .Sprintf ("range_%d__" , intervalIdx )
178- if len (query .Intervals ) == 1 {
178+ if len (query .intervals ) == 1 {
179179 prefix = ""
180180 }
181181 result = append (result , CombinatorGroup {
182182 idx : intervalIdx ,
183183 Prefix : prefix ,
184184 Key : prefix , // TODO: we need translate date to real time
185- WhereClause : interval .ToWhereClause (query .FieldName ),
185+ WhereClause : interval .ToWhereClause (query .field ),
186186 })
187187 }
188188 return
@@ -199,23 +199,23 @@ func (query DateRange) CombinatorTranslateSqlResponseToJson(subGroup CombinatorG
199199 }
200200
201201 // TODO: we need translate relative to real time
202- interval := query .Intervals [subGroup .idx ]
203- if interval .Begin != UnboundedInterval {
204- response ["from" ] = interval .Begin
205- response ["from_as_string" ] = interval .Begin
202+ interval := query .intervals [subGroup .idx ]
203+ if interval .begin != UnboundedInterval {
204+ response ["from" ] = interval .begin
205+ response ["from_as_string" ] = interval .begin
206206 }
207- if interval .End != UnboundedInterval {
208- response ["to" ] = interval .End
209- response ["to_as_string" ] = interval .End
207+ if interval .end != UnboundedInterval {
208+ response ["to" ] = interval .end
209+ response ["to_as_string" ] = interval .end
210210 }
211211
212212 return response
213213}
214214
215215func (query DateRange ) CombinatorSplit () []model.QueryType {
216- result := make ([]model.QueryType , 0 , len (query .Intervals ))
217- for _ , interval := range query .Intervals {
218- result = append (result , NewDateRange (query .ctx , query .FieldName , query .Format , []DateTimeInterval {interval }, query .SelectColumnsNr ))
216+ result := make ([]model.QueryType , 0 , len (query .intervals ))
217+ for _ , interval := range query .intervals {
218+ result = append (result , NewDateRange (query .ctx , query .field , query .format , []DateTimeInterval {interval }, query .selectColumnsNr ))
219219 }
220220 return result
221221}
0 commit comments