MCPcopy
hub / github.com/uber/aresdb / adjustFilterToTimeFilter

Method adjustFilterToTimeFilter

query/aql_compiler.go:106–167  ·  view source on GitHub ↗

adjustFilterToTimeFilter try to find one rowfilter to be time filter if there is no timefilter for fact table query

()

Source from the content-addressed store, hash-verified

104
105// adjustFilterToTimeFilter try to find one rowfilter to be time filter if there is no timefilter for fact table query
106func (qc *AQLQueryContext) adjustFilterToTimeFilter() {
107 toBeRemovedFilters := []int{}
108 timeFilter := common.TimeFilter{}
109 for i, filter := range qc.Query.FiltersParsed {
110 if e, ok := filter.(*expr.BinaryExpr); ok {
111 lhs, isCol := e.LHS.(*expr.VarRef)
112 if !isCol {
113 continue
114 }
115
116 // check if this filter on main table event time column
117 tableID, columnID, err := qc.resolveColumn(lhs.Val)
118 if err != nil || tableID != 0 || columnID != 0 {
119 continue
120 }
121
122 val := ""
123 // only support number literal or string literal
124 switch rhs := e.RHS.(type) {
125 case *expr.NumberLiteral:
126 val = rhs.String()
127 case *expr.StringLiteral:
128 val = rhs.Val
129 }
130 if val == "" {
131 continue
132 }
133
134 switch e.Op {
135 case expr.LT:
136 if timeFilter.To == "" {
137 // only convert first LT
138 timeFilter.To = val
139 toBeRemovedFilters = append(toBeRemovedFilters, i)
140 } else {
141 qc.Error = utils.StackError(nil, "Only one '<' filter allowed for event time column")
142 return
143 }
144 case expr.GTE:
145 if timeFilter.From == "" {
146 // only convert first GTE
147 timeFilter.From = val
148 toBeRemovedFilters = append(toBeRemovedFilters, i)
149 } else {
150 qc.Error = utils.StackError(nil, "Only one '>=' filter allowed for event time column")
151 return
152 }
153 }
154 }
155 }
156 if timeFilter.From != "" || timeFilter.To != "" {
157 // processTimeFilter will handle the from is nil case
158 if qc.fromTime, qc.toTime, qc.Error = common.ParseTimeFilter(timeFilter, qc.fixedTimezone, utils.Now()); qc.Error != nil {
159 return
160 }
161 // remove from original query filter
162 for i := len(toBeRemovedFilters) - 1; i >= 0; i-- {
163 index := toBeRemovedFilters[i]

Callers 1

parseExprsMethod · 0.95

Calls 5

resolveColumnMethod · 0.95
StackErrorFunction · 0.92
ParseTimeFilterFunction · 0.92
NowFunction · 0.92
StringMethod · 0.65

Tested by

no test coverage detected