diff options
author | vvvv <vvvv@ydb.tech> | 2023-10-20 14:57:12 +0300 |
---|---|---|
committer | vvvv <vvvv@ydb.tech> | 2023-10-20 15:59:56 +0300 |
commit | b9149c26f5470959b292b4a793e9d24801498fdd (patch) | |
tree | c850a0b7dec73b5e1d6714ba7cd45d4fdc607417 | |
parent | 94b737e71f7f210914d394f192c49897c80e527d (diff) | |
download | ydb-b9149c26f5470959b292b4a793e9d24801498fdd.tar.gz |
YQL-16880 moved protobuf udf
82 files changed, 1567 insertions, 2 deletions
diff --git a/.mapping.json b/.mapping.json index 2584dc6721..c4c909f0c9 100644 --- a/.mapping.json +++ b/.mapping.json @@ -8427,6 +8427,11 @@ "ydb/library/yql/udfs/common/pire/CMakeLists.linux-x86_64.txt":"", "ydb/library/yql/udfs/common/pire/CMakeLists.txt":"", "ydb/library/yql/udfs/common/pire/CMakeLists.windows-x86_64.txt":"", + "ydb/library/yql/udfs/common/protobuf/CMakeLists.darwin-x86_64.txt":"", + "ydb/library/yql/udfs/common/protobuf/CMakeLists.linux-aarch64.txt":"", + "ydb/library/yql/udfs/common/protobuf/CMakeLists.linux-x86_64.txt":"", + "ydb/library/yql/udfs/common/protobuf/CMakeLists.txt":"", + "ydb/library/yql/udfs/common/protobuf/CMakeLists.windows-x86_64.txt":"", "ydb/library/yql/udfs/common/re2/CMakeLists.darwin-x86_64.txt":"", "ydb/library/yql/udfs/common/re2/CMakeLists.linux-aarch64.txt":"", "ydb/library/yql/udfs/common/re2/CMakeLists.linux-x86_64.txt":"", @@ -9622,6 +9627,13 @@ "ydb/tests/tools/idx_test/CMakeLists.linux-x86_64.txt":"", "ydb/tests/tools/idx_test/CMakeLists.txt":"", "ydb/tests/tools/idx_test/CMakeLists.windows-x86_64.txt":"", + "yql/CMakeLists.txt":"", + "yql/library/CMakeLists.txt":"", + "yql/library/protobuf_udf/CMakeLists.darwin-x86_64.txt":"", + "yql/library/protobuf_udf/CMakeLists.linux-aarch64.txt":"", + "yql/library/protobuf_udf/CMakeLists.linux-x86_64.txt":"", + "yql/library/protobuf_udf/CMakeLists.txt":"", + "yql/library/protobuf_udf/CMakeLists.windows-x86_64.txt":"", "yt/CMakeLists.txt":"", "yt/cpp/CMakeLists.txt":"", "yt/cpp/mapreduce/CMakeLists.txt":"", diff --git a/CMakeLists.darwin-x86_64.txt b/CMakeLists.darwin-x86_64.txt index 075d57df50..b24de15468 100644 --- a/CMakeLists.darwin-x86_64.txt +++ b/CMakeLists.darwin-x86_64.txt @@ -13,3 +13,4 @@ add_subdirectory(util) add_subdirectory(yt) add_subdirectory(certs) add_subdirectory(ydb) +add_subdirectory(yql) diff --git a/CMakeLists.linux-aarch64.txt b/CMakeLists.linux-aarch64.txt index 075d57df50..b24de15468 100644 --- a/CMakeLists.linux-aarch64.txt +++ b/CMakeLists.linux-aarch64.txt @@ -13,3 +13,4 @@ add_subdirectory(util) add_subdirectory(yt) add_subdirectory(certs) add_subdirectory(ydb) +add_subdirectory(yql) diff --git a/CMakeLists.linux-x86_64.txt b/CMakeLists.linux-x86_64.txt index 075d57df50..b24de15468 100644 --- a/CMakeLists.linux-x86_64.txt +++ b/CMakeLists.linux-x86_64.txt @@ -13,3 +13,4 @@ add_subdirectory(util) add_subdirectory(yt) add_subdirectory(certs) add_subdirectory(ydb) +add_subdirectory(yql) diff --git a/CMakeLists.windows-x86_64.txt b/CMakeLists.windows-x86_64.txt index e8667d4e27..0348a298de 100644 --- a/CMakeLists.windows-x86_64.txt +++ b/CMakeLists.windows-x86_64.txt @@ -13,3 +13,4 @@ add_subdirectory(library) add_subdirectory(yt) add_subdirectory(certs) add_subdirectory(ydb) +add_subdirectory(yql) diff --git a/ydb/library/yql/tests/common/test_framework/udfs_deps/ya.make b/ydb/library/yql/tests/common/test_framework/udfs_deps/ya.make index 98785d69d4..c620af2f7d 100644 --- a/ydb/library/yql/tests/common/test_framework/udfs_deps/ya.make +++ b/ydb/library/yql/tests/common/test_framework/udfs_deps/ya.make @@ -4,6 +4,7 @@ SET( ydb/library/yql/udfs/common/digest ydb/library/yql/udfs/common/hyperloglog ydb/library/yql/udfs/common/pire + ydb/library/yql/udfs/common/protobuf ydb/library/yql/udfs/common/re2 ydb/library/yql/udfs/common/set ydb/library/yql/udfs/common/stat diff --git a/ydb/library/yql/tests/s-expressions/common_file.py b/ydb/library/yql/tests/s-expressions/common_file.py index 88821c3ea4..7b47b2601b 100644 --- a/ydb/library/yql/tests/s-expressions/common_file.py +++ b/ydb/library/yql/tests/s-expressions/common_file.py @@ -22,8 +22,6 @@ def get_block_gateways_config(): def yqlrun_yt_results(provider, prepare, suite, case, config): if (suite, case) not in yqlrun_yt_results.cache: - if 'Proto' in case: - pytest.skip('Protobuf') if 'ViewWithUdfProcess' in case: pytest.skip('ScriptUdf') diff --git a/ydb/library/yql/tests/s-expressions/file.make b/ydb/library/yql/tests/s-expressions/file.make index d6ca78e54f..c1d9c91d43 100644 --- a/ydb/library/yql/tests/s-expressions/file.make +++ b/ydb/library/yql/tests/s-expressions/file.make @@ -40,6 +40,10 @@ PEERDIR( TAG(ya:dump_test_env) +IF (SANITIZER_TYPE == "memory") + TAG(ya:not_autocheck) # YQL-15385 +ENDIF() + NO_CHECK_IMPORTS() REQUIREMENTS(cpu:4 ram:13) diff --git a/ydb/library/yql/udfs/common/CMakeLists.darwin-x86_64.txt b/ydb/library/yql/udfs/common/CMakeLists.darwin-x86_64.txt index 10ac5bd4b5..93b5b23ce8 100644 --- a/ydb/library/yql/udfs/common/CMakeLists.darwin-x86_64.txt +++ b/ydb/library/yql/udfs/common/CMakeLists.darwin-x86_64.txt @@ -18,6 +18,7 @@ add_subdirectory(json) add_subdirectory(json2) add_subdirectory(math) add_subdirectory(pire) +add_subdirectory(protobuf) add_subdirectory(re2) add_subdirectory(set) add_subdirectory(stat) diff --git a/ydb/library/yql/udfs/common/CMakeLists.linux-aarch64.txt b/ydb/library/yql/udfs/common/CMakeLists.linux-aarch64.txt index 1fc73e5a2d..0afb0ce04b 100644 --- a/ydb/library/yql/udfs/common/CMakeLists.linux-aarch64.txt +++ b/ydb/library/yql/udfs/common/CMakeLists.linux-aarch64.txt @@ -17,6 +17,7 @@ add_subdirectory(json) add_subdirectory(json2) add_subdirectory(math) add_subdirectory(pire) +add_subdirectory(protobuf) add_subdirectory(re2) add_subdirectory(set) add_subdirectory(stat) diff --git a/ydb/library/yql/udfs/common/CMakeLists.linux-x86_64.txt b/ydb/library/yql/udfs/common/CMakeLists.linux-x86_64.txt index 10ac5bd4b5..93b5b23ce8 100644 --- a/ydb/library/yql/udfs/common/CMakeLists.linux-x86_64.txt +++ b/ydb/library/yql/udfs/common/CMakeLists.linux-x86_64.txt @@ -18,6 +18,7 @@ add_subdirectory(json) add_subdirectory(json2) add_subdirectory(math) add_subdirectory(pire) +add_subdirectory(protobuf) add_subdirectory(re2) add_subdirectory(set) add_subdirectory(stat) diff --git a/ydb/library/yql/udfs/common/CMakeLists.windows-x86_64.txt b/ydb/library/yql/udfs/common/CMakeLists.windows-x86_64.txt index 10ac5bd4b5..93b5b23ce8 100644 --- a/ydb/library/yql/udfs/common/CMakeLists.windows-x86_64.txt +++ b/ydb/library/yql/udfs/common/CMakeLists.windows-x86_64.txt @@ -18,6 +18,7 @@ add_subdirectory(json) add_subdirectory(json2) add_subdirectory(math) add_subdirectory(pire) +add_subdirectory(protobuf) add_subdirectory(re2) add_subdirectory(set) add_subdirectory(stat) diff --git a/ydb/library/yql/udfs/common/protobuf/CMakeLists.darwin-x86_64.txt b/ydb/library/yql/udfs/common/protobuf/CMakeLists.darwin-x86_64.txt new file mode 100644 index 0000000000..1dec5ce33c --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/CMakeLists.darwin-x86_64.txt @@ -0,0 +1,71 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + + +add_shared_library(protobuf_udf.dyn) +set_property(TARGET protobuf_udf.dyn PROPERTY + OUTPUT_NAME protobuf_udf +) +target_compile_options(protobuf_udf.dyn PRIVATE + -DBUILD_UDF + -DUDF_ABI_VERSION_MAJOR=2 + -DUDF_ABI_VERSION_MINOR=9 + -DUDF_ABI_VERSION_PATCH=0 +) +target_link_libraries(protobuf_udf.dyn PUBLIC + contrib-libs-cxxsupp + yutil + yql-public-udf + public-udf-support + cpp-protobuf-yql + yql-library-protobuf_udf +) +target_link_options(protobuf_udf.dyn PRIVATE + -Wl,-platform_version,macos,11.0,11.0 + -fPIC + -undefined + dynamic_lookup + -fPIC + -framework + CoreFoundation +) +target_sources(protobuf_udf.dyn PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/protobuf/protobuf_udf.cpp +) +use_export_script(protobuf_udf.dyn + ${CMAKE_SOURCE_DIR}/ydb/library/yql/public/udf/udfs_exports.exports +) +vcs_info(protobuf_udf.dyn) + +add_library(protobuf_udf INTERFACE) +target_link_libraries(protobuf_udf INTERFACE + contrib-libs-cxxsupp + yutil + yql-public-udf + public-udf-support + cpp-protobuf-yql + yql-library-protobuf_udf +) + +add_global_library_for(protobuf_udf.global protobuf_udf) +target_compile_options(protobuf_udf.global PRIVATE + -DUDF_ABI_VERSION_MAJOR=2 + -DUDF_ABI_VERSION_MINOR=9 + -DUDF_ABI_VERSION_PATCH=0 +) +target_link_libraries(protobuf_udf.global PUBLIC + contrib-libs-cxxsupp + yutil + yql-public-udf + public-udf-support + cpp-protobuf-yql + yql-library-protobuf_udf +) +target_sources(protobuf_udf.global PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/protobuf/protobuf_udf.cpp +) diff --git a/ydb/library/yql/udfs/common/protobuf/CMakeLists.linux-aarch64.txt b/ydb/library/yql/udfs/common/protobuf/CMakeLists.linux-aarch64.txt new file mode 100644 index 0000000000..57d2994a98 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/CMakeLists.linux-aarch64.txt @@ -0,0 +1,77 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + + +add_shared_library(protobuf_udf.dyn) +set_property(TARGET protobuf_udf.dyn PROPERTY + OUTPUT_NAME protobuf_udf +) +target_compile_options(protobuf_udf.dyn PRIVATE + -DBUILD_UDF + -DUDF_ABI_VERSION_MAJOR=2 + -DUDF_ABI_VERSION_MINOR=9 + -DUDF_ABI_VERSION_PATCH=0 +) +target_link_libraries(protobuf_udf.dyn PUBLIC + contrib-libs-linux-headers + contrib-libs-cxxsupp + yutil + yql-public-udf + public-udf-support + cpp-protobuf-yql + yql-library-protobuf_udf +) +target_link_options(protobuf_udf.dyn PRIVATE + -ldl + -lrt + -Wl,--no-as-needed + -fPIC + -Wl,-z,notext + -Wl,-Bsymbolic + -fPIC + -lpthread + -lrt + -ldl +) +target_sources(protobuf_udf.dyn PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/protobuf/protobuf_udf.cpp +) +use_export_script(protobuf_udf.dyn + ${CMAKE_SOURCE_DIR}/ydb/library/yql/public/udf/udfs_exports.exports +) +vcs_info(protobuf_udf.dyn) + +add_library(protobuf_udf INTERFACE) +target_link_libraries(protobuf_udf INTERFACE + contrib-libs-linux-headers + contrib-libs-cxxsupp + yutil + yql-public-udf + public-udf-support + cpp-protobuf-yql + yql-library-protobuf_udf +) + +add_global_library_for(protobuf_udf.global protobuf_udf) +target_compile_options(protobuf_udf.global PRIVATE + -DUDF_ABI_VERSION_MAJOR=2 + -DUDF_ABI_VERSION_MINOR=9 + -DUDF_ABI_VERSION_PATCH=0 +) +target_link_libraries(protobuf_udf.global PUBLIC + contrib-libs-linux-headers + contrib-libs-cxxsupp + yutil + yql-public-udf + public-udf-support + cpp-protobuf-yql + yql-library-protobuf_udf +) +target_sources(protobuf_udf.global PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/protobuf/protobuf_udf.cpp +) diff --git a/ydb/library/yql/udfs/common/protobuf/CMakeLists.linux-x86_64.txt b/ydb/library/yql/udfs/common/protobuf/CMakeLists.linux-x86_64.txt new file mode 100644 index 0000000000..57d2994a98 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/CMakeLists.linux-x86_64.txt @@ -0,0 +1,77 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + + +add_shared_library(protobuf_udf.dyn) +set_property(TARGET protobuf_udf.dyn PROPERTY + OUTPUT_NAME protobuf_udf +) +target_compile_options(protobuf_udf.dyn PRIVATE + -DBUILD_UDF + -DUDF_ABI_VERSION_MAJOR=2 + -DUDF_ABI_VERSION_MINOR=9 + -DUDF_ABI_VERSION_PATCH=0 +) +target_link_libraries(protobuf_udf.dyn PUBLIC + contrib-libs-linux-headers + contrib-libs-cxxsupp + yutil + yql-public-udf + public-udf-support + cpp-protobuf-yql + yql-library-protobuf_udf +) +target_link_options(protobuf_udf.dyn PRIVATE + -ldl + -lrt + -Wl,--no-as-needed + -fPIC + -Wl,-z,notext + -Wl,-Bsymbolic + -fPIC + -lpthread + -lrt + -ldl +) +target_sources(protobuf_udf.dyn PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/protobuf/protobuf_udf.cpp +) +use_export_script(protobuf_udf.dyn + ${CMAKE_SOURCE_DIR}/ydb/library/yql/public/udf/udfs_exports.exports +) +vcs_info(protobuf_udf.dyn) + +add_library(protobuf_udf INTERFACE) +target_link_libraries(protobuf_udf INTERFACE + contrib-libs-linux-headers + contrib-libs-cxxsupp + yutil + yql-public-udf + public-udf-support + cpp-protobuf-yql + yql-library-protobuf_udf +) + +add_global_library_for(protobuf_udf.global protobuf_udf) +target_compile_options(protobuf_udf.global PRIVATE + -DUDF_ABI_VERSION_MAJOR=2 + -DUDF_ABI_VERSION_MINOR=9 + -DUDF_ABI_VERSION_PATCH=0 +) +target_link_libraries(protobuf_udf.global PUBLIC + contrib-libs-linux-headers + contrib-libs-cxxsupp + yutil + yql-public-udf + public-udf-support + cpp-protobuf-yql + yql-library-protobuf_udf +) +target_sources(protobuf_udf.global PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/protobuf/protobuf_udf.cpp +) diff --git a/ydb/library/yql/udfs/common/protobuf/CMakeLists.txt b/ydb/library/yql/udfs/common/protobuf/CMakeLists.txt new file mode 100644 index 0000000000..f8b31df0c1 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/CMakeLists.txt @@ -0,0 +1,17 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + +if (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" AND NOT HAVE_CUDA) + include(CMakeLists.linux-aarch64.txt) +elseif (CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") + include(CMakeLists.darwin-x86_64.txt) +elseif (WIN32 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64" AND NOT HAVE_CUDA) + include(CMakeLists.windows-x86_64.txt) +elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND NOT HAVE_CUDA) + include(CMakeLists.linux-x86_64.txt) +endif() diff --git a/ydb/library/yql/udfs/common/protobuf/CMakeLists.windows-x86_64.txt b/ydb/library/yql/udfs/common/protobuf/CMakeLists.windows-x86_64.txt new file mode 100644 index 0000000000..0287e506d4 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/CMakeLists.windows-x86_64.txt @@ -0,0 +1,62 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + + +add_shared_library(protobuf_udf.dyn) +set_property(TARGET protobuf_udf.dyn PROPERTY + OUTPUT_NAME protobuf_udf +) +target_compile_options(protobuf_udf.dyn PRIVATE + -DBUILD_UDF + -DUDF_ABI_VERSION_MAJOR=2 + -DUDF_ABI_VERSION_MINOR=9 + -DUDF_ABI_VERSION_PATCH=0 +) +target_link_libraries(protobuf_udf.dyn PUBLIC + contrib-libs-cxxsupp + yutil + yql-public-udf + public-udf-support + cpp-protobuf-yql + yql-library-protobuf_udf +) +target_sources(protobuf_udf.dyn PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/protobuf/protobuf_udf.cpp +) +use_export_script(protobuf_udf.dyn + ${CMAKE_SOURCE_DIR}/ydb/library/yql/public/udf/udfs_exports.exports +) +vcs_info(protobuf_udf.dyn) + +add_library(protobuf_udf INTERFACE) +target_link_libraries(protobuf_udf INTERFACE + contrib-libs-cxxsupp + yutil + yql-public-udf + public-udf-support + cpp-protobuf-yql + yql-library-protobuf_udf +) + +add_global_library_for(protobuf_udf.global protobuf_udf) +target_compile_options(protobuf_udf.global PRIVATE + -DUDF_ABI_VERSION_MAJOR=2 + -DUDF_ABI_VERSION_MINOR=9 + -DUDF_ABI_VERSION_PATCH=0 +) +target_link_libraries(protobuf_udf.global PUBLIC + contrib-libs-cxxsupp + yutil + yql-public-udf + public-udf-support + cpp-protobuf-yql + yql-library-protobuf_udf +) +target_sources(protobuf_udf.global PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/protobuf/protobuf_udf.cpp +) diff --git a/ydb/library/yql/udfs/common/protobuf/protobuf_udf.cpp b/ydb/library/yql/udfs/common/protobuf/protobuf_udf.cpp new file mode 100644 index 0000000000..01d0ca54f3 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/protobuf_udf.cpp @@ -0,0 +1,143 @@ +#include <yql/library/protobuf_udf/type_builder.h> +#include <yql/library/protobuf_udf/value_builder.h> +#include <ydb/library/yql/public/udf/udf_value.h> +#include <ydb/library/yql/public/udf/udf_registrator.h> + +#include <library/cpp/protobuf/yql/descriptor.h> + +using namespace NKikimr::NUdf; +using namespace NProtoBuf; + +namespace { + class TDynamicProtoValue: public TProtobufValue { + public: + TDynamicProtoValue(const TProtoInfo& info, TDynamicInfoRef dyn) + : TProtobufValue(info) + , Dynamic_(dyn) + { + Y_ASSERT(Dynamic_ != nullptr); + } + + TAutoPtr<Message> Parse(const TStringBuf& data) const override { + return Dynamic_->Parse(data); + } + + private: + TDynamicInfoRef Dynamic_; + }; + + class TDynamicProtoSerialize: public TProtobufSerialize { + public: + TDynamicProtoSerialize(const TProtoInfo& info, TDynamicInfoRef dyn) + : TProtobufSerialize(info) + , Dynamic_(dyn) + { + Y_ASSERT(Dynamic_ != nullptr); + } + + TMaybe<TString> Serialize(const Message& proto) const override { + return Dynamic_->Serialize(proto); + } + + TAutoPtr<Message> MakeProto() const override { + return Dynamic_->MakeProto(); + } + private: + TDynamicInfoRef Dynamic_; + }; + + class TDynamicProtoValueSafe: public TDynamicProtoValue { + public: + TDynamicProtoValueSafe(const TProtoInfo& info, TDynamicInfoRef dyn) + : TDynamicProtoValue(info, dyn) {} + + TAutoPtr<Message> Parse(const TStringBuf& data) const override { + try { + return TDynamicProtoValue::Parse(data); + } catch (const std::exception& e) { + return nullptr; + } + } + }; + + class TProtobufModule: public IUdfModule { + public: + TStringRef Name() const { + return TStringRef("Protobuf"); + } + + void CleanupOnTerminate() const final { + } + + void GetAllFunctions(IFunctionsSink& sink) const final { + sink.Add(TStringRef::Of("Parse"))->SetTypeAwareness(); + sink.Add(TStringRef::Of("TryParse"))->SetTypeAwareness(); + sink.Add(TStringRef::Of("Serialize"))->SetTypeAwareness(); + } + + void BuildFunctionTypeInfo( + const TStringRef& name, + TType* userType, + const TStringRef& typeConfig, + ui32 flags, + IFunctionTypeInfoBuilder& builder) const final { + Y_UNUSED(userType); + + try { + auto dyn = TDynamicInfo::Create(TStringBuf(typeConfig.Data(), typeConfig.Size())); + + TProtoInfo typeInfo; + ProtoTypeBuild(dyn->Descriptor(), + dyn->GetEnumFormat(), + dyn->GetRecursionTraits(), + dyn->GetOptionalLists(), + builder, &typeInfo, + EProtoStringYqlType::Bytes, + dyn->GetSyntaxAware(), + false, + dyn->GetYtMode()); + + auto stringType = builder.SimpleType<char*>(); + auto structType = typeInfo.StructType; + auto optionalStructType = builder.Optional()->Item(structType).Build(); + + if (TStringRef::Of("Serialize") == name) { + // function signature: + // String Serialize(Protobuf value) + builder.Returns(stringType) + .Args() + ->Add(structType) + .Flags(ICallablePayload::TArgumentFlags::AutoMap) + .Done(); + if ((flags & TFlags::TypesOnly) == 0) { + builder.Implementation(new TDynamicProtoSerialize(typeInfo, dyn)); + } + } else { + // function signature: + // Protobuf Parse(String value) + builder.Returns((TStringRef::Of("TryParse") == name) ? optionalStructType : structType) + .Args() + ->Add(stringType) + .Flags(ICallablePayload::TArgumentFlags::AutoMap) + .Done(); + + if (TStringRef::Of("Parse") == name) { + if ((flags & TFlags::TypesOnly) == 0) { + builder.Implementation(new TDynamicProtoValue(typeInfo, dyn)); + } + } else if (TStringRef::Of("TryParse") == name) { + if ((flags & TFlags::TypesOnly) == 0) { + builder.Implementation(new TDynamicProtoValueSafe(typeInfo, dyn)); + } + } + } + + } catch (const std::exception& e) { + builder.SetError(CurrentExceptionMessage()); + } + } + }; + +} + +REGISTER_MODULES(TProtobufModule); diff --git a/ydb/library/yql/udfs/common/protobuf/test/canondata/result.json b/ydb/library/yql/udfs/common/protobuf/test/canondata/result.json new file mode 100644 index 0000000000..ac534cee58 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/canondata/result.json @@ -0,0 +1,126 @@ +{ + "test.test[CRYPTR-627]": [ + { + "checksum": "fce4dcff82967863048135d17d52f31f", + "size": 90043, + "uri": "https://storage.yandex-team.ru/get-devtools/212715/870509fa5b3fad596ac1effbd15336199d7c4166/resource.tar.gz#test.test_CRYPTR-627_/results.txt" + } + ], + "test.test[YQL-16111]": [ + { + "checksum": "35d6f2291f27eb3ec28a96739412f276", + "size": 5675, + "uri": "https://storage.yandex-team.ru/get-devtools/1781765/c2a453956382e0fdfc958f3c4e32ed7740f03d4b/resource.tar.gz#test.test_YQL-16111_/results.txt" + } + ], + "test.test[YQL-3381]": [ + { + "checksum": "c098af301d5dc8d85071a47455f0f592", + "size": 97359, + "uri": "https://storage.yandex-team.ru/get-devtools/212715/6d6e638efd56a0c6037196ae663d58f279ee467a/resource.tar.gz#test.test_YQL-3381_/results.txt" + } + ], + "test.test[YQL-6706]": [ + { + "checksum": "17fbe1395ae7573288532aa42c5525c4", + "size": 87479, + "uri": "https://storage.yandex-team.ru/get-devtools/212715/b614019f8638cf007ad9da4a361791da4a66b156/resource.tar.gz#test.test_YQL-6706_/results.txt" + } + ], + "test.test[YQL-8307]": [ + { + "checksum": "e3045a4ed9fe70bc12c8fd0de7bff29c", + "size": 3840, + "uri": "https://storage.yandex-team.ru/get-devtools/1923547/edc65c62e064cae64c748b355e12a480cac0c768/resource.tar.gz#test.test_YQL-8307_/results.txt" + } + ], + "test.test[recursion_bytes]": [ + { + "checksum": "eeb1ca24bdc09529bd0a320965b3123d", + "size": 1241, + "uri": "https://storage.yandex-team.ru/get-devtools/1937492/9579ab43fa70f08e465aa7673b27a5da5460a75e/resource.tar.gz#test.test_recursion_bytes_/results.txt" + } + ], + "test.test[recursion_fail]": [ + { + "uri": "file://test.test_recursion_fail_/extracted" + } + ], + "test.test[recursion_ignore]": [ + { + "checksum": "eeb1ca24bdc09529bd0a320965b3123d", + "size": 1241, + "uri": "https://storage.yandex-team.ru/get-devtools/1937492/9579ab43fa70f08e465aa7673b27a5da5460a75e/resource.tar.gz#test.test_recursion_ignore_/results.txt" + } + ], + "test.test[syntax_aware_empty_nested_message]": [ + { + "checksum": "2f7d8896e8d637d9698c94f99b5e586f", + "size": 4344, + "uri": "https://storage.yandex-team.ru/get-devtools/1899731/4317be1fdb14f46c8bb94f5975cce5af8f89f78e/resource.tar.gz#test.test_syntax_aware_empty_nested_message_/results.txt" + } + ], + "test.test[syntax_aware_nested_enum_string_value]": [ + { + "checksum": "630a0e1ef04aada546e39ad71771c4d9", + "size": 4152, + "uri": "https://storage.yandex-team.ru/get-devtools/1899731/4317be1fdb14f46c8bb94f5975cce5af8f89f78e/resource.tar.gz#test.test_syntax_aware_nested_enum_string_value_/results.txt" + } + ], + "test.test[yt_mode_any]": [ + { + "checksum": "c640b3b07686099261511c45d21388f7", + "size": 3808, + "uri": "https://storage.yandex-team.ru/get-devtools/1946324/c1d8ae91dcc463381c8fa29e568a09926e9a2225/resource.tar.gz#test.test_yt_mode_any_/results.txt" + } + ], + "test.test[yt_mode_enum]": [ + { + "checksum": "2c32becbf155f2dce66d7c00db46a2a4", + "size": 2965, + "uri": "https://storage.yandex-team.ru/get-devtools/1781765/c2a453956382e0fdfc958f3c4e32ed7740f03d4b/resource.tar.gz#test.test_yt_mode_enum_/results.txt" + } + ], + "test.test[yt_mode_map]": [ + { + "checksum": "67b8ad859a21d7f0c8203daa08194cf3", + "size": 21224, + "uri": "https://storage.yandex-team.ru/get-devtools/1936947/d770c9a45c5df4db61873fc48e1cb5961f774af6/resource.tar.gz#test.test_yt_mode_map_/results.txt" + } + ], + "test.test[yt_mode_no_ser]": [ + { + "checksum": "eeb1ca24bdc09529bd0a320965b3123d", + "size": 1241, + "uri": "https://storage.yandex-team.ru/get-devtools/1937492/9579ab43fa70f08e465aa7673b27a5da5460a75e/resource.tar.gz#test.test_yt_mode_no_ser_/results.txt" + } + ], + "test.test[yt_mode_plain]": [ + { + "checksum": "7321635f17c1f8fdb75d96bb2a3ce4d1", + "size": 1796, + "uri": "https://storage.yandex-team.ru/get-devtools/1937492/9579ab43fa70f08e465aa7673b27a5da5460a75e/resource.tar.gz#test.test_yt_mode_plain_/results.txt" + } + ], + "test.test[yt_mode_ser_pb]": [ + { + "checksum": "eeb1ca24bdc09529bd0a320965b3123d", + "size": 1241, + "uri": "https://storage.yandex-team.ru/get-devtools/1937492/9579ab43fa70f08e465aa7673b27a5da5460a75e/resource.tar.gz#test.test_yt_mode_ser_pb_/results.txt" + } + ], + "test.test[yt_mode_ser_yt]": [ + { + "checksum": "eeb1ca24bdc09529bd0a320965b3123d", + "size": 1241, + "uri": "https://storage.yandex-team.ru/get-devtools/1937492/9579ab43fa70f08e465aa7673b27a5da5460a75e/resource.tar.gz#test.test_yt_mode_ser_yt_/results.txt" + } + ], + "test.test[yt_mode_variant]": [ + { + "checksum": "de1dd8aeb5c695707a114866a6124ed8", + "size": 12323, + "uri": "https://storage.yandex-team.ru/get-devtools/1937492/9579ab43fa70f08e465aa7673b27a5da5460a75e/resource.tar.gz#test.test_yt_mode_variant_/results.txt" + } + ] +} diff --git a/ydb/library/yql/udfs/common/protobuf/test/canondata/test.test_recursion_fail_/extracted b/ydb/library/yql/udfs/common/protobuf/test/canondata/test.test_recursion_fail_/extracted new file mode 100644 index 0000000000..0b4b0d3a37 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/canondata/test.test_recursion_fail_/extracted @@ -0,0 +1,11 @@ +<tmp_path>/program.sql:<main>: Error: Type annotation + + <tmp_path>/program.sql:<main>:64:1: Error: At function: RemovePrefixMembers, At function: Unordered, At function: PersistableRepr, At function: OrderedSqlProject, At function: SqlProjectItem + SELECT $udf(TestField) FROM plato.Input; + ^ + <tmp_path>/program.sql:<main>:64:8: Error: At function: NamedApply, At function: Udf, At Protobuf.Parse + SELECT $udf(TestField) FROM plato.Input; + ^ + <tmp_path>/program.sql:<main>:64:8: Error: Failed to find UDF function: Protobuf.Parse, reason: Error: Module: Protobuf, function: Parse, error: (yexception) yql/library/protobuf_udf/type_builder.cpp:xxx: can't handle recursive types: Test + SELECT $udf(TestField) FROM plato.Input; + ^
\ No newline at end of file diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/CRYPTR-627.in b/ydb/library/yql/udfs/common/protobuf/test/cases/CRYPTR-627.in new file mode 100644 index 0000000000..4aef303a9c --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/CRYPTR-627.in @@ -0,0 +1,3 @@ +{"ProfileDump"="\n\x0F\x08\x8B\3\x15\xC6\x16[Z\x1A\5\x98\xA7\xA5\xD4\nj-\x08\xDC\xC6\xF5\x92\xDE\xAC\xD2\xFF\xD5\1\x10\x98\xA7\xA5\xD4\n\x1D\xC6\x16[Z%\xC6\x16[Z-\xC6\x16[Z1\0\0\0\0\0\0\xF0?@\2H\2";}; +{"ProfileDump"="\n\x0F\x08\xEB\1\x15\xED\xE8^Z\x1A\5\x98BAD_ROW_PROTO";}; +{"ProfileDump"="\n\x0F\x08\x8B\3\x15\3222\x94Z\x1A\5\xB6\xF2\xDB\xA5\2\n\x11\x08\x94\3\x15\3222\x94ZB\7Swift 2\n\x12\x08\x93\3\x15\3222\x94ZB\x08Wileyfox\n\x0B\x08\x94\4\x15\3222\x94Z\x1A\1\2j,\x08\x84\xCD\xAF\xF9\x9B\xC0\xF8\xFEv\x10\xB6\xF2\xDB\xA5\2\x1D\3222\x94Z%\3222\x94Z-\3222\x94Z1\0\0\0\0\0\0\x10@@\2H\2";};
\ No newline at end of file diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/CRYPTR-627.in.attr b/ydb/library/yql/udfs/common/protobuf/test/cases/CRYPTR-627.in.attr new file mode 100644 index 0000000000..6f11c91408 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/CRYPTR-627.in.attr @@ -0,0 +1 @@ +{schema=[{name=ProfileDump;type=string}]} diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/CRYPTR-627.sql b/ydb/library/yql/udfs/common/protobuf/test/cases/CRYPTR-627.sql new file mode 100644 index 0000000000..d4f8a432d4 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/CRYPTR-627.sql @@ -0,0 +1,11 @@ +/* syntax version 1 */ +/* + Should check is TryParse work correct for bad protobuf input data +*/ + +$config = @@{"name":"yabs.proto.Profile","meta":"eNqNVt1y21QQRrJs2Ws7ceS0UVwKoQyDgWla0h+GXHTGScw0M00T0hQuNYp0bGuiP86RkvoxeAMegeE5uOcF+ga8AHtWUiynypQr+6y+/Tm73+4eeG/C/bl9Lh7FPEqiR6lg3MK/E89n2yQyQH7O/j/4ywT9JPtqbEPdS1ggTGWrNmzvfL69wG3nmOL3EHHGC1hz7IRNIz4vPAhTJd0vq3T3c/DCXyu2hYgjngizRnr3qvRepufk7yE0nSgNE8aFqd0O388wxmNoRJOJBNcJvFUFPpaIIqBvQJul58JsfDyWb0H/LWXcwxvrhN6sQv+MkLnxHejndhjKSJqEHVRh9whifAWaG8TCbBFyowp5EMTGDrT9wJowO0k5xgCEvl+FfhX8lKGMH2GFs2nq29xyooi7wmyT2hdVamenGXRfIo0D6Nup6yUR99LAEmwasBCL1tlSUP/rSv3RNf5NDjeeQ8eOY99D1nhRKMzu7XU5Gy2AA8zJie1xowv1icdFggRVh5qxAg3BnCh0kXR4HjwF7Yx70Udg8nMy87iLlJNae9D5lXnTWcLct4dhUqF9RZ9z7T6009hFJluJFzC0oQz1wenCxv8ItGSzVmVTI5t/KLB6s2Puwsp5YF03neeSg67Rg6YnOc9EFmbX+BTWC4m1HK861GV8YhZdyTaSYIzHwWRfyE6RZwOAXWLFMpUGqRigBbYXItuVYXNXS3jKBu8V6Cw1ECrmHVrEphnr0KE2RIkVuM8WabQdWVzr3KPuV27Jg7EBbcF85mA085hhhMqwu6vu/HAdUWMR0YM3sDIis3todRymAUbUOBifjQ5f9T4xdKiNDg56itGB5snb0/2Xozfjniohp+Oj41/GvRoaXTkd7x8fHY1fH4zODo9f97TBPyq0y3MPFS7Y/Ar7YlGBG6GrlDMMPcUqWJe2n7JsxGl7Kvp/CO0YeVJ8yIaZWTlvJZ0QniCxC3j9djjx/wWsX+VstMr+G7e321IHlPXLYeof16dwseIC4w2nmSIOPWXYuS5Xq0Sg3xXQi4mKJMThm2VUydqUuIS5VD5MMPWdFDqc3SDMcnmIL8Yd6ErjkkEZ4Rrko4rUI9CLDfIhnbvGKtTQOq25rJZrUM+uKcurSNHgCFqLqVtlpA96PrpLhjZu3rA21Mnc3wo08u2wBq1slSz6q5J5/eWmqVESMKOMLq/RUQ4T2ZOpn3g4axmnXKnYHBq3wwtKkSo9xjNuCyY96pQ1nDZy99H8aS7lsVRbvE7TE5YIbJ7gepLy+sT2BRv8W4N6thjLhpTcEGSShL3LKt+S8cyKGdEtjy7lxujKz2IeOsyl8GmUzaKUCyuwxUUe/3UemsXUKeeqRXr3oO9EvpRG+Hyyk1lGGyANzFyCKRK+zDrJ2yRHlsWcuZ4jO8dJOO3H7g1x7ODek2ITemnovVsazytVtF4lIaYBB//3Zo+Us9OOuVY6PTGN0ump2S+dnpnrpdNz806RrSC0bNc17+J5jYptczn5sSIbdKdNWEtsPmWJ5UayxjTDTfq0AatTJL7l+KnI6b1ZVFFg0h1KjjmQssEZ1OS7BT3i86YoeMXclFddh+b1E0O2QZf6oyCZVmrWGLrLDxWkFFbFS1KXUX/I/mz5UTjNRCqJKmcJ4vB1JDcSBqfl5Mk81ksej6Ff9bTpgebbtPCLdkYJVv2y1ODr0JL+RGIHceZ0V3k8+BOXaPm1I6PDHMu5PbPFbNEYDnee7GQytWpd1vLcdbwQXfh+eSYi12R4lty5lzm+Tl8+g7u5MIhCpPmEM+zA0JlTAylVI3JPPVH+AxssP0w=", "lists": {"optional": false}}@@; + +$udf = Udf(Protobuf::TryParse, $config as TypeConfig); + +SELECT $udf(ProfileDump) AS Profile +FROM Input; diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-16111.in b/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-16111.in new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-16111.in diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-16111.sql b/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-16111.sql new file mode 100644 index 0000000000..6c35fc403c --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-16111.sql @@ -0,0 +1,64 @@ +/* +syntax='proto3'; + +import "yt/yt_proto/yt/formats/extension.proto"; + +message Test { + option (NYT.default_field_flags) = SERIALIZATION_YT; + + message InnerSubProto { + option (NYT.default_field_flags) = SERIALIZATION_YT; + int64 x = 1; + string y = 2; + + message TSubField { + repeated string List = 1; + } + + TSubField SubField = 3 [(NYT.flags) = SERIALIZATION_PROTOBUF]; + } + + map<string, InnerSubProto> dict = 10 [(NYT.flags) = MAP_AS_DICT]; +} +*/ + +$config = @@{ + "name": "Test", + "format": "json", + "skip": 0, + "lists": { + "optional": false + }, + "meta": "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", + "view": { + "recursion": "bytes", + "enum": "number", + "yt_mode": true + } +} +@@; + +$udfParse = Udf(Protobuf::Parse, $config as TypeConfig); +$udfSerialize = Udf(Protobuf::Serialize, $config as TypeConfig); + +$data = @@ +{ + "dict": [ + { + "key": "key2", + "value": { + "x": 23, + "y": "yy", + "SubField": {"List": ["s1"]} + } + } + ] +} +@@; + +SELECT + $data, + $udfParse($data), + $udfSerialize($udfParse($data)), + Ensure("Success", StablePickle($udfParse($data)) == StablePickle($udfParse($udfSerialize($udfParse($data)))), "Fail") +; diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-3381.in b/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-3381.in new file mode 100644 index 0000000000..f70c4566f9 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-3381.in @@ -0,0 +1,3 @@ +{"ProfileDump"="\n\x0F\x08\x8B\3\x15\xC6\x16[Z\x1A\5\x98\xA7\xA5\xD4\nj-\x08\xDC\xC6\xF5\x92\xDE\xAC\xD2\xFF\xD5\1\x10\x98\xA7\xA5\xD4\n\x1D\xC6\x16[Z%\xC6\x16[Z-\xC6\x16[Z1\0\0\0\0\0\0\xF0?@\2H\2";}; +{"ProfileDump"="\n\x0F\x08\xEB\1\x15\xED\xE8^Z\x1A\5\x99\xE5\xEB\x82\x0F\nH\x08\xDD\2\x15\xE0\xC3\xAAZ\"\7\x08\x99\1\x10\xE0\xC5\x08\"\7\x08\xA2P\x10\xE0\xC5\x08\"\7\x08\x9B\1\x10\xE0\xC5\x08\"\7\x08\x9A\1\x10\xE0\xC5\x08\"\7\x08\x9D\1\x10\xE0\xC5\x08\"\7\x08\x9E\1\x10\xE0\xC5\x08\"\x08\x08\xEE\x9C\7\x10\xE0\xC5\x08\n\x0F\x08\xEB\1\x15\x0BN_Z\x1A\5\xB7\xD8\xE6\xFF\x0E\n\x0B\x08\xA6\2\025fG_Z\x1A\1\7\n\x0F\x08\xEB\1\x15= _Z\x1A\5\xE8\xFD\xBE\xFF\x0E\n\x0B\x08\xA5\3\x15\xE0\xC3\xAAZ\x1A\1F\n\x0F\x08\xEB\1\025b#\xA7Z\x1A\5\xEA\xA5\x8F\xBB\7J\x0C\x08\4\x15\x8E\x83\xA8Z\x1A\3\xD9\xA1\x17";}; +{"ProfileDump"="\n\x0F\x08\x8B\3\x15\3222\x94Z\x1A\5\xB6\xF2\xDB\xA5\2\n\x11\x08\x94\3\x15\3222\x94ZB\7Swift 2\n\x12\x08\x93\3\x15\3222\x94ZB\x08Wileyfox\n\x0B\x08\x94\4\x15\3222\x94Z\x1A\1\2j,\x08\x84\xCD\xAF\xF9\x9B\xC0\xF8\xFEv\x10\xB6\xF2\xDB\xA5\2\x1D\3222\x94Z%\3222\x94Z-\3222\x94Z1\0\0\0\0\0\0\x10@@\2H\2";};
\ No newline at end of file diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-3381.in.attr b/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-3381.in.attr new file mode 100644 index 0000000000..6f11c91408 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-3381.in.attr @@ -0,0 +1 @@ +{schema=[{name=ProfileDump;type=string}]} diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-3381.sql b/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-3381.sql new file mode 100644 index 0000000000..d8ee0b931f --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-3381.sql @@ -0,0 +1,7 @@ +/* syntax version 1 */ +$config = @@{"name":"yabs.proto.Profile","meta":"eNqNVt1y21QQRrJs2Ws7ceS0UVwKoQyDgWla0h+GXHTGScw0M00T0hQuNYp0bGuiP86RkvoxeAMegeE5uOcF+ga8AHtWUiynypQr+6y+/Tm73+4eeG/C/bl9Lh7FPEqiR6lg3MK/E89n2yQyQH7O/j/4ywT9JPtqbEPdS1ggTGWrNmzvfL69wG3nmOL3EHHGC1hz7IRNIz4vPAhTJd0vq3T3c/DCXyu2hYgjngizRnr3qvRepufk7yE0nSgNE8aFqd0O388wxmNoRJOJBNcJvFUFPpaIIqBvQJul58JsfDyWb0H/LWXcwxvrhN6sQv+MkLnxHejndhjKSJqEHVRh9whifAWaG8TCbBFyowp5EMTGDrT9wJowO0k5xgCEvl+FfhX8lKGMH2GFs2nq29xyooi7wmyT2hdVamenGXRfIo0D6Nup6yUR99LAEmwasBCL1tlSUP/rSv3RNf5NDjeeQ8eOY99D1nhRKMzu7XU5Gy2AA8zJie1xowv1icdFggRVh5qxAg3BnCh0kXR4HjwF7Yx70Udg8nMy87iLlJNae9D5lXnTWcLct4dhUqF9RZ9z7T6009hFJluJFzC0oQz1wenCxv8ItGSzVmVTI5t/KLB6s2Puwsp5YF03neeSg67Rg6YnOc9EFmbX+BTWC4m1HK861GV8YhZdyTaSYIzHwWRfyE6RZwOAXWLFMpUGqRigBbYXItuVYXNXS3jKBu8V6Cw1ECrmHVrEphnr0KE2RIkVuM8WabQdWVzr3KPuV27Jg7EBbcF85mA085hhhMqwu6vu/HAdUWMR0YM3sDIis3todRymAUbUOBifjQ5f9T4xdKiNDg56itGB5snb0/2Xozfjniohp+Oj41/GvRoaXTkd7x8fHY1fH4zODo9f97TBPyq0y3MPFS7Y/Ar7YlGBG6GrlDMMPcUqWJe2n7JsxGl7Kvp/CO0YeVJ8yIaZWTlvJZ0QniCxC3j9djjx/wWsX+VstMr+G7e321IHlPXLYeof16dwseIC4w2nmSIOPWXYuS5Xq0Sg3xXQi4mKJMThm2VUydqUuIS5VD5MMPWdFDqc3SDMcnmIL8Yd6ErjkkEZ4Rrko4rUI9CLDfIhnbvGKtTQOq25rJZrUM+uKcurSNHgCFqLqVtlpA96PrpLhjZu3rA21Mnc3wo08u2wBq1slSz6q5J5/eWmqVESMKOMLq/RUQ4T2ZOpn3g4axmnXKnYHBq3wwtKkSo9xjNuCyY96pQ1nDZy99H8aS7lsVRbvE7TE5YIbJ7gepLy+sT2BRv8W4N6thjLhpTcEGSShL3LKt+S8cyKGdEtjy7lxujKz2IeOsyl8GmUzaKUCyuwxUUe/3UemsXUKeeqRXr3oO9EvpRG+Hyyk1lGGyANzFyCKRK+zDrJ2yRHlsWcuZ4jO8dJOO3H7g1x7ODek2ITemnovVsazytVtF4lIaYBB//3Zo+Us9OOuVY6PTGN0ump2S+dnpnrpdNz806RrSC0bNc17+J5jYptczn5sSIbdKdNWEtsPmWJ5UayxjTDTfq0AatTJL7l+KnI6b1ZVFFg0h1KjjmQssEZ1OS7BT3i86YoeMXclFddh+b1E0O2QZf6oyCZVmrWGLrLDxWkFFbFS1KXUX/I/mz5UTjNRCqJKmcJ4vB1JDcSBqfl5Mk81ksej6Ff9bTpgebbtPCLdkYJVv2y1ODr0JL+RGIHceZ0V3k8+BOXaPm1I6PDHMu5PbPFbNEYDnee7GQytWpd1vLcdbwQXfh+eSYi12R4lty5lzm+Tl8+g7u5MIhCpPmEM+zA0JlTAylVI3JPPVH+AxssP0w=", "lists": {"optional": false}}@@; + +$udf = Udf(Protobuf::Parse, $config as TypeConfig); + +SELECT $udf(ProfileDump) AS Profile +FROM Input; diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-6706.in b/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-6706.in new file mode 100644 index 0000000000..17ca40800d --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-6706.in @@ -0,0 +1,2 @@ +{"doc"="\n\x0Fhttp://agbz.ru/\x10\2\x18\x84\xFB\x89\xC6\5\"\4fake";}; +{"doc"="\nSO REALLY BAD BAD BAD PROTO ROW\n\xBF\2";}; diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-6706.in.attr b/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-6706.in.attr new file mode 100644 index 0000000000..8838f04a44 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-6706.in.attr @@ -0,0 +1 @@ +{schema=[{name=doc;type=string}]} diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-6706.sql b/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-6706.sql new file mode 100644 index 0000000000..1989d5b03f --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-6706.sql @@ -0,0 +1,17 @@ +/* syntax version 1 */ +/* + Should check is TryParse work correct for proto with required fields + Can't parse message of type "NNewsStorageProtocol.TRawNewsDoc" because it is missing required fields: Url, Status, FetchTime, FetchHost +*/ + +$config = @@{ + "skip": 0, + "meta": "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", + "name": "TRawNewsDoc", + "format": "protobin" +}@@; + +$udf = Udf(Protobuf::TryParse, $config as TypeConfig); + +SELECT $udf(doc) AS parsed +FROM Input; diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-8307.in b/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-8307.in new file mode 100644 index 0000000000..6c7f0be49c --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-8307.in @@ -0,0 +1,4 @@ +{"TestField"=""}; +{"TestField"="a: 1 b: 2 c: \"hello\""}; +{"TestField"="a: 1 c: \"hello\""}; +{"TestField"="d: [1, 2, 3, 4]"}; diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-8307.in.attr b/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-8307.in.attr new file mode 100644 index 0000000000..f10d440a23 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-8307.in.attr @@ -0,0 +1 @@ +{schema=[{name=TestField;type=string}]} diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-8307.sql b/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-8307.sql new file mode 100644 index 0000000000..80604f1ad3 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/YQL-8307.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ + +$config = @@{"name":"Test","syntax":{"aware":true},"lists":{"optional":false},"format":"prototext","meta":"H4sIAAAAAAAAA+NK5FLOKs3L1i/TzU3MNjYu0y8oyi/Jjy9JLS7RBxF6YL6SERdLCJAnxMnFmCjBqMCowQpiJkkwAZnMIGayBDOQyQlipkiwKDBrsCaxgbUaAwBc3r8mYwAAAA=="}@@; + +$udf = Udf(Protobuf::Parse, $config as TypeConfig); +$udf2 = Udf(Protobuf::Serialize, $config as TypeConfig); + +SELECT $udf($udf2($udf(TestField))) AS Profile +FROM plato.Input; + diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_bytes.in b/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_bytes.in new file mode 100644 index 0000000000..b6dd409ad4 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_bytes.in @@ -0,0 +1 @@ +{"TestField"="{\"inner\":{\"i\":{\"a\":\"hello\"}},\"test\":{\"inner\":{\"i\":{\"a\":\"bye\"}}}}"}; diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_bytes.in.attr b/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_bytes.in.attr new file mode 100644 index 0000000000..f10d440a23 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_bytes.in.attr @@ -0,0 +1 @@ +{schema=[{name=TestField;type=string}]} diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_bytes.sql b/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_bytes.sql new file mode 100644 index 0000000000..3ee0813dc4 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_bytes.sql @@ -0,0 +1,35 @@ +/* +syntax='proto3'; + +message Test { + message InnerInner { + string a = 1; + } + message Inner { + InnerInner i = 1; + } + Inner inner = 1; + Test test = 2; +} +*/ + +$config = @@{ + "name": "Test", + "format": "json", + "skip": 0, + "lists": { + "optional": false + }, + "meta": "eNrjWsjIxV2UmlxapFdQlF+Sr9TJyMUSklpcIqTIxZqZl5daJMGowKjBbcStBxLV8wQJBUFkhCS5WEqAghJMYBWsYBVBYCEpKS4usFIwIcTDxZgINocziDFRSp2LFSIsx8WYCTVeAMl4iB2MmUlsYCcZAwC/Qiqb", + "view": { + "recursion": "bytes", + "enum": "number" + } +}@@; + +$udfPar = Udf(Protobuf::Parse, $config as TypeConfig); +$udfSer = Udf(Protobuf::Serialize, $config as TypeConfig); + +SELECT TestField, Ensure("Success", $udfPar(TestField) == $udfPar($udfSer($udfPar(TestField))), "Fail") +FROM plato.Input; + diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_fail.cfg b/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_fail.cfg new file mode 100644 index 0000000000..d7d756c826 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_fail.cfg @@ -0,0 +1,2 @@ +xfail +in plato.Input recursion_fail.in diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_fail.in b/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_fail.in new file mode 100644 index 0000000000..b6dd409ad4 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_fail.in @@ -0,0 +1 @@ +{"TestField"="{\"inner\":{\"i\":{\"a\":\"hello\"}},\"test\":{\"inner\":{\"i\":{\"a\":\"bye\"}}}}"}; diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_fail.in.attr b/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_fail.in.attr new file mode 100644 index 0000000000..f10d440a23 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_fail.in.attr @@ -0,0 +1 @@ +{schema=[{name=TestField;type=string}]} diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_fail.sql b/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_fail.sql new file mode 100644 index 0000000000..e274c92e01 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_fail.sql @@ -0,0 +1,32 @@ +/* +syntax='proto3'; + +message Test { + message InnerInner { + string a = 1; + } + message Inner { + InnerInner i = 1; + } + Inner inner = 1; + Test test = 2; +} +*/ + +$config = @@{ + "name": "Test", + "format": "json", + "skip": 0, + "lists": { + "optional": false + }, + "meta": "eNrjWsjIxV2UmlxapFdQlF+Sr9TJyMUSklpcIqTIxZqZl5daJMGowKjBbcStBxLV8wQJBUFkhCS5WEqAghJMYBWsYBVBYCEpKS4usFIwIcTDxZgINocziDFRSp2LFSIsx8WYCTVeAMl4iB2MmUlsYCcZAwC/Qiqb", + "view": { + "recursion": "fail", + "enum": "number" + } +}@@; + +$udf = Udf(Protobuf::Parse, $config as TypeConfig); + +SELECT $udf(TestField) FROM plato.Input; diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_ignore.in b/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_ignore.in new file mode 100644 index 0000000000..b6dd409ad4 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_ignore.in @@ -0,0 +1 @@ +{"TestField"="{\"inner\":{\"i\":{\"a\":\"hello\"}},\"test\":{\"inner\":{\"i\":{\"a\":\"bye\"}}}}"}; diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_ignore.in.attr b/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_ignore.in.attr new file mode 100644 index 0000000000..f10d440a23 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_ignore.in.attr @@ -0,0 +1 @@ +{schema=[{name=TestField;type=string}]} diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_ignore.sql b/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_ignore.sql new file mode 100644 index 0000000000..2f57eb18d1 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/recursion_ignore.sql @@ -0,0 +1,35 @@ +/* +syntax='proto3'; + +message Test { + message InnerInner { + string a = 1; + } + message Inner { + InnerInner i = 1; + } + Inner inner = 1; + Test test = 2; +} +*/ + +$config = @@{ + "name": "Test", + "format": "json", + "skip": 0, + "lists": { + "optional": false + }, + "meta": "eNrjWsjIxV2UmlxapFdQlF+Sr9TJyMUSklpcIqTIxZqZl5daJMGowKjBbcStBxLV8wQJBUFkhCS5WEqAghJMYBWsYBVBYCEpKS4usFIwIcTDxZgINocziDFRSp2LFSIsx8WYCTVeAMl4iB2MmUlsYCcZAwC/Qiqb", + "view": { + "recursion": "ignore", + "enum": "number" + } +}@@; + +$udfPar = Udf(Protobuf::Parse, $config as TypeConfig); +$udfSer = Udf(Protobuf::Serialize, $config as TypeConfig); + +SELECT TestField, Ensure("Success", $udfPar(TestField) == $udfPar($udfSer($udfPar(TestField))), "Fail") +FROM plato.Input; + diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/syntax_aware_empty_nested_message.in b/ydb/library/yql/udfs/common/protobuf/test/cases/syntax_aware_empty_nested_message.in new file mode 100644 index 0000000000..1c32f6a142 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/syntax_aware_empty_nested_message.in @@ -0,0 +1,4 @@ +{"TestField"="{}"}; +{"TestField"="{\"inner\":{}}"}; +{"TestField"="{\"inner\":{\"i\":{}}"}; +{"TestField"="{\"inner\":{\"i\":{\"a\":\"\"}}"}; diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/syntax_aware_empty_nested_message.in.attr b/ydb/library/yql/udfs/common/protobuf/test/cases/syntax_aware_empty_nested_message.in.attr new file mode 100644 index 0000000000..f10d440a23 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/syntax_aware_empty_nested_message.in.attr @@ -0,0 +1 @@ +{schema=[{name=TestField;type=string}]} diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/syntax_aware_empty_nested_message.sql b/ydb/library/yql/udfs/common/protobuf/test/cases/syntax_aware_empty_nested_message.sql new file mode 100644 index 0000000000..d24aa384d9 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/syntax_aware_empty_nested_message.sql @@ -0,0 +1,23 @@ +/* syntax version 1 */ + +/* +syntax='proto3'; + +message Test { + message InnerInner { + string a = 1; + } + message Inner { + InnerInner i = 1; + } + Inner inner = 1; +} +*/ + +$config = @@{"name":"Test","syntax":{"aware":true},"lists":{"optional":false},"format":"json","meta":"H4sIAAAAAAAAA+PqZuSSyyrNy9Yv081NzDY2LtMvKMovydcvSS0u0QMzlRK5WEKAPCEpLtbMvLzUIglGBUYNbiNuPZConidISEqciwvMABNCnFyMiWBVnFIqXKwQMWkuxkyoTgEknWAiiQ1skzEAZSMFuY4AAAA="}@@; + +$udf = Udf(Protobuf::Parse, $config as TypeConfig); + +SELECT $udf(TestField) AS Profile +FROM plato.Input; + diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/syntax_aware_nested_enum_string_value.in b/ydb/library/yql/udfs/common/protobuf/test/cases/syntax_aware_nested_enum_string_value.in new file mode 100644 index 0000000000..2487eb8da3 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/syntax_aware_nested_enum_string_value.in @@ -0,0 +1,4 @@ +{"TestField"="{}"}; +{"TestField"="{\"inner\": {\"l\": 25}}"}; +{"TestField"="{\"inner\": {\"l\": \"B\"}}"}; +{"TestField"="{\"inner\": {\"alphabet\": [0, 1, 25]}"}; diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/syntax_aware_nested_enum_string_value.in.attr b/ydb/library/yql/udfs/common/protobuf/test/cases/syntax_aware_nested_enum_string_value.in.attr new file mode 100644 index 0000000000..f10d440a23 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/syntax_aware_nested_enum_string_value.in.attr @@ -0,0 +1 @@ +{schema=[{name=TestField;type=string}]} diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/syntax_aware_nested_enum_string_value.sql b/ydb/library/yql/udfs/common/protobuf/test/cases/syntax_aware_nested_enum_string_value.sql new file mode 100644 index 0000000000..f869d0a3dd --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/syntax_aware_nested_enum_string_value.sql @@ -0,0 +1,24 @@ +/* syntax version 1 */ + +/* +message Test { + enum Letters { + A = 0; + B = 1; + Z = 25; + } + message Inner { + repeated Letters alphabet = 1; + Letters l = 2; + } + Inner inner = 1; +} +*/ + +$config = @@{"name":"Test","view":{"enum":"full_name"},"syntax":{"aware":true},"lists":{"optional":false},"format":"json","meta":"H4sIAAAAAAAAA+PayMgll1Wal61fppubmG1sXKZfUJRfkq9fklpcogdmKrUxcrGEALlCUlysmXl5qUUSjAqMGtxG3HogUT1PkJCUExcrmCEkz8WRmFOQkZiUWgJUx6zBZ8QLUeeTWlKSWlQsJMHFmCPBBDQBXUZJjosdpoiVi9FRgAFEOQkwgqgoAckkNrB7jAFNZK4ztAAAAA=="}@@; + +$udf = Udf(Protobuf::Parse, $config as TypeConfig); + +SELECT $udf(TestField) AS Profile +FROM plato.Input; + diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_any.in b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_any.in new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_any.in diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_any.sql b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_any.sql new file mode 100644 index 0000000000..ccc9af6f30 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_any.sql @@ -0,0 +1,43 @@ +/* +syntax = 'proto3'; + +import "yt/yt_proto/yt/formats/extension.proto"; + +message Test { + bytes Any = 1 [(NYT.flags) = ANY]; + string x = 2; +} +*/ + +$config = @@{ + "name": "Test", + "format": "json", + "skip": 0, + "lists": { + "optional": false + }, + "meta": "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", + "view": { + "recursion": "fail", + "enum": "number", + "yt_mode": true + } +} +@@; + +$udfParse = Udf(Protobuf::Parse, $config as TypeConfig); +$udfSerialize = Udf(Protobuf::Serialize, $config as TypeConfig); + +$data = @@ +{ + "Any": "<x=y>{a=1;b=c}", + "x": "aaa" +} +@@; + +SELECT + $data, + $udfParse($data), + $udfSerialize($udfParse($data)), + Ensure("Success", StablePickle($udfParse($data)) == StablePickle($udfParse($udfSerialize($udfParse($data)))), "Fail") +; diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_enum.in b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_enum.in new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_enum.in diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_enum.sql b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_enum.sql new file mode 100644 index 0000000000..f3b2935cc6 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_enum.sql @@ -0,0 +1,50 @@ +/* +import "yt/yt_proto/yt/formats/extension.proto"; + +message Test { + enum Color + { + WHITE = 0; + BLUE = 1; + RED = -1; + } + + required Color ColorYtIntField = 1 [(NYT.flags) = ENUM_INT]; + required Color ColorYtStringField = 2 [(NYT.flags) = ENUM_STRING]; + required Color ColorField = 3; +} +*/ + +$config = @@{ + "name": "Test", + "format": "json", + "skip": 0, + "lists": { + "optional": false + }, + "meta": "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", + "view": { + "recursion": "fail", + "enum": "number", + "yt_mode": true + } +} +@@; + +$udfParse = Udf(Protobuf::Parse, $config as TypeConfig); +$udfSerialize = Udf(Protobuf::Serialize, $config as TypeConfig); + +$data = @@ +{ + "ColorYtIntField": 1, + "ColorYtStringField": "RED", + "ColorField": 0 +} +@@; + +SELECT + $data, + $udfParse($data), + $udfSerialize($udfParse($data)), + Ensure("Success", StablePickle($udfParse($data)) == StablePickle($udfParse($udfSerialize($udfParse($data)))), "Fail") +; diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_map.in b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_map.in new file mode 100644 index 0000000000..db7b187bc3 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_map.in @@ -0,0 +1 @@ +{"TestField"="{\"dict1\":[{\"key\":\"k1\",\"value\":{\"a\":\"1\"}}],\"dict2\":[{\"key\":\"k2\",\"value\":{\"a\":\"2\"}}],\"dict3\":[{\"key\":\"k3\",\"value\":{\"a\":\"3\"}}],\"dict4\":[{\"key\":\"k4\",\"value\":{\"a\":\"4\"}}],\"dict5\":[{\"key\":\"k5\",\"value\":\"v5\"}],\"dict6\":[{\"key\":\"k6\",\"value\":\"v6\"}],\"dict7\":[{\"key\":\"k7\",\"value\":\"v7\"}],\"dict8\":[{\"key\":\"k8\",\"value\":\"v8\"}]}"}; diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_map.in.attr b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_map.in.attr new file mode 100644 index 0000000000..f10d440a23 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_map.in.attr @@ -0,0 +1 @@ +{schema=[{name=TestField;type=string}]} diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_map.sql b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_map.sql new file mode 100644 index 0000000000..b3c7377390 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_map.sql @@ -0,0 +1,47 @@ +/* +syntax='proto3'; + +import "yt/yt_proto/yt/formats/extension.proto"; + +message Test { + option (NYT.default_field_flags) = SERIALIZATION_YT; + + message Inner { + string a = 1; + } + map<string, Inner> dict1 = 1 [(NYT.flags) = MAP_AS_DICT]; + map<string, Inner> dict2 = 2 [(NYT.flags) = MAP_AS_OPTIONAL_DICT]; + map<string, Inner> dict3 = 3 [(NYT.flags) = MAP_AS_LIST_OF_STRUCTS_LEGACY]; + map<string, Inner> dict4 = 4 [(NYT.flags) = MAP_AS_LIST_OF_STRUCTS]; + map<string, string> dict5 = 5 [(NYT.flags) = MAP_AS_DICT]; + map<string, string> dict6 = 6 [(NYT.flags) = MAP_AS_OPTIONAL_DICT]; + map<string, string> dict7 = 7 [(NYT.flags) = MAP_AS_LIST_OF_STRUCTS_LEGACY]; + map<string, string> dict8 = 8 [(NYT.flags) = MAP_AS_LIST_OF_STRUCTS]; +} +*/ + +$config = @@{ + "name": "Test", + "format": "json", + "skip": 0, + "lists": { + "optional": false + }, + "meta": "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", + "view": { + "recursion": "bytes", + "enum": "number", + "yt_mode": true + } +} +@@; + +$udfParse = Udf(Protobuf::Parse, $config as TypeConfig); +$udfSerialize = Udf(Protobuf::Serialize, $config as TypeConfig); + +SELECT + TestField, + $udfParse(TestField), + $udfSerialize($udfParse(TestField)), + Ensure("Success", StablePickle($udfParse(TestField)) == StablePickle($udfParse($udfSerialize($udfParse(TestField)))), "Fail"), +FROM plato.Input; diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_no_ser.in b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_no_ser.in new file mode 100644 index 0000000000..b6dd409ad4 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_no_ser.in @@ -0,0 +1 @@ +{"TestField"="{\"inner\":{\"i\":{\"a\":\"hello\"}},\"test\":{\"inner\":{\"i\":{\"a\":\"bye\"}}}}"}; diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_no_ser.in.attr b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_no_ser.in.attr new file mode 100644 index 0000000000..f10d440a23 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_no_ser.in.attr @@ -0,0 +1 @@ +{schema=[{name=TestField;type=string}]} diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_no_ser.sql b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_no_ser.sql new file mode 100644 index 0000000000..d75aa4af2f --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_no_ser.sql @@ -0,0 +1,36 @@ +/* +syntax='proto3'; + +message Test { + message InnerInner { + string a = 1; + } + message Inner { + InnerInner i = 1; + } + Inner inner = 1; + Test test = 2; +} +*/ + +$config = @@{ + "name": "Test", + "format": "json", + "skip": 0, + "lists": { + "optional": false + }, + "meta": "eNrjWsjIxV2UmlxapFdQlF+Sr9TJyMUSklpcIqTIxZqZl5daJMGowKjBbcStBxLV8wQJBUFkhCS5WEqAghJMYBWsYBVBYCEpKS4usFIwIcTDxZgINocziDFRSp2LFSIsx8WYCTVeAMl4iB2MmUlsYCcZAwC/Qiqb", + "view": { + "recursion": "bytes", + "enum": "number", + "yt_mode": true + } +}@@; + +$udfPar = Udf(Protobuf::Parse, $config as TypeConfig); +$udfSer = Udf(Protobuf::Serialize, $config as TypeConfig); + +SELECT TestField, Ensure("Success", $udfPar(TestField) == $udfPar($udfSer($udfPar(TestField))), "Fail") +FROM plato.Input; + diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_plain.in b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_plain.in new file mode 100644 index 0000000000..f397ecd77c --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_plain.in @@ -0,0 +1 @@ +{"TestField"="{\"inner\":{\"i\":{\"a\":\"hello\"}}}"}; diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_plain.in.attr b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_plain.in.attr new file mode 100644 index 0000000000..f10d440a23 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_plain.in.attr @@ -0,0 +1 @@ +{schema=[{name=TestField;type=string}]} diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_plain.sql b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_plain.sql new file mode 100644 index 0000000000..87e9fc6bd2 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_plain.sql @@ -0,0 +1,113 @@ +/* +syntax='proto3'; + +message Test { + message InnerInner { + string a = 1; + } + message Inner { + InnerInner i = 1; + } + Inner inner = 1; +} +*/ + +$configNO = @@{ + "name": "Test", + "format": "json", + "skip": 0, + "lists": { + "optional": false + }, + "meta": "eNrjamXk4i7ISczM0ysoyi/JV8rjYglJLS4RUuRizczLSy2SYFRg1OA24tYDiep5goSCIDJSUlxcYD6YEOLhYkwEK+YMYkyUUudihQjLcTFmQs0QQDIDYhBjZhIb2FpjAIm1I9Q=", + "view": { + "recursion": "bytes", + "enum": "number", + "yt_mode": true + } +} +@@; + +/* +syntax='proto3'; + +import "yt/yt_proto/yt/formats/extension.proto"; + +message Test { + option (NYT.default_field_flags) = SERIALIZATION_YT; + message InnerInner { + option (NYT.default_field_flags) = SERIALIZATION_YT; + string a = 1; + } + message Inner { + option (NYT.default_field_flags) = SERIALIZATION_YT; + InnerInner i = 1; + } + Inner inner = 1; +} +*/ + +$configYT = @@{ + "name": "Test", + "format": "json", + "skip": 0, + "lists": { + "optional": false + }, + "meta": "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", + "view": { + "recursion": "bytes", + "enum": "number", + "yt_mode": true + } +} +@@; + +/* +syntax='proto3'; + +import "yt/yt_proto/yt/formats/extension.proto"; + +message Test { + option (NYT.default_field_flags) = SERIALIZATION_PROTOBUF; + message InnerInner { + option (NYT.default_field_flags) = SERIALIZATION_PROTOBUF; + string a = 1; + } + message Inner { + option (NYT.default_field_flags) = SERIALIZATION_PROTOBUF; + InnerInner i = 1; + } + Inner inner = 1; +} +*/ + +$configPB = @@{ + "name": "Test", + "format": "json", + "skip": 0, + "lists": { + "optional": false + }, + "meta": "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", + "view": { + "recursion": "bytes", + "enum": "number", + "yt_mode": true + } +} +@@; + +$udfParNO = Udf(Protobuf::Parse, $configNO as TypeConfig); +$udfSerNO = Udf(Protobuf::Serialize, $configNO as TypeConfig); +$udfParYT = Udf(Protobuf::Parse, $configYT as TypeConfig); +$udfSerYT = Udf(Protobuf::Serialize, $configYT as TypeConfig); +$udfParPB = Udf(Protobuf::Parse, $configPB as TypeConfig); +$udfSerPB = Udf(Protobuf::Serialize, $configPB as TypeConfig); + +SELECT TestField, + Ensure("Success", $udfParNO(TestField) == $udfParNO($udfSerNO($udfParNO(TestField))), "Fail"), + Ensure("Success", $udfParYT(TestField) == $udfParYT($udfSerYT($udfParYT(TestField))), "Fail"), + Ensure("Success", $udfParPB(TestField) == $udfParPB($udfSerPB($udfParPB(TestField))), "Fail") +FROM plato.Input; + diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_ser_pb.in b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_ser_pb.in new file mode 100644 index 0000000000..b6dd409ad4 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_ser_pb.in @@ -0,0 +1 @@ +{"TestField"="{\"inner\":{\"i\":{\"a\":\"hello\"}},\"test\":{\"inner\":{\"i\":{\"a\":\"bye\"}}}}"}; diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_ser_pb.in.attr b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_ser_pb.in.attr new file mode 100644 index 0000000000..f10d440a23 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_ser_pb.in.attr @@ -0,0 +1 @@ +{schema=[{name=TestField;type=string}]} diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_ser_pb.sql b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_ser_pb.sql new file mode 100644 index 0000000000..35945ffe7a --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_ser_pb.sql @@ -0,0 +1,40 @@ +/* +syntax='proto3'; + +import "yt/yt_proto/yt/formats/extension.proto"; + +message Test { + option (NYT.default_field_flags) = SERIALIZATION_PROTOBUF; + message InnerInner { + string a = 1; + } + message Inner { + InnerInner i = 1; + } + Inner inner = 1; + Test test = 2; +} +*/ + + +$config = @@{ + "name": "Test", + "format": "json", + "skip": 0, + "lists": { + "optional": false + }, + "meta": "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", + "view": { + "recursion": "bytes", + "enum": "number", + "yt_mode": true + } +}@@; + +$udfPar = Udf(Protobuf::Parse, $config as TypeConfig); +$udfSer = Udf(Protobuf::Serialize, $config as TypeConfig); + +SELECT TestField, Ensure("Success", $udfPar(TestField) == $udfPar($udfSer($udfPar(TestField))), "Fail") +FROM plato.Input; + diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_ser_yt.in b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_ser_yt.in new file mode 100644 index 0000000000..b6dd409ad4 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_ser_yt.in @@ -0,0 +1 @@ +{"TestField"="{\"inner\":{\"i\":{\"a\":\"hello\"}},\"test\":{\"inner\":{\"i\":{\"a\":\"bye\"}}}}"}; diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_ser_yt.in.attr b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_ser_yt.in.attr new file mode 100644 index 0000000000..f10d440a23 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_ser_yt.in.attr @@ -0,0 +1 @@ +{schema=[{name=TestField;type=string}]} diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_ser_yt.sql b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_ser_yt.sql new file mode 100644 index 0000000000..42312716e6 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_ser_yt.sql @@ -0,0 +1,39 @@ +/* +syntax='proto3'; + +import "yt/yt_proto/yt/formats/extension.proto"; + +message Test { + option (NYT.default_field_flags) = SERIALIZATION_YT; + message InnerInner { + string a = 1; + } + message Inner { + InnerInner i = 1; + } + Inner inner = 1; + Test test = 2; +} +*/ + +$config = @@{ + "name": "Test", + "format": "json", + "skip": 0, + "lists": { + "optional": false + }, + "meta": "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", + "view": { + "recursion": "bytes", + "enum": "number", + "yt_mode": true + } +}@@; + +$udfPar = Udf(Protobuf::Parse, $config as TypeConfig); +$udfSer = Udf(Protobuf::Serialize, $config as TypeConfig); + +SELECT TestField, Ensure("Success", $udfPar(TestField) == $udfPar($udfSer($udfPar(TestField))), "Fail") +FROM plato.Input; + diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_variant.in b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_variant.in new file mode 100644 index 0000000000..6ab446801f --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_variant.in @@ -0,0 +1,4 @@ +{"TestField"="{\"Name\":\"n1\"}"}; +{"TestField"="{\"Name\":\"n1\",\"a\":\"a1\"}"}; +{"TestField"="{\"Name\":\"n1\",\"test\":{\"Name\":\"n2\",\"a\":\"a2\"}}"}; +{"TestField"="{\"Name\":\"n1\",\"test\":{\"Name\":\"n2\",\"test\":{\"Name\":\"n3\"}}}"}; diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_variant.in.attr b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_variant.in.attr new file mode 100644 index 0000000000..f10d440a23 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_variant.in.attr @@ -0,0 +1 @@ +{schema=[{name=TestField;type=string}]} diff --git a/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_variant.sql b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_variant.sql new file mode 100644 index 0000000000..7c75b1cea5 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/cases/yt_mode_variant.sql @@ -0,0 +1,82 @@ +/* +syntax='proto3'; + +import "yt/yt_proto/yt/formats/extension.proto"; + +message Test { + option (NYT.default_field_flags) = SERIALIZATION_YT; + option (NYT.default_oneof_flags) = VARIANT; + + oneof Var { + Test test = 1 [(NYT.column_name) = "_test"]; + string a = 2; + } + string Name = 3 [(NYT.column_name) = "name"];; +} +*/ + +$configVar = @@{ + "name": "Test", + "format": "json", + "skip": 0, + "lists": { + "optional": false + }, + "meta": "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", + "view": { + "recursion": "bytes", + "enum": "number", + "yt_mode": true + } +} +@@; + +/* +syntax='proto3'; + +import "yt/yt_proto/yt/formats/extension.proto"; + +message Test { + option (NYT.default_field_flags) = SERIALIZATION_YT; + option (NYT.default_oneof_flags) = SEPARATE_FIELDS; + + oneof Var { + Test test = 1 [(NYT.column_name) = "_test"]; + string a = 2; + } + string Name = 3 [(NYT.column_name) = "name"];; +} +*/ + +$configSeparate = @@{ + "name": "Test", + "format": "json", + "skip": 0, + "lists": { + "optional": false + }, + "meta": "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", + "view": { + "recursion": "bytes", + "enum": "number", + "yt_mode": true + } +} +@@; + +$udfParseVar = Udf(Protobuf::Parse, $configVar as TypeConfig); +$udfSerializeVar = Udf(Protobuf::Serialize, $configVar as TypeConfig); + +$udfParseSep = Udf(Protobuf::Parse, $configSeparate as TypeConfig); +$udfSerializeSep = Udf(Protobuf::Serialize, $configSeparate as TypeConfig); + +SELECT + TestField, + $udfParseVar(TestField), + $udfSerializeVar($udfParseVar(TestField)), + Ensure("Success", StablePickle($udfParseVar(TestField)) == StablePickle($udfParseVar($udfSerializeVar($udfParseVar(TestField)))), "Fail"), + $udfParseSep(TestField), + $udfSerializeSep($udfParseSep(TestField)), + Ensure("Success", StablePickle($udfParseSep(TestField)) == StablePickle($udfParseSep($udfSerializeSep($udfParseSep(TestField)))), "Fail"), +FROM plato.Input; + diff --git a/ydb/library/yql/udfs/common/protobuf/test/ya.make b/ydb/library/yql/udfs/common/protobuf/test/ya.make new file mode 100644 index 0000000000..a74102e6ab --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/test/ya.make @@ -0,0 +1,13 @@ +YQL_UDF_TEST() + +DEPENDS(ydb/library/yql/udfs/common/protobuf) + +TIMEOUT(300) + +SIZE(MEDIUM) + +IF (SANITIZER_TYPE == "memory") + TAG(ya:not_autocheck) # YQL-15385 +ENDIF() + +END() diff --git a/ydb/library/yql/udfs/common/protobuf/ya.make b/ydb/library/yql/udfs/common/protobuf/ya.make new file mode 100644 index 0000000000..83e45fd574 --- /dev/null +++ b/ydb/library/yql/udfs/common/protobuf/ya.make @@ -0,0 +1,22 @@ +YQL_UDF(protobuf_udf) + +YQL_ABI_VERSION( + 2 + 9 + 0 +) + +SRCS( + protobuf_udf.cpp +) + +PEERDIR( + library/cpp/protobuf/yql + yql/library/protobuf_udf +) + +END() + +RECURSE_FOR_TESTS( + test +) diff --git a/ydb/library/yql/udfs/common/ya.make b/ydb/library/yql/udfs/common/ya.make index 511570b1bd..0f057ca81d 100644 --- a/ydb/library/yql/udfs/common/ya.make +++ b/ydb/library/yql/udfs/common/ya.make @@ -10,6 +10,7 @@ RECURSE( json2 math pire + protobuf re2 set stat diff --git a/yql/CMakeLists.txt b/yql/CMakeLists.txt new file mode 100644 index 0000000000..3642e95e64 --- /dev/null +++ b/yql/CMakeLists.txt @@ -0,0 +1,9 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + +add_subdirectory(library) diff --git a/yql/library/CMakeLists.txt b/yql/library/CMakeLists.txt new file mode 100644 index 0000000000..f02e617aae --- /dev/null +++ b/yql/library/CMakeLists.txt @@ -0,0 +1,9 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + +add_subdirectory(protobuf_udf) diff --git a/yql/library/protobuf_udf/CMakeLists.darwin-x86_64.txt b/yql/library/protobuf_udf/CMakeLists.darwin-x86_64.txt new file mode 100644 index 0000000000..68152b43f2 --- /dev/null +++ b/yql/library/protobuf_udf/CMakeLists.darwin-x86_64.txt @@ -0,0 +1,32 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + + +add_library(yql-library-protobuf_udf) +target_compile_options(yql-library-protobuf_udf PRIVATE + -DUDF_ABI_VERSION_MAJOR=2 + -DUDF_ABI_VERSION_MINOR=9 + -DUDF_ABI_VERSION_PATCH=0 +) +target_link_libraries(yql-library-protobuf_udf PUBLIC + contrib-libs-cxxsupp + yutil + contrib-libs-protobuf + cpp-protobuf-yql + yql-public-udf + library-yql-minikql + library-yql-utils + cpp-mapreduce-interface + yt_proto-yt-formats +) +target_sources(yql-library-protobuf_udf PRIVATE + ${CMAKE_SOURCE_DIR}/yql/library/protobuf_udf/proto_builder.cpp + ${CMAKE_SOURCE_DIR}/yql/library/protobuf_udf/module.cpp + ${CMAKE_SOURCE_DIR}/yql/library/protobuf_udf/type_builder.cpp + ${CMAKE_SOURCE_DIR}/yql/library/protobuf_udf/value_builder.cpp +) diff --git a/yql/library/protobuf_udf/CMakeLists.linux-aarch64.txt b/yql/library/protobuf_udf/CMakeLists.linux-aarch64.txt new file mode 100644 index 0000000000..5e5cf9da15 --- /dev/null +++ b/yql/library/protobuf_udf/CMakeLists.linux-aarch64.txt @@ -0,0 +1,33 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + + +add_library(yql-library-protobuf_udf) +target_compile_options(yql-library-protobuf_udf PRIVATE + -DUDF_ABI_VERSION_MAJOR=2 + -DUDF_ABI_VERSION_MINOR=9 + -DUDF_ABI_VERSION_PATCH=0 +) +target_link_libraries(yql-library-protobuf_udf PUBLIC + contrib-libs-linux-headers + contrib-libs-cxxsupp + yutil + contrib-libs-protobuf + cpp-protobuf-yql + yql-public-udf + library-yql-minikql + library-yql-utils + cpp-mapreduce-interface + yt_proto-yt-formats +) +target_sources(yql-library-protobuf_udf PRIVATE + ${CMAKE_SOURCE_DIR}/yql/library/protobuf_udf/proto_builder.cpp + ${CMAKE_SOURCE_DIR}/yql/library/protobuf_udf/module.cpp + ${CMAKE_SOURCE_DIR}/yql/library/protobuf_udf/type_builder.cpp + ${CMAKE_SOURCE_DIR}/yql/library/protobuf_udf/value_builder.cpp +) diff --git a/yql/library/protobuf_udf/CMakeLists.linux-x86_64.txt b/yql/library/protobuf_udf/CMakeLists.linux-x86_64.txt new file mode 100644 index 0000000000..5e5cf9da15 --- /dev/null +++ b/yql/library/protobuf_udf/CMakeLists.linux-x86_64.txt @@ -0,0 +1,33 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + + +add_library(yql-library-protobuf_udf) +target_compile_options(yql-library-protobuf_udf PRIVATE + -DUDF_ABI_VERSION_MAJOR=2 + -DUDF_ABI_VERSION_MINOR=9 + -DUDF_ABI_VERSION_PATCH=0 +) +target_link_libraries(yql-library-protobuf_udf PUBLIC + contrib-libs-linux-headers + contrib-libs-cxxsupp + yutil + contrib-libs-protobuf + cpp-protobuf-yql + yql-public-udf + library-yql-minikql + library-yql-utils + cpp-mapreduce-interface + yt_proto-yt-formats +) +target_sources(yql-library-protobuf_udf PRIVATE + ${CMAKE_SOURCE_DIR}/yql/library/protobuf_udf/proto_builder.cpp + ${CMAKE_SOURCE_DIR}/yql/library/protobuf_udf/module.cpp + ${CMAKE_SOURCE_DIR}/yql/library/protobuf_udf/type_builder.cpp + ${CMAKE_SOURCE_DIR}/yql/library/protobuf_udf/value_builder.cpp +) diff --git a/yql/library/protobuf_udf/CMakeLists.txt b/yql/library/protobuf_udf/CMakeLists.txt new file mode 100644 index 0000000000..f8b31df0c1 --- /dev/null +++ b/yql/library/protobuf_udf/CMakeLists.txt @@ -0,0 +1,17 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + +if (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" AND NOT HAVE_CUDA) + include(CMakeLists.linux-aarch64.txt) +elseif (CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") + include(CMakeLists.darwin-x86_64.txt) +elseif (WIN32 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64" AND NOT HAVE_CUDA) + include(CMakeLists.windows-x86_64.txt) +elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND NOT HAVE_CUDA) + include(CMakeLists.linux-x86_64.txt) +endif() diff --git a/yql/library/protobuf_udf/CMakeLists.windows-x86_64.txt b/yql/library/protobuf_udf/CMakeLists.windows-x86_64.txt new file mode 100644 index 0000000000..68152b43f2 --- /dev/null +++ b/yql/library/protobuf_udf/CMakeLists.windows-x86_64.txt @@ -0,0 +1,32 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + + +add_library(yql-library-protobuf_udf) +target_compile_options(yql-library-protobuf_udf PRIVATE + -DUDF_ABI_VERSION_MAJOR=2 + -DUDF_ABI_VERSION_MINOR=9 + -DUDF_ABI_VERSION_PATCH=0 +) +target_link_libraries(yql-library-protobuf_udf PUBLIC + contrib-libs-cxxsupp + yutil + contrib-libs-protobuf + cpp-protobuf-yql + yql-public-udf + library-yql-minikql + library-yql-utils + cpp-mapreduce-interface + yt_proto-yt-formats +) +target_sources(yql-library-protobuf_udf PRIVATE + ${CMAKE_SOURCE_DIR}/yql/library/protobuf_udf/proto_builder.cpp + ${CMAKE_SOURCE_DIR}/yql/library/protobuf_udf/module.cpp + ${CMAKE_SOURCE_DIR}/yql/library/protobuf_udf/type_builder.cpp + ${CMAKE_SOURCE_DIR}/yql/library/protobuf_udf/value_builder.cpp +) |