Skip to content

Commit 2ee8d89

Browse files
committed
pass cache mode to cubeScan
1 parent 1e8f9ce commit 2ee8d89

File tree

6 files changed

+63
-2
lines changed

6 files changed

+63
-2
lines changed

packages/cubejs-backend-native/src/node_export.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,17 @@ async fn handle_sql_query(
256256
.await?;
257257
}
258258

259+
let cache_enum = cache_mode.parse().map_err(|e| CubeError::user(e))?;
260+
261+
{
262+
let mut cm = session
263+
.state
264+
.cache_mode
265+
.write()
266+
.expect("failed to unlock session cache_mode for change");
267+
*cm = Some(cache_enum);
268+
}
269+
259270
let session_clone = Arc::clone(&session);
260271
let span_id_clone = span_id.clone();
261272

rust/cubesql/cubeclient/src/models/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ pub use self::v1_error::V1Error;
2424
pub mod v1_load_request;
2525
pub use self::v1_load_request::V1LoadRequest;
2626
pub mod v1_load_request_query;
27-
pub use self::v1_load_request_query::V1LoadRequestQuery;
2827
pub use self::v1_load_request_query::Cache;
28+
pub use self::v1_load_request_query::V1LoadRequestQuery;
2929
pub mod v1_load_request_query_filter_base;
3030
pub use self::v1_load_request_query_filter_base::V1LoadRequestQueryFilterBase;
3131
pub mod v1_load_request_query_filter_item;

rust/cubesql/cubesql/src/compile/builder.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ impl QueryBuilder {
150150
} else {
151151
None
152152
},
153+
cache: None,
153154
ungrouped: None,
154155
subquery_joins: None,
155156
join_hints: None,

rust/cubesql/cubesql/src/compile/engine/df/wrapper.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3453,6 +3453,7 @@ impl WrappedSelectNode {
34533453
} else {
34543454
None
34553455
},
3456+
cache: None,
34563457
// TODO is it okay to just override limit?
34573458
limit: if let Some(limit) = self.limit {
34583459
Some(limit as i32)

rust/cubesql/cubesql/src/compile/rewrite/converter.rs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
pub use super::rewriter::CubeRunner;
2+
use crate::sql::session::CacheMode;
23
use crate::{
34
compile::{
45
engine::df::{
@@ -38,7 +39,8 @@ use crate::{
3839
CubeError,
3940
};
4041
use cubeclient::models::{
41-
V1LoadRequestQuery, V1LoadRequestQueryFilterItem, V1LoadRequestQueryTimeDimension,
42+
Cache as V1LoadRequestCache, V1LoadRequestQuery, V1LoadRequestQueryFilterItem,
43+
V1LoadRequestQueryTimeDimension,
4244
};
4345
use datafusion::{
4446
arrow::datatypes::{DataType, TimeUnit},
@@ -1582,6 +1584,26 @@ impl LanguageToLogicalPlanConverter {
15821584
let mut query_time_dimensions = Vec::new();
15831585
let mut query_order = Vec::new();
15841586
let mut query_dimensions = Vec::new();
1587+
let cache_mode = &*self
1588+
.cube_context
1589+
.session_state
1590+
.cache_mode
1591+
.read()
1592+
.expect("failed to read lock for session cache_mode");
1593+
1594+
let v1_cache_mode = match cache_mode {
1595+
None => None,
1596+
Some(m) => match m {
1597+
CacheMode::StaleIfSlow => Some(V1LoadRequestCache::StaleIfSlow),
1598+
CacheMode::StaleWhileRevalidate => {
1599+
Some(V1LoadRequestCache::StaleWhileRevalidate)
1600+
}
1601+
CacheMode::MustRevalidate => Some(V1LoadRequestCache::MustRevalidate),
1602+
CacheMode::NoCache => Some(V1LoadRequestCache::NoCache),
1603+
},
1604+
};
1605+
1606+
query.cache = v1_cache_mode;
15851607

15861608
for m in members {
15871609
match m {

rust/cubesql/cubesql/src/sql/session.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use datafusion::scalar::ScalarValue;
22
use log::trace;
33
use rand::Rng;
4+
use std::str::FromStr;
45
use std::{
56
collections::HashMap,
67
sync::{Arc, LazyLock, RwLock as RwLockSync, Weak},
@@ -56,6 +57,28 @@ pub enum QueryState {
5657
},
5758
}
5859

60+
#[derive(Debug)]
61+
pub enum CacheMode {
62+
StaleIfSlow,
63+
StaleWhileRevalidate,
64+
MustRevalidate,
65+
NoCache,
66+
}
67+
68+
impl FromStr for CacheMode {
69+
type Err = String;
70+
71+
fn from_str(s: &str) -> Result<Self, Self::Err> {
72+
match s {
73+
"stale-if-slow" => Ok(Self::StaleIfSlow),
74+
"stale-while-revalidate" => Ok(Self::StaleWhileRevalidate),
75+
"must-revalidate" => Ok(Self::MustRevalidate),
76+
"no-cache" => Ok(Self::NoCache),
77+
other => Err(format!("Unknown cache mode: {}", other)),
78+
}
79+
}
80+
}
81+
5982
#[derive(Debug)]
6083
pub struct SessionState {
6184
// connection id, immutable
@@ -90,6 +113,8 @@ pub struct SessionState {
90113
pub statements: RWLockAsync<HashMap<String, PreparedStatement>>,
91114

92115
auth_context_expiration: Duration,
116+
117+
pub cache_mode: RwLockSync<Option<CacheMode>>,
93118
}
94119

95120
impl SessionState {
@@ -120,6 +145,7 @@ impl SessionState {
120145
query: RwLockSync::new(QueryState::None),
121146
statements: RWLockAsync::new(HashMap::new()),
122147
auth_context_expiration,
148+
cache_mode: RwLockSync::new(None),
123149
}
124150
}
125151

0 commit comments

Comments
 (0)