Skip to content

Commit ba753d0

Browse files
authored
perf(cubesql): Avoid allocations in MetaContext methods (#9228)
1 parent d2b125e commit ba753d0

File tree

13 files changed

+132
-107
lines changed

13 files changed

+132
-107
lines changed

packages/cubejs-backend-native/Cargo.lock

Lines changed: 10 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/cubenativeutils/Cargo.lock

Lines changed: 11 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/cubesql/Cargo.lock

Lines changed: 13 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/cubesql/cubesql/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ sqlparser = { git = 'https://github.com/cube-js/sqlparser-rs.git', rev = "6a54d2
2121
base64 = "0.13.0"
2222
tokio = { version = "^1.35", features = ["full", "rt", "tracing"] }
2323
serde = { version = "^1.0", features = ["derive"] }
24-
itertools = "0.10.2"
24+
itertools = "0.14.0"
2525
serde_json = "^1.0"
2626
bytes = "1.2"
2727
futures = "0.3.23"

rust/cubesql/cubesql/src/compile/rewrite/converter.rs

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1551,14 +1551,13 @@ impl LanguageToLogicalPlanConverter {
15511551
match_data_node!(node_by_id, measure_params[0], MeasureName);
15521552
let expr = self.to_expr(measure_params[1])?;
15531553
query_measures.push(measure.to_string());
1554-
let data_type = self
1555-
.cube_context
1556-
.meta
1557-
.find_df_data_type(measure.to_string())
1558-
.ok_or(CubeError::internal(format!(
1559-
"Can't find measure '{}'",
1560-
measure
1561-
)))?;
1554+
let data_type =
1555+
self.cube_context.meta.find_df_data_type(&measure).ok_or(
1556+
CubeError::internal(format!(
1557+
"Can't find measure '{}'",
1558+
measure
1559+
)),
1560+
)?;
15621561
fields.push((
15631562
DFField::new(
15641563
expr_relation(&expr),
@@ -1608,14 +1607,13 @@ impl LanguageToLogicalPlanConverter {
16081607
LogicalPlanLanguage::Dimension(params) => {
16091608
let dimension = match_data_node!(node_by_id, params[0], DimensionName);
16101609
let expr = self.to_expr(params[1])?;
1611-
let data_type = self
1612-
.cube_context
1613-
.meta
1614-
.find_df_data_type(dimension.to_string())
1615-
.ok_or(CubeError::internal(format!(
1616-
"Can't find dimension '{}'",
1617-
dimension
1618-
)))?;
1610+
let data_type =
1611+
self.cube_context.meta.find_df_data_type(&dimension).ok_or(
1612+
CubeError::internal(format!(
1613+
"Can't find dimension '{}'",
1614+
dimension
1615+
)),
1616+
)?;
16191617
query_dimensions.push(dimension.to_string());
16201618
fields.push((
16211619
DFField::new(
@@ -1705,7 +1703,7 @@ impl LanguageToLogicalPlanConverter {
17051703
if self
17061704
.cube_context
17071705
.meta
1708-
.is_synthetic_field(column.member_name().to_string())
1706+
.is_synthetic_field(column.member_name())
17091707
{
17101708
fields.push((
17111709
DFField::new(

rust/cubesql/cubesql/src/compile/rewrite/cost.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ impl BestCubePlan {
143143

144144
let time_dimensions_used_as_dimensions = match enode {
145145
LogicalPlanLanguage::DimensionName(DimensionName(name)) => {
146-
if let Some(dimension) = self.meta_context.find_dimension_with_name(name.clone()) {
146+
if let Some(dimension) = self.meta_context.find_dimension_with_name(name) {
147147
if dimension.is_time() {
148148
1
149149
} else {

rust/cubesql/cubesql/src/compile/rewrite/rules/filters.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3730,15 +3730,15 @@ impl FilterRules {
37303730
}
37313731
}
37323732

3733-
fn filter_member_name(
3733+
fn filter_member_name<'meta>(
37343734
egraph: &mut CubeEGraph,
37353735
subst: &Subst,
3736-
meta_context: &Arc<MetaContext>,
3736+
meta_context: &'meta MetaContext,
37373737
alias_to_cube_var: Var,
37383738
column_var: Var,
37393739
members_var: Var,
37403740
aliases: &Vec<(String, String)>,
3741-
) -> Option<(String, V1CubeMeta)> {
3741+
) -> Option<(String, &'meta V1CubeMeta)> {
37423742
Self::filter_member_name_with_granularity(
37433743
egraph,
37443744
subst,
@@ -3751,15 +3751,15 @@ impl FilterRules {
37513751
.map(|(name, _, meta)| (name, meta))
37523752
}
37533753

3754-
fn filter_member_name_with_granularity(
3754+
fn filter_member_name_with_granularity<'meta>(
37553755
egraph: &mut CubeEGraph,
37563756
subst: &Subst,
3757-
meta_context: &Arc<MetaContext>,
3757+
meta_context: &'meta MetaContext,
37583758
alias_to_cube_var: Var,
37593759
column_var: Var,
37603760
members_var: Var,
37613761
aliases: &Vec<(String, String)>,
3762-
) -> Option<(String, Option<String>, V1CubeMeta)> {
3762+
) -> Option<(String, Option<String>, &'meta V1CubeMeta)> {
37633763
let alias_to_cubes: Vec<_> =
37643764
var_iter!(egraph[subst[alias_to_cube_var]], FilterReplacerAliasToCube)
37653765
.cloned()

rust/cubesql/cubesql/src/compile/rewrite/rules/members.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2166,7 +2166,7 @@ impl MemberRules {
21662166
.cloned()
21672167
{
21682168
if let Some(measure) =
2169-
meta_context.find_measure_with_name(measure_name.to_string())
2169+
meta_context.find_measure_with_name(&measure_name)
21702170
{
21712171
let measure_cube_name = measure_name.split(".").next().unwrap();
21722172
if let Some(((_, cube_alias), _)) = alias_to_cube
@@ -2205,7 +2205,7 @@ impl MemberRules {
22052205
}
22062206

22072207
if let Some(dimension) =
2208-
meta_context.find_dimension_with_name(measure_name.to_string())
2208+
meta_context.find_dimension_with_name(&measure_name)
22092209
{
22102210
let alias_to_cube = alias_to_cube.clone();
22112211
subst.insert(
@@ -2309,7 +2309,7 @@ impl MemberRules {
23092309
call_agg_type,
23102310
alias,
23112311
measure_out_var,
2312-
cube_alias,
2312+
cube_alias.to_string(),
23132313
subst[aggr_expr_var],
23142314
alias_to_cube,
23152315
disable_strict_agg_type_match,

rust/cubesql/cubesql/src/compile/rewrite/rules/old_split.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4922,7 +4922,7 @@ impl OldSplitRules {
49224922
// TODO unwrap
49234923
let name = expr.name(&DFSchema::empty()).unwrap();
49244924
let column1 = Column {
4925-
relation: Some(alias),
4925+
relation: Some(alias.to_string()),
49264926
name: name.to_string(),
49274927
};
49284928
let alias = egraph.add(LogicalPlanLanguage::ColumnExprColumn(

rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/aggregate.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -878,9 +878,7 @@ impl WrapperRules {
878878
&column.name,
879879
)
880880
{
881-
if let Some(measure) =
882-
meta.find_measure_with_name(member.to_string())
883-
{
881+
if let Some(measure) = meta.find_measure_with_name(member) {
884882
if call_agg_type.is_none()
885883
|| measure.is_same_agg_type(
886884
call_agg_type.as_ref().unwrap(),

0 commit comments

Comments
 (0)