Skip to content

feat: change Expr OuterReferenceColumn and Alias to Box type for reducing expr struct size - #16771

Closed
zhuqi-lucas wants to merge 2 commits into
apache:mainfrom
zhuqi-lucas:reduce_expr_size
Closed

feat: change Expr OuterReferenceColumn and Alias to Box type for reducing expr struct size#16771
zhuqi-lucas wants to merge 2 commits into
apache:mainfrom
zhuqi-lucas:reduce_expr_size

Conversation

@zhuqi-lucas

@zhuqi-lucaszhuqi-lucas commented Jul 14, 2025

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

Continue to reduce the Expr struct size.

Rationale for this change

Continue to reduce the Expr struct size.

What changes are included in this PR?

Continue to reduce the Expr struct size.

Are these changes tested?

Yes

The size reduce from 128 to 112

Updated:

Continue reduce to 80 now!

Are there any user-facing changes?

No

@github-actionsgithub-actionsBot added sql SQL Planner logical-expr Logical plan and expressions physical-expr Changes to the physical-expr crates optimizer Optimizer rules core Core DataFusion crate sqllogictest SQL Logic Tests (.slt) substrait Changes to the substrait crate catalog Related to the catalog crate proto Related to proto crate labels Jul 14, 2025
@zhuqi-lucaszhuqi-lucas changed the title feat: change Expr Alias and OuterReferenceColumn to Box type for redu…feat: change Expr Alias and OuterReferenceColumn to Box type for reducing expr struct sizeJul 14, 2025

@alambalamb left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks @zhuqi-lucas -- this looks quite nice

I think it is an API change so I will mark the PR as such and I think it is a good improvement

However, given it is an API change I think we should

  1. Wait until DataFusion 50.0.0 (let's not make any more changes in DataFusion 49 that we are starting to prepare for)
  2. Update the upgrading guide in https://datafusion.apache.org/library-user-guide/upgrading.html to explain to people hw to change things

10)--------------Projection: generate_series(Int64(1), CAST(outer_ref(t1.t1_int) AS Int64)) AS __unnest_placeholder(generate_series(Int64(1),outer_ref(t1.t1_int)))
11)----------------EmptyRelation
physical_plan_error This feature is not implemented: Physical plan does not support logical expression OuterReferenceColumn(UInt32, Column { relation: Some(Bare { table: "t1" }), name: "t1_int" })
physical_plan_error This feature is not implemented: Physical plan does not support logical expression OuterReferenceColumn((UInt32, Column { relation: Some(Bare { table: "t1" }), name: "t1_int" }))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

do you know why the plan changes? I don't think the extra () really adds much -- can we restore the original?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I changed it to OuterReference in latest PR, so it will use OuterReference instead of this change now, thanks!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Next step, we may can add debug/fmt for OuterReference to restore the original behaviour.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Restore all slt in latest PR, no diff from main branch.

Comment threaddatafusion/expr/src/expr.rs Outdated
// `Box`ing the fields to make `Expr` smaller
// See https://github.com/apache/datafusion/issues/16199 for details
assert_eq!(size_of::<Expr>(), 128);
assert_eq!(size_of::<Expr>(), 112);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This change saves 16 bytes per Expr. Nice.

I will run some planning benchmarks and see if we can see any difference

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Thank you @alamb , i am doing more amazing experiment, try to reduce from 128 to 80, so we can save 48 bytes per Expr!

pub enum Expr {
/// An expression with a specific name.
Alias(Alias),
Alias(Box<Alias>),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Another change that might be a bit less impactful would be to box the fields of Alias instead

So Alias {
expr: Box
..
}


It may be just as bad / worse though

Comment threaddatafusion/expr/src/expr.rs Outdated
/// A placeholder which holds a reference to a qualified field
/// in the outer query, used for correlated sub queries.
OuterReferenceColumn(DataType, Column),
OuterReferenceColumn(Box<(DataType, Column)>),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

If we are going to make this change anyways, can we also pull this into a named struct rather than a unnamed tuple

like

structOuterReference{// fields here}enumExpr{
... OuterReferenceColumn(OuterReference),
...
}

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Thank you @alamb for this good suggestion, addressed in latest PR.

@alamb

Copy link
Copy Markdown
Contributor

🤖 ./gh_compare_branch_bench.shBenchmark Script Running
Linux aal-dev 6.11.0-1016-gcp #16~24.04.1-Ubuntu SMP Wed May 28 02:40:52 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing reduce_expr_size (d62d060) to 3291e4ediff
BENCH_NAME=sql_planner
BENCH_COMMAND=cargo bench --bench sql_planner
BENCH_FILTER=
BENCH_BRANCH_NAME=reduce_expr_size
Results will be posted here when complete

@alambalamb added the api change Changes the API exposed to users of the crate label Jul 14, 2025
@alamb

Copy link
Copy Markdown
Contributor

🤖: Benchmark completed

Details

group main reduce_expr_size
----- ---- ----------------
logical_aggregate_with_join 1.04 641.1±3.04µs ? ?/sec 1.00 615.9±3.14µs ? ?/sec
logical_select_all_from_1000 1.00 11.4±0.06ms ? ?/sec 1.01 11.4±0.04ms ? ?/sec
logical_select_one_from_700 1.06 428.1±3.01µs ? ?/sec 1.00 405.3±2.68µs ? ?/sec
logical_trivial_join_high_numbered_columns 1.05 383.1±1.72µs ? ?/sec 1.00 364.9±2.48µs ? ?/sec
logical_trivial_join_low_numbered_columns 1.05 367.9±1.93µs ? ?/sec 1.00 350.9±1.49µs ? ?/sec
physical_intersection 1.04 850.4±5.13µs ? ?/sec 1.00 818.8±5.07µs ? ?/sec
physical_join_consider_sort 1.05 1418.7±7.80µs ? ?/sec 1.00 1348.9±8.64µs ? ?/sec
physical_join_distinct 1.05 358.3±0.94µs ? ?/sec 1.00 341.1±1.58µs ? ?/sec
physical_many_self_joins 1.08 10.7±0.07ms ? ?/sec 1.00 9.9±0.05ms ? ?/sec
physical_plan_clickbench_all 1.01 187.2±1.44ms ? ?/sec 1.00 185.2±1.54ms ? ?/sec
physical_plan_clickbench_q1 1.00 2.5±0.02ms ? ?/sec 1.00 2.5±0.02ms ? ?/sec
physical_plan_clickbench_q10 1.00 3.4±0.03ms ? ?/sec 1.00 3.4±0.03ms ? ?/sec
physical_plan_clickbench_q11 1.00 3.6±0.03ms ? ?/sec 1.00 3.5±0.03ms ? ?/sec
physical_plan_clickbench_q12 1.01 3.7±0.04ms ? ?/sec 1.00 3.7±0.03ms ? ?/sec
physical_plan_clickbench_q13 1.01 3.4±0.03ms ? ?/sec 1.00 3.3±0.03ms ? ?/sec
physical_plan_clickbench_q14 1.01 3.6±0.03ms ? ?/sec 1.00 3.5±0.03ms ? ?/sec
physical_plan_clickbench_q15 1.01 3.4±0.03ms ? ?/sec 1.00 3.4±0.03ms ? ?/sec
physical_plan_clickbench_q16 1.01 3.3±0.02ms ? ?/sec 1.00 3.3±0.04ms ? ?/sec
physical_plan_clickbench_q17 1.00 3.4±0.03ms ? ?/sec 1.00 3.4±0.03ms ? ?/sec
physical_plan_clickbench_q18 1.00 2.9±0.03ms ? ?/sec 1.00 2.9±0.02ms ? ?/sec
physical_plan_clickbench_q19 1.01 3.8±0.05ms ? ?/sec 1.00 3.8±0.04ms ? ?/sec
physical_plan_clickbench_q2 1.00 2.9±0.02ms ? ?/sec 1.00 2.9±0.03ms ? ?/sec
physical_plan_clickbench_q20 1.00 2.7±0.03ms ? ?/sec 1.00 2.7±0.06ms ? ?/sec
physical_plan_clickbench_q21 1.01 3.0±0.03ms ? ?/sec 1.00 2.9±0.03ms ? ?/sec
physical_plan_clickbench_q22 1.00 3.6±0.04ms ? ?/sec 1.00 3.5±0.09ms ? ?/sec
physical_plan_clickbench_q23 1.00 3.8±0.03ms ? ?/sec 1.00 3.8±0.04ms ? ?/sec
physical_plan_clickbench_q24 1.01 4.3±0.05ms ? ?/sec 1.00 4.3±0.04ms ? ?/sec
physical_plan_clickbench_q25 1.01 3.1±0.03ms ? ?/sec 1.00 3.0±0.02ms ? ?/sec
physical_plan_clickbench_q26 1.01 2.9±0.03ms ? ?/sec 1.00 2.9±0.02ms ? ?/sec
physical_plan_clickbench_q27 1.00 3.1±0.03ms ? ?/sec 1.00 3.1±0.02ms ? ?/sec
physical_plan_clickbench_q28 1.01 3.9±0.04ms ? ?/sec 1.00 3.8±0.03ms ? ?/sec
physical_plan_clickbench_q29 1.01 4.5±0.06ms ? ?/sec 1.00 4.5±0.04ms ? ?/sec
physical_plan_clickbench_q3 1.00 2.9±0.03ms ? ?/sec 1.01 2.9±0.13ms ? ?/sec
physical_plan_clickbench_q30 1.02 12.9±0.15ms ? ?/sec 1.00 12.7±0.14ms ? ?/sec
physical_plan_clickbench_q31 1.01 3.8±0.04ms ? ?/sec 1.00 3.8±0.04ms ? ?/sec
physical_plan_clickbench_q32 1.01 3.9±0.05ms ? ?/sec 1.00 3.8±0.04ms ? ?/sec
physical_plan_clickbench_q33 1.01 3.4±0.04ms ? ?/sec 1.00 3.4±0.05ms ? ?/sec
physical_plan_clickbench_q34 1.01 3.1±0.03ms ? ?/sec 1.00 3.0±0.04ms ? ?/sec
physical_plan_clickbench_q35 1.00 3.2±0.03ms ? ?/sec 1.00 3.2±0.03ms ? ?/sec
physical_plan_clickbench_q36 1.01 3.9±0.11ms ? ?/sec 1.00 3.9±0.04ms ? ?/sec
physical_plan_clickbench_q37 1.00 3.9±0.04ms ? ?/sec 1.00 3.9±0.06ms ? ?/sec
physical_plan_clickbench_q38 1.00 3.9±0.05ms ? ?/sec 1.00 3.8±0.03ms ? ?/sec
physical_plan_clickbench_q39 1.00 3.7±0.03ms ? ?/sec 1.00 3.7±0.05ms ? ?/sec
physical_plan_clickbench_q4 1.00 2.6±0.03ms ? ?/sec 1.00 2.6±0.02ms ? ?/sec
physical_plan_clickbench_q40 1.00 4.3±0.05ms ? ?/sec 1.00 4.3±0.06ms ? ?/sec
physical_plan_clickbench_q41 1.00 3.9±0.04ms ? ?/sec 1.00 3.9±0.04ms ? ?/sec
physical_plan_clickbench_q42 1.01 3.8±0.04ms ? ?/sec 1.00 3.8±0.04ms ? ?/sec
physical_plan_clickbench_q43 1.00 4.2±0.05ms ? ?/sec 1.00 4.2±0.04ms ? ?/sec
physical_plan_clickbench_q44 1.01 2.8±0.02ms ? ?/sec 1.00 2.7±0.02ms ? ?/sec
physical_plan_clickbench_q45 1.01 2.8±0.02ms ? ?/sec 1.00 2.7±0.03ms ? ?/sec
physical_plan_clickbench_q46 1.01 3.2±0.03ms ? ?/sec 1.00 3.1±0.03ms ? ?/sec
physical_plan_clickbench_q47 1.00 3.8±0.04ms ? ?/sec 1.00 3.7±0.04ms ? ?/sec
physical_plan_clickbench_q48 1.01 4.5±0.04ms ? ?/sec 1.00 4.4±0.04ms ? ?/sec
physical_plan_clickbench_q49 1.01 4.7±0.06ms ? ?/sec 1.00 4.7±0.05ms ? ?/sec
physical_plan_clickbench_q5 1.00 2.8±0.03ms ? ?/sec 1.00 2.8±0.02ms ? ?/sec
physical_plan_clickbench_q50 1.01 4.2±0.06ms ? ?/sec 1.00 4.1±0.05ms ? ?/sec
physical_plan_clickbench_q51 1.01 3.2±0.03ms ? ?/sec 1.00 3.2±0.03ms ? ?/sec
physical_plan_clickbench_q6 1.01 2.8±0.02ms ? ?/sec 1.00 2.8±0.02ms ? ?/sec
physical_plan_clickbench_q7 1.01 2.6±0.02ms ? ?/sec 1.00 2.5±0.02ms ? ?/sec
physical_plan_clickbench_q8 1.00 3.4±0.04ms ? ?/sec 1.00 3.4±0.03ms ? ?/sec
physical_plan_clickbench_q9 1.01 3.3±0.03ms ? ?/sec 1.00 3.2±0.03ms ? ?/sec
physical_plan_tpcds_all 1.01 1033.2±2.65ms ? ?/sec 1.00 1026.0±3.38ms ? ?/sec
physical_plan_tpch_all 1.00 62.1±0.38ms ? ?/sec 1.00 61.9±0.34ms ? ?/sec
physical_plan_tpch_q1 1.00 2.0±0.01ms ? ?/sec 1.01 2.0±0.01ms ? ?/sec
physical_plan_tpch_q10 1.01 3.8±0.02ms ? ?/sec 1.00 3.8±0.02ms ? ?/sec
physical_plan_tpch_q11 1.01 3.3±0.01ms ? ?/sec 1.00 3.2±0.02ms ? ?/sec
physical_plan_tpch_q12 1.01 1781.3±12.28µs ? ?/sec 1.00 1764.3±6.79µs ? ?/sec
physical_plan_tpch_q13 1.00 1442.1±8.82µs ? ?/sec 1.01 1454.5±10.93µs ? ?/sec
physical_plan_tpch_q14 1.00 1919.5±20.30µs ? ?/sec 1.00 1918.9±14.12µs ? ?/sec
physical_plan_tpch_q16 1.01 2.4±0.01ms ? ?/sec 1.00 2.4±0.01ms ? ?/sec
physical_plan_tpch_q17 1.01 2.4±0.01ms ? ?/sec 1.00 2.4±0.01ms ? ?/sec
physical_plan_tpch_q18 1.00 2.7±0.01ms ? ?/sec 1.00 2.6±0.01ms ? ?/sec
physical_plan_tpch_q19 1.02 3.2±0.01ms ? ?/sec 1.00 3.1±0.03ms ? ?/sec
physical_plan_tpch_q2 1.01 5.5±0.02ms ? ?/sec 1.00 5.4±0.02ms ? ?/sec
physical_plan_tpch_q20 1.01 3.1±0.01ms ? ?/sec 1.00 3.1±0.02ms ? ?/sec
physical_plan_tpch_q21 1.01 4.1±0.05ms ? ?/sec 1.00 4.0±0.02ms ? ?/sec
physical_plan_tpch_q22 1.01 2.7±0.02ms ? ?/sec 1.00 2.7±0.01ms ? ?/sec
physical_plan_tpch_q3 1.00 2.5±0.01ms ? ?/sec 1.00 2.5±0.01ms ? ?/sec
physical_plan_tpch_q4 1.00 1509.9±9.88µs ? ?/sec 1.00 1511.5±8.97µs ? ?/sec
physical_plan_tpch_q5 1.00 3.1±0.02ms ? ?/sec 1.00 3.1±0.02ms ? ?/sec
physical_plan_tpch_q6 1.01 850.3±4.71µs ? ?/sec 1.00 846.0±8.10µs ? ?/sec
physical_plan_tpch_q7 1.01 4.2±0.01ms ? ?/sec 1.00 4.2±0.02ms ? ?/sec
physical_plan_tpch_q8 1.01 5.2±0.06ms ? ?/sec 1.00 5.2±0.02ms ? ?/sec
physical_plan_tpch_q9 1.00 4.1±0.04ms ? ?/sec 1.00 4.1±0.01ms ? ?/sec
physical_select_aggregates_from_200 1.01 17.7±0.08ms ? ?/sec 1.00 17.6±0.08ms ? ?/sec
physical_select_all_from_1000 1.01 25.1±0.08ms ? ?/sec 1.00 24.8±0.11ms ? ?/sec
physical_select_one_from_700 1.08 1119.8±8.70µs ? ?/sec 1.00 1034.4±5.66µs ? ?/sec
physical_sorted_union_orderby 1.00 42.1±0.27ms ? ?/sec 1.01 42.4±0.28ms ? ?/sec
physical_theta_join_consider_sort 1.03 1779.4±8.36µs ? ?/sec 1.00 1719.7±7.17µs ? ?/sec
physical_unnest_to_join 1.03 1321.3±8.77µs ? ?/sec 1.00 1278.5±12.47µs ? ?/sec
with_param_values_many_columns 1.05 128.9±0.76µs ? ?/sec 1.00 123.1±0.68µs ? ?/sec

@zhuqi-lucas

Copy link
Copy Markdown
ContributorAuthor

Thanks @zhuqi-lucas -- this looks quite nice

I think it is an API change so I will mark the PR as such and I think it is a good improvement

However, given it is an API change I think we should

