21.11.4.14
```
create table test (x String) Engine=StripeLog
select if(toUInt8(0), y, 42) from test
```

Throws exception `DB::Exception: Missing columns: 'y'`
Excpecting 42
btw `select if(0, y, 42) from test` works fine

{
    
    if (const auto * literal = condition->as<ASTLiteral>())
    {
        if (literal->value.getType() == Field::Types::Int64 ||
            literal->value.getType() == Field::Types::UInt64)
        {
            value = literal->value.get<Int64>();
            return true;
        }
    }
    
    if (const auto * function = condition->as<ASTFunction>())
    {
        if (isFunctionCast(function))
        {
            if (const auto * expr_list = function->arguments->as<ASTExpressionList>())
            {
                if (expr_list->children.size() != 2)
                    throw Exception("Function CAST must have exactly two arguments", ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH);
                const ASTPtr & type_ast = expr_list->children.at(1);
                if (const auto * type_literal = type_ast->as<ASTLiteral>())
                {
                    if (type_literal->value.getType() == Field::Types::String)
                    {
                        const auto & type_str = type_literal->value.get<std::string>();
                        if (type_str == "UInt8" || type_str == "Nullable(UInt8)")
                            return tryExtractConstValueFromCondition(expr_list->children.at(0), value);
                    }
                }