(pb *PlanPb, loader SchemaLoader)
| 522 | } |
| 523 | |
| 524 | func SelectFromPB(pb *PlanPb, loader SchemaLoader) (*Select, error) { |
| 525 | m := Select{ |
| 526 | pbplan: pb, |
| 527 | ChildDag: true, |
| 528 | } |
| 529 | m.PlanBase = NewPlanBase(pb.Parallel) |
| 530 | if pb.Select != nil { |
| 531 | m.Stmt = rel.SqlSelectFromPb(pb.Select.Select) |
| 532 | if pb.Select.Context != nil { |
| 533 | //u.Infof("got context pb %+v", pb.Select.Context) |
| 534 | m.Ctx = NewContextFromPb(pb.Select.Context) |
| 535 | m.Ctx.Stmt = m.Stmt |
| 536 | m.Ctx.Raw = m.Stmt.Raw |
| 537 | sch, err := loader(m.Ctx.SchemaName) |
| 538 | if err != nil { |
| 539 | u.Errorf("could not load schema: %q err=%v", m.Ctx.SchemaName, err) |
| 540 | return nil, err |
| 541 | } |
| 542 | m.Ctx.Schema = sch |
| 543 | } |
| 544 | } |
| 545 | if len(pb.Children) > 0 { |
| 546 | m.tasks = make([]Task, len(pb.Children)) |
| 547 | for i, pbt := range pb.Children { |
| 548 | //u.Infof("%+v", pbt) |
| 549 | childPlan, err := SelectTaskFromTaskPb(pbt, m.Ctx, m.Stmt) |
| 550 | if err != nil { |
| 551 | u.Errorf("%+v not implemented? %v %#v", pbt, err, pbt) |
| 552 | return nil, err |
| 553 | } |
| 554 | switch cpt := childPlan.(type) { |
| 555 | case *Source: |
| 556 | m.From = append(m.From, cpt) |
| 557 | } |
| 558 | m.tasks[i] = childPlan |
| 559 | } |
| 560 | } |
| 561 | return &m, nil |
| 562 | } |
| 563 | |
| 564 | func SourceFromPB(pb *PlanPb, ctx *Context) (*Source, error) { |
| 565 | m := Source{ |
no test coverage detected