yql_codec.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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. NKikimr::NUdf::TUnboxedValue ReadYsonValue(NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags, const NKikimr::NMiniKQL::THolderFactory& holderFactory, char cmd, TInputBuf& buf, bool isTableFormat);
  53. TMaybe<NKikimr::NUdf::TUnboxedValue> ParseYsonValue(const NKikimr::NMiniKQL::THolderFactory& holderFactory,
  54. const TStringBuf& yson, NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags, IOutputStream* err, bool isTableFormat);
  55. TMaybe<NKikimr::NUdf::TUnboxedValue> ParseYsonNode(const NKikimr::NMiniKQL::THolderFactory& holderFactory,
  56. const NYT::TNode& node, NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags, IOutputStream* err);
  57. TMaybe<NKikimr::NUdf::TUnboxedValue> ParseYsonNodeInResultFormat(const NKikimr::NMiniKQL::THolderFactory& holderFactory,
  58. const NYT::TNode& node, NKikimr::NMiniKQL::TType* type, IOutputStream* err);
  59. extern "C" void ReadYsonContainerValue(NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags,
  60. const NKikimr::NMiniKQL::THolderFactory& holderFactory, NKikimr::NUdf::TUnboxedValue& value, NCommon::TInputBuf& buf,
  61. bool wrapOptional);
  62. void SkipSkiffField(NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags, TInputBuf& buf);
  63. NKikimr::NUdf::TUnboxedValue ReadSkiffNativeYtValue(NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags,
  64. const NKikimr::NMiniKQL::THolderFactory& holderFactory, TInputBuf& buf);
  65. NKikimr::NUdf::TUnboxedValue ReadSkiffData(NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags, NCommon::TInputBuf& buf);
  66. extern "C" void ReadContainerNativeYtValue(NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags,
  67. const NKikimr::NMiniKQL::THolderFactory& holderFactory, NKikimr::NUdf::TUnboxedValue& value, NCommon::TInputBuf& buf,
  68. bool wrapOptional);
  69. extern "C" void WriteYsonContainerValue(NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags,
  70. const NKikimr::NUdf::TUnboxedValuePod& value, NCommon::TOutputBuf& buf);
  71. void WriteSkiffData(NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags, const NKikimr::NUdf::TUnboxedValuePod& value, NCommon::TOutputBuf& buf);
  72. void WriteSkiffNativeYtValue(NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags,
  73. const NKikimr::NUdf::TUnboxedValuePod& value, NCommon::TOutputBuf& buf);
  74. extern "C" void WriteContainerNativeYtValue(NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags,
  75. const NKikimr::NUdf::TUnboxedValuePod& value, NCommon::TOutputBuf& buf);
  76. void WriteYsonValueInTableFormat(TOutputBuf& buf, NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags, const NKikimr::NUdf::TUnboxedValuePod& value, bool topLevel);
  77. TExprNode::TPtr ValueToExprLiteral(const TTypeAnnotationNode* type, const NKikimr::NUdf::TUnboxedValuePod& value, TExprContext& ctx,
  78. TPositionHandle pos = {});
  79. } // namespace NCommon
  80. } // namespace NYql