From 98c2fca92a317cde92aa4de61b54540f61dc8bab Mon Sep 17 00:00:00 2001 From: Alex Qyoun-ae <4062971+MazterQyou@users.noreply.github.com> Date: Tue, 4 Feb 2025 19:56:45 +0400 Subject: [PATCH] feat(cubeclient): Add hierarchies to Cube meta Signed-off-by: Alex Qyoun-ae <4062971+MazterQyou@users.noreply.github.com> --- packages/cubejs-api-gateway/openspec.yml | 18 ++++++++++++ .../cubeclient/.openapi-generator/FILES | 1 + rust/cubesql/cubeclient/src/models/mod.rs | 2 ++ .../cubeclient/src/models/v1_cube_meta.rs | 3 ++ .../src/models/v1_cube_meta_hierarchy.rs | 29 +++++++++++++++++++ rust/cubesql/cubesql/benches/large_model.rs | 1 + rust/cubesql/cubesql/src/compile/test/mod.rs | 7 +++++ rust/cubesql/cubesql/src/transport/ctx.rs | 2 ++ rust/cubesql/cubesql/src/transport/mod.rs | 1 + 9 files changed, 64 insertions(+) create mode 100644 rust/cubesql/cubeclient/src/models/v1_cube_meta_hierarchy.rs diff --git a/packages/cubejs-api-gateway/openspec.yml b/packages/cubejs-api-gateway/openspec.yml index a895bdb3cbab5..4b04c06dbdcd5 100644 --- a/packages/cubejs-api-gateway/openspec.yml +++ b/packages/cubejs-api-gateway/openspec.yml @@ -170,6 +170,20 @@ components: type: array items: type: "string" + V1CubeMetaHierarchy: + type: "object" + required: + - name + - levels + properties: + name: + type: "string" + title: + type: "string" + levels: + type: "array" + items: + type: "string" V1CubeMeta: type: "object" required: @@ -209,6 +223,10 @@ components: type: "array" items: $ref: "#/components/schemas/V1CubeMetaFolder" + hierarchies: + type: "array" + items: + $ref: "#/components/schemas/V1CubeMetaHierarchy" V1CubeMetaType: type: "string" description: Type of cube diff --git a/rust/cubesql/cubeclient/.openapi-generator/FILES b/rust/cubesql/cubeclient/.openapi-generator/FILES index 2ac921858ba3f..a499650e840fd 100644 --- a/rust/cubesql/cubeclient/.openapi-generator/FILES +++ b/rust/cubesql/cubeclient/.openapi-generator/FILES @@ -5,6 +5,7 @@ src/models/v1_cube_meta.rs src/models/v1_cube_meta_dimension.rs src/models/v1_cube_meta_dimension_granularity.rs src/models/v1_cube_meta_folder.rs +src/models/v1_cube_meta_hierarchy.rs src/models/v1_cube_meta_join.rs src/models/v1_cube_meta_measure.rs src/models/v1_cube_meta_segment.rs diff --git a/rust/cubesql/cubeclient/src/models/mod.rs b/rust/cubesql/cubeclient/src/models/mod.rs index 361e96528dbc3..cb678c35165a0 100644 --- a/rust/cubesql/cubeclient/src/models/mod.rs +++ b/rust/cubesql/cubeclient/src/models/mod.rs @@ -6,6 +6,8 @@ pub mod v1_cube_meta_dimension_granularity; pub use self::v1_cube_meta_dimension_granularity::V1CubeMetaDimensionGranularity; pub mod v1_cube_meta_folder; pub use self::v1_cube_meta_folder::V1CubeMetaFolder; +pub mod v1_cube_meta_hierarchy; +pub use self::v1_cube_meta_hierarchy::V1CubeMetaHierarchy; pub mod v1_cube_meta_join; pub use self::v1_cube_meta_join::V1CubeMetaJoin; pub mod v1_cube_meta_measure; diff --git a/rust/cubesql/cubeclient/src/models/v1_cube_meta.rs b/rust/cubesql/cubeclient/src/models/v1_cube_meta.rs index cc81b7aa7cb36..e47c9349af3d6 100644 --- a/rust/cubesql/cubeclient/src/models/v1_cube_meta.rs +++ b/rust/cubesql/cubeclient/src/models/v1_cube_meta.rs @@ -30,6 +30,8 @@ pub struct V1CubeMeta { pub joins: Option>, #[serde(rename = "folders", skip_serializing_if = "Option::is_none")] pub folders: Option>, + #[serde(rename = "hierarchies", skip_serializing_if = "Option::is_none")] + pub hierarchies: Option>, } impl V1CubeMeta { @@ -51,6 +53,7 @@ impl V1CubeMeta { segments, joins: None, folders: None, + hierarchies: None, } } } diff --git a/rust/cubesql/cubeclient/src/models/v1_cube_meta_hierarchy.rs b/rust/cubesql/cubeclient/src/models/v1_cube_meta_hierarchy.rs new file mode 100644 index 0000000000000..167d09457968d --- /dev/null +++ b/rust/cubesql/cubeclient/src/models/v1_cube_meta_hierarchy.rs @@ -0,0 +1,29 @@ +/* + * Cube.js + * + * Cube.js Swagger Schema + * + * The version of the OpenAPI document: 1.0.0 + * + * Generated by: https://openapi-generator.tech + */ + +#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +pub struct V1CubeMetaHierarchy { + #[serde(rename = "name")] + pub name: String, + #[serde(rename = "title", skip_serializing_if = "Option::is_none")] + pub title: Option, + #[serde(rename = "levels")] + pub levels: Vec, +} + +impl V1CubeMetaHierarchy { + pub fn new(name: String, levels: Vec) -> V1CubeMetaHierarchy { + V1CubeMetaHierarchy { + name, + title: None, + levels, + } + } +} diff --git a/rust/cubesql/cubesql/benches/large_model.rs b/rust/cubesql/cubesql/benches/large_model.rs index 5565a266ae67d..34e956d0bb1a9 100644 --- a/rust/cubesql/cubesql/benches/large_model.rs +++ b/rust/cubesql/cubesql/benches/large_model.rs @@ -101,6 +101,7 @@ pub fn get_large_model_test_meta(dims: usize) -> Vec { segments: vec![], joins: None, folders: None, + hierarchies: None, meta: None, }] } diff --git a/rust/cubesql/cubesql/src/compile/test/mod.rs b/rust/cubesql/cubesql/src/compile/test/mod.rs index c9b789270b973..2f52b9f3992a0 100644 --- a/rust/cubesql/cubesql/src/compile/test/mod.rs +++ b/rust/cubesql/cubesql/src/compile/test/mod.rs @@ -160,6 +160,7 @@ pub fn get_test_meta() -> Vec { relationship: "belongsTo".to_string(), }]), folders: None, + hierarchies: None, meta: None, }, CubeMeta { @@ -208,6 +209,7 @@ pub fn get_test_meta() -> Vec { relationship: "belongsTo".to_string(), }]), folders: None, + hierarchies: None, meta: None, }, CubeMeta { @@ -227,6 +229,7 @@ pub fn get_test_meta() -> Vec { segments: vec![], joins: None, folders: None, + hierarchies: None, meta: None, }, CubeMeta { @@ -299,6 +302,7 @@ pub fn get_test_meta() -> Vec { segments: Vec::new(), joins: Some(Vec::new()), folders: None, + hierarchies: None, meta: None, }, CubeMeta { @@ -408,6 +412,7 @@ pub fn get_test_meta() -> Vec { segments: Vec::new(), joins: Some(Vec::new()), folders: None, + hierarchies: None, meta: None, }, ] @@ -431,6 +436,7 @@ pub fn get_string_cube_meta() -> Vec { segments: vec![], joins: None, folders: None, + hierarchies: None, meta: None, }] } @@ -471,6 +477,7 @@ pub fn get_sixteen_char_member_cube() -> Vec { segments: vec![], joins: None, folders: None, + hierarchies: None, meta: None, }] } diff --git a/rust/cubesql/cubesql/src/transport/ctx.rs b/rust/cubesql/cubesql/src/transport/ctx.rs index 389623d510f88..321a7c349a9a1 100644 --- a/rust/cubesql/cubesql/src/transport/ctx.rs +++ b/rust/cubesql/cubesql/src/transport/ctx.rs @@ -235,6 +235,7 @@ mod tests { segments: vec![], joins: None, folders: None, + hierarchies: None, meta: None, }, CubeMeta { @@ -247,6 +248,7 @@ mod tests { segments: vec![], joins: None, folders: None, + hierarchies: None, meta: None, }, ]; diff --git a/rust/cubesql/cubesql/src/transport/mod.rs b/rust/cubesql/cubesql/src/transport/mod.rs index 4e4103202214a..4f2afe344384d 100644 --- a/rust/cubesql/cubesql/src/transport/mod.rs +++ b/rust/cubesql/cubesql/src/transport/mod.rs @@ -10,6 +10,7 @@ pub type CubeMetaMeasure = cubeclient::models::V1CubeMetaMeasure; pub type CubeMetaSegment = cubeclient::models::V1CubeMetaSegment; pub type CubeMetaJoin = cubeclient::models::V1CubeMetaJoin; pub type CubeMetaFolder = cubeclient::models::V1CubeMetaFolder; +pub type CubeMetaHierarchy = cubeclient::models::V1CubeMetaHierarchy; // Request/Response pub type TransportLoadResponse = cubeclient::models::V1LoadResponse; pub type TransportLoadRequestQuery = cubeclient::models::V1LoadRequestQuery;