  1. Wait until DataFusion 50.0.0 (let's not make any more changes in DataFusion 49 that we are starting to prepare for)
  2. Update the upgrading guide in https://datafusion.apache.org/library-user-guide/upgrading.html to explain to people hw to change things

Thank you @alamb for review and i agree that we can do this for Datafusion 50.0.0, and since we have enough time, i want to do more improvement, try to reduce Expr more, from size 128 to 80, i am in progress now.

@github-actionsgithub-actionsBot added the functions Changes to functions implementation label Jul 15, 2025
@zhuqi-lucaszhuqi-lucas changed the title feat: change Expr Alias and OuterReferenceColumn to Box type for reducing expr struct sizefeat: change Expr Alias ,OuterReferenceColumn, Column to Box type for reducing expr struct sizeJul 15, 2025
@zhuqi-lucas

Copy link
Copy Markdown
ContributorAuthor

Updated:

Successfully changed the size from 128 to 80 in latest PR.

@github-actionsgithub-actionsBot removed the sqllogictest SQL Logic Tests (.slt) label Jul 15, 2025
@alamb

Copy link
Copy Markdown
Contributor

🤖 ./gh_compare_branch_bench.shBenchmark Script Running
Linux aal-dev 6.11.0-1016-gcp #16~24.04.1-Ubuntu SMP Wed May 28 02:40:52 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing reduce_expr_size (45ca84c) to d1e6eb4diff
BENCH_NAME=sql_planner
BENCH_COMMAND=cargo bench --bench sql_planner
BENCH_FILTER=
BENCH_BRANCH_NAME=reduce_expr_size
Results will be posted here when complete

@alamb

Copy link
Copy Markdown
Contributor

🤖: Benchmark completed

Details

group main reduce_expr_size
----- ---- ----------------
logical_aggregate_with_join 1.03 637.9±3.29µs ? ?/sec 1.00 620.2±6.47µs ? ?/sec
logical_select_all_from_1000 1.00 11.4±0.10ms ? ?/sec 1.00 11.4±0.05ms ? ?/sec
logical_select_one_from_700 1.04 420.0±1.62µs ? ?/sec 1.00 405.3±1.27µs ? ?/sec
logical_trivial_join_high_numbered_columns 1.04 378.2±1.22µs ? ?/sec 1.00 364.6±1.40µs ? ?/sec
logical_trivial_join_low_numbered_columns 1.04 365.8±1.77µs ? ?/sec 1.00 350.8±1.20µs ? ?/sec
physical_intersection 1.03 841.6±9.73µs ? ?/sec 1.00 818.7±5.01µs ? ?/sec
physical_join_consider_sort 1.04 1403.8±15.17µs ? ?/sec 1.00 1348.2±7.87µs ? ?/sec
physical_join_distinct 1.04 355.5±1.85µs ? ?/sec 1.00 342.2±2.38µs ? ?/sec
physical_many_self_joins 1.05 10.5±0.06ms ? ?/sec 1.00 9.9±0.04ms ? ?/sec
physical_plan_clickbench_all 1.00 186.3±1.54ms ? ?/sec 1.01 189.1±2.61ms ? ?/sec
physical_plan_clickbench_q1 1.05 2.6±0.06ms ? ?/sec 1.00 2.5±0.03ms ? ?/sec
physical_plan_clickbench_q10 1.01 3.4±0.03ms ? ?/sec 1.00 3.3±0.04ms ? ?/sec
physical_plan_clickbench_q11 1.03 3.6±0.17ms ? ?/sec 1.00 3.5±0.05ms ? ?/sec
physical_plan_clickbench_q12 1.01 3.7±0.04ms ? ?/sec 1.00 3.7±0.04ms ? ?/sec
physical_plan_clickbench_q13 1.01 3.4±0.03ms ? ?/sec 1.00 3.3±0.04ms ? ?/sec
physical_plan_clickbench_q14 1.02 3.6±0.08ms ? ?/sec 1.00 3.5±0.05ms ? ?/sec
physical_plan_clickbench_q15 1.02 3.5±0.03ms ? ?/sec 1.00 3.4±0.04ms ? ?/sec
physical_plan_clickbench_q16 1.03 3.3±0.09ms ? ?/sec 1.00 3.3±0.05ms ? ?/sec
physical_plan_clickbench_q17 1.02 3.4±0.03ms ? ?/sec 1.00 3.3±0.03ms ? ?/sec
physical_plan_clickbench_q18 1.04 3.0±0.09ms ? ?/sec 1.00 2.9±0.03ms ? ?/sec
physical_plan_clickbench_q19 1.01 3.8±0.04ms ? ?/sec 1.00 3.8±0.05ms ? ?/sec
physical_plan_clickbench_q2 1.01 2.9±0.03ms ? ?/sec 1.00 2.9±0.03ms ? ?/sec
physical_plan_clickbench_q20 1.02 2.7±0.07ms ? ?/sec 1.00 2.6±0.06ms ? ?/sec
physical_plan_clickbench_q21 1.01 3.0±0.02ms ? ?/sec 1.00 2.9±0.05ms ? ?/sec
physical_plan_clickbench_q22 1.02 3.6±0.04ms ? ?/sec 1.00 3.5±0.05ms ? ?/sec
physical_plan_clickbench_q23 1.02 3.9±0.09ms ? ?/sec 1.00 3.8±0.04ms ? ?/sec
physical_plan_clickbench_q24 1.00 4.3±0.05ms ? ?/sec 1.01 4.3±0.05ms ? ?/sec
physical_plan_clickbench_q25 1.04 3.1±0.08ms ? ?/sec 1.00 3.0±0.03ms ? ?/sec
physical_plan_clickbench_q26 1.01 2.9±0.03ms ? ?/sec 1.00 2.9±0.03ms ? ?/sec
physical_plan_clickbench_q27 1.00 3.1±0.02ms ? ?/sec 1.00 3.0±0.03ms ? ?/sec
physical_plan_clickbench_q28 1.02 3.9±0.04ms ? ?/sec 1.00 3.8±0.04ms ? ?/sec
physical_plan_clickbench_q29 1.00 4.5±0.05ms ? ?/sec 1.00 4.5±0.07ms ? ?/sec
physical_plan_clickbench_q3 1.01 2.9±0.04ms ? ?/sec 1.00 2.8±0.03ms ? ?/sec
physical_plan_clickbench_q30 1.00 12.7±0.17ms ? ?/sec 1.00 12.7±0.13ms ? ?/sec
physical_plan_clickbench_q31 1.00 3.8±0.04ms ? ?/sec 1.00 3.8±0.05ms ? ?/sec
physical_plan_clickbench_q32 1.01 3.8±0.03ms ? ?/sec 1.00 3.8±0.04ms ? ?/sec
physical_plan_clickbench_q33 1.00 3.3±0.03ms ? ?/sec 1.00 3.3±0.02ms ? ?/sec
physical_plan_clickbench_q34 1.00 3.0±0.03ms ? ?/sec 1.00 3.0±0.03ms ? ?/sec
physical_plan_clickbench_q35 1.00 3.1±0.03ms ? ?/sec 1.01 3.2±0.09ms ? ?/sec
physical_plan_clickbench_q36 1.00 3.9±0.04ms ? ?/sec 1.00 3.9±0.06ms ? ?/sec
physical_plan_clickbench_q37 1.02 3.9±0.03ms ? ?/sec 1.00 3.8±0.04ms ? ?/sec
physical_plan_clickbench_q38 1.02 3.9±0.03ms ? ?/sec 1.00 3.8±0.03ms ? ?/sec
physical_plan_clickbench_q39 1.02 3.7±0.04ms ? ?/sec 1.00 3.6±0.03ms ? ?/sec
physical_plan_clickbench_q4 1.01 2.6±0.03ms ? ?/sec 1.00 2.6±0.03ms ? ?/sec
physical_plan_clickbench_q40 1.02 4.3±0.05ms ? ?/sec 1.00 4.2±0.04ms ? ?/sec
physical_plan_clickbench_q41 1.01 3.9±0.03ms ? ?/sec 1.00 3.8±0.06ms ? ?/sec
physical_plan_clickbench_q42 1.02 3.8±0.04ms ? ?/sec 1.00 3.8±0.04ms ? ?/sec
physical_plan_clickbench_q43 1.01 4.2±0.06ms ? ?/sec 1.00 4.2±0.05ms ? ?/sec
physical_plan_clickbench_q44 1.00 2.7±0.02ms ? ?/sec 1.02 2.8±0.08ms ? ?/sec
physical_plan_clickbench_q45 1.00 2.8±0.03ms ? ?/sec 1.00 2.7±0.03ms ? ?/sec
physical_plan_clickbench_q46 1.00 3.1±0.03ms ? ?/sec 1.00 3.1±0.03ms ? ?/sec
physical_plan_clickbench_q47 1.01 3.7±0.04ms ? ?/sec 1.00 3.7±0.03ms ? ?/sec
physical_plan_clickbench_q48 1.01 4.4±0.06ms ? ?/sec 1.00 4.4±0.04ms ? ?/sec
physical_plan_clickbench_q49 1.03 4.8±0.11ms ? ?/sec 1.00 4.6±0.05ms ? ?/sec
physical_plan_clickbench_q5 1.01 2.8±0.03ms ? ?/sec 1.00 2.8±0.03ms ? ?/sec
physical_plan_clickbench_q50 1.03 4.2±0.06ms ? ?/sec 1.00 4.1±0.03ms ? ?/sec
physical_plan_clickbench_q51 1.01 3.2±0.03ms ? ?/sec 1.00 3.2±0.03ms ? ?/sec
physical_plan_clickbench_q6 1.02 2.8±0.03ms ? ?/sec 1.00 2.8±0.03ms ? ?/sec
physical_plan_clickbench_q7 1.02 2.6±0.02ms ? ?/sec 1.00 2.5±0.02ms ? ?/sec
physical_plan_clickbench_q8 1.01 3.4±0.03ms ? ?/sec 1.00 3.4±0.03ms ? ?/sec
physical_plan_clickbench_q9 1.04 3.3±0.09ms ? ?/sec 1.00 3.2±0.04ms ? ?/sec
physical_plan_tpcds_all 1.01 1036.0±8.86ms ? ?/sec 1.00 1027.5±8.74ms ? ?/sec
physical_plan_tpch_all 1.01 62.3±0.31ms ? ?/sec 1.00 61.5±0.19ms ? ?/sec
physical_plan_tpch_q1 1.00 2.0±0.01ms ? ?/sec 1.00 2.0±0.01ms ? ?/sec
physical_plan_tpch_q10 1.00 3.8±0.01ms ? ?/sec 1.00 3.8±0.01ms ? ?/sec
physical_plan_tpch_q11 1.02 3.3±0.05ms ? ?/sec 1.00 3.2±0.01ms ? ?/sec
physical_plan_tpch_q12 1.01 1781.5±9.48µs ? ?/sec 1.00 1755.6±9.08µs ? ?/sec
physical_plan_tpch_q13 1.02 1466.9±19.07µs ? ?/sec 1.00 1444.7±5.37µs ? ?/sec
physical_plan_tpch_q14 1.01 1925.3±12.20µs ? ?/sec 1.00 1908.7±8.26µs ? ?/sec
physical_plan_tpch_q16 1.01 2.4±0.01ms ? ?/sec 1.00 2.4±0.01ms ? ?/sec
physical_plan_tpch_q17 1.01 2.4±0.02ms ? ?/sec 1.00 2.4±0.01ms ? ?/sec
physical_plan_tpch_q18 1.00 2.7±0.01ms ? ?/sec 1.00 2.7±0.01ms ? ?/sec
physical_plan_tpch_q19 1.04 3.2±0.01ms ? ?/sec 1.00 3.1±0.01ms ? ?/sec
physical_plan_tpch_q2 1.01 5.5±0.02ms ? ?/sec 1.00 5.4±0.02ms ? ?/sec
physical_plan_tpch_q20 1.01 3.1±0.02ms ? ?/sec 1.00 3.1±0.02ms ? ?/sec
physical_plan_tpch_q21 1.01 4.1±0.03ms ? ?/sec 1.00 4.0±0.01ms ? ?/sec
physical_plan_tpch_q22 1.02 2.7±0.03ms ? ?/sec 1.00 2.6±0.01ms ? ?/sec
physical_plan_tpch_q3 1.00 2.5±0.01ms ? ?/sec 1.00 2.5±0.01ms ? ?/sec
physical_plan_tpch_q4 1.01 1515.1±12.16µs ? ?/sec 1.00 1501.8±7.57µs ? ?/sec
physical_plan_tpch_q5 1.00 3.1±0.02ms ? ?/sec 1.00 3.1±0.01ms ? ?/sec
physical_plan_tpch_q6 1.01 853.6±6.22µs ? ?/sec 1.00 841.8±5.44µs ? ?/sec
physical_plan_tpch_q7 1.00 4.2±0.02ms ? ?/sec 1.00 4.2±0.02ms ? ?/sec
physical_plan_tpch_q8 1.00 5.2±0.03ms ? ?/sec 1.00 5.2±0.03ms ? ?/sec
physical_plan_tpch_q9 1.01 4.1±0.18ms ? ?/sec 1.00 4.1±0.01ms ? ?/sec
physical_select_aggregates_from_200 1.01 17.6±0.08ms ? ?/sec 1.00 17.5±0.05ms ? ?/sec
physical_select_all_from_1000 1.01 25.0±0.09ms ? ?/sec 1.00 24.7±0.15ms ? ?/sec
physical_select_one_from_700 1.06 1097.8±4.49µs ? ?/sec 1.00 1036.0±6.18µs ? ?/sec
physical_sorted_union_orderby 1.00 41.9±0.31ms ? ?/sec 1.00 41.9±0.30ms ? ?/sec
physical_theta_join_consider_sort 1.03 1764.4±7.18µs ? ?/sec 1.00 1718.2±15.92µs ? ?/sec
physical_unnest_to_join 1.03 1311.7±8.13µs ? ?/sec 1.00 1276.6±5.74µs ? ?/sec
with_param_values_many_columns 1.00 129.1±0.68µs ? ?/sec 1.07 138.3±1.10µs ? ?/sec

@alamb

Copy link
Copy Markdown
Contributor

🤖 ./gh_compare_branch_bench.shBenchmark Script Running
Linux aal-dev 6.11.0-1016-gcp #16~24.04.1-Ubuntu SMP Wed May 28 02:40:52 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing reduce_expr_size (45ca84c) to d1e6eb4diff
BENCH_NAME=sql_planner
BENCH_COMMAND=cargo bench --bench sql_planner
BENCH_FILTER=
BENCH_BRANCH_NAME=reduce_expr_size
Results will be posted here when complete

@alamb

Copy link
Copy Markdown
Contributor

🤖: Benchmark completed

Details

group main reduce_expr_size
----- ---- ----------------
logical_aggregate_with_join 1.03 638.2±3.12µs ? ?/sec 1.00 620.3±5.03µs ? ?/sec
logical_select_all_from_1000 1.00 11.3±0.07ms ? ?/sec 1.01 11.4±0.03ms ? ?/sec
logical_select_one_from_700 1.03 419.8±2.92µs ? ?/sec 1.00 407.3±1.32µs ? ?/sec
logical_trivial_join_high_numbered_columns 1.03 378.9±1.38µs ? ?/sec 1.00 367.4±5.82µs ? ?/sec
logical_trivial_join_low_numbered_columns 1.03 364.5±1.35µs ? ?/sec 1.00 353.6±2.57µs ? ?/sec
physical_intersection 1.03 842.8±9.70µs ? ?/sec 1.00 817.5±4.84µs ? ?/sec
physical_join_consider_sort 1.02 1393.1±6.25µs ? ?/sec 1.00 1359.8±33.11µs ? ?/sec
physical_join_distinct 1.04 358.1±4.82µs ? ?/sec 1.00 344.1±1.60µs ? ?/sec
physical_many_self_joins 1.04 10.4±0.05ms ? ?/sec 1.00 10.0±0.07ms ? ?/sec
physical_plan_clickbench_all 1.00 185.4±1.52ms ? ?/sec 1.00 185.6±1.53ms ? ?/sec
physical_plan_clickbench_q1 1.00 2.5±0.02ms ? ?/sec 1.00 2.5±0.02ms ? ?/sec
physical_plan_clickbench_q10 1.00 3.3±0.04ms ? ?/sec 1.00 3.3±0.04ms ? ?/sec
physical_plan_clickbench_q11 1.02 3.6±0.14ms ? ?/sec 1.00 3.6±0.07ms ? ?/sec
physical_plan_clickbench_q12 1.00 3.7±0.03ms ? ?/sec 1.02 3.7±0.08ms ? ?/sec
physical_plan_clickbench_q13 1.00 3.3±0.03ms ? ?/sec 1.00 3.3±0.03ms ? ?/sec
physical_plan_clickbench_q14 1.00 3.5±0.03ms ? ?/sec 1.00 3.5±0.04ms ? ?/sec
physical_plan_clickbench_q15 1.00 3.4±0.04ms ? ?/sec 1.00 3.4±0.03ms ? ?/sec
physical_plan_clickbench_q16 1.00 3.2±0.07ms ? ?/sec 1.01 3.3±0.04ms ? ?/sec
physical_plan_clickbench_q17 1.00 3.3±0.03ms ? ?/sec 1.02 3.4±0.04ms ? ?/sec
physical_plan_clickbench_q18 1.00 2.9±0.03ms ? ?/sec 1.00 2.9±0.04ms ? ?/sec
physical_plan_clickbench_q19 1.00 3.8±0.05ms ? ?/sec 1.01 3.8±0.05ms ? ?/sec
physical_plan_clickbench_q2 1.01 2.9±0.02ms ? ?/sec 1.00 2.9±0.03ms ? ?/sec
physical_plan_clickbench_q20 1.00 2.6±0.02ms ? ?/sec 1.00 2.6±0.03ms ? ?/sec
physical_plan_clickbench_q21 1.00 2.9±0.02ms ? ?/sec 1.00 2.9±0.03ms ? ?/sec
physical_plan_clickbench_q22 1.01 3.5±0.07ms ? ?/sec 1.00 3.5±0.05ms ? ?/sec
physical_plan_clickbench_q23 1.00 3.8±0.09ms ? ?/sec 1.00 3.8±0.09ms ? ?/sec
physical_plan_clickbench_q24 1.00 4.3±0.06ms ? ?/sec 1.01 4.3±0.06ms ? ?/sec
physical_plan_clickbench_q25 1.01 3.0±0.03ms ? ?/sec 1.00 3.0±0.04ms ? ?/sec
physical_plan_clickbench_q26 1.00 2.9±0.03ms ? ?/sec 1.00 2.9±0.05ms ? ?/sec
physical_plan_clickbench_q27 1.00 3.0±0.02ms ? ?/sec 1.00 3.0±0.03ms ? ?/sec
physical_plan_clickbench_q28 1.00 3.8±0.04ms ? ?/sec 1.00 3.8±0.05ms ? ?/sec
physical_plan_clickbench_q29 1.00 4.5±0.06ms ? ?/sec 1.00 4.5±0.06ms ? ?/sec
physical_plan_clickbench_q3 1.00 2.8±0.03ms ? ?/sec 1.00 2.8±0.03ms ? ?/sec
physical_plan_clickbench_q30 1.01 12.8±0.17ms ? ?/sec 1.00 12.6±0.15ms ? ?/sec
physical_plan_clickbench_q31 1.01 3.9±0.11ms ? ?/sec 1.00 3.8±0.06ms ? ?/sec
physical_plan_clickbench_q32 1.00 3.8±0.04ms ? ?/sec 1.01 3.8±0.08ms ? ?/sec
physical_plan_clickbench_q33 1.00 3.3±0.04ms ? ?/sec 1.00 3.3±0.03ms ? ?/sec
physical_plan_clickbench_q34 1.00 3.0±0.03ms ? ?/sec 1.00 3.0±0.03ms ? ?/sec
physical_plan_clickbench_q35 1.00 3.1±0.03ms ? ?/sec 1.00 3.1±0.03ms ? ?/sec
physical_plan_clickbench_q36 1.00 3.9±0.15ms ? ?/sec 1.00 3.9±0.05ms ? ?/sec
physical_plan_clickbench_q37 1.00 3.8±0.03ms ? ?/sec 1.00 3.8±0.05ms ? ?/sec
physical_plan_clickbench_q38 1.00 3.9±0.04ms ? ?/sec 1.00 3.8±0.09ms ? ?/sec
physical_plan_clickbench_q39 1.00 3.7±0.05ms ? ?/sec 1.00 3.7±0.06ms ? ?/sec
physical_plan_clickbench_q4 1.00 2.6±0.02ms ? ?/sec 1.00 2.6±0.02ms ? ?/sec
physical_plan_clickbench_q40 1.01 4.3±0.07ms ? ?/sec 1.00 4.3±0.06ms ? ?/sec
physical_plan_clickbench_q41 1.01 3.9±0.06ms ? ?/sec 1.00 3.8±0.05ms ? ?/sec
physical_plan_clickbench_q42 1.01 3.8±0.06ms ? ?/sec 1.00 3.8±0.04ms ? ?/sec
physical_plan_clickbench_q43 1.00 4.2±0.08ms ? ?/sec 1.00 4.2±0.04ms ? ?/sec
physical_plan_clickbench_q44 1.00 2.7±0.02ms ? ?/sec 1.00 2.7±0.02ms ? ?/sec
physical_plan_clickbench_q45 1.00 2.7±0.02ms ? ?/sec 1.00 2.7±0.03ms ? ?/sec
physical_plan_clickbench_q46 1.00 3.1±0.03ms ? ?/sec 1.01 3.2±0.03ms ? ?/sec
physical_plan_clickbench_q47 1.00 3.7±0.04ms ? ?/sec 1.00 3.7±0.04ms ? ?/sec
physical_plan_clickbench_q48 1.00 4.4±0.05ms ? ?/sec 1.00 4.4±0.05ms ? ?/sec
physical_plan_clickbench_q49 1.01 4.7±0.11ms ? ?/sec 1.00 4.7±0.05ms ? ?/sec
physical_plan_clickbench_q5 1.00 2.8±0.03ms ? ?/sec 1.00 2.8±0.03ms ? ?/sec
physical_plan_clickbench_q50 1.01 4.1±0.08ms ? ?/sec 1.00 4.1±0.05ms ? ?/sec
physical_plan_clickbench_q51 1.00 3.2±0.03ms ? ?/sec 1.01 3.2±0.04ms ? ?/sec
physical_plan_clickbench_q6 1.00 2.8±0.03ms ? ?/sec 1.01 2.8±0.04ms ? ?/sec
physical_plan_clickbench_q7 1.00 2.5±0.02ms ? ?/sec 1.00 2.5±0.03ms ? ?/sec
physical_plan_clickbench_q8 1.00 3.4±0.03ms ? ?/sec 1.00 3.3±0.03ms ? ?/sec
physical_plan_clickbench_q9 1.00 3.2±0.03ms ? ?/sec 1.00 3.2±0.03ms ? ?/sec
physical_plan_tpcds_all 1.01 1033.8±4.95ms ? ?/sec 1.00 1027.9±4.35ms ? ?/sec
physical_plan_tpch_all 1.00 62.2±0.33ms ? ?/sec 1.00 62.1±0.53ms ? ?/sec
physical_plan_tpch_q1 1.00 2.0±0.01ms ? ?/sec 1.01 2.0±0.01ms ? ?/sec
physical_plan_tpch_q10 1.00 3.8±0.02ms ? ?/sec 1.00 3.8±0.02ms ? ?/sec
physical_plan_tpch_q11 1.00 3.2±0.02ms ? ?/sec 1.00 3.2±0.01ms ? ?/sec
physical_plan_tpch_q12 1.01 1784.1±14.73µs ? ?/sec 1.00 1760.5±9.11µs ? ?/sec
physical_plan_tpch_q13 1.00 1456.7±13.57µs ? ?/sec 1.00 1459.2±11.40µs ? ?/sec
physical_plan_tpch_q14 1.00 1915.3±10.76µs ? ?/sec 1.00 1918.9±15.09µs ? ?/sec
physical_plan_tpch_q16 1.00 2.4±0.01ms ? ?/sec 1.00 2.4±0.01ms ? ?/sec
physical_plan_tpch_q17 1.01 2.4±0.01ms ? ?/sec 1.00 2.4±0.01ms ? ?/sec
physical_plan_tpch_q18 1.00 2.7±0.01ms ? ?/sec 1.00 2.7±0.02ms ? ?/sec
physical_plan_tpch_q19 1.04 3.2±0.01ms ? ?/sec 1.00 3.1±0.02ms ? ?/sec
physical_plan_tpch_q2 1.00 5.5±0.03ms ? ?/sec 1.00 5.5±0.04ms ? ?/sec
physical_plan_tpch_q20 1.00 3.1±0.01ms ? ?/sec 1.00 3.1±0.01ms ? ?/sec
physical_plan_tpch_q21 1.00 4.0±0.02ms ? ?/sec 1.00 4.1±0.02ms ? ?/sec
physical_plan_tpch_q22 1.01 2.7±0.01ms ? ?/sec 1.00 2.7±0.02ms ? ?/sec
physical_plan_tpch_q3 1.00 2.5±0.01ms ? ?/sec 1.00 2.5±0.02ms ? ?/sec
physical_plan_tpch_q4 1.00 1517.2±9.81µs ? ?/sec 1.00 1516.6±8.58µs ? ?/sec
physical_plan_tpch_q5 1.00 3.1±0.02ms ? ?/sec 1.00 3.1±0.01ms ? ?/sec
physical_plan_tpch_q6 1.01 859.5±8.00µs ? ?/sec 1.00 848.9±11.27µs ? ?/sec
physical_plan_tpch_q7 1.00 4.2±0.02ms ? ?/sec 1.00 4.2±0.02ms ? ?/sec
physical_plan_tpch_q8 1.00 5.2±0.03ms ? ?/sec 1.01 5.2±0.04ms ? ?/sec
physical_plan_tpch_q9 1.00 4.1±0.02ms ? ?/sec 1.01 4.1±0.02ms ? ?/sec
physical_select_aggregates_from_200 1.01 17.7±0.19ms ? ?/sec 1.00 17.6±0.10ms ? ?/sec
physical_select_all_from_1000 1.01 25.0±0.10ms ? ?/sec 1.00 24.8±0.11ms ? ?/sec
physical_select_one_from_700 1.07 1101.0±8.51µs ? ?/sec 1.00 1029.6±5.26µs ? ?/sec
physical_sorted_union_orderby 1.00 41.9±0.36ms ? ?/sec 1.01 42.2±0.34ms ? ?/sec
physical_theta_join_consider_sort 1.02 1760.6±6.81µs ? ?/sec 1.00 1726.7±12.66µs ? ?/sec
physical_unnest_to_join 1.03 1308.3±11.00µs ? ?/sec 1.00 1275.9±10.38µs ? ?/sec
with_param_values_many_columns 1.00 129.8±0.74µs ? ?/sec 1.06 137.2±0.79µs ? ?/sec

@zhuqi-lucas

Copy link
Copy Markdown
ContributorAuthor

🤖: Benchmark completed

Details

Thank you @alamb for benchmark, interesting, it seems the performance decrease from 112 size to 80, i will investigate it, if i can't find the root cause, i will revert to 112 bytes first!

@zhuqi-lucas

Copy link
Copy Markdown
ContributorAuthor

Strange, i can't reproduce this in my local:

with_param_values_many_columns 1.00129.8±0.74µs ? ?/sec 1.06137.2±0.79µs 

@kosiewkosiew left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

👍
Just some nit for your review.

Comment on lines +260 to +262
Expr::Alias(alias_box) => {
// alias_box: Box<Alias>
let Alias { expr, name, .. } = *alias_box;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

nit - use boxed_alias instead, for consistency

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Thank you @kosiew , addressed in latest PR.

Comment on lines +140 to +142
if let Expr::Alias(alias_box) = expr {
// alias_box: &Box<Alias>, so alias_box.as_ref() is &Alias
let alias: &Alias = alias_box.as_ref();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

same as above - boxed_alias

Comment threaddatafusion/expr/src/expr_schema.rs Outdated
Comment on lines +249 to +250
Expr::Alias(alias_box) => {
let Alias { expr, .. } = alias_box.as_ref();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

boxed_alias

Comment threaddatafusion/expr/src/utils.rs Outdated
stack.push(*left);
}
Expr::Alias(Alias { expr, .. }) => stack.push(*expr),
Expr::Alias(alias_box) => stack.push(*alias_box.expr),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

boxed_alias

@zhuqi-lucas

Copy link
Copy Markdown
ContributorAuthor

👍 Just some nit for your review.

Thank you @kosiew for review and suggestion, addressed in latest PR.

@xudong963

Copy link
Copy Markdown
Member

After opening the DF50.0.0 release issue, you can add it to the list

@alamb

Copy link
Copy Markdown
Contributor

Strange, i can't reproduce this in my local:

I will rerun

@alamb

Copy link
Copy Markdown
Contributor

🤖 ./gh_compare_branch_bench.shBenchmark Script Running
Linux aal-dev 6.11.0-1016-gcp #16~24.04.1-Ubuntu SMP Wed May 28 02:40:52 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing reduce_expr_size (3cd8e4e) to c4b9995diff
BENCH_NAME=sql_planner
BENCH_COMMAND=cargo bench --bench sql_planner
BENCH_FILTER=
BENCH_BRANCH_NAME=reduce_expr_size
Results will be posted here when complete

zhuqi-lucas pushed a commit to zhuqi-lucas/arrow-datafusion that referenced this pull request Feb 10, 2026
Box three large variants in the Expr enum to reduce its memory footprint:
- Alias(Alias) -> Alias(Box<Alias>)
- Column(Column) -> Column(Box<Column>)
- OuterReferenceColumn(FieldRef, Column) -> OuterReferenceColumn(Box<OuterReference>)
This reduces the Expr enum size from 112 bytes to 80 bytes (28% reduction),
which improves cache locality and reduces memory usage across the query engine
since Expr is one of the most frequently used types.
Introduces a new OuterReference named struct to replace the tuple variant,
improving readability and maintainability.
Based on apache#16771, rebased and
updated against the latest master.
https://claude.ai/code/session_018FV5mepXRLnBVzzWv8ihgb
CopilotAI review requested due to automatic review settings February 11, 2026 07:44
@github-actionsgithub-actionsBot added the functions Changes to functions implementation label Feb 11, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR reduces the size of the Expr enum from 128 bytes to 80 bytes by boxing the Alias and OuterReferenceColumn variants. This is a continuation of ongoing efforts to optimize memory usage in DataFusion's expression system.

Changes:

  • Changed Expr::Alias(Alias) to Expr::Alias(Box<Alias>)
  • Changed Expr::OuterReferenceColumn(FieldRef, Column) to Expr::OuterReferenceColumn(Box<OuterReference>) where OuterReference is a new struct containing the field and column
  • Updated all pattern matching and construction sites throughout the codebase to work with the boxed types
  • Updated test expectations for error messages that display OuterReferenceColumn
  • Updated the size test to verify the new 80-byte size

Reviewed changes

Copilot reviewed 58 out of 58 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
datafusion/expr/src/expr.rsCore type changes: boxed Alias and OuterReferenceColumn, added OuterReference struct, updated size test
datafusion/expr/src/lib.rsExported OuterReference type
datafusion/expr/src/*.rsUpdated pattern matching and expression construction for boxed types
datafusion/optimizer/src/*.rsUpdated optimizer rules to work with boxed types
datafusion/sql/src/*.rsUpdated SQL planning to construct boxed expressions
datafusion/substrait/src/*.rsUpdated Substrait conversion to handle boxed types
datafusion/proto/src/*.rsUpdated protobuf serialization/deserialization
datafusion/physical-expr/src/*.rsUpdated physical expression planning
datafusion/core/src/*.rsUpdated core dataframe and execution code
datafusion/functions*/src/*.rsUpdated function implementations
datafusion/**/tests/*.rsUpdated test code and test expectations
datafusion/sqllogictest/test_files/*.sltUpdated expected error messages for OuterReferenceColumn display format

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@zhuqi-lucas

Copy link
Copy Markdown
ContributorAuthor

run sql_planner

@zhuqi-lucas

Copy link
Copy Markdown
ContributorAuthor

run benchmark sql_planner

@alamb-ghbot

Copy link
Copy Markdown

🤖 ./gh_compare_branch_bench.shcompare_branch_bench.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing reduce_expr_size (edf1eaf) to 69d0f44diff
BENCH_NAME=sql_planner
BENCH_COMMAND=cargo bench --features=parquet --bench sql_planner
BENCH_FILTER=
BENCH_BRANCH_NAME=reduce_expr_size
Results will be posted here when complete

@zhuqi-lucas

Copy link
Copy Markdown
ContributorAuthor

I revive this PR by claude help. cc @alamb

And let's see if benchmark will show improvement.

@alamb-ghbot

Copy link
Copy Markdown

🤖: Benchmark completed

Details

group main reduce_expr_size
----- ---- ----------------
logical_aggregate_with_join 1.00 631.6±2.74µs ? ?/sec 1.01 635.6±2.33µs ? ?/sec
logical_plan_struct_join_agg_sort 1.00 290.5±2.36µs ? ?/sec 1.00 291.5±2.55µs ? ?/sec
logical_select_all_from_1000 1.00 10.5±0.06ms ? ?/sec 1.01 10.6±0.12ms ? ?/sec
logical_select_one_from_700 1.00 411.8±2.86µs ? ?/sec 1.01 417.6±14.06µs ? ?/sec
logical_trivial_join_high_numbered_columns 1.00 373.1±16.91µs ? ?/sec 1.00 374.8±1.39µs ? ?/sec
logical_trivial_join_low_numbered_columns 1.00 355.9±5.53µs ? ?/sec 1.02 362.9±5.25µs ? ?/sec
physical_intersection 1.00 1587.6±7.74µs ? ?/sec 1.00 1593.9±24.77µs ? ?/sec
physical_join_consider_sort 1.00 2.3±0.01ms ? ?/sec 1.00 2.3±0.01ms ? ?/sec
physical_join_distinct 1.00 348.8±8.09µs ? ?/sec 1.01 351.8±3.00µs ? ?/sec
physical_many_self_joins 1.00 12.4±0.06ms ? ?/sec 1.00 12.4±0.04ms ? ?/sec
physical_plan_clickbench_all 1.00 199.7±2.39ms ? ?/sec 1.00 200.4±4.22ms ? ?/sec
physical_plan_clickbench_q1 1.00 2.1±0.02ms ? ?/sec 1.00 2.1±0.01ms ? ?/sec
physical_plan_clickbench_q10 1.00 3.6±0.03ms ? ?/sec 1.00 3.6±0.02ms ? ?/sec
physical_plan_clickbench_q11 1.00 4.1±0.08ms ? ?/sec 1.01 4.1±0.06ms ? ?/sec
physical_plan_clickbench_q12 1.00 4.2±0.10ms ? ?/sec 1.00 4.2±0.03ms ? ?/sec
physical_plan_clickbench_q13 1.00 3.7±0.06ms ? ?/sec 1.00 3.7±0.03ms ? ?/sec
physical_plan_clickbench_q14 1.00 4.1±0.08ms ? ?/sec 1.00 4.1±0.04ms ? ?/sec
physical_plan_clickbench_q15 1.00 3.8±0.09ms ? ?/sec 1.00 3.8±0.06ms ? ?/sec
physical_plan_clickbench_q16 1.00 3.6±0.02ms ? ?/sec 1.01 3.7±0.05ms ? ?/sec
physical_plan_clickbench_q17 1.01 3.8±0.10ms ? ?/sec 1.00 3.7±0.03ms ? ?/sec
physical_plan_clickbench_q18 1.00 2.6±0.02ms ? ?/sec 1.00 2.6±0.05ms ? ?/sec
physical_plan_clickbench_q19 1.00 4.1±0.04ms ? ?/sec 1.00 4.1±0.04ms ? ?/sec
physical_plan_clickbench_q2 1.00 2.7±0.02ms ? ?/sec 1.00 2.7±0.01ms ? ?/sec
physical_plan_clickbench_q20 1.00 2.2±0.04ms ? ?/sec 1.00 2.2±0.04ms ? ?/sec
physical_plan_clickbench_q21 1.00 2.7±0.02ms ? ?/sec 1.01 2.8±0.04ms ? ?/sec
physical_plan_clickbench_q22 1.00 3.9±0.02ms ? ?/sec 1.01 3.9±0.04ms ? ?/sec
physical_plan_clickbench_q23 1.00 4.1±0.03ms ? ?/sec 1.00 4.2±0.05ms ? ?/sec
physical_plan_clickbench_q24 1.00 4.8±0.04ms ? ?/sec 1.01 4.8±0.07ms ? ?/sec
physical_plan_clickbench_q25 1.00 3.5±0.01ms ? ?/sec 1.01 3.5±0.02ms ? ?/sec
physical_plan_clickbench_q26 1.00 2.9±0.01ms ? ?/sec 1.01 2.9±0.03ms ? ?/sec
physical_plan_clickbench_q27 1.00 3.5±0.02ms ? ?/sec 1.01 3.5±0.03ms ? ?/sec
physical_plan_clickbench_q28 1.00 4.4±0.04ms ? ?/sec 1.01 4.5±0.11ms ? ?/sec
physical_plan_clickbench_q29 1.00 4.8±0.04ms ? ?/sec 1.00 4.7±0.07ms ? ?/sec
physical_plan_clickbench_q3 1.00 2.5±0.02ms ? ?/sec 1.01 2.5±0.02ms ? ?/sec
physical_plan_clickbench_q30 1.01 15.6±0.12ms ? ?/sec 1.00 15.5±0.24ms ? ?/sec
physical_plan_clickbench_q31 1.00 4.4±0.05ms ? ?/sec 1.01 4.5±0.10ms ? ?/sec
physical_plan_clickbench_q32 1.01 4.5±0.04ms ? ?/sec 1.00 4.4±0.04ms ? ?/sec
physical_plan_clickbench_q33 1.00 3.6±0.02ms ? ?/sec 1.00 3.6±0.04ms ? ?/sec
physical_plan_clickbench_q34 1.01 3.2±0.04ms ? ?/sec 1.00 3.2±0.03ms ? ?/sec
physical_plan_clickbench_q35 1.00 3.4±0.08ms ? ?/sec 1.00 3.4±0.09ms ? ?/sec
physical_plan_clickbench_q36 1.00 4.2±0.03ms ? ?/sec 1.00 4.2±0.06ms ? ?/sec
physical_plan_clickbench_q37 1.02 4.6±0.11ms ? ?/sec 1.00 4.5±0.09ms ? ?/sec
physical_plan_clickbench_q38 1.01 4.6±0.07ms ? ?/sec 1.00 4.6±0.09ms ? ?/sec
physical_plan_clickbench_q39 1.01 4.0±0.04ms ? ?/sec 1.00 3.9±0.04ms ? ?/sec
physical_plan_clickbench_q4 1.00 2.2±0.01ms ? ?/sec 1.00 2.2±0.01ms ? ?/sec
physical_plan_clickbench_q40 1.02 4.8±0.11ms ? ?/sec 1.00 4.8±0.06ms ? ?/sec
physical_plan_clickbench_q41 1.02 4.2±0.12ms ? ?/sec 1.00 4.1±0.02ms ? ?/sec
physical_plan_clickbench_q42 1.01 4.2±0.03ms ? ?/sec 1.00 4.1±0.06ms ? ?/sec
physical_plan_clickbench_q43 1.01 4.5±0.06ms ? ?/sec 1.00 4.4±0.04ms ? ?/sec
physical_plan_clickbench_q44 1.00 2.3±0.01ms ? ?/sec 1.00 2.3±0.01ms ? ?/sec
physical_plan_clickbench_q45 1.00 2.3±0.04ms ? ?/sec 1.01 2.3±0.03ms ? ?/sec
physical_plan_clickbench_q46 1.00 3.2±0.05ms ? ?/sec 1.00 3.2±0.02ms ? ?/sec
physical_plan_clickbench_q47 1.00 4.7±0.05ms ? ?/sec 1.01 4.7±0.04ms ? ?/sec
physical_plan_clickbench_q48 1.01 5.1±0.15ms ? ?/sec 1.00 5.1±0.03ms ? ?/sec
physical_plan_clickbench_q49 1.02 5.4±0.16ms ? ?/sec 1.00 5.4±0.02ms ? ?/sec
physical_plan_clickbench_q5 1.00 2.5±0.02ms ? ?/sec 1.00 2.5±0.02ms ? ?/sec
physical_plan_clickbench_q50 1.04 4.1±0.09ms ? ?/sec 1.00 4.0±0.02ms ? ?/sec
physical_plan_clickbench_q51 1.01 3.5±0.10ms ? ?/sec 1.00 3.5±0.02ms ? ?/sec
physical_plan_clickbench_q6 1.00 2.5±0.01ms ? ?/sec 1.01 2.5±0.05ms ? ?/sec
physical_plan_clickbench_q7 1.00 2.1±0.03ms ? ?/sec 1.00 2.1±0.02ms ? ?/sec
physical_plan_clickbench_q8 1.00 3.4±0.02ms ? ?/sec 1.01 3.4±0.02ms ? ?/sec
physical_plan_clickbench_q9 1.00 3.6±0.04ms ? ?/sec 1.00 3.6±0.05ms ? ?/sec
physical_plan_struct_join_agg_sort 1.00 2.7±0.06ms ? ?/sec 1.02 2.7±0.12ms ? ?/sec
physical_plan_tpcds_all 1.00 1904.5±17.21ms ? ?/sec 1.00 1912.4±16.28ms ? ?/sec
physical_plan_tpch_all 1.01 126.3±2.32ms ? ?/sec 1.00 125.2±1.21ms ? ?/sec
physical_plan_tpch_q1 1.00 3.0±0.02ms ? ?/sec 1.02 3.0±0.09ms ? ?/sec
physical_plan_tpch_q10 1.01 7.2±0.21ms ? ?/sec 1.00 7.2±0.11ms ? ?/sec
physical_plan_tpch_q11 1.01 8.5±0.18ms ? ?/sec 1.00 8.4±0.03ms ? ?/sec
physical_plan_tpch_q12 1.01 3.0±0.06ms ? ?/sec 1.00 3.0±0.03ms ? ?/sec
physical_plan_tpch_q13 1.00 3.0±0.01ms ? ?/sec 1.00 3.0±0.02ms ? ?/sec
physical_plan_tpch_q14 1.00 3.0±0.02ms ? ?/sec 1.00 3.0±0.05ms ? ?/sec
physical_plan_tpch_q16 1.00 5.1±0.07ms ? ?/sec 1.00 5.2±0.06ms ? ?/sec
physical_plan_tpch_q17 1.01 5.6±0.12ms ? ?/sec 1.00 5.6±0.03ms ? ?/sec
physical_plan_tpch_q18 1.02 6.0±0.14ms ? ?/sec 1.00 5.9±0.07ms ? ?/sec
physical_plan_tpch_q19 1.02 5.0±0.02ms ? ?/sec 1.00 5.0±0.05ms ? ?/sec
physical_plan_tpch_q2 1.01 12.2±0.12ms ? ?/sec 1.00 12.2±0.22ms ? ?/sec
physical_plan_tpch_q20 1.00 8.0±0.06ms ? ?/sec 1.01 8.0±0.26ms ? ?/sec
physical_plan_tpch_q21 1.00 10.1±0.06ms ? ?/sec 1.00 10.1±0.15ms ? ?/sec
physical_plan_tpch_q22 1.01 6.5±0.23ms ? ?/sec 1.00 6.4±0.11ms ? ?/sec
physical_plan_tpch_q3 1.01 5.6±0.17ms ? ?/sec 1.00 5.6±0.05ms ? ?/sec
physical_plan_tpch_q4 1.00 3.0±0.02ms ? ?/sec 1.00 3.0±0.02ms ? ?/sec
physical_plan_tpch_q5 1.01 6.0±0.19ms ? ?/sec 1.00 5.9±0.03ms ? ?/sec
physical_plan_tpch_q6 1.01 1601.2±29.06µs ? ?/sec 1.00 1578.8±17.54µs ? ?/sec
physical_plan_tpch_q7 1.01 7.1±0.13ms ? ?/sec 1.00 7.1±0.04ms ? ?/sec
physical_plan_tpch_q8 1.00 9.2±0.12ms ? ?/sec 1.00 9.2±0.08ms ? ?/sec
physical_plan_tpch_q9 1.00 6.6±0.18ms ? ?/sec 1.00 6.6±0.09ms ? ?/sec
physical_select_aggregates_from_200 1.02 17.2±0.07ms ? ?/sec 1.00 16.9±0.04ms ? ?/sec
physical_select_all_from_1000 1.01 23.3±0.15ms ? ?/sec 1.00 23.1±0.13ms ? ?/sec
physical_select_one_from_700 1.00 1317.4±9.30µs ? ?/sec 1.01 1326.7±20.01µs ? ?/sec
physical_sorted_union_order_by_10_int64 1.00 11.0±0.08ms ? ?/sec 1.01 11.0±0.26ms ? ?/sec
physical_sorted_union_order_by_10_uint64 1.00 29.5±0.19ms ? ?/sec 1.00 29.3±0.07ms ? ?/sec
physical_sorted_union_order_by_50_int64 1.00 196.6±1.46ms ? ?/sec 1.01 198.1±2.82ms ? ?/sec
physical_sorted_union_order_by_50_uint64 1.00 1069.7±11.19ms ? ?/sec 1.01 1079.9±12.36ms ? ?/sec
physical_theta_join_consider_sort 1.01 2.7±0.06ms ? ?/sec 1.00 2.6±0.02ms ? ?/sec
physical_unnest_to_join 1.00 3.0±0.01ms ? ?/sec 1.00 3.0±0.04ms ? ?/sec
physical_window_function_partition_by_12_on_values 1.00 1573.6±8.85µs ? ?/sec 1.00 1581.2±22.41µs ? ?/sec
physical_window_function_partition_by_30_on_values 1.00 2.9±0.02ms ? ?/sec 1.02 3.0±0.08ms ? ?/sec
physical_window_function_partition_by_4_on_values 1.00 1082.8±13.77µs ? ?/sec 1.00 1084.0±5.80µs ? ?/sec
physical_window_function_partition_by_7_on_values 1.00 1247.6±5.47µs ? ?/sec 1.01 1256.8±12.42µs ? ?/sec
physical_window_function_partition_by_8_on_values 1.00 1319.6±7.72µs ? ?/sec 1.01 1333.5±7.00µs ? ?/sec
with_param_values_many_columns 1.00 582.6±4.12µs ? ?/sec 1.02 593.7±4.55µs ? ?/sec

@zhuqi-lucas

Copy link
Copy Markdown
ContributorAuthor

Seems still no improvement in latest benchmark.

@github-actionsgithub-actionsBot added common Related to common crate and removed functions Changes to functions implementation labels Feb 11, 2026
@zhuqi-lucas

Copy link
Copy Markdown
ContributorAuthor

run benchmark sql_planner

@zhuqi-lucas

Copy link
Copy Markdown
ContributorAuthor

run benchmark sql_planner

@alamb

Copy link
Copy Markdown
Contributor

show benchmark queue

@alamb-ghbot

Copy link
Copy Markdown

🤖 Hi @alamb, you asked to view the benchmark queue (#16771 (comment)).

JobUserBenchmarksComment
arrow-9393-3884310682.shrluvatonbuilder cast_kernels comparison_kernels concatenate_kernel filter_kernels interleave_kernels sort_kernel take_kernels zip_kernelshttps://github.com/apache/arrow-rs/pull/9393#issuecomment-3884310682
16771_3884663325.shzhuqi-lucassql_plannerhttps://github.com/apache/datafusion/pull/16771#issuecomment-3884663325
20182_3884681965.shadriangbwith_hasheshttps://github.com/apache/datafusion/pull/20182#issuecomment-3884681965
16771_3884933381.shzhuqi-lucassql_plannerhttps://github.com/apache/datafusion/pull/16771#issuecomment-3884933381

@zhuqi-lucas

Copy link
Copy Markdown
ContributorAuthor

Thanks @alamb, i see, there are already 2 in queue.

🤖 Hi @alamb, you asked to view the benchmark queue (#16771 (comment)).

Job User Benchmarks Comment
arrow-9393-3884310682.sh rluvaton builder cast_kernels comparison_kernels concatenate_kernel filter_kernels interleave_kernels sort_kernel take_kernels zip_kernels https://github.com/apache/arrow-rs/pull/9393#issuecomment-3884310682
16771_3884663325.sh zhuqi-lucas sql_planner https://github.com/apache/datafusion/pull/16771#issuecomment-3884663325
20182_3884681965.sh adriangb with_hashes https://github.com/apache/datafusion/pull/20182#issuecomment-3884681965
16771_3884933381.sh zhuqi-lucas sql_planner https://github.com/apache/datafusion/pull/16771#issuecomment-3884933381

@alamb

alamb commented Feb 11, 2026

Copy link
Copy Markdown
Contributor

Thanks @alamb, i see, there are already 2 in queue.

👍 -- I just wanted to double check that the runner hadn't gotten stuck again (it sometimes does break / get restarted and needs manual intervention)

@alamb-ghbot

Copy link
Copy Markdown

🤖 ./gh_compare_branch_bench.shcompare_branch_bench.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing reduce_expr_size (aba0a3d) to f9d37cfdiff
BENCH_NAME=sql_planner
BENCH_COMMAND=cargo bench --features=parquet --bench sql_planner
BENCH_FILTER=
BENCH_BRANCH_NAME=reduce_expr_size
Results will be posted here when complete

@alamb-ghbot

Copy link
Copy Markdown

🤖: Benchmark completed

Details

group main reduce_expr_size
----- ---- ----------------
logical_aggregate_with_join 1.00 626.2±3.00µs ? ?/sec 1.01 631.5±3.84µs ? ?/sec
logical_plan_struct_join_agg_sort 1.01 288.6±2.56µs ? ?/sec 1.00 285.4±3.91µs ? ?/sec
logical_select_all_from_1000 1.00 10.5±0.06ms ? ?/sec 1.04 10.9±0.06ms ? ?/sec
logical_select_one_from_700 1.00 412.6±3.91µs ? ?/sec 1.01 415.5±7.29µs ? ?/sec
logical_trivial_join_high_numbered_columns 1.00 369.5±3.11µs ? ?/sec 1.01 373.1±2.78µs ? ?/sec
logical_trivial_join_low_numbered_columns 1.00 356.6±2.11µs ? ?/sec 1.01 359.1±2.58µs ? ?/sec
physical_intersection 1.00 1580.6±16.60µs ? ?/sec 1.00 1583.8±6.72µs ? ?/sec
physical_join_consider_sort 1.00 2.2±0.01ms ? ?/sec 1.01 2.3±0.04ms ? ?/sec
physical_join_distinct 1.00 349.4±3.50µs ? ?/sec 1.00 349.0±4.77µs ? ?/sec
physical_many_self_joins 1.00 12.4±0.05ms ? ?/sec 1.00 12.4±0.07ms ? ?/sec
physical_plan_clickbench_all 1.00 199.9±3.67ms ? ?/sec 1.03 205.6±2.51ms ? ?/sec
physical_plan_clickbench_q1 1.00 2.1±0.02ms ? ?/sec 1.01 2.1±0.03ms ? ?/sec
physical_plan_clickbench_q10 1.00 3.6±0.04ms ? ?/sec 1.00 3.6±0.03ms ? ?/sec
physical_plan_clickbench_q11 1.00 4.1±0.06ms ? ?/sec 1.02 4.2±0.03ms ? ?/sec
physical_plan_clickbench_q12 1.00 4.2±0.05ms ? ?/sec 1.01 4.3±0.08ms ? ?/sec
physical_plan_clickbench_q13 1.00 3.8±0.04ms ? ?/sec 1.00 3.8±0.03ms ? ?/sec
physical_plan_clickbench_q14 1.00 4.1±0.07ms ? ?/sec 1.01 4.1±0.05ms ? ?/sec
physical_plan_clickbench_q15 1.00 3.8±0.03ms ? ?/sec 1.03 3.9±0.10ms ? ?/sec
physical_plan_clickbench_q16 1.00 3.6±0.04ms ? ?/sec 1.02 3.7±0.05ms ? ?/sec
physical_plan_clickbench_q17 1.00 3.7±0.04ms ? ?/sec 1.02 3.8±0.11ms ? ?/sec
physical_plan_clickbench_q18 1.00 2.6±0.02ms ? ?/sec 1.02 2.7±0.09ms ? ?/sec
physical_plan_clickbench_q19 1.00 4.1±0.04ms ? ?/sec 1.00 4.2±0.04ms ? ?/sec
physical_plan_clickbench_q2 1.00 2.7±0.03ms ? ?/sec 1.00 2.7±0.02ms ? ?/sec
physical_plan_clickbench_q20 1.00 2.1±0.02ms ? ?/sec 1.00 2.2±0.03ms ? ?/sec
physical_plan_clickbench_q21 1.00 2.7±0.01ms ? ?/sec 1.02 2.8±0.13ms ? ?/sec
physical_plan_clickbench_q22 1.00 3.9±0.03ms ? ?/sec 1.03 4.0±0.04ms ? ?/sec
physical_plan_clickbench_q23 1.00 4.2±0.04ms ? ?/sec 1.00 4.2±0.03ms ? ?/sec
physical_plan_clickbench_q24 1.00 4.8±0.03ms ? ?/sec 1.02 4.8±0.03ms ? ?/sec
physical_plan_clickbench_q25 1.00 3.4±0.10ms ? ?/sec 1.00 3.5±0.03ms ? ?/sec
physical_plan_clickbench_q26 1.00 2.9±0.06ms ? ?/sec 1.00 2.9±0.01ms ? ?/sec
physical_plan_clickbench_q27 1.00 3.5±0.07ms ? ?/sec 1.01 3.5±0.03ms ? ?/sec
physical_plan_clickbench_q28 1.00 4.4±0.07ms ? ?/sec 1.02 4.5±0.05ms ? ?/sec
physical_plan_clickbench_q29 1.00 4.7±0.14ms ? ?/sec 1.00 4.7±0.03ms ? ?/sec
physical_plan_clickbench_q3 1.00 2.5±0.04ms ? ?/sec 1.02 2.6±0.02ms ? ?/sec
physical_plan_clickbench_q30 1.02 15.7±0.32ms ? ?/sec 1.00 15.4±0.17ms ? ?/sec
physical_plan_clickbench_q31 1.00 4.4±0.07ms ? ?/sec 1.00 4.4±0.03ms ? ?/sec
physical_plan_clickbench_q32 1.00 4.4±0.09ms ? ?/sec 1.02 4.5±0.09ms ? ?/sec
physical_plan_clickbench_q33 1.00 3.6±0.07ms ? ?/sec 1.01 3.6±0.05ms ? ?/sec
physical_plan_clickbench_q34 1.00 3.2±0.07ms ? ?/sec 1.01 3.3±0.04ms ? ?/sec
physical_plan_clickbench_q35 1.00 3.3±0.08ms ? ?/sec 1.01 3.3±0.03ms ? ?/sec
physical_plan_clickbench_q36 1.00 4.1±0.02ms ? ?/sec 1.02 4.2±0.05ms ? ?/sec
physical_plan_clickbench_q37 1.00 4.6±0.08ms ? ?/sec 1.00 4.6±0.09ms ? ?/sec
physical_plan_clickbench_q38 1.01 4.6±0.15ms ? ?/sec 1.00 4.6±0.03ms ? ?/sec
physical_plan_clickbench_q39 1.00 4.0±0.07ms ? ?/sec 1.01 4.0±0.03ms ? ?/sec
physical_plan_clickbench_q4 1.00 2.2±0.04ms ? ?/sec 1.00 2.2±0.03ms ? ?/sec
physical_plan_clickbench_q40 1.00 4.9±0.09ms ? ?/sec 1.01 4.9±0.02ms ? ?/sec
physical_plan_clickbench_q41 1.00 4.2±0.05ms ? ?/sec 1.00 4.2±0.03ms ? ?/sec
physical_plan_clickbench_q42 1.00 4.2±0.10ms ? ?/sec 1.00 4.2±0.04ms ? ?/sec
physical_plan_clickbench_q43 1.00 4.5±0.12ms ? ?/sec 1.02 4.6±0.06ms ? ?/sec
physical_plan_clickbench_q44 1.00 2.3±0.03ms ? ?/sec 1.03 2.3±0.02ms ? ?/sec
physical_plan_clickbench_q45 1.00 2.3±0.05ms ? ?/sec 1.01 2.3±0.05ms ? ?/sec
physical_plan_clickbench_q46 1.00 3.2±0.04ms ? ?/sec 1.04 3.3±0.09ms ? ?/sec
physical_plan_clickbench_q47 1.02 4.9±0.09ms ? ?/sec 1.00 4.8±0.09ms ? ?/sec
physical_plan_clickbench_q48 1.00 5.2±0.09ms ? ?/sec 1.00 5.2±0.12ms ? ?/sec
physical_plan_clickbench_q49 1.00 5.4±0.15ms ? ?/sec 1.01 5.5±0.09ms ? ?/sec
physical_plan_clickbench_q5 1.00 2.5±0.05ms ? ?/sec 1.01 2.5±0.02ms ? ?/sec
physical_plan_clickbench_q50 1.01 4.2±0.07ms ? ?/sec 1.00 4.1±0.06ms ? ?/sec
physical_plan_clickbench_q51 1.00 3.5±0.06ms ? ?/sec 1.03 3.6±0.09ms ? ?/sec
physical_plan_clickbench_q6 1.00 2.5±0.04ms ? ?/sec 1.00 2.5±0.04ms ? ?/sec
physical_plan_clickbench_q7 1.00 2.1±0.07ms ? ?/sec 1.00 2.1±0.07ms ? ?/sec
physical_plan_clickbench_q8 1.00 3.4±0.04ms ? ?/sec 1.00 3.4±0.06ms ? ?/sec
physical_plan_clickbench_q9 1.00 3.6±0.03ms ? ?/sec 1.01 3.6±0.06ms ? ?/sec
physical_plan_struct_join_agg_sort 1.00 2.6±0.02ms ? ?/sec 1.01 2.7±0.02ms ? ?/sec
physical_plan_tpcds_all 1.00 1899.5±14.08ms ? ?/sec 1.02 1936.6±13.89ms ? ?/sec
physical_plan_tpch_all 1.00 125.1±1.29ms ? ?/sec 1.01 126.7±1.56ms ? ?/sec
physical_plan_tpch_q1 1.00 3.0±0.05ms ? ?/sec 1.00 3.0±0.02ms ? ?/sec
physical_plan_tpch_q10 1.00 7.1±0.09ms ? ?/sec 1.01 7.2±0.08ms ? ?/sec
physical_plan_tpch_q11 1.00 8.4±0.07ms ? ?/sec 1.02 8.5±0.07ms ? ?/sec
physical_plan_tpch_q12 1.00 3.0±0.06ms ? ?/sec 1.00 3.0±0.03ms ? ?/sec
physical_plan_tpch_q13 1.00 3.0±0.02ms ? ?/sec 1.02 3.0±0.01ms ? ?/sec
physical_plan_tpch_q14 1.00 3.0±0.02ms ? ?/sec 1.01 3.0±0.05ms ? ?/sec
physical_plan_tpch_q16 1.00 5.1±0.07ms ? ?/sec 1.01 5.2±0.06ms ? ?/sec
physical_plan_tpch_q17 1.00 5.5±0.04ms ? ?/sec 1.02 5.6±0.06ms ? ?/sec
physical_plan_tpch_q18 1.00 5.9±0.08ms ? ?/sec 1.01 6.0±0.06ms ? ?/sec
physical_plan_tpch_q19 1.00 5.0±0.06ms ? ?/sec 1.01 5.0±0.14ms ? ?/sec
physical_plan_tpch_q2 1.00 12.2±0.06ms ? ?/sec 1.03 12.5±0.08ms ? ?/sec
physical_plan_tpch_q20 1.00 8.0±0.22ms ? ?/sec 1.02 8.1±0.25ms ? ?/sec
physical_plan_tpch_q21 1.00 10.0±0.36ms ? ?/sec 1.02 10.3±0.14ms ? ?/sec
physical_plan_tpch_q22 1.00 6.4±0.16ms ? ?/sec 1.02 6.5±0.18ms ? ?/sec
physical_plan_tpch_q3 1.00 5.6±0.04ms ? ?/sec 1.02 5.7±0.06ms ? ?/sec
physical_plan_tpch_q4 1.00 2.9±0.03ms ? ?/sec 1.01 3.0±0.05ms ? ?/sec
physical_plan_tpch_q5 1.00 5.9±0.09ms ? ?/sec 1.02 6.1±0.07ms ? ?/sec
physical_plan_tpch_q6 1.00 1602.7±19.23µs ? ?/sec 1.00 1608.7±21.18µs ? ?/sec
physical_plan_tpch_q7 1.00 7.0±0.04ms ? ?/sec 1.04 7.3±0.13ms ? ?/sec
physical_plan_tpch_q8 1.00 9.1±0.06ms ? ?/sec 1.03 9.4±0.12ms ? ?/sec
physical_plan_tpch_q9 1.00 6.5±0.12ms ? ?/sec 1.02 6.7±0.16ms ? ?/sec
physical_select_aggregates_from_200 1.03 17.3±0.11ms ? ?/sec 1.00 16.8±0.08ms ? ?/sec
physical_select_all_from_1000 1.00 23.5±0.14ms ? ?/sec 1.02 24.0±0.12ms ? ?/sec
physical_select_one_from_700 1.00 1320.2±11.15µs ? ?/sec 1.00 1315.8±5.82µs ? ?/sec
physical_sorted_union_order_by_10_int64 1.00 10.9±0.04ms ? ?/sec 1.02 11.1±0.09ms ? ?/sec
physical_sorted_union_order_by_10_uint64 1.00 29.6±0.61ms ? ?/sec 1.00 29.7±0.21ms ? ?/sec
physical_sorted_union_order_by_50_int64 1.00 196.2±2.34ms ? ?/sec 1.02 199.5±1.55ms ? ?/sec
physical_sorted_union_order_by_50_uint64 1.00 1074.6±8.45ms ? ?/sec 1.02 1100.3±9.51ms ? ?/sec
physical_theta_join_consider_sort 1.00 2.6±0.03ms ? ?/sec 1.03 2.7±0.02ms ? ?/sec
physical_unnest_to_join 1.00 3.1±0.05ms ? ?/sec 1.01 3.1±0.05ms ? ?/sec
physical_window_function_partition_by_12_on_values 1.00 1559.7±10.09µs ? ?/sec 1.01 1576.9±18.21µs ? ?/sec
physical_window_function_partition_by_30_on_values 1.00 2.9±0.02ms ? ?/sec 1.01 2.9±0.02ms ? ?/sec
physical_window_function_partition_by_4_on_values 1.00 1072.4±6.83µs ? ?/sec 1.00 1077.7±7.09µs ? ?/sec
physical_window_function_partition_by_7_on_values 1.00 1249.9±13.54µs ? ?/sec 1.01 1258.7±40.61µs ? ?/sec
physical_window_function_partition_by_8_on_values 1.00 1322.2±8.92µs ? ?/sec 1.00 1323.6±10.38µs ? ?/sec
with_param_values_many_columns 1.00 588.1±7.07µs ? ?/sec 1.02 599.3±9.81µs ? ?/sec

@alamb-ghbot

Copy link
Copy Markdown

🤖 ./gh_compare_branch_bench.shcompare_branch_bench.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing reduce_expr_size (aba0a3d) to f9d37cfdiff
BENCH_NAME=sql_planner
BENCH_COMMAND=cargo bench --features=parquet --bench sql_planner
BENCH_FILTER=
BENCH_BRANCH_NAME=reduce_expr_size
Results will be posted here when complete

@alamb-ghbot

Copy link
Copy Markdown

🤖: Benchmark completed

Details

group main reduce_expr_size
----- ---- ----------------
logical_aggregate_with_join 1.00 628.9±5.47µs ? ?/sec 1.01 633.9±6.02µs ? ?/sec
logical_plan_struct_join_agg_sort 1.01 287.4±2.91µs ? ?/sec 1.00 285.8±2.84µs ? ?/sec
logical_select_all_from_1000 1.00 10.6±0.06ms ? ?/sec 1.04 10.9±0.26ms ? ?/sec
logical_select_one_from_700 1.00 412.7±2.02µs ? ?/sec 1.00 413.0±3.06µs ? ?/sec
logical_trivial_join_high_numbered_columns 1.00 372.7±2.94µs ? ?/sec 1.01 374.7±5.95µs ? ?/sec
logical_trivial_join_low_numbered_columns 1.00 358.5±3.30µs ? ?/sec 1.01 360.4±4.68µs ? ?/sec
physical_intersection 1.00 1581.0±23.07µs ? ?/sec 1.01 1592.6±37.21µs ? ?/sec
physical_join_consider_sort 1.00 2.3±0.05ms ? ?/sec 1.01 2.3±0.06ms ? ?/sec
physical_join_distinct 1.00 351.4±9.19µs ? ?/sec 1.00 351.0±1.42µs ? ?/sec
physical_many_self_joins 1.00 12.4±0.32ms ? ?/sec 1.00 12.4±0.20ms ? ?/sec
physical_plan_clickbench_all 1.01 200.1±4.56ms ? ?/sec 1.00 198.7±1.95ms ? ?/sec
physical_plan_clickbench_q1 1.00 2.1±0.02ms ? ?/sec 1.01 2.1±0.06ms ? ?/sec
physical_plan_clickbench_q10 1.00 3.6±0.02ms ? ?/sec 1.02 3.6±0.08ms ? ?/sec
physical_plan_clickbench_q11 1.00 4.1±0.04ms ? ?/sec 1.01 4.1±0.05ms ? ?/sec
physical_plan_clickbench_q12 1.00 4.2±0.08ms ? ?/sec 1.01 4.2±0.05ms ? ?/sec
physical_plan_clickbench_q13 1.00 3.7±0.04ms ? ?/sec 1.00 3.7±0.08ms ? ?/sec
physical_plan_clickbench_q14 1.00 4.1±0.04ms ? ?/sec 1.00 4.1±0.02ms ? ?/sec
physical_plan_clickbench_q15 1.00 3.8±0.02ms ? ?/sec 1.01 3.8±0.02ms ? ?/sec
physical_plan_clickbench_q16 1.00 3.6±0.08ms ? ?/sec 1.00 3.6±0.02ms ? ?/sec
physical_plan_clickbench_q17 1.00 3.7±0.07ms ? ?/sec 1.00 3.7±0.02ms ? ?/sec
physical_plan_clickbench_q18 1.00 2.6±0.04ms ? ?/sec 1.01 2.6±0.02ms ? ?/sec
physical_plan_clickbench_q19 1.00 4.1±0.03ms ? ?/sec 1.01 4.1±0.03ms ? ?/sec
physical_plan_clickbench_q2 1.00 2.7±0.02ms ? ?/sec 1.01 2.7±0.04ms ? ?/sec
physical_plan_clickbench_q20 1.00 2.1±0.01ms ? ?/sec 1.02 2.2±0.01ms ? ?/sec
physical_plan_clickbench_q21 1.00 2.7±0.04ms ? ?/sec 1.01 2.8±0.01ms ? ?/sec
physical_plan_clickbench_q22 1.00 3.9±0.04ms ? ?/sec 1.01 3.9±0.08ms ? ?/sec
physical_plan_clickbench_q23 1.00 4.1±0.05ms ? ?/sec 1.00 4.1±0.07ms ? ?/sec
physical_plan_clickbench_q24 1.00 4.8±0.02ms ? ?/sec 1.01 4.8±0.06ms ? ?/sec
physical_plan_clickbench_q25 1.01 3.5±0.04ms ? ?/sec 1.00 3.4±0.02ms ? ?/sec
physical_plan_clickbench_q26 1.00 2.9±0.01ms ? ?/sec 1.01 2.9±0.02ms ? ?/sec
physical_plan_clickbench_q27 1.01 3.5±0.10ms ? ?/sec 1.00 3.5±0.07ms ? ?/sec
physical_plan_clickbench_q28 1.00 4.4±0.10ms ? ?/sec 1.00 4.4±0.05ms ? ?/sec
physical_plan_clickbench_q29 1.00 4.6±0.02ms ? ?/sec 1.02 4.7±0.16ms ? ?/sec
physical_plan_clickbench_q3 1.00 2.5±0.02ms ? ?/sec 1.01 2.5±0.04ms ? ?/sec
physical_plan_clickbench_q30 1.01 15.4±0.08ms ? ?/sec 1.00 15.3±0.29ms ? ?/sec
physical_plan_clickbench_q31 1.00 4.4±0.02ms ? ?/sec 1.01 4.4±0.06ms ? ?/sec
physical_plan_clickbench_q32 1.00 4.4±0.02ms ? ?/sec 1.01 4.4±0.04ms ? ?/sec
physical_plan_clickbench_q33 1.01 3.6±0.06ms ? ?/sec 1.00 3.6±0.05ms ? ?/sec
physical_plan_clickbench_q34 1.00 3.2±0.06ms ? ?/sec 1.01 3.2±0.02ms ? ?/sec
physical_plan_clickbench_q35 1.00 3.3±0.06ms ? ?/sec 1.01 3.3±0.01ms ? ?/sec
physical_plan_clickbench_q36 1.00 4.1±0.04ms ? ?/sec 1.01 4.2±0.11ms ? ?/sec
physical_plan_clickbench_q37 1.01 4.5±0.08ms ? ?/sec 1.00 4.5±0.02ms ? ?/sec
physical_plan_clickbench_q38 1.01 4.6±0.05ms ? ?/sec 1.00 4.5±0.04ms ? ?/sec
physical_plan_clickbench_q39 1.02 4.0±0.04ms ? ?/sec 1.00 3.9±0.03ms ? ?/sec
physical_plan_clickbench_q4 1.00 2.1±0.01ms ? ?/sec 1.01 2.2±0.02ms ? ?/sec
physical_plan_clickbench_q40 1.01 4.8±0.06ms ? ?/sec 1.00 4.8±0.07ms ? ?/sec
physical_plan_clickbench_q41 1.02 4.2±0.10ms ? ?/sec 1.00 4.1±0.03ms ? ?/sec
physical_plan_clickbench_q42 1.00 4.1±0.03ms ? ?/sec 1.00 4.1±0.09ms ? ?/sec
physical_plan_clickbench_q43 1.01 4.5±0.08ms ? ?/sec 1.00 4.5±0.06ms ? ?/sec
physical_plan_clickbench_q44 1.00 2.3±0.04ms ? ?/sec 1.00 2.3±0.01ms ? ?/sec
physical_plan_clickbench_q45 1.00 2.3±0.04ms ? ?/sec 1.00 2.3±0.02ms ? ?/sec
physical_plan_clickbench_q46 1.00 3.2±0.09ms ? ?/sec 1.00 3.2±0.04ms ? ?/sec
physical_plan_clickbench_q47 1.00 4.7±0.08ms ? ?/sec 1.00 4.7±0.10ms ? ?/sec
physical_plan_clickbench_q48 1.00 5.1±0.05ms ? ?/sec 1.00 5.1±0.06ms ? ?/sec
physical_plan_clickbench_q49 1.01 5.4±0.18ms ? ?/sec 1.00 5.4±0.04ms ? ?/sec
physical_plan_clickbench_q5 1.00 2.5±0.02ms ? ?/sec 1.01 2.5±0.02ms ? ?/sec
physical_plan_clickbench_q50 1.04 4.1±0.07ms ? ?/sec 1.00 4.0±0.02ms ? ?/sec
physical_plan_clickbench_q51 1.00 3.5±0.03ms ? ?/sec 1.02 3.6±0.05ms ? ?/sec
physical_plan_clickbench_q6 1.00 2.5±0.01ms ? ?/sec 1.01 2.5±0.02ms ? ?/sec
physical_plan_clickbench_q7 1.00 2.1±0.01ms ? ?/sec 1.01 2.1±0.07ms ? ?/sec
physical_plan_clickbench_q8 1.00 3.4±0.04ms ? ?/sec 1.01 3.4±0.03ms ? ?/sec
physical_plan_clickbench_q9 1.00 3.5±0.03ms ? ?/sec 1.02 3.6±0.04ms ? ?/sec
physical_plan_struct_join_agg_sort 1.00 2.6±0.03ms ? ?/sec 1.00 2.6±0.05ms ? ?/sec
physical_plan_tpcds_all 1.00 1879.8±17.62ms ? ?/sec 1.02 1913.1±20.08ms ? ?/sec
physical_plan_tpch_all 1.00 123.6±0.68ms ? ?/sec 1.02 125.5±2.53ms ? ?/sec
physical_plan_tpch_q1 1.00 3.0±0.02ms ? ?/sec 1.00 3.0±0.01ms ? ?/sec
physical_plan_tpch_q10 1.00 7.1±0.09ms ? ?/sec 1.01 7.2±0.13ms ? ?/sec
physical_plan_tpch_q11 1.00 8.4±0.05ms ? ?/sec 1.01 8.4±0.09ms ? ?/sec
physical_plan_tpch_q12 1.02 3.0±0.08ms ? ?/sec 1.00 3.0±0.01ms ? ?/sec
physical_plan_tpch_q13 1.00 3.0±0.03ms ? ?/sec 1.00 3.0±0.02ms ? ?/sec
physical_plan_tpch_q14 1.01 3.0±0.08ms ? ?/sec 1.00 3.0±0.01ms ? ?/sec
physical_plan_tpch_q16 1.01 5.2±0.21ms ? ?/sec 1.00 5.2±0.03ms ? ?/sec
physical_plan_tpch_q17 1.00 5.5±0.07ms ? ?/sec 1.00 5.5±0.03ms ? ?/sec
physical_plan_tpch_q18 1.00 5.9±0.04ms ? ?/sec 1.01 5.9±0.02ms ? ?/sec
physical_plan_tpch_q19 1.01 5.0±0.12ms ? ?/sec 1.00 5.0±0.06ms ? ?/sec
physical_plan_tpch_q2 1.01 12.3±0.41ms ? ?/sec 1.00 12.1±0.06ms ? ?/sec
physical_plan_tpch_q20 1.00 7.9±0.06ms ? ?/sec 1.01 8.0±0.20ms ? ?/sec
physical_plan_tpch_q21 1.00 10.0±0.14ms ? ?/sec 1.01 10.1±0.10ms ? ?/sec
physical_plan_tpch_q22 1.00 6.4±0.08ms ? ?/sec 1.00 6.4±0.06ms ? ?/sec
physical_plan_tpch_q3 1.00 5.5±0.05ms ? ?/sec 1.01 5.6±0.06ms ? ?/sec
physical_plan_tpch_q4 1.00 3.0±0.09ms ? ?/sec 1.00 3.0±0.02ms ? ?/sec
physical_plan_tpch_q5 1.00 5.9±0.10ms ? ?/sec 1.01 5.9±0.05ms ? ?/sec
physical_plan_tpch_q6 1.00 1578.4±31.34µs ? ?/sec 1.00 1580.9±19.63µs ? ?/sec
physical_plan_tpch_q7 1.00 7.0±0.03ms ? ?/sec 1.02 7.2±0.05ms ? ?/sec
physical_plan_tpch_q8 1.00 9.1±0.03ms ? ?/sec 1.02 9.3±0.19ms ? ?/sec
physical_plan_tpch_q9 1.00 6.5±0.03ms ? ?/sec 1.02 6.6±0.06ms ? ?/sec
physical_select_aggregates_from_200 1.03 17.2±0.06ms ? ?/sec 1.00 16.7±0.07ms ? ?/sec
physical_select_all_from_1000 1.00 23.3±0.12ms ? ?/sec 1.02 23.9±0.21ms ? ?/sec
physical_select_one_from_700 1.00 1316.4±11.87µs ? ?/sec 1.00 1316.5±10.20µs ? ?/sec
physical_sorted_union_order_by_10_int64 1.00 10.9±0.07ms ? ?/sec 1.01 11.0±0.13ms ? ?/sec
physical_sorted_union_order_by_10_uint64 1.00 29.5±0.90ms ? ?/sec 1.00 29.5±0.54ms ? ?/sec
physical_sorted_union_order_by_50_int64 1.00 194.8±1.44ms ? ?/sec 1.01 196.9±1.28ms ? ?/sec
physical_sorted_union_order_by_50_uint64 1.00 1058.0±11.70ms ? ?/sec 1.01 1071.1±9.92ms ? ?/sec
physical_theta_join_consider_sort 1.00 2.6±0.04ms ? ?/sec 1.03 2.7±0.05ms ? ?/sec
physical_unnest_to_join 1.00 3.0±0.03ms ? ?/sec 1.01 3.1±0.02ms ? ?/sec
physical_window_function_partition_by_12_on_values 1.00 1574.9±21.18µs ? ?/sec 1.01 1593.1±37.04µs ? ?/sec
physical_window_function_partition_by_30_on_values 1.00 2.9±0.04ms ? ?/sec 1.00 2.9±0.01ms ? ?/sec
physical_window_function_partition_by_4_on_values 1.00 1069.8±8.60µs ? ?/sec 1.01 1076.0±5.24µs ? ?/sec
physical_window_function_partition_by_7_on_values 1.00 1254.2±10.11µs ? ?/sec 1.00 1255.2±7.90µs ? ?/sec
physical_window_function_partition_by_8_on_values 1.00 1321.6±18.15µs ? ?/sec 1.00 1326.5±15.07µs ? ?/sec
with_param_values_many_columns 1.00 585.3±10.80µs ? ?/sec 1.02 594.1±9.96µs ? ?/sec

@alamb

Copy link
Copy Markdown
Contributor

I think my conclusion is that this PR doesn't really decrease planning time measurably, so marking as a draft for now

@alamb
alamb marked this pull request as draft March 13, 2026 18:29
@alambalamb closed this Apr 27, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

api changeChanges the API exposed to users of the cratecatalogRelated to the catalog cratecommonRelated to common cratecoreCore DataFusion cratelogical-exprLogical plan and expressionsoptimizerOptimizer rulesperformanceMake DataFusion fasterphysical-exprChanges to the physical-expr cratesprotoRelated to proto cratesqlSQL PlannersqllogictestSQL Logic Tests (.slt)substraitChanges to the substrait crate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Continue to reduce Expr struct size

6 participants

@zhuqi-lucas@alamb@xudong963@alamb-ghbot@kosiew