```
milovidov-desktop :) CREATE TABLE hits2 AS hits

CREATE TABLE hits2 AS hits

Query id: ef73b907-c73b-42ba-8194-db88c88cc85b

Ok.

0 rows in set. Elapsed: 0.024 sec. 

milovidov-desktop :) INSERT INTO hits2 FROM INFILE 'hits.tsv'

INSERT INTO hits2 FROM INFILE 'hits.tsv'

Query id: 0588941e-ff9e-4741-97ce-7784aee1e253

↓ Progress: 0.00 rows, 0.00 B (0.00 rows/s., 0.00 B/s.)
```

Two problems:
- no progress;
- it is displaying a fractional number of rows (`0.00`).
}
    processed_rows = 0;
    written_first_block = false;
    progress_indication.resetProgress();
    profile_events.watch.restart();
    {
        /// Temporarily apply query settings to context.
        std::optional<Settings> old_settings;
        SCOPE_EXIT_SAFE({
            if (old_settings)
                global_context->setSettings(*old_settings);
        });
        auto apply_query_settings = [&](const IAST & settings_ast)
        {
            if (!old_settings)
                old_settings.emplace(global_context->getSettingsRef());
            global_context->applySettingsChanges(settings_ast.as<ASTSetQuery>()->changes);
            global_context->resetSettingsToDefaultValue(settings_ast.as<ASTSetQuery>()->default_settings);
        };
        const auto * insert = parsed_query->as<ASTInsertQuery>();
        if (insert && insert->settings_ast)
            apply_query_settings(*insert->settings_ast);
        /// FIXME: try to prettify this cast using `as<>()`
        const auto * with_output = dynamic_cast<const ASTQueryWithOutput *>(parsed_query.get());
        if (with_output && with_output->settings_ast)
            apply_query_settings(*with_output->settings_ast);
        if (!connection->checkConnected(connection_parameters.timeouts))
            connect();
        ASTPtr input_function;
        if (insert && insert->select)