Skip to content

Conversation

@mgree
Copy link
Contributor

@mgree mgree commented Mar 7, 2025

Design doc for improving column names in EXPLAIN output.

Rendered text.

Motivation

Tips for reviewer

Checklist

  • This PR has adequate test coverage / QA involvement has been duly considered. (trigger-ci for additional test/nightly runs)
  • This PR has an associated up-to-date design doc, is a design doc (template), or is sufficiently small to not require a design.
  • If this PR evolves an existing $T ⇔ Proto$T mapping (possibly in a backwards-incompatible way), then it is tagged with a T-proto label.
  • If this PR will require changes to cloud orchestration or tests, there is a companion cloud PR to account for those changes that is tagged with the release-blocker label (example).
  • If this PR includes major user-facing behavior changes, I have pinged the relevant PM to schedule a changelog post.

@mgree mgree added A-sql Area: SQL planning T-UX User experience / ergonomics T-debug Theme: improve ability to debug Materialize A-optimization Area: query optimization and transformation A-compute Area: compute A-CLUSTER Topics related to the CLUSTER layer labels Mar 7, 2025
2. Keep track of column names on `usize` column references in
`*RelationExpr`.

In both cases, we will work with `Option<Rc<String>>`, being careful
Copy link
Member

Choose a reason for hiding this comment

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

Any reason to prefer Option<Rc<String>> over Option<Rc<str>>? It doesn't seem we'll ever modify the name. As an alternative, we could use https://crates.io/crates/compact_str to avoid the allocation in most cases.

Copy link
Member

Choose a reason for hiding this comment

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

@ParkMyCar Another instance where an immutable compact_str might be interesting!

Copy link
Contributor

Choose a reason for hiding this comment

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

I've already started making some progress on that, maybe I can wrap it up soon 👀

Copy link
Contributor Author

@mgree mgree Mar 12, 2025

Choose a reason for hiding this comment

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

Nope, str (or immutable compact_str) would be better choices. Will revise.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

There's a small problem with this plan I didn't anticipate: Rc<str> isn't Send, and we put HirScalarExprs into the catalog. 🙃

Is the right fix just changing things to Arc<str>, or are there alternatives I should consider?

Copy link
Contributor

Choose a reason for hiding this comment

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

Arc<str> is the right approach!


The `Project` is the most critical, as projections appear at the top
of nearly every `SELECT` query---the missing `succ_x` in the example
above appears in a `Project`, for example.
Copy link
Contributor

Choose a reason for hiding this comment

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

These Projects often go through MapFilterProject (e.g., CanonicalizeMfp eats up all the Maps, Filters, Projects, creates a MapFilterProject, then optimizes it, and and then converts it back to Map,Filter,Project), so we'll have to augment that also with column names.

`Analysis` bottom-up framework. But `Analysis` is only defined for
MIR. We should build simple, direct versions of these analyses for
LIR---and we can generalize it to a lower-level `Analysis` framework
if we later need it.
Copy link
Contributor

Choose a reason for hiding this comment

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

There is the /home/gabor/materialize/src/compute-types/src/plan/interpret framework for LIR. (Alex and Marcos worked on this.) Could that be used?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Likely! The abstract domain of names should work just fine. I'll probably break PRs into two HIR/MIR and LIR.

@mgree mgree enabled auto-merge (squash) March 19, 2025 15:30
@mgree mgree merged commit 908997e into main Mar 19, 2025
7 checks passed
@mgree mgree deleted the design-doc-sql-hir-mir-column-names branch March 19, 2025 15:42
mgree added a commit that referenced this pull request Mar 20, 2025
…31877)

#31802 introduces the concept of a `NAMESCORE` metric: the percentage of
column references in `EXPLAIN` output which have associated names.

This PR introduces a python script, `namescore`, that implements that
metric.

<details>
<summary>Output on old SLT files (without `WITH (humanized
expressions)`)</summary>

