#pragma once #include "yql_codec_buf.h" #include #include #include #include #include #include #include #include #include #include #include #include namespace NYT { class TNode; } namespace NYql { namespace NCommon { void WriteYsonValue( NYson::TYsonConsumerBase& writer, const NKikimr::NUdf::TUnboxedValuePod& value, NKikimr::NMiniKQL::TType* type, const TVector* structPositions = nullptr ); TString WriteYsonValue( const NKikimr::NUdf::TUnboxedValuePod& value, NKikimr::NMiniKQL::TType* type, const TVector* structPositions = nullptr, NYson::EYsonFormat format = NYson::EYsonFormat::Binary ); TMaybe> CreateStructPositions( NKikimr::NMiniKQL::TType* inputType, const TVector* columns = nullptr ); NYT::TNode ValueToNode(const NKikimr::NUdf::TUnboxedValuePod& value, NKikimr::NMiniKQL::TType* type); TExprNode::TPtr NodeToExprLiteral(TPositionHandle pos, const TTypeAnnotationNode& type, const NYT::TNode& node, TExprContext& ctx); struct TCodecContext { const NKikimr::NMiniKQL::TTypeEnvironment& Env; NKikimr::NMiniKQL::TProgramBuilder Builder; const NKikimr::NMiniKQL::THolderFactory* HolderFactory; // lazy initialized std::list> StructReorders; TCodecContext( const NKikimr::NMiniKQL::TTypeEnvironment& env, const NKikimr::NMiniKQL::IFunctionRegistry& functionRegistry, const NKikimr::NMiniKQL::THolderFactory* holderFactory = nullptr ); }; void SkipYson(char cmd, TInputBuf& buf); void CopyYson(char cmd, TInputBuf& buf, TVector& yson); void CopyYsonWithAttrs(char cmd, TInputBuf& buf, TVector& yson); TStringBuf ReadNextString(char cmd, TInputBuf& buf); NKikimr::NUdf::TUnboxedValue ReadYsonValue(NKikimr::NMiniKQL::TType* type, const NKikimr::NMiniKQL::THolderFactory& holderFactory, char cmd, TInputBuf& buf); TMaybe ParseYsonValue(const NKikimr::NMiniKQL::THolderFactory& holderFactory, const TStringBuf& yson, NKikimr::NMiniKQL::TType* type, IOutputStream* err); TMaybe ParseYsonNodeInResultFormat(const NKikimr::NMiniKQL::THolderFactory& holderFactory, const NYT::TNode& node, NKikimr::NMiniKQL::TType* type, IOutputStream* err); TExprNode::TPtr ValueToExprLiteral(const TTypeAnnotationNode* type, const NKikimr::NUdf::TUnboxedValuePod& value, TExprContext& ctx, TPositionHandle pos = {}); } // namespace NCommon } // namespace NYql