Skip to content

Commit 578b90c

Browse files
authored
feat: OpenAPI - declare type field for Cube (#8837)
1 parent 9346f21 commit 578b90c

File tree

16 files changed

+133
-67
lines changed

16 files changed

+133
-67
lines changed

packages/cubejs-api-gateway/openspec.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ components:
151151
type: "object"
152152
required:
153153
- name
154+
- type
154155
- measures
155156
- dimensions
156157
- segments
@@ -159,6 +160,8 @@ components:
159160
type: "string"
160161
title:
161162
type: "string"
163+
type:
164+
$ref: "#/components/schemas/V1CubeMetaType"
162165
description:
163166
type: "string"
164167
measures:
@@ -177,6 +180,12 @@ components:
177180
type: "array"
178181
items:
179182
$ref: "#/components/schemas/V1CubeMetaJoin"
183+
V1CubeMetaType:
184+
type: "string"
185+
description: Type of cube
186+
enum:
187+
- "cube"
188+
- "view"
180189
V1MetaResponse:
181190
type: "object"
182191
properties:

packages/cubejs-backend-native/test/meta.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ module.exports = {
55
{
66
name: 'KibanaSampleDataEcommerce',
77
title: 'Ecommerce',
8+
type: 'cube',
89
measures: [
910
{
1011
name: 'KibanaSampleDataEcommerce.count',
@@ -126,6 +127,7 @@ module.exports = {
126127
{
127128
name: 'Logs',
128129
title: 'Logs',
130+
type: 'cube',
129131
measures: [
130132
{
131133
name: 'Logs.count',

rust/cubesql/cubeclient/.openapi-generator/FILES

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ src/models/v1_cube_meta_dimension_granularity.rs
77
src/models/v1_cube_meta_join.rs
88
src/models/v1_cube_meta_measure.rs
99
src/models/v1_cube_meta_segment.rs
10+
src/models/v1_cube_meta_type.rs
1011
src/models/v1_error.rs
1112
src/models/v1_load_request.rs
1213
src/models/v1_load_request_query.rs

rust/cubesql/cubeclient/src/lib.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
// Open spec generator generates ToString methods for enums, let's disable clippy rule as quick
2+
// workaround. TODO: Use new one open spec generator?
3+
#![allow(clippy::to_string_trait_impl)]
4+
15
#[macro_use]
26
extern crate serde_derive;
37

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ pub mod v1_cube_meta_measure;
1010
pub use self::v1_cube_meta_measure::V1CubeMetaMeasure;
1111
pub mod v1_cube_meta_segment;
1212
pub use self::v1_cube_meta_segment::V1CubeMetaSegment;
13+
pub mod v1_cube_meta_type;
14+
pub use self::v1_cube_meta_type::V1CubeMetaType;
1315
pub mod v1_error;
1416
pub use self::v1_error::V1Error;
1517
pub mod v1_load_request;

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ pub struct V1CubeMeta {
1414
pub name: String,
1515
#[serde(rename = "title", skip_serializing_if = "Option::is_none")]
1616
pub title: Option<String>,
17+
#[serde(rename = "type")]
18+
pub r#type: crate::models::V1CubeMetaType,
1719
#[serde(rename = "description", skip_serializing_if = "Option::is_none")]
1820
pub description: Option<String>,
1921
#[serde(rename = "measures")]
@@ -29,13 +31,15 @@ pub struct V1CubeMeta {
2931
impl V1CubeMeta {
3032
pub fn new(
3133
name: String,
34+
r#type: crate::models::V1CubeMetaType,
3235
measures: Vec<crate::models::V1CubeMetaMeasure>,
3336
dimensions: Vec<crate::models::V1CubeMetaDimension>,
3437
segments: Vec<crate::models::V1CubeMetaSegment>,
3538
) -> V1CubeMeta {
3639
V1CubeMeta {
3740
name,
3841
title: None,
42+
r#type,
3943
description: None,
4044
measures,
4145
dimensions,

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,17 @@ pub struct V1CubeMetaDimension {
1515
#[serde(rename = "description", skip_serializing_if = "Option::is_none")]
1616
pub description: Option<String>,
1717
#[serde(rename = "type")]
18-
pub _type: String,
18+
pub r#type: String,
1919
#[serde(rename = "granularities", skip_serializing_if = "Option::is_none")]
2020
pub granularities: Option<Vec<crate::models::V1CubeMetaDimensionGranularity>>,
2121
}
2222

2323
impl V1CubeMetaDimension {
24-
pub fn new(name: String, _type: String) -> V1CubeMetaDimension {
24+
pub fn new(name: String, r#type: String) -> V1CubeMetaDimension {
2525
V1CubeMetaDimension {
2626
name,
2727
description: None,
28-
_type,
28+
r#type,
2929
granularities: None,
3030
}
3131
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,18 @@ pub struct V1CubeMetaMeasure {
1717
#[serde(rename = "description", skip_serializing_if = "Option::is_none")]
1818
pub description: Option<String>,
1919
#[serde(rename = "type")]
20-
pub _type: String,
20+
pub r#type: String,
2121
#[serde(rename = "aggType", skip_serializing_if = "Option::is_none")]
2222
pub agg_type: Option<String>,
2323
}
2424

2525
impl V1CubeMetaMeasure {
26-
pub fn new(name: String, _type: String) -> V1CubeMetaMeasure {
26+
pub fn new(name: String, r#type: String) -> V1CubeMetaMeasure {
2727
V1CubeMetaMeasure {
2828
name,
2929
title: None,
3030
description: None,
31-
_type,
31+
r#type,
3232
agg_type: None,
3333
}
3434
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*
2+
* Cube.js
3+
*
4+
* Cube.js Swagger Schema
5+
*
6+
* The version of the OpenAPI document: 1.0.0
7+
*
8+
* Generated by: https://openapi-generator.tech
9+
*/
10+
11+
/// V1CubeMetaType : Type of cube
12+
13+
/// Type of cube
14+
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
15+
pub enum V1CubeMetaType {
16+
#[serde(rename = "cube")]
17+
Cube,
18+
#[serde(rename = "view")]
19+
View,
20+
}
21+
22+
impl ToString for V1CubeMetaType {
23+
fn to_string(&self) -> String {
24+
match self {
25+
Self::Cube => String::from("cube"),
26+
Self::View => String::from("view"),
27+
}
28+
}
29+
}
30+
31+
impl Default for V1CubeMetaType {
32+
fn default() -> V1CubeMetaType {
33+
Self::Cube
34+
}
35+
}

rust/cubesql/cubesql/benches/large_model.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::{env::set_var, sync::Arc, time::Duration};
22

33
use criterion::{criterion_group, criterion_main, Criterion};
44

5-
use cubeclient::models::{V1CubeMeta, V1CubeMetaDimension, V1CubeMetaMeasure};
5+
use cubeclient::models::{V1CubeMeta, V1CubeMetaDimension, V1CubeMetaMeasure, V1CubeMetaType};
66
use cubesql::{
77
compile::test::{
88
rewrite_engine::{
@@ -72,27 +72,28 @@ pub fn get_large_model_test_meta(dims: usize) -> Vec<V1CubeMeta> {
7272
name: cube_name.clone(),
7373
description: None,
7474
title: None,
75+
r#type: V1CubeMetaType::Cube,
7576
measures: vec![
7677
V1CubeMetaMeasure {
7778
name: format!("{}.count", cube_name),
7879
title: None,
7980
description: None,
80-
_type: "number".to_string(),
81+
r#type: "number".to_string(),
8182
agg_type: Some("count".to_string()),
8283
},
8384
V1CubeMetaMeasure {
8485
name: format!("{}.sum", cube_name),
8586
title: None,
8687
description: None,
87-
_type: "number".to_string(),
88+
r#type: "number".to_string(),
8889
agg_type: Some("sum".to_string()),
8990
},
9091
],
9192
dimensions: (1..=dims)
9293
.map(|n| V1CubeMetaDimension {
9394
name: format!("{}.n{}", cube_name, n),
9495
description: None,
95-
_type: "number".to_string(),
96+
r#type: "number".to_string(),
9697
granularities: None,
9798
})
9899
.collect(),

0 commit comments

Comments
 (0)