diff --git a/core/wren-core/core/src/mdl/cube.rs b/core/wren-core/core/src/mdl/cube.rs index 2787d199d5..24dbec2637 100644 --- a/core/wren-core/core/src/mdl/cube.rs +++ b/core/wren-core/core/src/mdl/cube.rs @@ -13,7 +13,11 @@ use serde::{Deserialize, Serialize}; use crate::mdl::manifest::{Cube, CubeDimension, Manifest, Measure, TimeDimension}; /// A structured cube query — the input to [`cube_query_to_sql`]. -#[derive(Debug, Clone, Serialize, Deserialize)] +/// +/// Every field satisfies [`Default`], so callers should use struct-update +/// syntax (`..Default::default()`) and only name the fields they care about. +/// New optional fields can then be added without breaking downstream code. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CubeQuery { pub cube: String, @@ -647,13 +651,7 @@ mod tests { fn query(cube: &str) -> CubeQuery { CubeQuery { cube: cube.to_string(), - measures: vec![], - dimensions: vec![], - time_dimensions: vec![], - filters: vec![], - order_by: vec![], - limit: None, - offset: None, + ..Default::default() } } diff --git a/core/wren-core/core/tests/cube_public_api.rs b/core/wren-core/core/tests/cube_public_api.rs index 2e5adc0388..ba60e83b67 100644 --- a/core/wren-core/core/tests/cube_public_api.rs +++ b/core/wren-core/core/tests/cube_public_api.rs @@ -27,14 +27,11 @@ fn cube_query_public_order_by_types_generate_sql_without_a_limit() { cube: "OrdersCube".to_string(), measures: vec!["revenue".to_string()], dimensions: vec!["status".to_string()], - time_dimensions: vec![], - filters: vec![], order_by: vec![CubeOrderBy { member: "revenue".to_string(), direction: SortDirection::Desc, }], - limit: None, - offset: None, + ..Default::default() }; assert_eq!(