```
group_size_hints.slt: 0.00% (0 / 107)
timezone.slt: 0.00% (0 / 1)
freshmart.slt: 0.00% (0 / 271)
cte.slt: 0.00% (0 / 2)
not-null-propagation.slt: 0.00% (0 / 329)
github-7892.slt: 0.00% (0 / 1)
numeric.slt: 0.00% (0 / 3)
type-promotion.slt: 0.00% (0 / 3)
mz_recent_storage_usage.slt: 0.00% (0 / 2)
github-7688.slt: 0.00% (0 / 1)
github-16036.slt: 0.00% (0 / 88)
privilege_checks.slt: 0.00% (0 / 1)
vars.slt: 0.00% (0 / 1)
subquery.slt: 0.00% (0 / 93)
github-5474.slt: 0.00% (0 / 1)
aggregates.slt: 0.00% (0 / 50)
outer_join.slt: 0.00% (0 / 128)
github-57.slt: 0.00% (0 / 1)
github-5717.slt: 0.00% (0 / 4)
tpch_select.slt: 62.82% (735 / 1170)
jsonb.slt: 0.00% (0 / 4)
github-8261-8463.slt: 0.00% (0 / 4)
github-7467.slt: 0.00% (0 / 2)
system-cluster.slt: 0.00% (0 / 134)
uniqueness_propagation_filter.slt: 0.00% (0 / 149)
limit_expr.slt: 90.68% (107 / 118)
github-2746.slt: 0.00% (0 / 63)
github-8257.slt: 0.00% (0 / 1)
tpch_create_materialized_view.slt: 64.27% (707 / 1100)
cte_lowering.slt: 0.00% (0 / 188)
timedomain.slt: 0.00% (0 / 33)
scalar_subqueries_select_list.slt: 0.00% (0 / 341)
regtype.slt: 0.00% (0 / 1)
outer_join_simplification.slt: 0.00% (0 / 343)
github-17808.slt: 0.00% (0 / 1)
joins.slt: 0.00% (0 / 207)
regclass.slt: 0.00% (0 / 1)
github-8867.slt: 0.00% (0 / 1)
distinct_on.slt: 0.00% (0 / 9)
alter-table.slt: 0.00% (0 / 27)
persist-fast-path.slt: 0.00% (0 / 12)
types.slt: 0.00% (0 / 19)
char.slt: 0.00% (0 / 3)
updates.slt: 0.00% (0 / 2)
github-7821.slt: 0.00% (0 / 1)
order_by.slt: 0.00% (0 / 30)
cluster_features.slt: 0.00% (0 / 280)
parse_ident.slt: 0.00% (0 / 8)
github-2799.slt: 0.00% (0 / 11)
github-2969.slt: 0.00% (0 / 42)
cardinality.slt: 0.00% (0 / 330)
ldbc_bi.slt: 57.26% (1569 / 2740)
timestamptz.slt: 0.00% (0 / 2)
regex.slt: 0.00% (0 / 62)
extract.slt: 0.00% (0 / 1)
transactions.slt: 0.00% (0 / 34)
timestamp.slt: 0.00% (0 / 2)
github-6935.slt: 0.00% (0 / 1)
github-14116.slt: 0.00% (0 / 12)
regressions.slt: 0.00% (0 / 1)
window_funcs.slt: 0.00% (0 / 703)
github-6464.slt: 0.00% (0 / 21)
managed_cluster.slt: 0.00% (0 / 1)
filter-pushdown.slt: 55.04% (71 / 129)
boolean.slt: 0.00% (0 / 42)
record.slt: 0.00% (0 / 10)
temporal.slt: 0.00% (0 / 1)
list.slt: 0.00% (0 / 64)
like.slt: 0.00% (0 / 22)
outer_join_lowering.slt: 95.00% (589 / 620)
funcs.slt: 0.00% (0 / 20)
recursive_type_unioning.slt: 0.00% (0 / 7)
chbench.slt: 0.00% (0 / 1562)
tpch_create_index.slt: 66.49% (742 / 1116)
dates-times.slt: 0.00% (0 / 1)
scoping.slt: 0.00% (0 / 2)
topk.slt: 0.00% (0 / 24)
regproc.slt: 0.00% (0 / 1)
github-5723.slt: 0.00% (0 / 13)
table_func.slt: 0.00% (0 / 74)
github-5536.slt: 0.00% (0 / 17)
arrays.slt: 0.00% (0 / 2)
github-5126.slt: 0.00% (0 / 47)
ldbc_bi_eager.slt: 57.26% (1569 / 2740)
reduce_mfp.slt: 0.00% (0 / 26)
arithmetic.slt: 0.00% (0 / 58)
explain/broken_statements.slt: 0.00% (0 / 1)
explain/aggregates.slt: 0.00% (0 / 205)
explain/physical_plan_aggregates.slt: 0.00% (0 / 321)
explain/materialized_view.slt: 0.00% (0 / 47)
explain/physical_plan_as_text.slt: 0.00% (0 / 979)
explain/pushdown.slt: 0.00% (0 / 2)
explain/optimized_plan_as_text_redacted.slt: 69.47% (273 / 393)
explain/replan_catalog_items.slt: 0.00% (0 / 57)
explain/decorrelated_plan_as_text.slt: 0.00% (0 / 347)
explain/enable_eager_delta_joins.slt: 0.00% (0 / 143)
explain/raw_plan_as_text.slt: 0.00% (0 / 186)
explain/physical_plan_as_text_redacted.slt: 0.00% (0 / 947)
explain/locally_optimized_plan.slt: 0.00% (0 / 80)
explain/optimized_plan_as_text.slt: 62.67% (361 / 576)
introspection/unstable.slt: 0.00% (0 / 1)
attributes/mir_unique_keys.slt: 0.00% (0 / 39)
attributes/mir_column_types.slt: 0.00% (0 / 56)
attributes/mir_arity.slt: 0.00% (0 / 65)
postgres/rowtypes.slt: 0.00% (0 / 3)
postgres/subselect.slt: 0.00% (0 / 6)
cockroach/create_as.slt: 0.00% (0 / 4)
cockroach/builtin_function.slt: 0.00% (0 / 8)
cockroach/srfs.slt: 0.00% (0 / 15)
cockroach/drop_view.slt: 0.00% (0 / 1)
cockroach/subquery.slt: 0.00% (0 / 10)
cockroach/select_index.slt: 0.00% (0 / 6)
cockroach/window.slt: 0.00% (0 / 9)
cockroach/orms.slt: 0.00% (0 / 2)
cockroach/decimal.slt: 0.00% (0 / 2)
cockroach/upsert.slt: 0.00% (0 / 10)
cockroach/aggregate.slt: 0.00% (0 / 12)
cockroach/alter_table.slt: 0.00% (0 / 4)
cockroach/table.slt: 0.00% (0 / 3)
cockroach/collatedstring.slt: 0.00% (0 / 1)
cockroach/json_builtins.slt: 0.00% (0 / 1)
cockroach/distinct_on.slt: 0.00% (0 / 2)
cockroach/subquery-opt.slt: 0.00% (0 / 2)
cockroach/select.slt: 0.00% (0 / 3)
cockroach/computed.slt: 0.00% (0 / 4)
cockroach/order_by.slt: 0.00% (0 / 1)
cockroach/ordinality.slt: 0.00% (0 / 1)
cockroach/rename_column.slt: 0.00% (0 / 4)
cockroach/json.slt: 0.00% (0 / 2)
cockroach/alter_column_type.slt: 0.00% (0 / 2)
cockroach/typing.slt: 0.00% (0 / 4)
cockroach/drop_database.slt: 0.00% (0 / 1)
cockroach/rename_database.slt: 0.00% (0 / 1)
cockroach/pgoidtype.slt: 0.00% (0 / 3)
cockroach/apply_join.slt: 0.00% (0 / 2)
cockroach/update.slt: 0.00% (0 / 5)
cockroach/sqlsmith.slt: 0.00% (0 / 5)
cockroach/join.slt: 0.00% (0 / 8)
cockroach/timestamp.slt: 0.00% (0 / 1)
cockroach/rows_from.slt: 0.00% (0 / 1)
cockroach/insert.slt: 0.00% (0 / 3)
cockroach/datetime.slt: 0.00% (0 / 1)
cockroach/statement_source.slt: 0.00% (0 / 1)
cockroach/subquery_correlated.slt: 0.00% (0 / 3)
cockroach/lookup_join.slt: 0.00% (0 / 1)
cockroach/zero.slt: 0.00% (0 / 1)
cockroach/returning.slt: 0.00% (0 / 1)
cockroach/prepare.slt: 0.00% (0 / 6)
cockroach/pg_catalog.slt: 0.00% (0 / 5)
cockroach/tuple.slt: 0.00% (0 / 4)
cockroach/with.slt: 0.00% (0 / 5)
cockroach/array.slt: 0.00% (0 / 9)
cockroach/rename_table.slt: 0.00% (0 / 1)
cockroach/where.slt: 0.00% (0 / 1)
cockroach/views.slt: 0.00% (0 / 5)
advent-of-code/2023/aoc_1215.slt: 10.30% (24 / 233)
advent-of-code/2023/aoc_1201.slt: 8.82% (3 / 34)
advent-of-code/2023/aoc_1214.slt: 3.45% (6 / 174)
advent-of-code/2023/aoc_1202.slt: 30.19% (32 / 106)
advent-of-code/2023/aoc_1216.slt: 15.60% (22 / 141)
advent-of-code/2023/aoc_1217.slt: 6.57% (14 / 213)
advent-of-code/2023/aoc_1203.slt: 1.67% (4 / 240)
advent-of-code/2023/aoc_1207.slt: 11.53% (55 / 477)
advent-of-code/2023/aoc_1213.slt: 7.95% (12 / 151)
advent-of-code/2023/aoc_1212.slt: 3.20% (4 / 125)
advent-of-code/2023/aoc_1206.slt: 90.00% (18 / 20)
advent-of-code/2023/aoc_1210.slt: 1.70% (6 / 352)
advent-of-code/2023/aoc_1204.slt: 8.70% (18 / 207)
advent-of-code/2023/aoc_1205.slt: 3.81% (20 / 525)
advent-of-code/2023/aoc_1211.slt: 10.42% (10 / 96)
advent-of-code/2023/aoc_1220.slt: 2.45% (8 / 327)
advent-of-code/2023/aoc_1208.slt: 35.29% (12 / 34)
advent-of-code/2023/aoc_1209.slt: 2.16% (3 / 139)
advent-of-code/2023/aoc_1223.slt: 2.28% (9 / 395)
advent-of-code/2023/aoc_1222.slt: 5.67% (11 / 194)
advent-of-code/2023/aoc_1219.slt: 0.86% (2 / 233)
advent-of-code/2023/aoc_1225.slt: 35.94% (23 / 64)
advent-of-code/2023/aoc_1224.slt: 6.06% (4 / 66)
advent-of-code/2023/aoc_1218.slt: 5.31% (6 / 113)
transform/predicate_reduction.slt: 0.00% (0 / 33)
transform/join_fusion.slt: 0.00% (0 / 128)
transform/literal_lifting.slt: 0.00% (0 / 135)
transform/reduction_pushdown.slt: 0.00% (0 / 44)
transform/relation_cse.slt: 0.00% (0 / 234)
transform/threshold_elision.slt: 0.00% (0 / 84)
transform/scalability.slt: 0.00% (0 / 1)
transform/redundant_join.slt: 0.00% (0 / 29)
transform/join_index.slt: 0.00% (0 / 318)
transform/predicate_pushdown.slt: 0.00% (0 / 405)
transform/reduce_fusion.slt: 0.00% (0 / 10)
transform/aggregation_nullability.slt: 0.00% (0 / 645)
transform/demand.slt: 0.00% (0 / 28)
transform/filter_index.slt: 0.00% (0 / 29)
transform/projection_lifting.slt: 0.00% (0 / 39)
transform/union.slt: 0.00% (0 / 23)
transform/union_cancel.slt: 0.00% (0 / 12)
transform/non_null_requirements.slt: 0.00% (0 / 2)
transform/is_null_propagation.slt: 0.00% (0 / 27)
transform/reduce_elision.slt: 0.00% (0 / 39)
transform/literal_constraints.slt: 0.00% (0 / 174)
transform/column_knowledge.slt: 0.00% (0 / 127)
transform/dataflow.slt: 0.00% (0 / 6)
transform/relax_must_consolidate.slt: 0.00% (0 / 216)
transform/normalize_lets.slt: 0.00% (0 / 86)
transform/monotonic.slt: 0.00% (0 / 30)
transform/scalar_cse.slt: 0.00% (0 / 68)
transform/topk.slt: 0.00% (0 / 35)
transform/fold_constants.slt: 0.00% (0 / 6)
transform/fold_vs_dataflow/5_repeat_row_dataflow.slt: 0.00% (0 / 1)
transform/fold_vs_dataflow/6_bytea_dataflow.slt: 0.00% (0 / 4)
transform/fold_vs_dataflow/3_number_aggfns_dataflow.slt: 0.00% (0 / 85)
transform/fold_vs_dataflow/4_text_folding.slt: 0.00% (0 / 2)
transform/fold_vs_dataflow/2_number_fns_dataflow.slt: 0.00% (0 / 64)
transform/fold_vs_dataflow/4_text_dataflow.slt: 0.00% (0 / 31)
transform/fold_vs_dataflow/7_window_agg_dataflow.slt: 0.00% (0 / 28)
transform/notice/index_too_wide_for_literal_constraints.slt: 77.14% (27 / 35)
transform/notice/index_already_exists.slt: 100.00% (4 / 4)
autogenerated/all_parts_essential.slt: 0.00% (0 / 453)

Overall namescore: 24.48% (7080 / 28920); 238 files with no column references / 456 total files
```
</details>

