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

}
        }
    }
    return false;
}
void OptimizeIfWithConstantConditionVisitor::visit(ASTPtr & current_ast)
{
    if (!current_ast)
        return;
    for (ASTPtr & child : current_ast->children)
    {
        auto * function_node = child->as<ASTFunction>();
        if (!function_node || function_node->name != "if")
        {
            visit(child);
            continue;
        }
        if (!function_node->arguments)
            throw Exception("Wrong number of arguments for function 'if' (0 instead of 3)", ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH);
        if (function_node->arguments->children.size() != 3)
            throw Exception(
                "Wrong number of arguments for function 'if' (" + toString(function_node->arguments->children.size()) + " instead of 3)",
                ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH);
        visit(function_node->arguments);
        const auto * args = function_node->arguments->as<ASTExpressionList>();
        ASTPtr condition_expr = args->children[0];
        ASTPtr then_expr = args->children[1];
        ASTPtr else_expr = args->children[2];
        bool condition;
        if (tryExtractConstValueFromCondition(condition_expr, condition))