```
SET compile_expressions = 1
SELECT GREATEST(2,0)
```

tmp_block.insert(y[i]);
            auto impl = func_compare->build({x[i], y[i]});
            convolution_types[i].type = impl->getReturnType();
            
            tmp_block.insert({ nullptr, impl->getReturnType(), "" });
            impl->execute(tmp_block, {i * 3, i * 3 + 1}, i * 3 + 2, input_rows_count);
        }
        if (tuple_size == 1)
        {
            
            block.getByPosition(result).column = tmp_block.getByPosition(2).column;
            return;
        }
        
        ColumnNumbers convolution_args(tuple_size);
        for (size_t i = 0; i < tuple_size; ++i)
            convolution_args[i] = i * 3 + 2;
        auto impl = func_convolution->build(convolution_types);
        tmp_block.insert({ nullptr, impl->getReturnType(), "" });
        impl->execute(tmp_block, convolution_args, tuple_size * 3, input_rows_count);
        block.getByPosition(result).column = tmp_block.getByPosition(tuple_size * 3).column;
    }
    void executeTupleLessGreaterImpl(
        std::shared_ptr<IFunctionOverloadResolver> func_compare_head,
        std::shared_ptr<IFunctionOverloadResolver> func_compare_tail,
        std::shared_ptr<IFunctionOverloadResolver> func_and,
        std::shared_ptr<IFunctionOverloadResolver> func_or,
        std::shared_ptr<IFunctionOverloadResolver> func_equals,
        Block & block,
        size_t result,