<details>
<summary>Output on SLT files (adding `WITH (humanized expressions)`
explicitly)</summary>

```
group_size_hints.slt: 100.00% (107 / 107)
timezone.slt: 0.00% (0 / 1)
freshmart.slt: 80.44% (218 / 271)
cte.slt: 0.00% (0 / 2)
not-null-propagation.slt: 75.68% (249 / 329)
github-7892.slt: 0.00% (0 / 1)
numeric.slt: 0.00% (0 / 3)
type-promotion.slt: 0.00% (0 / 3)
mz_recent_storage_usage.slt: 100.00% (2 / 2)
github-7688.slt: 0.00% (0 / 1)
github-16036.slt: 0.00% (0 / 88)
privilege_checks.slt: 100.00% (1 / 1)
vars.slt: 0.00% (0 / 1)
subquery.slt: 64.52% (60 / 93)
github-5474.slt: 0.00% (0 / 1)
aggregates.slt: 50.00% (25 / 50)
outer_join.slt: 0.00% (0 / 128)
github-57.slt: 0.00% (0 / 1)
github-5717.slt: 0.00% (0 / 4)
tpch_select.slt: 62.83% (737 / 1173)
jsonb.slt: 0.00% (0 / 4)
github-8261-8463.slt: 0.00% (0 / 4)
github-7467.slt: 0.00% (0 / 2)
system-cluster.slt: 94.03% (126 / 134)
uniqueness_propagation_filter.slt: 100.00% (149 / 149)
limit_expr.slt: 90.68% (107 / 118)
github-2746.slt: 0.00% (0 / 63)
github-8257.slt: 0.00% (0 / 1)
tpch_create_materialized_view.slt: 64.28% (709 / 1103)
cte_lowering.slt: 0.00% (0 / 188)
timedomain.slt: 96.97% (32 / 33)
scalar_subqueries_select_list.slt: 78.01% (266 / 341)
regtype.slt: 0.00% (0 / 1)
outer_join_simplification.slt: 71.43% (245 / 343)
github-17808.slt: 0.00% (0 / 1)
joins.slt: 71.01% (147 / 207)
regclass.slt: 0.00% (0 / 1)
github-8867.slt: 0.00% (0 / 1)
distinct_on.slt: 88.89% (8 / 9)
alter-table.slt: 100.00% (27 / 27)
persist-fast-path.slt: 33.33% (4 / 12)
types.slt: 68.42% (13 / 19)
char.slt: 0.00% (0 / 3)
updates.slt: 0.00% (0 / 2)
github-7821.slt: 0.00% (0 / 1)
order_by.slt: 33.33% (10 / 30)
cluster_features.slt: 85.00% (238 / 280)
parse_ident.slt: 75.00% (6 / 8)
github-2799.slt: 81.82% (9 / 11)
github-2969.slt: 90.48% (38 / 42)
cardinality.slt: 25.76% (85 / 330)
ldbc_bi.slt: 57.26% (1569 / 2740)
timestamptz.slt: 50.00% (1 / 2)
regex.slt: 64.52% (40 / 62)
extract.slt: 0.00% (0 / 1)
transactions.slt: 94.12% (32 / 34)
timestamp.slt: 50.00% (1 / 2)
github-6935.slt: 0.00% (0 / 1)
github-14116.slt: 100.00% (12 / 12)
regressions.slt: 0.00% (0 / 1)
window_funcs.slt: 11.24% (79 / 703)
github-6464.slt: 42.86% (9 / 21)
managed_cluster.slt: 0.00% (0 / 1)
filter-pushdown.slt: 86.82% (112 / 129)
boolean.slt: 78.57% (33 / 42)
record.slt: 90.00% (9 / 10)
temporal.slt: 0.00% (0 / 1)
list.slt: 70.31% (45 / 64)
like.slt: 100.00% (22 / 22)
outer_join_lowering.slt: 95.00% (589 / 620)
funcs.slt: 40.00% (8 / 20)
recursive_type_unioning.slt: 57.14% (4 / 7)
chbench.slt: 59.08% (924 / 1564)
tpch_create_index.slt: 66.49% (744 / 1119)
dates-times.slt: 0.00% (0 / 1)
scoping.slt: 0.00% (0 / 2)
topk.slt: 95.83% (23 / 24)
regproc.slt: 0.00% (0 / 1)
github-5723.slt: 0.00% (0 / 13)
table_func.slt: 52.70% (39 / 74)
github-5536.slt: 82.35% (14 / 17)
arrays.slt: 0.00% (0 / 2)
github-5126.slt: 0.00% (0 / 47)
ldbc_bi_eager.slt: 57.26% (1569 / 2740)
reduce_mfp.slt: 0.00% (0 / 26)
arithmetic.slt: 82.76% (48 / 58)
explain/broken_statements.slt: 0.00% (0 / 1)
explain/aggregates.slt: 96.10% (197 / 205)
explain/physical_plan_aggregates.slt: 0.00% (0 / 321)
explain/materialized_view.slt: 21.28% (10 / 47)
explain/physical_plan_as_text.slt: 7.66% (75 / 979)
explain/pushdown.slt: 100.00% (2 / 2)
explain/optimized_plan_as_text_redacted.slt: 91.09% (358 / 393)
explain/replan_catalog_items.slt: 100.00% (57 / 57)
explain/decorrelated_plan_as_text.slt: 21.61% (75 / 347)
explain/enable_eager_delta_joins.slt: 83.22% (119 / 143)
explain/raw_plan_as_text.slt: 40.32% (75 / 186)
explain/physical_plan_as_text_redacted.slt: 7.92% (75 / 947)
explain/locally_optimized_plan.slt: 0.00% (0 / 80)
explain/optimized_plan_as_text.slt: 89.58% (516 / 576)
introspection/unstable.slt: 0.00% (0 / 1)
attributes/mir_unique_keys.slt: 89.74% (35 / 39)
attributes/mir_column_types.slt: 94.64% (53 / 56)
attributes/mir_arity.slt: 78.46% (51 / 65)
postgres/rowtypes.slt: 0.00% (0 / 3)
postgres/subselect.slt: 0.00% (0 / 6)
cockroach/create_as.slt: 0.00% (0 / 4)
cockroach/builtin_function.slt: 0.00% (0 / 8)
cockroach/srfs.slt: 0.00% (0 / 15)
cockroach/drop_view.slt: 0.00% (0 / 1)
cockroach/subquery.slt: 0.00% (0 / 10)
cockroach/select_index.slt: 0.00% (0 / 6)
cockroach/window.slt: 0.00% (0 / 9)
cockroach/orms.slt: 0.00% (0 / 2)
cockroach/decimal.slt: 0.00% (0 / 2)
cockroach/upsert.slt: 0.00% (0 / 10)
cockroach/aggregate.slt: 0.00% (0 / 12)
cockroach/alter_table.slt: 0.00% (0 / 4)
cockroach/table.slt: 0.00% (0 / 3)
cockroach/collatedstring.slt: 0.00% (0 / 1)
cockroach/json_builtins.slt: 0.00% (0 / 1)
cockroach/distinct_on.slt: 0.00% (0 / 2)
cockroach/subquery-opt.slt: 0.00% (0 / 2)
cockroach/select.slt: 0.00% (0 / 3)
cockroach/computed.slt: 0.00% (0 / 4)
cockroach/order_by.slt: 0.00% (0 / 1)
cockroach/ordinality.slt: 0.00% (0 / 1)
cockroach/rename_column.slt: 0.00% (0 / 4)
cockroach/json.slt: 0.00% (0 / 2)
cockroach/alter_column_type.slt: 0.00% (0 / 2)
cockroach/typing.slt: 0.00% (0 / 4)
cockroach/drop_database.slt: 0.00% (0 / 1)
cockroach/rename_database.slt: 0.00% (0 / 1)
cockroach/pgoidtype.slt: 0.00% (0 / 3)
cockroach/apply_join.slt: 0.00% (0 / 2)
cockroach/update.slt: 0.00% (0 / 5)
cockroach/sqlsmith.slt: 0.00% (0 / 5)
cockroach/join.slt: 0.00% (0 / 8)
cockroach/timestamp.slt: 0.00% (0 / 1)
cockroach/rows_from.slt: 0.00% (0 / 1)
cockroach/insert.slt: 0.00% (0 / 3)
cockroach/datetime.slt: 0.00% (0 / 1)
cockroach/statement_source.slt: 0.00% (0 / 1)
cockroach/subquery_correlated.slt: 0.00% (0 / 3)
cockroach/lookup_join.slt: 0.00% (0 / 1)
cockroach/zero.slt: 0.00% (0 / 1)
cockroach/returning.slt: 0.00% (0 / 1)
cockroach/prepare.slt: 0.00% (0 / 6)
cockroach/pg_catalog.slt: 0.00% (0 / 5)
cockroach/tuple.slt: 0.00% (0 / 4)
cockroach/with.slt: 0.00% (0 / 5)
cockroach/array.slt: 0.00% (0 / 9)
cockroach/rename_table.slt: 0.00% (0 / 1)
cockroach/where.slt: 0.00% (0 / 1)
cockroach/views.slt: 0.00% (0 / 5)
advent-of-code/2023/aoc_1215.slt: 10.30% (24 / 233)
advent-of-code/2023/aoc_1201.slt: 8.82% (3 / 34)
advent-of-code/2023/aoc_1214.slt: 3.45% (6 / 174)
advent-of-code/2023/aoc_1202.slt: 30.19% (32 / 106)
advent-of-code/2023/aoc_1216.slt: 15.60% (22 / 141)
advent-of-code/2023/aoc_1217.slt: 6.57% (14 / 213)
advent-of-code/2023/aoc_1203.slt: 1.67% (4 / 240)
advent-of-code/2023/aoc_1207.slt: 11.53% (55 / 477)
advent-of-code/2023/aoc_1213.slt: 7.95% (12 / 151)
advent-of-code/2023/aoc_1212.slt: 3.20% (4 / 125)
advent-of-code/2023/aoc_1206.slt: 90.00% (18 / 20)
advent-of-code/2023/aoc_1210.slt: 1.67% (6 / 360)
advent-of-code/2023/aoc_1204.slt: 8.70% (18 / 207)
advent-of-code/2023/aoc_1205.slt: 3.81% (20 / 525)
advent-of-code/2023/aoc_1211.slt: 10.42% (10 / 96)
advent-of-code/2023/aoc_1220.slt: 2.43% (8 / 329)
advent-of-code/2023/aoc_1208.slt: 35.29% (12 / 34)
advent-of-code/2023/aoc_1209.slt: 2.16% (3 / 139)
advent-of-code/2023/aoc_1223.slt: 2.28% (9 / 395)
advent-of-code/2023/aoc_1222.slt: 5.67% (11 / 194)
advent-of-code/2023/aoc_1219.slt: 0.86% (2 / 233)
advent-of-code/2023/aoc_1225.slt: 35.94% (23 / 64)
advent-of-code/2023/aoc_1224.slt: 6.06% (4 / 66)
advent-of-code/2023/aoc_1218.slt: 5.31% (6 / 113)
transform/predicate_reduction.slt: 66.67% (22 / 33)
transform/join_fusion.slt: 76.56% (98 / 128)
transform/literal_lifting.slt: 66.67% (90 / 135)
transform/reduction_pushdown.slt: 80.95% (51 / 63)
transform/relation_cse.slt: 68.38% (160 / 234)
transform/threshold_elision.slt: 76.19% (64 / 84)
transform/scalability.slt: 0.00% (0 / 1)
transform/redundant_join.slt: 51.72% (15 / 29)
transform/join_index.slt: 53.77% (171 / 318)
transform/predicate_pushdown.slt: 45.68% (185 / 405)
transform/reduce_fusion.slt: 100.00% (10 / 10)
transform/aggregation_nullability.slt: 84.65% (546 / 645)
transform/demand.slt: 46.43% (13 / 28)
transform/filter_index.slt: 93.10% (27 / 29)
transform/projection_lifting.slt: 100.00% (39 / 39)
transform/union.slt: 78.26% (18 / 23)
transform/union_cancel.slt: 91.67% (11 / 12)
transform/non_null_requirements.slt: 0.00% (0 / 2)
transform/is_null_propagation.slt: 88.89% (24 / 27)
transform/reduce_elision.slt: 84.62% (33 / 39)
transform/literal_constraints.slt: 73.56% (128 / 174)
transform/column_knowledge.slt: 94.49% (120 / 127)
transform/dataflow.slt: 100.00% (6 / 6)
transform/relax_must_consolidate.slt: 0.00% (0 / 216)
transform/normalize_lets.slt: 37.21% (32 / 86)
transform/monotonic.slt: 20.00% (6 / 30)
transform/scalar_cse.slt: 35.29% (24 / 68)
transform/topk.slt: 65.71% (23 / 35)
transform/fold_constants.slt: 33.33% (2 / 6)
transform/fold_vs_dataflow/5_repeat_row_dataflow.slt: 0.00% (0 / 1)
transform/fold_vs_dataflow/6_bytea_dataflow.slt: 0.00% (0 / 4)
transform/fold_vs_dataflow/3_number_aggfns_dataflow.slt: 0.00% (0 / 85)
transform/fold_vs_dataflow/4_text_folding.slt: 0.00% (0 / 2)
transform/fold_vs_dataflow/2_number_fns_dataflow.slt: 0.00% (0 / 64)
transform/fold_vs_dataflow/4_text_dataflow.slt: 0.00% (0 / 31)
transform/fold_vs_dataflow/7_window_agg_dataflow.slt: 0.00% (0 / 28)
transform/notice/index_too_wide_for_literal_constraints.slt: 77.14% (27 / 35)
transform/notice/index_already_exists.slt: 100.00% (4 / 4)
autogenerated/all_parts_essential.slt: 52.10% (236 / 453)

Overall namescore: 47.49% (13753 / 28960); 238 files with no column references / 456 total files
```
</details>

