Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

explain: support EXPLAIN CREATE MATERIALIZED VIEW #21973

Merged
merged 8 commits into from
Sep 27, 2023
3 changes: 2 additions & 1 deletion ci/test/slt-fast.sh
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,8 @@ tests_without_views=(
test/sqllogictest/timestamp.slt
test/sqllogictest/timestamptz.slt
test/sqllogictest/timezone.slt
test/sqllogictest/tpch.slt
test/sqllogictest/tpch_select.slt
test/sqllogictest/tpch_materialized_view.slt
test/sqllogictest/transactions.slt
test/sqllogictest/type-promotion.slt
test/sqllogictest/typeof.slt
Expand Down
8 changes: 6 additions & 2 deletions src/adapter/src/catalog.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6403,7 +6403,9 @@ impl Catalog {
Plan::CreateView(CreateViewPlan { view, .. }) => {
let optimizer =
Optimizer::logical_optimizer(&mz_transform::typecheck::empty_context());
let optimized_expr = optimizer.optimize(view.expr)?;
let raw_expr = view.expr;
let decorrelated_expr = raw_expr.optimize_and_lower(&plan::OptimizerConfig {})?;
let optimized_expr = optimizer.optimize(decorrelated_expr)?;
Comment on lines +6406 to +6408
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it worth extracting this into a method? It seems like we do it a couple of times.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will be done in #20569.

let desc = RelationDesc::new(optimized_expr.typ(), view.column_names);
CatalogItem::View(View {
create_sql: view.create_sql,
Expand All @@ -6418,7 +6420,9 @@ impl Catalog {
}) => {
let optimizer =
Optimizer::logical_optimizer(&mz_transform::typecheck::empty_context());
let optimized_expr = optimizer.optimize(materialized_view.expr)?;
let raw_expr = materialized_view.expr;
let decorrelated_expr = raw_expr.optimize_and_lower(&plan::OptimizerConfig {})?;
let optimized_expr = optimizer.optimize(decorrelated_expr)?;
let desc = RelationDesc::new(optimized_expr.typ(), materialized_view.column_names);
CatalogItem::MaterializedView(MaterializedView {
create_sql: materialized_view.create_sql,
Expand Down
5 changes: 4 additions & 1 deletion src/adapter/src/catalog/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -701,7 +701,10 @@ impl CatalogState {
Plan::CreateView(CreateViewPlan { view, .. }) => {
let optimizer =
Optimizer::logical_optimizer(&mz_transform::typecheck::empty_context());
let optimized_expr = optimizer.optimize(view.expr)?;
let raw_expr = view.expr;
let decorrelated_expr =
raw_expr.optimize_and_lower(&mz_sql::plan::OptimizerConfig {})?;
let optimized_expr = optimizer.optimize(decorrelated_expr)?;
let desc = RelationDesc::new(optimized_expr.typ(), view.column_names);
CatalogItem::View(View {
create_sql: view.create_sql,
Expand Down
6 changes: 4 additions & 2 deletions src/adapter/src/coord/introspection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@ use mz_expr::CollectionPlan;
use mz_repr::GlobalId;
use mz_sql::catalog::{ErrorMessageObjectDescription, SessionCatalog};
use mz_sql::names::{ResolvedIds, SystemObjectId};
use mz_sql::plan::{ExplainPlanPlan, ExplainTimestampPlan, Explainee, Plan, SubscribeFrom};
use mz_sql::plan::{
ExplainPlanPlan, ExplainTimestampPlan, Explainee, ExplaineeStatement, Plan, SubscribeFrom,
};
use mz_sql::rbac;
use smallvec::SmallVec;

Expand Down Expand Up @@ -53,7 +55,7 @@ pub fn auto_run_on_introspection<'a, 's, 'p>(
},
),
Plan::ExplainPlan(ExplainPlanPlan {
explainee: Explainee::Query { raw_plan, .. },
explainee: Explainee::Statement(ExplaineeStatement::Query { raw_plan, .. }),
..
}) => (
raw_plan.depends_on(),
Expand Down
Loading