#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); NKikimr::NUdf::TUnboxedValue ReadYsonValue(NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags, const NKikimr::NMiniKQL::THolderFactory& holderFactory, char cmd, TInputBuf& buf, bool isTableFormat); TMaybe ParseYsonValue(const NKikimr::NMiniKQL::THolderFactory& holderFactory, const TStringBuf& yson, NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags, IOutputStream* err, bool isTableFormat); TMaybe ParseYsonNode(const NKikimr::NMiniKQL::THolderFactory& holderFactory, const NYT::TNode& node, NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags, IOutputStream* err); TMaybe ParseYsonNodeInResultFormat(const NKikimr::NMiniKQL::THolderFactory& holderFactory, const NYT::TNode& node, NKikimr::NMiniKQL::TType* type, IOutputStream* err); extern "C" void ReadYsonContainerValue(NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags, const NKikimr::NMiniKQL::THolderFactory& holderFactory, NKikimr::NUdf::TUnboxedValue& value, NCommon::TInputBuf& buf, bool wrapOptional); void SkipSkiffField(NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags, TInputBuf& buf); NKikimr::NUdf::TUnboxedValue ReadSkiffNativeYtValue(NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags, const NKikimr::NMiniKQL::THolderFactory& holderFactory, TInputBuf& buf); NKikimr::NUdf::TUnboxedValue ReadSkiffData(NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags, NCommon::TInputBuf& buf); extern "C" void ReadContainerNativeYtValue(NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags, const NKikimr::NMiniKQL::THolderFactory& holderFactory, NKikimr::NUdf::TUnboxedValue& value, NCommon::TInputBuf& buf, bool wrapOptional); extern "C" void WriteYsonContainerValue(NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags, const NKikimr::NUdf::TUnboxedValuePod& value, NCommon::TOutputBuf& buf); void WriteSkiffData(NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags, const NKikimr::NUdf::TUnboxedValuePod& value, NCommon::TOutputBuf& buf); void WriteSkiffNativeYtValue(NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags, const NKikimr::NUdf::TUnboxedValuePod& value, NCommon::TOutputBuf& buf); extern "C" void WriteContainerNativeYtValue(NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags, const NKikimr::NUdf::TUnboxedValuePod& value, NCommon::TOutputBuf& buf); void WriteYsonValueInTableFormat(TOutputBuf& buf, NKikimr::NMiniKQL::TType* type, ui64 nativeYtTypeFlags, const NKikimr::NUdf::TUnboxedValuePod& value, bool topLevel); TExprNode::TPtr ValueToExprLiteral(const TTypeAnnotationNode* type, const NKikimr::NUdf::TUnboxedValuePod& value, TExprContext& ctx, TPositionHandle pos = {}); } // namespace NCommon } // namespace NYql