fixed review, changed tests

This commit is contained in:
yariks5s 2023-11-06 14:30:10 +00:00
parent d95262622b
commit e48e6b6a5a
5 changed files with 18 additions and 25 deletions

View File

@ -42,7 +42,6 @@ struct QueryPlanOptimizationSettings
bool optimize_projection = false; bool optimize_projection = false;
bool force_use_projection = false; bool force_use_projection = false;
String force_projection_name; String force_projection_name;
String preferred_projection_name;
bool optimize_use_implicit_projections = false; bool optimize_use_implicit_projections = false;
static QueryPlanOptimizationSettings fromSettings(const Settings & from); static QueryPlanOptimizationSettings fromSettings(const Settings & from);

View File

@ -453,21 +453,16 @@ AggregateProjectionCandidates getAggregateProjectionCandidates(
{ {
for (const auto & projection : projections) for (const auto & projection : projections)
{ {
if (projection.type == ProjectionDescription::Type::Aggregate) if ((projection.type == ProjectionDescription::Type::Aggregate) && (proj_name_from_settings == projection.name))
{ {
size_t last_dot_pos = projection.name.find_last_of('.'); agg_projections.push_back(&projection);
std::string projection_name = (last_dot_pos != std::string::npos) ? projection.name.substr(last_dot_pos + 1) : projection.name; is_projection_found = true;
if (proj_name_from_settings == projection_name) break;
{
agg_projections.push_back(&projection);
is_projection_found = true;
break;
}
} }
} }
if (!is_projection_found) if (!is_projection_found)
throw Exception(ErrorCodes::INCORRECT_DATA, "Projection {} is specified in setting force_optimize_projection_name but not used", for (const auto & projection : projections)
proj_name_from_settings); agg_projections.push_back(&projection);
} }
else else
for (const auto & projection : projections) for (const auto & projection : projections)

View File

@ -140,17 +140,12 @@ bool optimizeUseNormalProjections(Stack & stack, QueryPlan::Nodes & nodes)
{ {
for (const auto * projection : normal_projections) for (const auto * projection : normal_projections)
{ {
size_t last_dot_pos = projection->name.find_last_of('.'); if (projection->name == proj_name_from_settings)
std::string projection_name = (last_dot_pos != std::string::npos) ? projection->name.substr(last_dot_pos + 1) : projection->name;
if (projection_name == proj_name_from_settings)
{ {
is_projection_found = true; is_projection_found = true;
break; break;
} }
} }
if (!is_projection_found)
throw Exception(ErrorCodes::INCORRECT_DATA, "Projection {} is specified in setting force_optimize_projection_name but not used",
proj_name_from_settings);
} }
for (const auto * projection : normal_projections) for (const auto * projection : normal_projections)
@ -175,12 +170,9 @@ bool optimizeUseNormalProjections(Stack & stack, QueryPlan::Nodes & nodes)
if (candidate.sum_marks >= ordinary_reading_marks) if (candidate.sum_marks >= ordinary_reading_marks)
continue; continue;
size_t last_dot_pos = projection->name.find_last_of('.');
std::string projection_name = (last_dot_pos != std::string::npos) ? projection->name.substr(last_dot_pos + 1) : projection->name;
if (!is_projection_found && (best_candidate == nullptr || candidate.sum_marks < best_candidate->sum_marks)) if (!is_projection_found && (best_candidate == nullptr || candidate.sum_marks < best_candidate->sum_marks))
best_candidate = &candidate; best_candidate = &candidate;
else if (is_projection_found && projection_name == proj_name_from_settings) else if (is_projection_found && projection->name == proj_name_from_settings)
best_candidate = &candidate; best_candidate = &candidate;
} }

View File

@ -3,4 +3,5 @@ projection_test_by_string
Executing query with setting Executing query with setting
test test
projection_test_by_more projection_test_by_more
0 test
projection_test_by_string

View File

@ -77,9 +77,15 @@ FROM system.query_log
WHERE query_id = '02907_test_1' AND arrayElement(projections, 1) LIKE '%projection_test_by_string' WHERE query_id = '02907_test_1' AND arrayElement(projections, 1) LIKE '%projection_test_by_string'
LIMIT 1" | grep -o "projection_test_by_string" || true LIMIT 1" | grep -o "projection_test_by_string" || true
$CLICKHOUSE_CLIENT --query_id '02907_test_1' --preferred_optimize_projection_name 'non_existing_projection' -q " $CLICKHOUSE_CLIENT --query_id '02907_test_2' --preferred_optimize_projection_name 'non_existing_projection' -q "
SELECT test_string SELECT test_string
FROM test FROM test
WHERE (test_id > 50) WHERE (test_id > 50)
AND (test_id < 150) AND (test_id < 150)
GROUP BY test_string;" 2>&1 | grep -c "BAD_ARGUMENTS" || true GROUP BY test_string;"
$CLICKHOUSE_CLIENT -q "
SELECT projections
FROM system.query_log
WHERE query_id = '02907_test_2' AND arrayElement(projections, 1) LIKE '%projection_test_by_string'
LIMIT 1" | grep -o "projection_test_by_string" || true