```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".

RangesInDataParts new_parts;
        size_t num_streams_for_lonely_parts = num_streams * lonely_parts.size();
        const size_t min_marks_for_concurrent_read = minMarksForConcurrentRead(
            settings.merge_tree_min_rows_for_concurrent_read,
            settings.merge_tree_min_bytes_for_concurrent_read,
            data_settings->index_granularity,
            index_granularity_bytes,
            sum_marks_in_lonely_parts);
        
        if (sum_marks_in_lonely_parts < num_streams_for_lonely_parts * min_marks_for_concurrent_read && lonely_parts.size() < num_streams_for_lonely_parts)
            num_streams_for_lonely_parts = std::max((sum_marks_in_lonely_parts + min_marks_for_concurrent_read - 1) / min_marks_for_concurrent_read, lonely_parts.size());
        ReadFromMergeTree::Settings step_settings
        {
            .max_block_size = max_block_size,
            .preferred_block_size_bytes = settings.preferred_block_size_bytes,
            .preferred_max_column_in_block_size_bytes = settings.preferred_max_column_in_block_size_bytes,
            .min_marks_for_concurrent_read = min_marks_for_concurrent_read,
            .use_uncompressed_cache = use_uncompressed_cache,
            .reader_settings = reader_settings,
            .backoff_settings = MergeTreeReadPool::BackoffSettings(settings),
        };
        auto plan = std::make_unique<QueryPlan>();
        auto step = std::make_unique<ReadFromMergeTree>(
            data,
            metadata_snapshot,
            query_id,
            column_names,
            std::move(lonely_parts),
            std::move(index_stats),
            query_info.projection ? query_info.projection->prewhere_info : query_info.prewhere_info,