Optimize context for nested subqueries by creating a hierarchical structure
(&mut self, outer_context: &QueryContext, inner_contexts: Vec<QueryContext>)
| 85 | |
| 86 | /// Optimize context for nested subqueries by creating a hierarchical structure |
| 87 | pub fn optimize_nested_context(&mut self, outer_context: &QueryContext, inner_contexts: Vec<QueryContext>) -> QueryContext { |
| 88 | // Create a combined context that prioritizes inner scope but falls back to outer scope |
| 89 | let mut optimized = QueryContext::default(); |
| 90 | |
| 91 | // Start with outer context as base |
| 92 | optimized.table_aliases.extend(outer_context.table_aliases.clone()); |
| 93 | optimized.cte_columns.extend(outer_context.cte_columns.clone()); |
| 94 | optimized.derived_table_columns.extend(outer_context.derived_table_columns.clone()); |
| 95 | optimized.default_table = outer_context.default_table.clone(); |
| 96 | |
| 97 | // Layer inner contexts on top (later contexts override earlier ones) |
| 98 | for inner_context in inner_contexts { |
| 99 | // Inner context overrides outer context |
| 100 | optimized.table_aliases.extend(inner_context.table_aliases); |
| 101 | optimized.cte_columns.extend(inner_context.cte_columns); |
| 102 | optimized.derived_table_columns.extend(inner_context.derived_table_columns); |
| 103 | |
| 104 | // Inner context's default table takes precedence |
| 105 | if inner_context.default_table.is_some() { |
| 106 | optimized.default_table = inner_context.default_table; |
| 107 | } |
| 108 | } |
| 109 | |
| 110 | optimized |
| 111 | } |
| 112 | |
| 113 | /// Clear expired cache entries to prevent memory leaks |
| 114 | pub fn cleanup_cache(&mut self) { |