aboutsummaryrefslogtreecommitdiffstats
path: root/yql/essentials/minikql/comp_nodes/mkql_check_args.cpp
diff options
context:
space:
mode:
authorvvvv <vvvv@yandex-team.com>2024-11-07 04:19:26 +0300
committervvvv <vvvv@yandex-team.com>2024-11-07 04:29:50 +0300
commit2661be00f3bc47590fda9218bf0386d6355c8c88 (patch)
tree3d316c07519191283d31c5f537efc6aabb42a2f0 /yql/essentials/minikql/comp_nodes/mkql_check_args.cpp
parentcf2a23963ac10add28c50cc114fbf48953eca5aa (diff)
downloadydb-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.cpp36
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;
+}
+
+}
+}