diff options
author | max42 <max42@yandex-team.com> | 2023-07-29 00:02:16 +0300 |
---|---|---|
committer | max42 <max42@yandex-team.com> | 2023-07-29 00:02:16 +0300 |
commit | 73b89de71748a21e102d27b9f3ed1bf658766cb5 (patch) | |
tree | 188bbd2d622fa91cdcbb1b6d6d77fbc84a0646f5 /yt/cpp/mapreduce/common/helpers.cpp | |
parent | 528e321bcc2a2b67b53aeba58c3bd88305a141ee (diff) | |
download | ydb-73b89de71748a21e102d27b9f3ed1bf658766cb5.tar.gz |
YT-19210: expose YQL shared library for YT.
After this, a new target libyqlplugin.so appears. in open-source cmake build.
Diff in open-source YDB repo looks like the following: https://paste.yandex-team.ru/f302bdb4-7ef2-4362-91c7-6ca45f329264
Diffstat (limited to 'yt/cpp/mapreduce/common/helpers.cpp')
-rw-r--r-- | yt/cpp/mapreduce/common/helpers.cpp | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/yt/cpp/mapreduce/common/helpers.cpp b/yt/cpp/mapreduce/common/helpers.cpp new file mode 100644 index 0000000000..95924d812c --- /dev/null +++ b/yt/cpp/mapreduce/common/helpers.cpp @@ -0,0 +1,126 @@ +#include "helpers.h" + +#include <yt/cpp/mapreduce/interface/config.h> +#include <yt/cpp/mapreduce/interface/serialize.h> +#include <yt/cpp/mapreduce/interface/fluent.h> + +#include <library/cpp/yson/node/node_builder.h> +#include <library/cpp/yson/node/node_visitor.h> + +#include <library/cpp/yson/parser.h> +#include <library/cpp/yson/writer.h> + +#include <library/cpp/json/json_reader.h> +#include <library/cpp/json/json_value.h> + +#include <util/stream/input.h> +#include <util/stream/output.h> +#include <util/stream/str.h> + +namespace NYT { + +//////////////////////////////////////////////////////////////////////////////// + +TString NodeListToYsonString(const TNode::TListType& nodes) +{ + TStringStream stream; + ::NYson::TYsonWriter writer(&stream, NYson::EYsonFormat::Binary, ::NYson::EYsonType::ListFragment); + auto list = BuildYsonListFluently(&writer); + for (const auto& node : nodes) { + list.Item().Value(node); + } + return stream.Str(); +} + +TNode PathToNode(const TRichYPath& path) +{ + TNode result; + TNodeBuilder builder(&result); + Serialize(path, &builder); + return result; +} + +TNode PathToParamNode(const TRichYPath& path) +{ + return TNode()("path", PathToNode(path)); +} + +TString AttributesToYsonString(const TNode& node) +{ + return BuildYsonStringFluently().BeginMap() + .Item("attributes").Value(node) + .EndMap(); +} + +TString AttributeFilterToYsonString(const TAttributeFilter& filter) +{ + return BuildYsonStringFluently().BeginMap() + .Item("attributes").Value(filter) + .EndMap(); +} + +TNode NodeFromTableSchema(const TTableSchema& schema) +{ + TNode result; + TNodeBuilder builder(&result); + Serialize(schema, &builder); + return result; +} + +void MergeNodes(TNode& dst, const TNode& src) +{ + if (dst.IsMap() && src.IsMap()) { + auto& dstMap = dst.AsMap(); + const auto& srcMap = src.AsMap(); + for (const auto& srcItem : srcMap) { + const auto& key = srcItem.first; + auto dstItem = dstMap.find(key); + if (dstItem != dstMap.end()) { + MergeNodes(dstItem->second, srcItem.second); + } else { + dstMap[key] = srcItem.second; + } + } + } else { + if (dst.GetType() == src.GetType() && src.HasAttributes()) { + auto attributes = dst.GetAttributes(); + MergeNodes(attributes, src.GetAttributes()); + dst = src; + dst.Attributes() = attributes; + } else { + dst = src; + } + } +} + +TYPath AddPathPrefix(const TYPath& path, const TString& pathPrefix) +{ + if (path.StartsWith("//") || path.StartsWith("#")) { + return path; + } + return pathPrefix + path; +} + +TString GetWriteTableCommand(const TString& apiVersion) +{ + return apiVersion == "v2" ? "write" : "write_table"; +} + +TString GetReadTableCommand(const TString& apiVersion) +{ + return apiVersion == "v2" ? "read" : "read_table"; +} + +TString GetWriteFileCommand(const TString& apiVersion) +{ + return apiVersion == "v2" ? "upload" : "write_file"; +} + +TString GetReadFileCommand(const TString& apiVersion) +{ + return apiVersion == "v2" ? "download" : "read_file"; +} + +//////////////////////////////////////////////////////////////////////////////// + +} // namespace NYT |