### Motivation

  * This PR adds a known-desirable feature.
     #31802
     MaterializeInc/database-issues#8960

### Checklist

- [ ] This PR has adequate test coverage / QA involvement has been duly
considered. ([trigger-ci for additional test/nightly
runs](https://trigger-ci.dev.materialize.com/))
- [ ] This PR has an associated up-to-date [design
doc](https://github.com/MaterializeInc/materialize/blob/main/doc/developer/design/README.md),
is a design doc
([template](https://github.com/MaterializeInc/materialize/blob/main/doc/developer/design/00000000_template.md)),
or is sufficiently small to not require a design.
  <!-- Reference the design in the description. -->
- [ ] If this PR evolves [an existing `$T ⇔ Proto$T`
mapping](https://github.com/MaterializeInc/materialize/blob/main/doc/developer/command-and-response-binary-encoding.md)
(possibly in a backwards-incompatible way), then it is tagged with a
`T-proto` label.
- [ ] If this PR will require changes to cloud orchestration or tests,
there is a companion cloud PR to account for those changes that is
tagged with the release-blocker label
([example](MaterializeInc/cloud#5021)).
<!-- Ask in #team-cloud on Slack if you need help preparing the cloud
PR. -->
- [ ] If this PR includes major [user-facing behavior
changes](https://github.com/MaterializeInc/materialize/blob/main/doc/developer/guide-changes.md#what-changes-require-a-release-note),
I have pinged the relevant PM to schedule a changelog post.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-CLUSTER Topics related to the CLUSTER layer A-compute Area: compute A-optimization Area: query optimization and transformation A-sql Area: SQL planning T-debug Theme: improve ability to debug Materialize T-UX User experience / ergonomics

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants