diff options
author | vvvv <vvvv@yandex-team.com> | 2024-11-07 04:19:26 +0300 |
---|---|---|
committer | vvvv <vvvv@yandex-team.com> | 2024-11-07 04:29:50 +0300 |
commit | 2661be00f3bc47590fda9218bf0386d6355c8c88 (patch) | |
tree | 3d316c07519191283d31c5f537efc6aabb42a2f0 /yql/essentials/minikql/comp_nodes/mkql_check_args.cpp | |
parent | cf2a23963ac10add28c50cc114fbf48953eca5aa (diff) | |
download | ydb-2661be00f3bc47590fda9218bf0386d6355c8c88.tar.gz |
Moved yql/minikql YQL-19206
init
[nodiff:caesar]
commit_hash:d1182ef7d430ccf7e4d37ed933c7126d7bd5d6e4
Diffstat (limited to 'yql/essentials/minikql/comp_nodes/mkql_check_args.cpp')
-rw-r--r-- | yql/essentials/minikql/comp_nodes/mkql_check_args.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/yql/essentials/minikql/comp_nodes/mkql_check_args.cpp b/yql/essentials/minikql/comp_nodes/mkql_check_args.cpp new file mode 100644 index 0000000000..279b032524 --- /dev/null +++ b/yql/essentials/minikql/comp_nodes/mkql_check_args.cpp @@ -0,0 +1,36 @@ +#include "mkql_check_args.h" +#include <yql/essentials/minikql/mkql_node_builder.h> + +namespace NKikimr { +namespace NMiniKQL { + +TBinaryFunctionArgsDesc CheckBinaryFunctionArgs( + TType* left, TType* right, + bool allowOptionalInput, bool requiresBooleanArgs) +{ + TBinaryFunctionArgsDesc desc; + const auto& leftType = UnpackOptional(left, desc.IsLeftOptional); + MKQL_ENSURE(leftType->IsData(), "Expected data"); + + const auto& rightType = UnpackOptional(right, desc.IsRightOptional); + MKQL_ENSURE(rightType->IsData(), "Expected data"); + + if (!allowOptionalInput) { + MKQL_ENSURE(!desc.IsLeftOptional && !desc.IsRightOptional, + "Optional are not expected here"); + } + + const auto& leftDataType = static_cast<const TDataType&>(*leftType); + const auto& rightDataType = static_cast<const TDataType&>(*rightType); + MKQL_ENSURE(leftDataType.GetSchemeType() == rightDataType.GetSchemeType(), + "Mismatch data types"); + + desc.SchemeType = leftDataType.GetSchemeType(); + if (requiresBooleanArgs) { + MKQL_ENSURE(desc.SchemeType == NUdf::TDataType<bool>::Id, "Expected bool"); + } + return desc; +} + +} +} |