Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions src/rewrite/exploitation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,43 @@ impl ViewMatcher {
pub fn mv_plans(&self) -> &HashMap<TableReference, (Arc<dyn TableProvider>, SpjNormalForm)> {
&self.mv_plans
}

/// Returns materialized views that potentially reference the given table.
///
/// This is a preliminary filter - it only checks if the MV references the table
/// but does NOT guarantee that the MV can actually be used to rewrite queries
/// involving that table.
///
/// # Arguments
///
/// * `table_reference` - The table reference to find candidates for
///
/// # Returns
///
/// A vector of tuples containing:
/// - The materialized view's table reference
/// - The materialized view's table provider
/// - The materialized view's SPJ normal form
pub fn get_potential_mv_candidates_for_table(
&self,
table_reference: &TableReference,
) -> Vec<(TableReference, Arc<dyn TableProvider>, &SpjNormalForm)> {
self.mv_plans
.iter()
.filter_map(|(mv_table_ref, (mv_provider, mv_normal_form))| {
// Check if this MV references the target table
if mv_normal_form.referenced_tables().contains(table_reference) {
Some((
mv_table_ref.clone(),
Arc::clone(mv_provider),
mv_normal_form,
))
} else {
None
}
})
.collect()
}
}

impl OptimizerRule for ViewMatcher {
Expand Down