diff --git a/packages/cubejs-api-gateway/openspec.yml b/packages/cubejs-api-gateway/openspec.yml index 24ce4ba88d242..be44c1369937b 100644 --- a/packages/cubejs-api-gateway/openspec.yml +++ b/packages/cubejs-api-gateway/openspec.yml @@ -143,6 +143,8 @@ components: $ref: "#/components/schemas/V1CubeMetaDimensionGranularity" meta: type: "object" + format: + $ref: "#/components/schemas/V1CubeMetaDimensionFormat" V1CubeMetaMeasure: type: "object" required: @@ -163,6 +165,8 @@ components: type: "string" meta: type: "object" + format: + $ref: "#/components/schemas/V1CubeMetaMeasureFormat" aliasMember: description: "When measure is defined in View, it keeps the original path: Cube.measure" type: "string" @@ -263,6 +267,40 @@ components: enum: - "cube" - "view" + V1CubeMetaMeasureFormat: + type: "string" + description: Format of measure + enum: + - "percent" + - "currency" + V1CubeMetaDimensionSimpleFormat: + type: "string" + description: Simple format of dimension + enum: + - "imageUrl" + - "id" + - "link" + - "percent" + - "currency" + V1CubeMetaDimensionLinkFormat: + type: "object" + description: Link format for dimension with label and type + properties: + label: + type: "string" + description: Label for the link + type: + type: "string" + enum: ["link"] + description: Type of the format (must be 'link') + required: + - label + - type + V1CubeMetaDimensionFormat: + oneOf: + - $ref: "#/components/schemas/V1CubeMetaDimensionSimpleFormat" + - $ref: "#/components/schemas/V1CubeMetaDimensionLinkFormat" + description: Format of dimension - can be either a simple string format or an object with link configuration V1MetaResponse: type: "object" properties: diff --git a/rust/cubesql/cubeclient/.openapi-generator/FILES b/rust/cubesql/cubeclient/.openapi-generator/FILES index eb8863fbc4d4b..2571ed7d22425 100644 --- a/rust/cubesql/cubeclient/.openapi-generator/FILES +++ b/rust/cubesql/cubeclient/.openapi-generator/FILES @@ -3,11 +3,15 @@ src/lib.rs src/models/mod.rs src/models/v1_cube_meta.rs src/models/v1_cube_meta_dimension.rs +src/models/v1_cube_meta_dimension_format.rs src/models/v1_cube_meta_dimension_granularity.rs +src/models/v1_cube_meta_dimension_link_format.rs +src/models/v1_cube_meta_dimension_simple_format.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_measure_format.rs src/models/v1_cube_meta_nested_folder.rs src/models/v1_cube_meta_segment.rs src/models/v1_cube_meta_type.rs diff --git a/rust/cubesql/cubeclient/src/models/mod.rs b/rust/cubesql/cubeclient/src/models/mod.rs index 823af0dbd51d5..afd9f0deb3e28 100644 --- a/rust/cubesql/cubeclient/src/models/mod.rs +++ b/rust/cubesql/cubeclient/src/models/mod.rs @@ -2,8 +2,16 @@ pub mod v1_cube_meta; pub use self::v1_cube_meta::V1CubeMeta; pub mod v1_cube_meta_dimension; pub use self::v1_cube_meta_dimension::V1CubeMetaDimension; +pub mod v1_cube_meta_dimension_format; +pub use self::v1_cube_meta_dimension_format::V1CubeMetaDimensionFormat; pub mod v1_cube_meta_dimension_granularity; pub use self::v1_cube_meta_dimension_granularity::V1CubeMetaDimensionGranularity; +pub mod v1_cube_meta_dimension_link_format; +pub use self::v1_cube_meta_dimension_link_format::V1CubeMetaDimensionLinkFormat; +// problem with code-gen, let's rename it as re-export +pub use self::v1_cube_meta_dimension_link_format::Type as V1CubeMetaDimensionLinkFormatType; +pub mod v1_cube_meta_dimension_simple_format; +pub use self::v1_cube_meta_dimension_simple_format::V1CubeMetaDimensionSimpleFormat; pub mod v1_cube_meta_folder; pub use self::v1_cube_meta_folder::V1CubeMetaFolder; pub mod v1_cube_meta_hierarchy; @@ -12,15 +20,18 @@ pub mod v1_cube_meta_join; pub use self::v1_cube_meta_join::V1CubeMetaJoin; pub mod v1_cube_meta_measure; pub use self::v1_cube_meta_measure::V1CubeMetaMeasure; +pub mod v1_cube_meta_measure_format; +pub use self::v1_cube_meta_measure_format::V1CubeMetaMeasureFormat; pub mod v1_cube_meta_nested_folder; -pub use self::v1_cube_meta_nested_folder::V1CubeMetaNestedFolder; -pub use self::v1_cube_meta_nested_folder::V1CubeMetaNestedFolderMember; +pub use self::v1_cube_meta_nested_folder::{V1CubeMetaNestedFolder, V1CubeMetaNestedFolderMember}; pub mod v1_cube_meta_segment; pub use self::v1_cube_meta_segment::V1CubeMetaSegment; pub mod v1_cube_meta_type; pub use self::v1_cube_meta_type::V1CubeMetaType; pub mod v1_error; pub use self::v1_error::V1Error; +pub mod v1_load_continue_wait; +pub use self::v1_load_continue_wait::V1LoadContinueWait; pub mod v1_load_request; pub use self::v1_load_request::V1LoadRequest; pub mod v1_load_request_query; @@ -37,6 +48,8 @@ pub mod v1_load_request_query_join_subquery; pub use self::v1_load_request_query_join_subquery::V1LoadRequestQueryJoinSubquery; pub mod v1_load_request_query_time_dimension; pub use self::v1_load_request_query_time_dimension::V1LoadRequestQueryTimeDimension; +pub mod v1_load_request_query_time_dimension_date_range_filter; +pub use self::v1_load_request_query_time_dimension_date_range_filter::V1LoadRequestQueryTimeDimensionDateRangeFilter; pub mod v1_load_response; pub use self::v1_load_response::V1LoadResponse; pub mod v1_load_result; @@ -45,5 +58,3 @@ pub mod v1_load_result_annotation; pub use self::v1_load_result_annotation::V1LoadResultAnnotation; pub mod v1_meta_response; pub use self::v1_meta_response::V1MetaResponse; -pub mod v1_load_continue_wait; -pub use self::v1_load_continue_wait::V1LoadContinueWait; diff --git a/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension.rs b/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension.rs index dd7781f59d4c0..f9c20bc4b414f 100644 --- a/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension.rs +++ b/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension.rs @@ -30,6 +30,8 @@ pub struct V1CubeMetaDimension { pub granularities: Option>, #[serde(rename = "meta", skip_serializing_if = "Option::is_none")] pub meta: Option, + #[serde(rename = "format", skip_serializing_if = "Option::is_none")] + pub format: Option>, } impl V1CubeMetaDimension { @@ -43,6 +45,7 @@ impl V1CubeMetaDimension { alias_member: None, granularities: None, meta: None, + format: None, } } } diff --git a/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension_format.rs b/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension_format.rs new file mode 100644 index 0000000000000..fccc2eb0df9d6 --- /dev/null +++ b/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension_format.rs @@ -0,0 +1,39 @@ +/* + * Cube.js + * + * Cube.js Swagger Schema + * + * The version of the OpenAPI document: 1.0.0 + * + * Generated by: https://openapi-generator.tech + */ + +use crate::models; +use serde::{Deserialize, Serialize}; + +/// V1CubeMetaDimensionFormat : Format of dimension - can be either a simple string format or an object with link configuration +/// Format of dimension - can be either a simple string format or an object with link configuration +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Eq, Hash, PartialOrd, Ord)] +#[serde(untagged)] +pub enum V1CubeMetaDimensionFormat { + V1CubeMetaDimensionSimpleFormat(models::V1CubeMetaDimensionSimpleFormat), + V1CubeMetaDimensionLinkFormat(Box), +} + +impl Default for V1CubeMetaDimensionFormat { + fn default() -> Self { + Self::V1CubeMetaDimensionSimpleFormat(Default::default()) + } +} +/// Type of the format (must be 'link') +#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] +pub enum Type { + #[serde(rename = "link")] + Link, +} + +impl Default for Type { + fn default() -> Type { + Self::Link + } +} diff --git a/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension_link_format.rs b/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension_link_format.rs new file mode 100644 index 0000000000000..a157ccb2d14b3 --- /dev/null +++ b/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension_link_format.rs @@ -0,0 +1,42 @@ +/* + * Cube.js + * + * Cube.js Swagger Schema + * + * The version of the OpenAPI document: 1.0.0 + * + * Generated by: https://openapi-generator.tech + */ + +use crate::models; +use serde::{Deserialize, Serialize}; + +/// V1CubeMetaDimensionLinkFormat : Link format for dimension with label and type +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize, Eq, Hash, PartialOrd, Ord)] +pub struct V1CubeMetaDimensionLinkFormat { + /// Label for the link + #[serde(rename = "label")] + pub label: String, + /// Type of the format (must be 'link') + #[serde(rename = "type")] + pub r#type: Type, +} + +impl V1CubeMetaDimensionLinkFormat { + /// Link format for dimension with label and type + pub fn new(label: String, r#type: Type) -> V1CubeMetaDimensionLinkFormat { + V1CubeMetaDimensionLinkFormat { label, r#type } + } +} +/// Type of the format (must be 'link') +#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] +pub enum Type { + #[serde(rename = "link")] + Link, +} + +impl Default for Type { + fn default() -> Type { + Self::Link + } +} diff --git a/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension_simple_format.rs b/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension_simple_format.rs new file mode 100644 index 0000000000000..e34814f719d59 --- /dev/null +++ b/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension_simple_format.rs @@ -0,0 +1,46 @@ +/* + * Cube.js + * + * Cube.js Swagger Schema + * + * The version of the OpenAPI document: 1.0.0 + * + * Generated by: https://openapi-generator.tech + */ + +use crate::models; +use serde::{Deserialize, Serialize}; + +/// V1CubeMetaDimensionSimpleFormat : Simple format of dimension +/// Simple format of dimension +#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] +pub enum V1CubeMetaDimensionSimpleFormat { + #[serde(rename = "imageUrl")] + ImageUrl, + #[serde(rename = "id")] + Id, + #[serde(rename = "link")] + Link, + #[serde(rename = "percent")] + Percent, + #[serde(rename = "currency")] + Currency, +} + +impl std::fmt::Display for V1CubeMetaDimensionSimpleFormat { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + match self { + Self::ImageUrl => write!(f, "imageUrl"), + Self::Id => write!(f, "id"), + Self::Link => write!(f, "link"), + Self::Percent => write!(f, "percent"), + Self::Currency => write!(f, "currency"), + } + } +} + +impl Default for V1CubeMetaDimensionSimpleFormat { + fn default() -> V1CubeMetaDimensionSimpleFormat { + Self::ImageUrl + } +} diff --git a/rust/cubesql/cubeclient/src/models/v1_cube_meta_measure.rs b/rust/cubesql/cubeclient/src/models/v1_cube_meta_measure.rs index d08702026c125..ce0224ffbe97a 100644 --- a/rust/cubesql/cubeclient/src/models/v1_cube_meta_measure.rs +++ b/rust/cubesql/cubeclient/src/models/v1_cube_meta_measure.rs @@ -27,6 +27,8 @@ pub struct V1CubeMetaMeasure { pub agg_type: Option, #[serde(rename = "meta", skip_serializing_if = "Option::is_none")] pub meta: Option, + #[serde(rename = "format", skip_serializing_if = "Option::is_none")] + pub format: Option, /// When measure is defined in View, it keeps the original path: Cube.measure #[serde(rename = "aliasMember", skip_serializing_if = "Option::is_none")] pub alias_member: Option, @@ -42,6 +44,7 @@ impl V1CubeMetaMeasure { r#type, agg_type: None, meta: None, + format: None, alias_member: None, } } diff --git a/rust/cubesql/cubeclient/src/models/v1_cube_meta_measure_format.rs b/rust/cubesql/cubeclient/src/models/v1_cube_meta_measure_format.rs new file mode 100644 index 0000000000000..c3690624e64d3 --- /dev/null +++ b/rust/cubesql/cubeclient/src/models/v1_cube_meta_measure_format.rs @@ -0,0 +1,37 @@ +/* + * Cube.js + * + * Cube.js Swagger Schema + * + * The version of the OpenAPI document: 1.0.0 + * + * Generated by: https://openapi-generator.tech + */ + +use crate::models; +use serde::{Deserialize, Serialize}; + +/// V1CubeMetaMeasureFormat : Format of measure +/// Format of measure +#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] +pub enum V1CubeMetaMeasureFormat { + #[serde(rename = "percent")] + Percent, + #[serde(rename = "currency")] + Currency, +} + +impl std::fmt::Display for V1CubeMetaMeasureFormat { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + match self { + Self::Percent => write!(f, "percent"), + Self::Currency => write!(f, "currency"), + } + } +} + +impl Default for V1CubeMetaMeasureFormat { + fn default() -> V1CubeMetaMeasureFormat { + Self::Percent + } +} diff --git a/rust/cubesql/cubeclient/src/models/v1_load_request_query_time_dimension_date_range_filter.rs b/rust/cubesql/cubeclient/src/models/v1_load_request_query_time_dimension_date_range_filter.rs index 7bd1a484ad872..92c415371b0b5 100644 --- a/rust/cubesql/cubeclient/src/models/v1_load_request_query_time_dimension_date_range_filter.rs +++ b/rust/cubesql/cubeclient/src/models/v1_load_request_query_time_dimension_date_range_filter.rs @@ -1,14 +1,15 @@ use serde::{Deserialize, Serialize}; #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] -pub struct V1LoadRequestQueryTimeDimensionDateRangeFilter { -} +pub struct V1LoadRequestQueryTimeDimensionDateRangeFilter {} impl V1LoadRequestQueryTimeDimensionDateRangeFilter { pub fn new() -> V1LoadRequestQueryTimeDimensionDateRangeFilter { - V1LoadRequestQueryTimeDimensionDateRangeFilter { - } + V1LoadRequestQueryTimeDimensionDateRangeFilter {} + } +} +impl Default for V1LoadRequestQueryTimeDimensionDateRangeFilter { + fn default() -> Self { + Self::new() } } - - diff --git a/rust/cubesql/cubeclient/tests/deserialization.rs b/rust/cubesql/cubeclient/tests/deserialization.rs new file mode 100644 index 0000000000000..119b924300174 --- /dev/null +++ b/rust/cubesql/cubeclient/tests/deserialization.rs @@ -0,0 +1,151 @@ +use cubeclient::models::*; + +#[test] +fn test_deserialize_meta_response_with_format_fields() { + let json_data = r#"{ + "cubes": [ + { + "name": "orders", + "type": "cube", + "title": "Orders", + "isVisible": false, + "public": false, + "connectedComponent": 1, + "measures": [ + { + "name": "orders.count", + "title": "Orders Count", + "shortTitle": "Count", + "cumulativeTotal": false, + "cumulative": false, + "type": "number", + "aggType": "count", + "drillMembers": [], + "drillMembersGrouped": { + "measures": [], + "dimensions": [] + }, + "meta": { + "random_field_name": "My custom metadata for meta count" + }, + "isVisible": false, + "public": false + }, + { + "name": "orders.min_amount", + "title": "Orders Min Amount", + "shortTitle": "Min Amount", + "format": "currency", + "cumulativeTotal": false, + "cumulative": false, + "type": "number", + "aggType": "min", + "drillMembers": [], + "drillMembersGrouped": { + "measures": [], + "dimensions": [] + }, + "isVisible": false, + "public": false + }, + { + "name": "orders.total_amount", + "title": "Orders Total Amount", + "shortTitle": "Total Amount", + "format": "currency", + "cumulativeTotal": false, + "cumulative": false, + "type": "number", + "aggType": "sum", + "drillMembers": [], + "drillMembersGrouped": { + "measures": [], + "dimensions": [] + }, + "isVisible": false, + "public": false + } + ], + "dimensions": [ + { + "name": "orders.id", + "title": "Orders Id", + "type": "number", + "shortTitle": "Id", + "suggestFilterValues": true, + "isVisible": false, + "public": false, + "primaryKey": true + }, + { + "name": "orders.order_sum", + "title": "Orders Order Sum", + "type": "number", + "shortTitle": "Order Sum", + "suggestFilterValues": true, + "format": "currency", + "isVisible": false, + "public": false, + "primaryKey": false + } + ], + "segments": [], + "hierarchies": [], + "folders": [], + "nestedFolders": [] + } + ] + }"#; + + // Test basic deserialization + let meta_response: V1MetaResponse = + serde_json::from_str(json_data).expect("Should successfully deserialize meta response"); + + // Verify the response structure + assert!(meta_response.cubes.is_some()); + let cubes = meta_response.cubes.unwrap(); + assert_eq!(cubes.len(), 1); +} + +#[test] +fn test_deserialize_dimension_link_format() { + let json_data = r#"{ + "cubes": [ + { + "name": "test_cube", + "type": "cube", + "measures": [], + "dimensions": [ + { + "name": "test.link_dimension", + "title": "Test Link Dimension", + "type": "string", + "format": { + "type": "link", + "label": "View Details" + } + } + ], + "segments": [] + } + ] + }"#; + + let meta_response: V1MetaResponse = + serde_json::from_str(json_data).expect("Should successfully deserialize link format"); + + let cubes = meta_response.cubes.unwrap(); + let dimension = &cubes[0].dimensions[0]; + + assert_eq!( + dimension.format, + Some(Box::new( + V1CubeMetaDimensionFormat::V1CubeMetaDimensionLinkFormat(Box::new( + V1CubeMetaDimensionLinkFormat { + label: "View Details".to_string(), + r#type: V1CubeMetaDimensionLinkFormatType::Link, + } + )) + )) + ); +} diff --git a/rust/cubesql/cubesql/benches/large_model.rs b/rust/cubesql/cubesql/benches/large_model.rs index 168d126cc105f..a69efbada2a28 100644 --- a/rust/cubesql/cubesql/benches/large_model.rs +++ b/rust/cubesql/cubesql/benches/large_model.rs @@ -73,6 +73,7 @@ pub fn get_large_model_test_meta(dims: usize) -> Vec { agg_type: Some("count".to_string()), meta: None, alias_member: None, + format: None, }, V1CubeMetaMeasure { name: format!("{}.sum", cube_name), @@ -83,6 +84,7 @@ pub fn get_large_model_test_meta(dims: usize) -> Vec { agg_type: Some("sum".to_string()), meta: None, alias_member: None, + format: None, }, ], dimensions: (1..=dims) diff --git a/rust/cubesql/cubesql/src/compile/test/mod.rs b/rust/cubesql/cubesql/src/compile/test/mod.rs index 54589d7713db1..ce0d8fd6576a6 100644 --- a/rust/cubesql/cubesql/src/compile/test/mod.rs +++ b/rust/cubesql/cubesql/src/compile/test/mod.rs @@ -107,6 +107,7 @@ pub fn get_test_meta() -> Vec { agg_type: Some("count".to_string()), meta: None, alias_member: None, + format: None, }, CubeMetaMeasure { name: "KibanaSampleDataEcommerce.maxPrice".to_string(), @@ -117,6 +118,7 @@ pub fn get_test_meta() -> Vec { agg_type: Some("max".to_string()), meta: None, alias_member: None, + format: None, }, CubeMetaMeasure { name: "KibanaSampleDataEcommerce.sumPrice".to_string(), @@ -127,6 +129,7 @@ pub fn get_test_meta() -> Vec { agg_type: Some("sum".to_string()), meta: None, alias_member: None, + format: None, }, CubeMetaMeasure { name: "KibanaSampleDataEcommerce.minPrice".to_string(), @@ -137,6 +140,7 @@ pub fn get_test_meta() -> Vec { agg_type: Some("min".to_string()), meta: None, alias_member: None, + format: None, }, CubeMetaMeasure { name: "KibanaSampleDataEcommerce.avgPrice".to_string(), @@ -147,6 +151,7 @@ pub fn get_test_meta() -> Vec { agg_type: Some("avg".to_string()), meta: None, alias_member: None, + format: None, }, CubeMetaMeasure { name: "KibanaSampleDataEcommerce.countDistinct".to_string(), @@ -157,6 +162,7 @@ pub fn get_test_meta() -> Vec { agg_type: Some("countDistinct".to_string()), meta: None, alias_member: None, + format: None, }, ], segments: vec![ @@ -216,6 +222,7 @@ pub fn get_test_meta() -> Vec { agg_type: Some("countDistinct".to_string()), meta: None, alias_member: None, + format: None, }, CubeMetaMeasure { name: "Logs.agentCountApprox".to_string(), @@ -226,6 +233,7 @@ pub fn get_test_meta() -> Vec { agg_type: Some("countDistinctApprox".to_string()), meta: None, alias_member: None, + format: None, }, ], segments: vec![], @@ -253,6 +261,7 @@ pub fn get_test_meta() -> Vec { agg_type: Some("number".to_string()), meta: None, alias_member: None, + format: None, }], segments: vec![], joins: None, @@ -283,6 +292,7 @@ pub fn get_test_meta() -> Vec { description: None, meta: None, alias_member: None, + format: None, }) .chain( vec![ @@ -295,6 +305,7 @@ pub fn get_test_meta() -> Vec { agg_type: Some("count".to_string()), meta: None, alias_member: None, + format: None, }, CubeMetaMeasure { name: "WideCube.maxPrice".to_string(), @@ -305,6 +316,7 @@ pub fn get_test_meta() -> Vec { agg_type: Some("max".to_string()), meta: None, alias_member: None, + format: None, }, CubeMetaMeasure { name: "WideCube.minPrice".to_string(), @@ -315,6 +327,7 @@ pub fn get_test_meta() -> Vec { agg_type: Some("min".to_string()), meta: None, alias_member: None, + format: None, }, CubeMetaMeasure { name: "WideCube.avgPrice".to_string(), @@ -325,6 +338,7 @@ pub fn get_test_meta() -> Vec { agg_type: Some("avg".to_string()), meta: None, alias_member: None, + format: None, }, CubeMetaMeasure { name: "WideCube.countDistinct".to_string(), @@ -335,6 +349,7 @@ pub fn get_test_meta() -> Vec { agg_type: Some("countDistinct".to_string()), meta: None, alias_member: None, + format: None, }, ] .into_iter(), @@ -388,6 +403,7 @@ pub fn get_test_meta() -> Vec { description: Some(format!("Test number measure {i}")), meta: None, alias_member: None, + format: None, }, CubeMetaMeasure { name: format!("MultiTypeCube.measure_str{}", i), @@ -398,6 +414,7 @@ pub fn get_test_meta() -> Vec { description: Some(format!("Test max(string) measure {i}")), meta: None, alias_member: None, + format: None, }, CubeMetaMeasure { name: format!("MultiTypeCube.measure_date{}", i), @@ -408,6 +425,7 @@ pub fn get_test_meta() -> Vec { description: Some(format!("Test max(time) measure {i}")), meta: None, alias_member: None, + format: None, }, ] }) @@ -422,6 +440,7 @@ pub fn get_test_meta() -> Vec { agg_type: Some("count".to_string()), meta: None, alias_member: None, + format: None, }, CubeMetaMeasure { name: "MultiTypeCube.maxPrice".to_string(), @@ -432,6 +451,7 @@ pub fn get_test_meta() -> Vec { agg_type: Some("max".to_string()), meta: None, alias_member: None, + format: None, }, CubeMetaMeasure { name: "MultiTypeCube.minPrice".to_string(), @@ -442,6 +462,7 @@ pub fn get_test_meta() -> Vec { agg_type: Some("min".to_string()), meta: None, alias_member: None, + format: None, }, CubeMetaMeasure { name: "MultiTypeCube.avgPrice".to_string(), @@ -452,6 +473,7 @@ pub fn get_test_meta() -> Vec { agg_type: Some("avg".to_string()), meta: None, alias_member: None, + format: None, }, CubeMetaMeasure { name: "MultiTypeCube.countDistinct".to_string(), @@ -462,6 +484,7 @@ pub fn get_test_meta() -> Vec { agg_type: Some("countDistinct".to_string()), meta: None, alias_member: None, + format: None, }, ] .into_iter(), @@ -492,6 +515,7 @@ pub fn get_string_cube_meta() -> Vec { r#type: "string".to_string(), agg_type: Some("string".to_string()), meta: None, + format: None, alias_member: None, }], segments: vec![], @@ -519,6 +543,7 @@ pub fn get_sixteen_char_member_cube() -> Vec { r#type: "number".to_string(), agg_type: Some("sum".to_string()), meta: None, + format: None, alias_member: None, }, CubeMetaMeasure { @@ -529,6 +554,7 @@ pub fn get_sixteen_char_member_cube() -> Vec { r#type: "number".to_string(), agg_type: Some("avg".to_string()), meta: None, + format: None, alias_member: None, }, CubeMetaMeasure { @@ -539,6 +565,7 @@ pub fn get_sixteen_char_member_cube() -> Vec { r#type: "number".to_string(), agg_type: Some("count".to_string()), meta: None, + format: None, alias_member: None, }, ], diff --git a/rust/cubesql/cubesql/src/transport/mod.rs b/rust/cubesql/cubesql/src/transport/mod.rs index 4df745ae01b04..9977caa19737a 100644 --- a/rust/cubesql/cubesql/src/transport/mod.rs +++ b/rust/cubesql/cubesql/src/transport/mod.rs @@ -13,6 +13,11 @@ pub type CubeMetaFolder = cubeclient::models::V1CubeMetaFolder; pub type CubeMetaNestedFolder = cubeclient::models::V1CubeMetaNestedFolder; pub type CubeMetaNestedFolderMember = cubeclient::models::V1CubeMetaNestedFolderMember; pub type CubeMetaHierarchy = cubeclient::models::V1CubeMetaHierarchy; +pub type CubeMetaDimensionFormat = cubeclient::models::V1CubeMetaDimensionFormat; +pub type CubeMetaDimensionSimpleFormat = cubeclient::models::V1CubeMetaDimensionSimpleFormat; +pub type CubeMetaDimensionLinkFormat = cubeclient::models::V1CubeMetaDimensionLinkFormat; +pub type CubeMetaDimensionLinkFormatType = cubeclient::models::V1CubeMetaDimensionLinkFormatType; +pub type CubeMetaMeasureFormat = cubeclient::models::V1CubeMetaMeasureFormat; // Request/Response pub type TransportLoadResponse = cubeclient::models::V1LoadResponse; pub type TransportLoadRequestQuery = cubeclient::models::V1LoadRequestQuery;