```sql
DROP TABLE IF EXISTS tp;

create table tp (d1 Int32, d2 Int32, eventcnt Int64,
projection p (select sum(eventcnt), d1 group by d1)) 
engine = SummingMergeTree order by (d1, d2);

set allow_experimental_projection_optimization = 1, force_optimize_projection = 1;

select sum(eventcnt) eventcnt, d1
from tp
group by d1;

DB::Exception: No projection is used when allow_experimental_projection_optimization = 1.

```

The exception message is also incorrect, should be "when force_optimize_projection = 1".

context,
            max_block_size,
            num_streams,
            max_block_numbers_to_read,
            query_info.merge_tree_data_select_cache.get());
    }
    LOG_DEBUG(
        log,
        "Choose {} projection {}",
        ProjectionDescription::typeToString(query_info.projection->desc->type),
        query_info.projection->desc->name);
    if (query_info.projection->merge_tree_data_select_base_cache->sum_marks
            + query_info.projection->merge_tree_data_select_projection_cache->sum_marks
        == 0)
        return std::make_unique<QueryPlan>();
    Pipes pipes;
    Pipe projection_pipe;
    Pipe ordinary_pipe;
    const auto & given_select = query_info.query->as<const ASTSelectQuery &>();
    if (query_info.projection->merge_tree_data_select_projection_cache->sum_marks > 0)
    {
        LOG_DEBUG(log, "projection required columns: {}", fmt::join(query_info.projection->required_columns, ", "));
        auto plan = readFromParts(
            {},
            query_info.projection->required_columns,
            metadata_snapshot,
            query_info.projection->desc->metadata,
            query_info,
            context,
            max_block_size,