// New create a new executable plan given a semantic BQL statement. func New(store storage.Store, stm *semantic.Statement) (Excecutor, error) { switch stm.Type() { case semantic.Query: return newQueryPlan(store, stm) case semantic.Insert: return &insertPlan{ stm: stm, store: store, }, nil case semantic.Delete: return &deletePlan{ stm: stm, store: store, }, nil case semantic.Create: return &createPlan{ stm: stm, store: store, }, nil case semantic.Drop: return &dropPlan{ stm: stm, store: store, }, nil default: return nil, fmt.Errorf("planner.New: unknown statement type in statement %v", stm) } }