Skip to content

Commit 3674ef8

Browse files
committed
in work
1 parent abc8c6d commit 3674ef8

File tree

4 files changed

+17
-56
lines changed

4 files changed

+17
-56
lines changed

packages/cubejs-schema-compiler/src/adapter/BaseQuery.js

Lines changed: 2 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1899,53 +1899,8 @@ export class BaseQuery {
18991899
*/
19001900
intervalAndMinimalTimeUnit(interval) {
19011901
const intervalParsed = parseSqlInterval(interval);
1902-
const intKeys = Object.keys(intervalParsed).length;
1903-
1904-
if (intervalParsed.year && intKeys === 1) {
1905-
return [interval, 'year'];
1906-
} else if (intervalParsed.year && intervalParsed.month && intKeys === 2) {
1907-
return [interval, 'month'];
1908-
} else if (intervalParsed.year && intervalParsed.month && intervalParsed.day && intKeys === 3) {
1909-
return [interval, 'day'];
1910-
} else if (intervalParsed.year && intervalParsed.month && intervalParsed.day && intervalParsed.hour && intKeys === 4) {
1911-
return [interval, 'hour'];
1912-
} else if (intervalParsed.year && intervalParsed.month && intervalParsed.day && intervalParsed.hour && intervalParsed.minute && intKeys === 5) {
1913-
return [interval, 'minute'];
1914-
} else if (intervalParsed.year && intervalParsed.month && intervalParsed.day && intervalParsed.hour && intervalParsed.minute && intervalParsed.second && intKeys === 6) {
1915-
return [interval, 'second'];
1916-
} else if (intervalParsed.quarter && intKeys === 1) {
1917-
return [interval, 'quarter'];
1918-
} else if (intervalParsed.month && intKeys === 1) {
1919-
return [interval, 'month'];
1920-
} else if (intervalParsed.month && intervalParsed.day && intKeys === 2) {
1921-
return [interval, 'day'];
1922-
} else if (intervalParsed.month && intervalParsed.day && intervalParsed.hour && intKeys === 3) {
1923-
return [interval, 'hour'];
1924-
} else if (intervalParsed.month && intervalParsed.day && intervalParsed.hour && intervalParsed.minute && intKeys === 4) {
1925-
return [interval, 'minute'];
1926-
} else if (intervalParsed.month && intervalParsed.day && intervalParsed.hour && intervalParsed.minute && intervalParsed.second && intKeys === 5) {
1927-
return [interval, 'second'];
1928-
} else if (intervalParsed.week && intKeys === 1) {
1929-
return [interval, 'week'];
1930-
} else if (intervalParsed.day && intKeys === 1) {
1931-
return [interval, 'day'];
1932-
} else if (intervalParsed.day && intervalParsed.hour && intKeys === 2) {
1933-
return [interval, 'hour'];
1934-
} else if (intervalParsed.day && intervalParsed.hour && intervalParsed.minute && intKeys === 3) {
1935-
return [interval, 'minute'];
1936-
} else if (intervalParsed.day && intervalParsed.hour && intervalParsed.minute && intervalParsed.second && intKeys === 4) {
1937-
return [interval, 'second'];
1938-
} else if (intervalParsed.hour && intervalParsed.minute && intKeys === 2) {
1939-
return [interval, 'minute'];
1940-
} else if (intervalParsed.hour && intervalParsed.minute && intervalParsed.second && intKeys === 3) {
1941-
return [interval, 'second'];
1942-
} else if (intervalParsed.minute && intervalParsed.second && intKeys === 2) {
1943-
return [interval, 'second'];
1944-
}
1945-
1946-
// No need to support microseconds.
1947-
1948-
throw new Error(`Cannot transform interval expression "${interval}"`);
1902+
const minGranularity = this.diffTimeUnitForInterval(interval);
1903+
return [interval, minGranularity];
19491904
}
19501905

19511906
commonQuery() {

packages/cubejs-schema-compiler/src/adapter/BigqueryQuery.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ export class BigqueryQuery extends BaseQuery {
8383
* @see https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#interval_type
8484
* It returns a tuple of (formatted interval, timeUnit to use in datediff functions)
8585
*/
86-
public formatInterval(interval: string): [string, string] {
86+
private formatInterval(interval: string): [string, string] {
8787
const intervalParsed = parseSqlInterval(interval);
8888
const intKeys = Object.keys(intervalParsed).length;
8989

rust/cubesqlplanner/cubesqlplanner/src/planner/sql_evaluator/sql_call.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,8 @@ impl SqlCall {
329329
let arg = MemberSqlArg::String(visitor.apply(&v, node_processor.clone(), templates)?);
330330
res.properties.insert(k.clone(), arg);
331331
}
332+
let string_fn = visitor.apply(&dep.base_symbol, node_processor.clone(), templates)?;
333+
res.to_string_fn = Some(string_fn);
332334
Ok(MemberSqlArg::Struct(res))
333335
}
334336

rust/cubesqlplanner/cubesqlplanner/src/planner/sql_evaluator/sql_nodes/evaluate_sql.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ impl SqlNode for EvaluateSqlNode {
2424
node_processor: Rc<dyn SqlNode>,
2525
templates: &PlanSqlTemplates,
2626
) -> Result<String, CubeError> {
27-
match node.as_ref() {
27+
let res = match node.as_ref() {
2828
MemberSymbol::Dimension(ev) => {
2929
let res = ev.evaluate_sql(
3030
visitor,
@@ -81,13 +81,17 @@ impl SqlNode for EvaluateSqlNode {
8181
templates,
8282
),
8383
MemberSymbol::CubeName(ev) => ev.evaluate_sql(),
84-
MemberSymbol::MemberExpression(e) => e.evaluate_sql(
85-
visitor,
86-
node_processor.clone(),
87-
query_tools.clone(),
88-
templates,
89-
),
90-
}
84+
MemberSymbol::MemberExpression(e) => {
85+
let res = e.evaluate_sql(
86+
visitor,
87+
node_processor.clone(),
88+
query_tools.clone(),
89+
templates,
90+
)?;
91+
Ok(res)
92+
}
93+
}?;
94+
Ok(res)
9195
}
9296

9397
fn as_any(self: Rc<Self>) -> Rc<dyn Any> {

0 commit comments

Comments
 (0)