Skip to content

Commit 22f39de

Browse files
authored
Merge pull request #17508 from aalexandrov/explain_remove_old
Closes https://github.com/MaterializeInc/materialize/issues/17360
2 parents f8be15e + 076c734 commit 22f39de

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

100 files changed

+2177
-3847
lines changed

src/adapter/src/catalog.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ use mz_ore::metrics::MetricsRegistry;
4646
use mz_ore::now::{to_datetime, EpochMillis, NowFn};
4747
use mz_persist_client::cfg::PersistParameters;
4848
use mz_pgrepr::oid::FIRST_USER_OID;
49-
use mz_repr::{explain_new::ExprHumanizer, Diff, GlobalId, RelationDesc, ScalarType};
49+
use mz_repr::{explain::ExprHumanizer, Diff, GlobalId, RelationDesc, ScalarType};
5050
use mz_secrets::InMemorySecretsController;
5151
use mz_sql::ast::display::AstDisplay;
5252
use mz_sql::ast::Expr;

src/adapter/src/coord.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ use mz_ore::tracing::OpenTelemetryContext;
101101
use mz_ore::{stack, task};
102102
use mz_persist_client::usage::StorageUsageClient;
103103
use mz_persist_client::ShardId;
104-
use mz_repr::explain_new::ExplainFormat;
104+
use mz_repr::explain::ExplainFormat;
105105
use mz_repr::{Datum, Diff, GlobalId, Row, Timestamp};
106106
use mz_secrets::SecretsController;
107107
use mz_sql::ast::{CreateSourceStatement, CreateSubsourceStatement, Raw, Statement};

src/adapter/src/coord/peek.rs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,8 @@ use mz_ore::cast::CastFrom;
3232
use mz_ore::str::Indent;
3333
use mz_ore::str::StrExt;
3434
use mz_ore::tracing::OpenTelemetryContext;
35-
use mz_repr::explain_new::{
36-
fmt_text_constant_rows, separated_text, CompactScalarSeq, DisplayText, ExprHumanizer, Indices,
37-
};
35+
use mz_repr::explain::text::{fmt_text_constant_rows, separated_text, DisplayText};
36+
use mz_repr::explain::{CompactScalarSeq, ExprHumanizer, Indices};
3837
use mz_repr::{Diff, GlobalId, RelationType, Row};
3938

