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

else
    {
        plan = spreadMarkRangesAmongStreams(
            std::move(parts_with_ranges),
            std::move(index_stats),
            num_streams,
            column_names_to_read,
            metadata_snapshot,
            max_block_size,
            settings.use_uncompressed_cache,
            query_info,
            virt_column_names,
            settings,
            reader_settings,
            query_id);
    }
    if (!plan)
        return std::make_unique<QueryPlan>();
    if (sampling.use_sampling)
    {
        auto sampling_step = std::make_unique<FilterStep>(
                plan->getCurrentDataStream(),
                sampling.filter_expression,
                sampling.filter_function->getColumnName(),
                false);
        sampling_step->setStepDescription("Sampling");
        plan->addStep(std::move(sampling_step));
    }
    if (result_projection)
    {