| 582 | } |
| 583 | |
| 584 | std::optional<FilterDAGInfo> buildRowPolicyFilterIfNeeded(const StoragePtr & storage, |
| 585 | SelectQueryInfo & table_expression_query_info, |
| 586 | PlannerContextPtr & planner_context, |
| 587 | std::set<std::string> & used_row_policies) |
| 588 | { |
| 589 | const auto & query_context = planner_context->getQueryContext(); |
| 590 | |
| 591 | auto row_policy_filter = getEffectiveRowPolicyFilter(storage, query_context); |
| 592 | if (!row_policy_filter) |
| 593 | return {}; |
| 594 | |
| 595 | for (const auto & row_policy : row_policy_filter->policies) |
| 596 | { |
| 597 | auto name = row_policy->getFullName().toString(); |
| 598 | if (query_context->hasQueryContext()) |
| 599 | query_context->getQueryContext()->addUsedRowPolicy(name); |
| 600 | used_row_policies.emplace(std::move(name)); |
| 601 | } |
| 602 | |
| 603 | return buildFilterInfo(row_policy_filter->expression, table_expression_query_info.table_expression, planner_context); |
| 604 | } |
| 605 | |
| 606 | std::optional<FilterDAGInfo> buildCustomKeyFilterIfNeeded(const StoragePtr & storage, |
| 607 | SelectQueryInfo & table_expression_query_info, |
no test coverage detected