planCreateStruct generates a map or object construction Interpretable.
(expr ast.Expr)
| 554 | |
| 555 | // planCreateStruct generates a map or object construction Interpretable. |
| 556 | func (p *planBuilder) planCreateMap(expr ast.Expr) (InterpretableV2, error) { |
| 557 | m := expr.AsMap() |
| 558 | entries := m.Entries() |
| 559 | optionals := make([]bool, len(entries)) |
| 560 | keys := make([]InterpretableV2, len(entries)) |
| 561 | vals := make([]InterpretableV2, len(entries)) |
| 562 | hasOptionals := false |
| 563 | for i, e := range entries { |
| 564 | entry := e.AsMapEntry() |
| 565 | keyVal, err := p.plan(entry.Key()) |
| 566 | if err != nil { |
| 567 | return nil, err |
| 568 | } |
| 569 | keys[i] = keyVal |
| 570 | |
| 571 | valVal, err := p.plan(entry.Value()) |
| 572 | if err != nil { |
| 573 | return nil, err |
| 574 | } |
| 575 | vals[i] = valVal |
| 576 | optionals[i] = entry.IsOptional() |
| 577 | hasOptionals = hasOptionals || entry.IsOptional() |
| 578 | } |
| 579 | return &evalMap{ |
| 580 | id: expr.ID(), |
| 581 | keys: keys, |
| 582 | vals: vals, |
| 583 | optionals: optionals, |
| 584 | hasOptionals: hasOptionals, |
| 585 | adapter: p.adapter, |
| 586 | }, nil |
| 587 | } |
| 588 | |
| 589 | // planCreateObj generates an object construction Interpretable. |
| 590 | func (p *planBuilder) planCreateStruct(expr ast.Expr) (InterpretableV2, error) { |
no test coverage detected