mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-08-28 10:54:59 +00:00
63 lines
1.2 KiB
Go
63 lines
1.2 KiB
Go
package executor
|
|
|
|
import (
|
|
"log"
|
|
"pilosa/core"
|
|
"pilosa/query"
|
|
|
|
"github.com/davecgh/go-spew/spew"
|
|
)
|
|
|
|
type Job struct {
|
|
query_plan *query.QueryPlan
|
|
results_ch chan *query.QueryResults
|
|
}
|
|
|
|
type Executor struct {
|
|
service *core.Service
|
|
inbox chan *Job
|
|
}
|
|
|
|
func (self *Executor) Init() error {
|
|
log.Println("Starting Executor")
|
|
return nil
|
|
}
|
|
|
|
func (self *Executor) Close() {
|
|
log.Println("Shutting down Executor")
|
|
}
|
|
|
|
func (self *Executor) NewJob(qp *query.QueryPlan, results chan *query.QueryResults) {
|
|
j := Job{qp, results}
|
|
self.inbox <- &j
|
|
}
|
|
|
|
//func (self *Executor) ExecuteJob(qp *query.QueryPlan) {
|
|
func (self *Executor) executeJob(job *Job) {
|
|
log.Println("Executor: ExecuteJob")
|
|
//spew.Dump(job)
|
|
query_plan := job.query_plan
|
|
for _, qs := range *query_plan {
|
|
spew.Dump(qs)
|
|
}
|
|
/*
|
|
spew.Dump("sleep...")
|
|
time.Sleep(4 * 1e9)
|
|
*/
|
|
// TODO: send the query steps out & wait for responses
|
|
qr := new(query.QueryResults)
|
|
qr.Data = 999
|
|
job.results_ch <- qr
|
|
}
|
|
|
|
func (self *Executor) Run() {
|
|
log.Println("Executor Run...")
|
|
for {
|
|
job := <-self.inbox
|
|
go self.executeJob(job)
|
|
}
|
|
}
|
|
|
|
func NewExecutor(service *core.Service) *Executor {
|
|
return &Executor{service, make(chan *Job)}
|
|
}
|