2013-10-09 18:54:47 +00:00
|
|
|
package engine
|
|
|
|
|
2014-08-28 20:00:15 +00:00
|
|
|
import "github.com/influxdb/influxdb/parser"
|
2013-10-09 18:54:47 +00:00
|
|
|
|
2014-08-20 15:59:45 +00:00
|
|
|
func NewQueryEngine(next Processor, query *parser.SelectQuery) (Processor, error) {
|
2014-02-09 22:10:35 +00:00
|
|
|
limit := query.Limit
|
|
|
|
|
2014-08-20 15:59:45 +00:00
|
|
|
var engine Processor = NewPassthroughEngineWithLimit(next, 1, limit)
|
2014-02-09 22:10:35 +00:00
|
|
|
|
2014-03-09 23:21:24 +00:00
|
|
|
var err error
|
2014-02-21 21:36:41 +00:00
|
|
|
if query.HasAggregates() {
|
2014-08-20 15:59:45 +00:00
|
|
|
engine, err = NewAggregatorEngine(query, engine)
|
2014-08-28 21:35:05 +00:00
|
|
|
} else if query.ContainsArithmeticOperators() {
|
2014-08-20 15:59:45 +00:00
|
|
|
engine, err = NewArithmeticEngine(query, engine)
|
2014-02-18 23:29:35 +00:00
|
|
|
}
|
|
|
|
|
2014-08-20 15:59:45 +00:00
|
|
|
fromClause := query.GetFromClause()
|
2014-06-02 21:11:49 +00:00
|
|
|
if fromClause.Type == parser.FromClauseMerge {
|
2014-08-20 15:59:45 +00:00
|
|
|
engine = NewMergeEngine(fromClause.Names[0].Name.Name, fromClause.Names[1].Name.Name, query.Ascending, engine)
|
|
|
|
} else if fromClause.Type == parser.FromClauseInnerJoin {
|
|
|
|
engine = NewJoinEngine(query, engine)
|
2014-02-10 21:10:39 +00:00
|
|
|
}
|
2014-03-09 03:28:54 +00:00
|
|
|
|
2014-02-24 20:29:42 +00:00
|
|
|
if err != nil {
|
2014-08-20 15:59:45 +00:00
|
|
|
return nil, err
|
2014-03-09 03:28:54 +00:00
|
|
|
}
|
2014-08-20 15:59:45 +00:00
|
|
|
return engine, nil
|
2014-03-09 03:28:54 +00:00
|
|
|
}
|