4039
use crate::client::ConnectionId;
@@ -564,10 +563,9 @@ fn consolidate_constant_updates(rows: Vec<(Row, Diff)>) -> Vec<(Row, Diff)> {
564563
mod tests {
565564
use mz_expr::{func::IsNull, MapFilterProject, UnaryFunc};
566565
use mz_ore::str::Indent;
567-
use mz_repr::{
568-
explain_new::{text_string_at, DummyHumanizer, RenderingContext},
569-
ColumnType, Datum, ScalarType,
570-
};
566+
use mz_repr::explain::text::text_string_at;
567+
use mz_repr::explain::{DummyHumanizer, RenderingContext};
568+
use mz_repr::{ColumnType, Datum, ScalarType};
571569

572570
use super::*;
573571

src/adapter/src/coord/sequencer.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ use mz_expr::{
3636
OptimizedMirRelationExpr, RowSetFinishing,
3737
};
3838
use mz_ore::task;
39-
use mz_repr::explain_new::{ExplainFormat, Explainee};
39+
use mz_repr::explain::{ExplainFormat, Explainee};
4040
use mz_repr::{Datum, Diff, GlobalId, RelationDesc, Row, RowArena, Timestamp};
4141
use mz_sql::ast::{ExplainStage, IndexOptionName, ObjectType};
4242
use mz_sql::catalog::CatalogItem as SqlCatalogItem;
@@ -79,7 +79,7 @@ use crate::coord::{
7979
SinkConnectionReady, DEFAULT_LOGICAL_COMPACTION_WINDOW_TS,
8080
};
8181
use crate::error::AdapterError;
82-
use crate::explain_new::optimizer_trace::OptimizerTrace;
82+
use crate::explain::optimizer_trace::OptimizerTrace;
8383
use crate::metrics;
8484
use crate::notice::AdapterNotice;
8585
use crate::session::vars::{
@@ -2707,7 +2707,7 @@ impl Coordinator {
27072707
plan: ExplainPlan,
27082708
) -> Result<ExecuteResponse, AdapterError> {
27092709
use mz_compute_client::plan::Plan;
2710-
use mz_repr::explain_new::trace_plan;
2710+
use mz_repr::explain::trace_plan;
27112711
use ExplainStage::*;
27122712

27132713
let cluster = self.catalog.active_cluster(session)?.id;
@@ -2755,7 +2755,7 @@ impl Coordinator {
27552755
&optimized_plan,
27562756
&mut dataflow,
27572757
)?;
2758-
mz_repr::explain_new::trace_plan(&dataflow);
2758+
mz_repr::explain::trace_plan(&dataflow);
27592759
Ok(dataflow)
27602760
},
27612761
)?;

src/adapter/src/coord/timestamp_selection.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use tracing::{event, Level};
1919

2020
use mz_compute_client::controller::ComputeInstanceId;
2121
use mz_expr::MirScalarExpr;
22-
use mz_repr::explain_new::ExprHumanizer;
22+
use mz_repr::explain::ExprHumanizer;
2323
use mz_repr::{RowArena, ScalarType, Timestamp, TimestampManipulation};
2424
use mz_sql::plan::QueryWhen;
2525
use mz_storage_client::types::sources::Timeline;

src/adapter/src/error.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use mz_compute_client::controller::error as compute_error;
1919
use mz_expr::{EvalError, UnmaterializableFunc};
2020
use mz_ore::stack::RecursionLimitError;
2121
use mz_ore::str::StrExt;
22-
use mz_repr::explain_new::ExplainError;
22+
use mz_repr::explain::ExplainError;
2323
use mz_repr::NotNullViolation;
2424
use mz_sql::plan::PlanError;
2525
use mz_storage_client::controller::StorageError;

src/adapter/src/explain_new/fast_path/mod.rs renamed to src/adapter/src/explain/fast_path/mod.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,8 @@
1111
1212
use std::collections::BTreeMap;
1313

14-
use mz_expr::explain_new::ExplainMultiPlan;
15-
use mz_repr::explain_new::{
16-
AnnotatedPlan, Explain, ExplainConfig, ExplainError, UnsupportedFormat,
17-
};
14+
use mz_expr::explain::ExplainMultiPlan;
15+
use mz_repr::explain::{AnnotatedPlan, Explain, ExplainConfig, ExplainError, UnsupportedFormat};
1816

1917
use crate::coord::peek::FastPathPlan;
2018

src/adapter/src/explain_new/hir/mod.rs renamed to src/adapter/src/explain/hir/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
//! `EXPLAIN` support for HIR structures.
1111
12-
use mz_repr::explain_new::{Explain, ExplainConfig, ExplainError};
12+
use mz_repr::explain::{Explain, ExplainConfig, ExplainError};
1313
use mz_sql::plan::HirRelationExpr;
1414

1515
use super::Explainable;

src/adapter/src/explain_new/lir/mod.rs renamed to src/adapter/src/explain/lir/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
1212
use mz_compute_client::plan::Plan;
1313
use mz_compute_client::types::dataflows::DataflowDescription;
14-
use mz_repr::explain_new::{Explain, ExplainConfig, ExplainError};
14+
use mz_repr::explain::{Explain, ExplainConfig, ExplainError};
1515

1616
use super::Explainable;
1717

src/adapter/src/explain_new/mir/mod.rs renamed to src/adapter/src/explain/mir/mod.rs

Lines changed: 24 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,22 @@
88
// by the Apache License, Version 2.0.
99

1010
//! `EXPLAIN` support for MIR structures.
11-
12-
use std::collections::BTreeMap;
11+
//!
12+
//! The specialized [`Explain`] implementation for an [`MirRelationExpr`]
13+
//! wrapped in an [`Explainable`] newtype struct allows us to interpret more
14+
//! [`ExplainConfig`] options. This is the case because attribute derivation and
15+
//! let normalization are defined in [`mz_transform`] and conssequently are not
16+
//! available for the default [`Explain`] implementation for [`MirRelationExpr`]
17+
//! in [`mz_expr`].
1318
1419
use mz_compute_client::types::dataflows::DataflowDescription;
15-
use mz_expr::{
16-
explain_new::{enforce_linear_chains, ExplainContext, ExplainMultiPlan, ExplainSinglePlan},
17-
visit::Visit,
18-
MirRelationExpr, OptimizedMirRelationExpr,
19-
};
20-
use mz_ore::{stack::RecursionLimitError, str::bracketed, str::separated};
21-
use mz_repr::explain_new::{
22-
AnnotatedPlan, Attributes, Explain, ExplainConfig, ExplainError, UnsupportedFormat,
23-
};
24-
use mz_transform::attribute::{
25-
Arity, DerivedAttributes, NonNegative, RelationType, SubtreeSize, UniqueKeys,
20+
use mz_expr::explain::{
21+
enforce_linear_chains, ExplainContext, ExplainMultiPlan, ExplainSinglePlan,
2622
};
23+
use mz_expr::{MirRelationExpr, OptimizedMirRelationExpr};
24+
use mz_repr::explain::{Explain, ExplainConfig, ExplainError, UnsupportedFormat};
25+
use mz_transform::attribute::annotate_plan;
26+
use mz_transform::normalize_lets::normalize_lets;
2727

2828
use super::Explainable;
2929

@@ -68,12 +68,13 @@ impl<'a> Explainable<'a, MirRelationExpr> {
6868
// normalize the representation of nested Let bindings
6969
// and enforce sequential Let binding IDs
7070
if !config.raw_plans {
71-
mz_transform::normalize_lets::normalize_lets(self.0)
72-
.map_err(|e| ExplainError::UnknownError(e.to_string()))?;
71+
normalize_lets(self.0).map_err(|e| ExplainError::UnknownError(e.to_string()))?;
7372
}
7473

75-
let plan = try_from(context, self.0)?;
76-
Ok(ExplainSinglePlan { context, plan })
74+
Ok(ExplainSinglePlan {
75+
context,
76+
plan: annotate_plan(self.0, context)?,
77+
})
7778
}
7879
}
7980

@@ -115,25 +116,26 @@ impl<'a> Explainable<'a, DataflowDescription<OptimizedMirRelationExpr>> {
115116
.iter_mut()
116117
.rev()
117118
.map(|build_desc| {
119+
let plan = build_desc.plan.as_inner_mut();
120+
118121
// normalize the representation as linear chains
119122
// (this implies !config.raw_plans by construction)
120123
if config.linear_chains {
121-
enforce_linear_chains(build_desc.plan.as_inner_mut())?;
124+
enforce_linear_chains(plan)?;
122125
};
123126
// unless raw plans are explicitly requested
124127
// normalize the representation of nested Let bindings
125128
// and enforce sequential Let binding IDs
126129
if !config.raw_plans {
127-
mz_transform::normalize_lets::normalize_lets(build_desc.plan.as_inner_mut())
128-
.map_err(|e| ExplainError::UnknownError(e.to_string()))?;
130+
normalize_lets(plan).map_err(|e| ExplainError::UnknownError(e.to_string()))?;
129131
}
130132

131133
let id = context
132134
.humanizer
133135
.humanize_id(build_desc.id)
134136
.unwrap_or_else(|| build_desc.id.to_string());
135-
let plan = try_from(context, build_desc.plan.as_inner())?;
136-
Ok((id, plan))
137+
138+
Ok((id, annotate_plan(plan, context)?))
137139
})
138140
.collect::<Result<Vec<_>, ExplainError>>()?;
139141

@@ -159,79 +161,3 @@ impl<'a> Explainable<'a, DataflowDescription<OptimizedMirRelationExpr>> {
159161
})
160162
}
161163
}
162-
163-
fn try_from<'a>(
164-
context: &'a ExplainContext,
165-
plan: &'a MirRelationExpr,
166-
) -> Result<AnnotatedPlan<'a, MirRelationExpr>, RecursionLimitError> {
167-
let mut annotations = BTreeMap::<&MirRelationExpr, Attributes>::default();
168-
let config = context.config;
169-
170-
if config.requires_attributes() {
171-
// get the annotation keys
172-
let subtree_refs = plan.post_order_vec();
173-
// get the annotation values
174-
let mut explain_attrs = DerivedAttributes::from(config);
175-
plan.visit(&mut explain_attrs)?;
176-
177-
if config.subtree_size {
178-
for (expr, attr) in std::iter::zip(
179-
subtree_refs.iter(),
180-
explain_attrs.remove_results::<SubtreeSize>().into_iter(),
181-
) {
182-
let attrs = annotations.entry(expr).or_default();
183-
attrs.subtree_size = Some(attr);
184-
}
185-
}
186-
if config.non_negative {
187-
for (expr, attr) in std::iter::zip(
188-
subtree_refs.iter(),
189-
explain_attrs.remove_results::<NonNegative>().into_iter(),
190-
) {
191-
let attrs = annotations.entry(expr).or_default();
192-
attrs.non_negative = Some(attr);
193-
}
194-
}
195-
196-
if config.arity {
197-
for (expr, attr) in std::iter::zip(
198-
subtree_refs.iter(),
199-
explain_attrs.remove_results::<Arity>().into_iter(),
200-
) {
201-
let attrs = annotations.entry(expr).or_default();
202-
attrs.arity = Some(attr);
203-
}
204-
}
205-
206-
if config.types {
207-
for (expr, types) in std::iter::zip(
208-
subtree_refs.iter(),
209-
explain_attrs.remove_results::<RelationType>().into_iter(),
210-
) {
211-
let humanized_columns = types
212-
.into_iter()
213-
.map(|c| context.humanizer.humanize_column_type(&c))
214-
.collect::<Vec<_>>();
215-
let attr = bracketed("(", ")", separated(", ", humanized_columns)).to_string();
216-
let attrs = annotations.entry(expr).or_default();
217-
attrs.types = Some(attr);
218-
}
219-
}
220-
221-
if config.keys {
222-
for (expr, keys) in std::iter::zip(
223-
subtree_refs.iter(),
224-
explain_attrs.remove_results::<UniqueKeys>().into_iter(),
225-
) {
226-
let formatted_keys = keys
227-
.into_iter()
228-
.map(|key_set| bracketed("[", "]", separated(", ", key_set)).to_string());
229-
let attr = bracketed("(", ")", separated(", ", formatted_keys)).to_string();
230-
let attrs = annotations.entry(expr).or_default();
231-
attrs.keys = Some(attr);
232-
}
233-
}
234-
}
235-
236-
Ok(AnnotatedPlan { plan, annotations })
237-
}

0 commit comments

Comments
 (0)