|
1 | 1 | use crate::queryplanner::serialized_plan::SerializedPlan; |
2 | 2 | use crate::sql::InlineTables; |
| 3 | +use crate::sql::SqlQueryContext; |
3 | 4 | use crate::store::DataFrame; |
4 | 5 | use crate::CubeError; |
5 | 6 | use futures::Future; |
@@ -71,17 +72,18 @@ impl SqlResultCache { |
71 | 72 | } |
72 | 73 | } |
73 | 74 |
|
74 | | - #[tracing::instrument(level = "trace", skip(self, inline_tables, plan, exec))] |
| 75 | + #[tracing::instrument(level = "trace", skip(self, context, plan, exec))] |
75 | 76 | pub async fn get<F>( |
76 | 77 | &self, |
77 | 78 | query: &str, |
78 | | - inline_tables: &InlineTables, |
| 79 | + context: SqlQueryContext, |
79 | 80 | plan: SerializedPlan, |
80 | 81 | exec: impl FnOnce(SerializedPlan) -> F, |
81 | 82 | ) -> Result<Arc<DataFrame>, CubeError> |
82 | 83 | where |
83 | 84 | F: Future<Output = Result<DataFrame, CubeError>> + Send + 'static, |
84 | 85 | { |
| 86 | + let inline_tables = &context.inline_tables; |
85 | 87 | let result_key = SqlResultCacheKey::from_plan(query, inline_tables, &plan); |
86 | 88 | let cached_result = { |
87 | 89 | let mut result_cache = self.result_cache.lock().await; |
@@ -132,6 +134,7 @@ impl SqlResultCache { |
132 | 134 |
|
133 | 135 | std::mem::drop(plan); |
134 | 136 | std::mem::drop(result_key); |
| 137 | + std::mem::drop(context); |
135 | 138 |
|
136 | 139 | self.wait_for_queue(receiver, query).await |
137 | 140 | } |
@@ -162,7 +165,7 @@ mod tests { |
162 | 165 | use crate::queryplanner::serialized_plan::SerializedPlan; |
163 | 166 | use crate::queryplanner::PlanningMeta; |
164 | 167 | use crate::sql::cache::SqlResultCache; |
165 | | - use crate::sql::InlineTables; |
| 168 | + use crate::sql::{InlineTables, SqlQueryContext}; |
166 | 169 | use crate::store::DataFrame; |
167 | 170 | use crate::table::{Row, TableValue}; |
168 | 171 | use crate::CubeError; |
@@ -200,13 +203,33 @@ mod tests { |
200 | 203 | )])], |
201 | 204 | )) |
202 | 205 | }; |
203 | | - let inline_tables = InlineTables::new(); |
| 206 | + |
204 | 207 | let futures = vec![ |
205 | | - cache.get("SELECT 1", &inline_tables, plan.clone(), exec.clone()), |
206 | | - cache.get("SELECT 2", &inline_tables, plan.clone(), exec.clone()), |
207 | | - cache.get("SELECT 3", &inline_tables, plan.clone(), exec.clone()), |
208 | | - cache.get("SELECT 1", &inline_tables, plan.clone(), exec.clone()), |
209 | | - cache.get("SELECT 1", &inline_tables, plan, exec), |
| 208 | + cache.get( |
| 209 | + "SELECT 1", |
| 210 | + SqlQueryContext::default(), |
| 211 | + plan.clone(), |
| 212 | + exec.clone(), |
| 213 | + ), |
| 214 | + cache.get( |
| 215 | + "SELECT 2", |
| 216 | + SqlQueryContext::default(), |
| 217 | + plan.clone(), |
| 218 | + exec.clone(), |
| 219 | + ), |
| 220 | + cache.get( |
| 221 | + "SELECT 3", |
| 222 | + SqlQueryContext::default(), |
| 223 | + plan.clone(), |
| 224 | + exec.clone(), |
| 225 | + ), |
| 226 | + cache.get( |
| 227 | + "SELECT 1", |
| 228 | + SqlQueryContext::default(), |
| 229 | + plan.clone(), |
| 230 | + exec.clone(), |
| 231 | + ), |
| 232 | + cache.get("SELECT 1", SqlQueryContext::default(), plan, exec), |
210 | 233 | ]; |
211 | 234 |
|
212 | 235 | let res = join_all(futures) |
|
0 commit comments