yql_visit.cpp 895 B

1234567891011121314151617181920212223242526272829
  1. #include "yql_visit.h"
  2. #include <yql/essentials/utils/yql_panic.h>
  3. #include <util/string/builder.h>
  4. namespace NYql {
  5. void TVisitorTransformerBase::AddHandler(std::initializer_list<TStringBuf> names, THandler handler) {
  6. for (auto name: names) {
  7. YQL_ENSURE(Handlers.emplace(name, handler).second, "Duplicate handler for " << name);
  8. }
  9. }
  10. IGraphTransformer::TStatus TVisitorTransformerBase::DoTransform(TExprNode::TPtr input, TExprNode::TPtr& output, TExprContext& ctx) {
  11. YQL_ENSURE(input->Type() == TExprNode::Callable);
  12. output = input;
  13. if (auto handler = Handlers.FindPtr(input->Content())) {
  14. return (*handler)(input, output, ctx);
  15. }
  16. if (FailOnUnknown) {
  17. ctx.AddError(TIssue(ctx.GetPosition(input->Pos()), TStringBuilder() << "Unsupported callable: " << input->Content()));
  18. return TStatus::Error;
  19. }
  20. return TStatus::Ok;
  21. }
  22. }