yql_codec.h 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #pragma once
  2. #include "yql_codec_buf.h"
  3. #include <yql/essentials/minikql/mkql_node.h>
  4. #include <yql/essentials/minikql/mkql_function_registry.h>
  5. #include <yql/essentials/minikql/mkql_program_builder.h>
  6. #include <yql/essentials/minikql/computation/mkql_computation_node_holders.h>
  7. #include <yql/essentials/parser/pg_wrapper/interface/codec.h>
  8. #include <yql/essentials/ast/yql_expr.h>
  9. #include <util/generic/strbuf.h>
  10. #include <util/generic/maybe.h>
  11. #include <util/stream/output.h>
  12. #include <library/cpp/yson/public.h>
  13. #include <list>
  14. #include <vector>
  15. namespace NYT {
  16. class TNode;
  17. }
  18. namespace NYql {
  19. namespace NCommon {
  20. void WriteYsonValue(
  21. NYson::TYsonConsumerBase& writer,
  22. const NKikimr::NUdf::TUnboxedValuePod& value,
  23. NKikimr::NMiniKQL::TType* type,
  24. const TVector<ui32>* structPositions = nullptr
  25. );
  26. TString WriteYsonValue(
  27. const NKikimr::NUdf::TUnboxedValuePod& value,
  28. NKikimr::NMiniKQL::TType* type,
  29. const TVector<ui32>* structPositions = nullptr,
  30. NYson::EYsonFormat format = NYson::EYsonFormat::Binary
  31. );
  32. TMaybe<TVector<ui32>> CreateStructPositions(
  33. NKikimr::NMiniKQL::TType* inputType,
  34. const TVector<TString>* columns = nullptr
  35. );
  36. NYT::TNode ValueToNode(const NKikimr::NUdf::TUnboxedValuePod& value, NKikimr::NMiniKQL::TType* type);
  37. TExprNode::TPtr NodeToExprLiteral(TPositionHandle pos, const TTypeAnnotationNode& type, const NYT::TNode& node, TExprContext& ctx);
  38. struct TCodecContext {
  39. const NKikimr::NMiniKQL::TTypeEnvironment& Env;
  40. NKikimr::NMiniKQL::TProgramBuilder Builder;
  41. const NKikimr::NMiniKQL::THolderFactory* HolderFactory; // lazy initialized
  42. std::list<std::vector<size_t>> StructReorders;
  43. TCodecContext(
  44. const NKikimr::NMiniKQL::TTypeEnvironment& env,
  45. const NKikimr::NMiniKQL::IFunctionRegistry& functionRegistry,
  46. const NKikimr::NMiniKQL::THolderFactory* holderFactory = nullptr
  47. );
  48. };
  49. void SkipYson(char cmd, TInputBuf& buf);
  50. void CopyYson(char cmd, TInputBuf& buf, TVector<char>& yson);
  51. void CopyYsonWithAttrs(char cmd, TInputBuf& buf, TVector<char>& yson);
  52. TStringBuf ReadNextString(char cmd, TInputBuf& buf);
  53. NKikimr::NUdf::TUnboxedValue ReadYsonValue(NKikimr::NMiniKQL::TType* type, const NKikimr::NMiniKQL::THolderFactory& holderFactory, char cmd, TInputBuf& buf);
  54. TMaybe<NKikimr::NUdf::TUnboxedValue> ParseYsonValue(const NKikimr::NMiniKQL::THolderFactory& holderFactory,
  55. const TStringBuf& yson, NKikimr::NMiniKQL::TType* type, IOutputStream* err);
  56. TMaybe<NKikimr::NUdf::TUnboxedValue> ParseYsonNodeInResultFormat(const NKikimr::NMiniKQL::THolderFactory& holderFactory,
  57. const NYT::TNode& node, NKikimr::NMiniKQL::TType* type, IOutputStream* err);
  58. TExprNode::TPtr ValueToExprLiteral(const TTypeAnnotationNode* type, const NKikimr::NUdf::TUnboxedValuePod& value, TExprContext& ctx,
  59. TPositionHandle pos = {});
  60. } // namespace NCommon
  61. } // namespace NYql