#pragma once #include "mkql_builtins_impl.h" // Y_IGNORE // Y_IGNORE namespace NKikimr { namespace NMiniKQL { template struct TCompareArithmeticBinary : public TArithmeticConstraintsBinary { static NUdf::TUnboxedValuePod Execute(const NUdf::TUnboxedValuePod& left, const NUdf::TUnboxedValuePod& right) { return NUdf::TUnboxedValuePod(TImpl::Do(left.template Get(), right.template Get())); } static void DoPtr( const typename TPrimitiveDataType::TLayout* left, const typename TPrimitiveDataType::TLayout* right, typename TPrimitiveDataType::TLayout* res) { *res = TImpl::Do(*left, *right); } #ifndef MKQL_DISABLE_CODEGEN static Value* Generate(Value* left, Value* right, const TCodegenContext& ctx, BasicBlock*& block) { auto& context = ctx.Codegen.GetContext(); const auto lhs = GetterFor(left, context, block); const auto rhs = GetterFor(right, context, block); const auto res = TImpl::Gen(lhs, rhs, ctx, block); const auto wide = MakeBoolean(res, context, block); return wide; } #endif }; template struct TCompareArithmeticBinaryWithTimezone : public TArithmeticConstraintsBinary { static_assert(std::is_same::value, "Must be same type."); static NUdf::TUnboxedValuePod Execute(const NUdf::TUnboxedValuePod& left, const NUdf::TUnboxedValuePod& right) { const auto l = left.template Get(); const auto r = right.template Get(); return NUdf::TUnboxedValuePod(l == r ? TImpl::DoTz(left.GetTimezoneId(), right.GetTimezoneId()) : TImpl::Do(left.template Get(), right.template Get())); } #ifndef MKQL_DISABLE_CODEGEN static Value* Generate(Value* left, Value* right, const TCodegenContext& ctx, BasicBlock*& block) { auto& context = ctx.Codegen.GetContext(); const auto lhs = GetterFor(left, context, block); const auto rhs = GetterFor(right, context, block); const auto equals = CmpInst::Create(Instruction::ICmp, ICmpInst::ICMP_EQ, lhs, rhs, "equals", block); const auto ltz = GetterForTimezone(context, left, block); const auto rtz = GetterForTimezone(context, right, block); const auto result = SelectInst::Create(equals, TImpl::GenTz(ltz, rtz, ctx, block), TImpl::Gen(lhs, rhs, ctx, block), "result", block); const auto wide = MakeBoolean(result, context, block); return wide; } #endif }; template struct TSelectArithmeticBinaryCopyTimezone : public TArithmeticConstraintsBinary { static NUdf::TUnboxedValuePod Execute(const NUdf::TUnboxedValuePod& left, const NUdf::TUnboxedValuePod& right) { return TImpl::Do(left.template Get(), right.template Get()) ? left : right; } #ifndef MKQL_DISABLE_CODEGEN static Value* Generate(Value* left, Value* right, const TCodegenContext& ctx, BasicBlock*& block) { auto& context = ctx.Codegen.GetContext(); const auto lhs = GetterFor(left, context, block); const auto rhs = GetterFor(right, context, block); const auto result = SelectInst::Create(TImpl::Gen(lhs, rhs, ctx, block), left, right, "result", block); return result; } #endif }; template struct TSelectArithmeticBinaryWithTimezone : public TArithmeticConstraintsBinary { static NUdf::TUnboxedValuePod Execute(const NUdf::TUnboxedValuePod& left, const NUdf::TUnboxedValuePod& right) { const auto l = left.template Get(); const auto r = right.template Get(); const bool choise = l == r ? TImpl::DoTz(left.GetTimezoneId(), right.GetTimezoneId()) : TImpl::Do(l, r); return choise ? left : right; } #ifndef MKQL_DISABLE_CODEGEN static Value* Generate(Value* left, Value* right, const TCodegenContext& ctx, BasicBlock*& block) { auto& context = ctx.Codegen.GetContext(); const auto lhs = GetterFor(left, context, block); const auto rhs = GetterFor(right, context, block); const auto equals = CmpInst::Create(Instruction::ICmp, ICmpInst::ICMP_EQ, lhs, rhs, "equals", block); const auto ltz = GetterForTimezone(context, left, block); const auto rtz = GetterForTimezone(context, right, block); const auto choise = SelectInst::Create(equals, TImpl::GenTz(ltz, rtz, ctx, block), TImpl::Gen(lhs, rhs, ctx, block), "choise", block); const auto result = SelectInst::Create(choise, left, right, "result", block); return result; } #endif }; template int CompareCustoms(NUdf::TUnboxedValuePod lhs, NUdf::TUnboxedValuePod rhs) { const TStringBuf lhsBuf = lhs.AsStringRef(); const TStringBuf rhsBuf = rhs.AsStringRef(); return lhsBuf.compare(rhsBuf); } template int CompareCustomsWithCleanup(NUdf::TUnboxedValuePod left, NUdf::TUnboxedValuePod right) { const auto c = CompareCustoms(left, right); left.DeleteUnreferenced(); right.DeleteUnreferenced(); return c; } template struct TCompareArgsOpt { static const TFunctionParamMetadata Value[4]; }; template const TFunctionParamMetadata TCompareArgsOpt::Value[4] = { { NUdf::TDataType::Id, IsResultOptional ? TFunctionParamMetadata::FlagIsNullable : 0 }, { TInput1::Id, IsLeftOptional ? TFunctionParamMetadata::FlagIsNullable : 0 }, { TInput2::Id, IsRightOptional ? TFunctionParamMetadata::FlagIsNullable : 0 }, { 0, 0 } }; template < typename TInput1, typename TInput2, template class TFunc, template class TArgs > void RegisterCompareOpt(IBuiltinFunctionRegistry& registry, const std::string_view& name) { RegisterFunctionImpl, TArgs, TBinaryWrap>(registry, name); RegisterFunctionImpl, TArgs, TBinaryWrap>(registry, name); RegisterFunctionImpl, TArgs, TBinaryWrap>(registry, name); RegisterFunctionImpl, TArgs, TBinaryWrap>(registry, name); } template < typename TInput, template class TFunc, template class TArgs > void RegisterAggrCompareOpt(IBuiltinFunctionRegistry& registry, const std::string_view& name) { RegisterFunctionImpl, TArgs, TBinaryWrap>(registry, name); RegisterFunctionImpl, TArgs, TAggrCompareWrap>(registry, name); } template < typename TType1, typename TType2, class TFunc, template class TArgs > void RegisterCompareCustomOpt(IBuiltinFunctionRegistry& registry, const std::string_view& name) { RegisterFunctionImpl, TBinaryWrap>(registry, name); RegisterFunctionImpl, TBinaryWrap>(registry, name); RegisterFunctionImpl, TBinaryWrap>(registry, name); RegisterFunctionImpl, TBinaryWrap>(registry, name); } template < typename TType1, typename TType2, template class TFunc, template class TArgs > void RegisterComparePolyOpt(IBuiltinFunctionRegistry& registry, const std::string_view& name) { RegisterFunctionImpl, TArgs, TBinaryWrap>(registry, name); RegisterFunctionImpl, TArgs, TBinaryWrap>(registry, name); RegisterFunctionImpl, TArgs, TBinaryWrap>(registry, name); RegisterFunctionImpl, TArgs, TBinaryWrap>(registry, name); } template < typename TType, class TFunc, template class TArgs > void RegisterAggrCompareCustomOpt(IBuiltinFunctionRegistry& registry, const std::string_view& name) { RegisterFunctionImpl, TBinaryWrap>(registry, name); RegisterFunctionImpl, TAggrCompareWrap>(registry, name); } template < typename TInput, template class TFunc, template class TArgs > void RegisterAggrComparePolyOpt(IBuiltinFunctionRegistry& registry, const std::string_view& name) { RegisterFunctionImpl, TArgs, TBinaryWrap>(registry, name); RegisterFunctionImpl, TArgs, TAggrCompareWrap>(registry, name); } template < template class TFunc, template class TArgs > void RegisterCompareUnsigned(IBuiltinFunctionRegistry& registry, const std::string_view& name) { RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); } template < template class TFunc, template class TArgs > void RegisterCompareSigned(IBuiltinFunctionRegistry& registry, const std::string_view& name) { RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); } template < template class TFunc, template class TArgs > void RegisterCompareSignedAndUnsigned(IBuiltinFunctionRegistry& registry, const std::string_view& name) { RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); } template < template class TFunc, template class TArgs > void RegisterCompareUnsignedAndSigned(IBuiltinFunctionRegistry& registry, const std::string_view& name) { RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); } template < template class TFunc, template class TArgs > void RegisterCompareReal(IBuiltinFunctionRegistry& registry, const std::string_view& name) { RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); } template < template class TFunc, template class TArgs > void RegisterCompareBool(IBuiltinFunctionRegistry& registry, const std::string_view& name) { RegisterCompareOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); } template < template class TFunc, template class TArgs > void RegisterCompareIntegral(IBuiltinFunctionRegistry& registry, const std::string_view& name) { RegisterCompareSigned(registry, name); RegisterCompareUnsigned(registry, name); RegisterCompareSignedAndUnsigned(registry, name); RegisterCompareUnsignedAndSigned(registry, name); } template < template class TFunc, template class TArgs > void RegisterComparePrimitive(IBuiltinFunctionRegistry& registry, const std::string_view& name) { RegisterCompareBool(registry, name); RegisterCompareReal(registry, name); RegisterCompareIntegral(registry, name); } template < template class TFunc, template class TArgs > void RegisterAggrComparePrimitive(IBuiltinFunctionRegistry& registry, const std::string_view& name) { RegisterAggrCompareOpt, TFunc, TArgs>(registry, name); RegisterAggrCompareOpt, TFunc, TArgs>(registry, name); RegisterAggrCompareOpt, TFunc, TArgs>(registry, name); RegisterAggrCompareOpt, TFunc, TArgs>(registry, name); RegisterAggrCompareOpt, TFunc, TArgs>(registry, name); RegisterAggrCompareOpt, TFunc, TArgs>(registry, name); RegisterAggrCompareOpt, TFunc, TArgs>(registry, name); RegisterAggrCompareOpt, TFunc, TArgs>(registry, name); RegisterAggrCompareOpt, TFunc, TArgs>(registry, name); RegisterAggrCompareOpt, TFunc, TArgs>(registry, name); RegisterAggrCompareOpt, TFunc, TArgs>(registry, name); } template < template class TFunc, template class TArgs > void RegisterCompareDatetime(IBuiltinFunctionRegistry& registry, const std::string_view& name) { RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); } template < template class TFunc, template class TArgs > void RegisterCompareBigDatetime(IBuiltinFunctionRegistry& registry, const std::string_view& name) { RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterComparePolyOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); } template < template class TFunc, template class TArgs > void RegisterAggrCompareDatetime(IBuiltinFunctionRegistry& registry, const std::string_view& name) { RegisterAggrComparePolyOpt, TFunc, TArgs>(registry, name); RegisterAggrComparePolyOpt, TFunc, TArgs>(registry, name); RegisterAggrComparePolyOpt, TFunc, TArgs>(registry, name); RegisterAggrComparePolyOpt, TFunc, TArgs>(registry, name); } template < template class TFunc, template class TArgs > void RegisterAggrCompareTzDatetime(IBuiltinFunctionRegistry& registry, const std::string_view& name) { RegisterAggrCompareOpt, TFunc, TArgs>(registry, name); RegisterAggrCompareOpt, TFunc, TArgs>(registry, name); RegisterAggrCompareOpt, TFunc, TArgs>(registry, name); } template < template class TFunc, template class TArgs > void RegisterAggrCompareBigDatetime(IBuiltinFunctionRegistry& registry, const std::string_view& name) { RegisterAggrComparePolyOpt, TFunc, TArgs>(registry, name); RegisterAggrComparePolyOpt, TFunc, TArgs>(registry, name); RegisterAggrComparePolyOpt, TFunc, TArgs>(registry, name); RegisterAggrComparePolyOpt, TFunc, TArgs>(registry, name); } template < template class TFunc, template class TArgs > void RegisterAggrCompareBigTzDatetime(IBuiltinFunctionRegistry& registry, const std::string_view& name) { RegisterAggrCompareOpt, TFunc, TArgs>(registry, name); RegisterAggrCompareOpt, TFunc, TArgs>(registry, name); RegisterAggrCompareOpt, TFunc, TArgs>(registry, name); } template < template class TFunc, template class TArgs, bool WithSpecial = true > void RegisterCompareStrings(IBuiltinFunctionRegistry& registry, const std::string_view& name) { RegisterCompareCustomOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareCustomOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareCustomOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareCustomOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); if constexpr (WithSpecial) { RegisterCompareCustomOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); RegisterCompareCustomOpt, NUdf::TDataType, TFunc, TArgs>(registry, name); } } template < template class TFunc, template class TArgs > void RegisterAggrCompareStrings(IBuiltinFunctionRegistry& registry, const std::string_view& name) { RegisterAggrCompareCustomOpt, TFunc, TArgs>(registry, name); RegisterAggrCompareCustomOpt, TFunc, TArgs>(registry, name); RegisterAggrCompareCustomOpt, TFunc, TArgs>(registry, name); RegisterAggrCompareCustomOpt, TFunc, TArgs>(registry, name); } void RegisterEquals(IBuiltinFunctionRegistry& registry); void RegisterEquals(TKernelFamilyMap& kernelFamilyMap); void RegisterNotEquals(IBuiltinFunctionRegistry& registry); void RegisterNotEquals(TKernelFamilyMap& kernelFamilyMap); void RegisterLess(IBuiltinFunctionRegistry& registry); void RegisterLess(TKernelFamilyMap& kernelFamilyMap); void RegisterLessOrEqual(IBuiltinFunctionRegistry& registry); void RegisterLessOrEqual(TKernelFamilyMap& kernelFamilyMap); void RegisterGreater(IBuiltinFunctionRegistry& registry); void RegisterGreater(TKernelFamilyMap& kernelFamilyMap); void RegisterGreaterOrEqual(IBuiltinFunctionRegistry& registry); void RegisterGreaterOrEqual(TKernelFamilyMap& kernelFamilyMap); } }