From a17727904478da72a04ce4b16ba5a5b7ab7db4b1 Mon Sep 17 00:00:00 2001 From: Jax Liu Date: Wed, 2 Sep 2026 11:37:46 +0800 Subject: [PATCH] refactor(core): derive Default for CubeQuery MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Callers had to name every field of the struct literal, so #2677 adding orderBy was a source-breaking change for anyone constructing a CubeQuery directly. Every field already satisfies Default, so the derive is free and lets callers write `..Default::default()` — future optional fields then stay additive. Co-Authored-By: Claude Opus 5 (1M context) --- core/wren-core/core/src/mdl/cube.rs | 14 ++++++-------- core/wren-core/core/tests/cube_public_api.rs | 5 +---- 2 files changed, 7 insertions(+), 12 deletions(-) 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!(