(f *FilterTree, vmap varMap)
| 546 | } |
| 547 | |
| 548 | func substituteVariablesFilter(f *FilterTree, vmap varMap) error { |
| 549 | if f == nil { |
| 550 | return nil |
| 551 | } |
| 552 | |
| 553 | if f.Func != nil { |
| 554 | if err := substituteVar(f.Func.Attr, &f.Func.Attr, vmap); err != nil { |
| 555 | return err |
| 556 | } |
| 557 | |
| 558 | for idx, v := range f.Func.Args { |
| 559 | if !v.IsDQLVar { |
| 560 | continue |
| 561 | } |
| 562 | if f.Func.Name == uidFunc { |
| 563 | // This is to support DQL variables in uid functions. |
| 564 | idVal, ok := vmap[v.Value] |
| 565 | if !ok { |
| 566 | return errors.Errorf("Couldn't find value for DQL variable: [%s]", v.Value) |
| 567 | } |
| 568 | uids, err := parseID(idVal.Value) |
| 569 | if err != nil { |
| 570 | return err |
| 571 | } |
| 572 | f.Func.UID = append(f.Func.UID, uids...) |
| 573 | continue |
| 574 | } |
| 575 | |
| 576 | if err := substituteVar(v.Value, &f.Func.Args[idx].Value, vmap); err != nil { |
| 577 | return err |
| 578 | } |
| 579 | |
| 580 | // We need to parse the regexp after substituting it from a DQL Variable. |
| 581 | _, ok := vmap[v.Value] |
| 582 | if f.Func.Name == "regexp" && ok { |
| 583 | if err := regExpVariableFilter(f.Func, idx); err != nil { |
| 584 | return err |
| 585 | } |
| 586 | } |
| 587 | } |
| 588 | } |
| 589 | |
| 590 | for _, fChild := range f.Child { |
| 591 | if err := substituteVariablesFilter(fChild, vmap); err != nil { |
| 592 | return err |
| 593 | } |
| 594 | } |
| 595 | return nil |
| 596 | } |
| 597 | |
| 598 | // Vars struct contains the list of variables defined and used by a |
| 599 | // query block. |
no test coverage detected