yql_expr_schema.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #pragma once
  2. #include <yql/essentials/public/issue/yql_issue.h>
  3. #include <yql/essentials/core/yql_type_annotation.h>
  4. #include <library/cpp/yson/consumer.h>
  5. #include <library/cpp/yson/node/node.h>
  6. #include <util/generic/maybe.h>
  7. #include <util/generic/string.h>
  8. #include <util/generic/vector.h>
  9. #include <util/generic/strbuf.h>
  10. #include <functional>
  11. namespace NYql {
  12. class TTypeAnnotationNode;
  13. class TStructExprType;
  14. struct TExprContext;
  15. namespace NCommon {
  16. // empty return value means "remove member"
  17. using TStructMemberMapper = std::function<TMaybe<TStringBuf> (TStringBuf member)>;
  18. void WriteTypeToYson(NYson::TYsonConsumerBase& writer, const TTypeAnnotationNode* type, bool extendedForm = false);
  19. // saves in columns order
  20. void SaveStructTypeToYson(NYson::TYsonConsumerBase& writer, const TStructExprType* type,
  21. const TMaybe<TColumnOrder>& columns = {}, const TStructMemberMapper& mapper = {}, bool extendedForm = false);
  22. NYT::TNode TypeToYsonNode(const TTypeAnnotationNode* type, bool extendedForm = false);
  23. TString WriteTypeToYson(const TTypeAnnotationNode* type, NYT::NYson::EYsonFormat format = NYT::NYson::EYsonFormat::Binary,
  24. bool extendedForm = false);
  25. const TTypeAnnotationNode* ParseTypeFromYson(const TStringBuf yson, TExprContext& ctx, const TPosition& pos = TPosition());
  26. const TTypeAnnotationNode* ParseOrderAwareTypeFromYson(const TStringBuf yson, TColumnOrder& topLevelColumns, TExprContext& ctx, const TPosition& pos = TPosition());
  27. const TTypeAnnotationNode* ParseTypeFromYson(const NYT::TNode& node, TExprContext& ctx, const TPosition& pos = TPosition());
  28. const TTypeAnnotationNode* ParseOrderAwareTypeFromYson(const NYT::TNode& node, TColumnOrder& topLevelColumns, TExprContext& ctx, const TPosition& pos = TPosition());
  29. void WriteResOrPullType(NYson::TYsonConsumerBase& writer, const TTypeAnnotationNode* type,
  30. const TColumnOrder& columns);
  31. } // namespace NCommon
  32. } // namespace NYql