Skip to content

Commit 2e274bf

Browse files
authored
Require Debug for AnalyzerRule, FunctionRewriter, and OptimizerRule (#12556)
1 parent 99b5673 commit 2e274bf

34 files changed

+45
-32
lines changed

datafusion-examples/examples/optimizer_rule.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ pub async fn main() -> Result<()> {
100100

101101
/// An example OptimizerRule that replaces all `col = <const>` predicates with a
102102
/// user defined function
103+
#[derive(Default, Debug)]
103104
struct MyOptimizerRule {}
104105

105106
impl OptimizerRule for MyOptimizerRule {

datafusion/core/src/execution/session_state.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1954,6 +1954,7 @@ mod tests {
19541954

19551955
#[test]
19561956
fn test_session_state_with_optimizer_rules() {
1957+
#[derive(Default, Debug)]
19571958
struct DummyRule {}
19581959

19591960
impl OptimizerRule for DummyRule {

datafusion/core/tests/user_defined/user_defined_plan.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,9 @@ impl QueryPlanner for TopKQueryPlanner {
335335
}
336336
}
337337

338+
#[derive(Default, Debug)]
338339
struct TopKOptimizerRule {}
340+
339341
impl OptimizerRule for TopKOptimizerRule {
340342
fn name(&self) -> &str {
341343
"topk"
@@ -686,6 +688,7 @@ impl RecordBatchStream for TopKReader {
686688
}
687689
}
688690

691+
#[derive(Default, Debug)]
689692
struct MyAnalyzerRule {}
690693

691694
impl AnalyzerRule for MyAnalyzerRule {

datafusion/expr/src/expr_rewriter/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
2020
use std::collections::HashMap;
2121
use std::collections::HashSet;
22+
use std::fmt::Debug;
2223
use std::sync::Arc;
2324

2425
use crate::expr::{Alias, Sort, Unnest};
@@ -42,7 +43,7 @@ pub use order_by::rewrite_sort_cols_by_aggs;
4243
/// `Operator::ArrowAt`, but can be implemented by calling a function
4344
/// `array_concat` from the `functions-nested` crate.
4445
// This is not used in datafusion internally, but it is still helpful for downstream project so don't remove it.
45-
pub trait FunctionRewrite {
46+
pub trait FunctionRewrite: Debug {
4647
/// Return a human readable name for this rewrite
4748
fn name(&self) -> &str;
4849

datafusion/optimizer/src/analyzer/count_wildcard_rule.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use datafusion_expr::{lit, Expr, LogicalPlan, WindowFunctionDefinition};
2828
/// Rewrite `Count(Expr:Wildcard)` to `Count(Expr:Literal)`.
2929
///
3030
/// Resolves issue: <https://github.com/apache/datafusion/issues/5473>
31-
#[derive(Default)]
31+
#[derive(Default, Debug)]
3232
pub struct CountWildcardRule {}
3333

3434
impl CountWildcardRule {

datafusion/optimizer/src/analyzer/expand_wildcard_rule.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use datafusion_expr::utils::{
2828
};
2929
use datafusion_expr::{Expr, LogicalPlan, Projection, SubqueryAlias};
3030

31-
#[derive(Default)]
31+
#[derive(Default, Debug)]
3232
pub struct ExpandWildcardRule {}
3333

3434
impl ExpandWildcardRule {

datafusion/optimizer/src/analyzer/function_rewrite.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ use datafusion_expr::LogicalPlan;
2929
use std::sync::Arc;
3030

3131
/// Analyzer rule that invokes [`FunctionRewrite`]s on expressions
32-
#[derive(Default)]
32+
#[derive(Default, Debug)]
3333
pub struct ApplyFunctionRewrites {
3434
/// Expr --> Function writes to apply
3535
function_rewrites: Vec<Arc<dyn FunctionRewrite + Send + Sync>>,

datafusion/optimizer/src/analyzer/inline_table_scan.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use datafusion_expr::{logical_plan::LogicalPlan, Expr, LogicalPlanBuilder};
2828

2929
/// Analyzed rule that inlines TableScan that provide a [`LogicalPlan`]
3030
/// (DataFrame / ViewTable)
31-
#[derive(Default)]
31+
#[derive(Default, Debug)]
3232
pub struct InlineTableScan;
3333

3434
impl InlineTableScan {

datafusion/optimizer/src/analyzer/mod.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
// under the License.
1717

1818
//! [`Analyzer`] and [`AnalyzerRule`]
19+
20+
use std::fmt::Debug;
1921
use std::sync::Arc;
2022

2123
use log::debug;
@@ -60,7 +62,7 @@ pub mod type_coercion;
6062
/// `AnalyzerRule`s.
6163
///
6264
/// [`SessionState::add_analyzer_rule`]: https://docs.rs/datafusion/latest/datafusion/execution/session_state/struct.SessionState.html#method.add_analyzer_rule
63-
pub trait AnalyzerRule {
65+
pub trait AnalyzerRule: Debug {
6466
/// Rewrite `plan`
6567
fn analyze(&self, plan: LogicalPlan, config: &ConfigOptions) -> Result<LogicalPlan>;
6668

@@ -72,7 +74,7 @@ pub trait AnalyzerRule {
7274
///
7375
/// An `Analyzer` transforms a `LogicalPlan`
7476
/// prior to the rest of the DataFusion optimization process.
75-
#[derive(Clone)]
77+
#[derive(Clone, Debug)]
7678
pub struct Analyzer {
7779
/// Expr --> Function writes to apply prior to analysis passes
7880
pub function_rewrites: Vec<Arc<dyn FunctionRewrite + Send + Sync>>,

datafusion/optimizer/src/analyzer/type_coercion.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ use datafusion_expr::{
5757

5858
/// Performs type coercion by determining the schema
5959
/// and performing the expression rewrites.
60-
#[derive(Default)]
60+
#[derive(Default, Debug)]
6161
pub struct TypeCoercion {}
6262

6363
impl TypeCoercion {

datafusion/optimizer/src/common_subexpr_eliminate.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ type CommonExprs<'n> = IndexMap<Identifier<'n>, (Expr, String)>;
139139
/// ProjectionExec(exprs=[extract (day from new_col), extract (year from new_col)]) <-- reuse here
140140
/// ProjectionExec(exprs=[to_date(c1) as new_col]) <-- compute to_date once
141141
/// ```
142+
#[derive(Debug)]
142143
pub struct CommonSubexprEliminate {
143144
random_state: RandomState,
144145
}

datafusion/optimizer/src/decorrelate_predicate_subquery.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ use datafusion_expr::{
4040
use log::debug;
4141

4242
/// Optimizer rule for rewriting predicate(IN/EXISTS) subquery to left semi/anti joins
43-
#[derive(Default)]
43+
#[derive(Default, Debug)]
4444
pub struct DecorrelatePredicateSubquery {}
4545

4646
impl DecorrelatePredicateSubquery {

datafusion/optimizer/src/eliminate_cross_join.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use datafusion_expr::logical_plan::{
3030
use datafusion_expr::utils::{can_hash, find_valid_equijoin_key_pair};
3131
use datafusion_expr::{build_join_schema, ExprSchemable, Operator};
3232

33-
#[derive(Default)]
33+
#[derive(Default, Debug)]
3434
pub struct EliminateCrossJoin;
3535

3636
impl EliminateCrossJoin {

datafusion/optimizer/src/eliminate_duplicated_expr.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use datafusion_expr::{Aggregate, Expr, Sort, SortExpr};
2626
use indexmap::IndexSet;
2727
use std::hash::{Hash, Hasher};
2828
/// Optimization rule that eliminate duplicated expr.
29-
#[derive(Default)]
29+
#[derive(Default, Debug)]
3030
pub struct EliminateDuplicatedExpr;
3131

3232
impl EliminateDuplicatedExpr {

datafusion/optimizer/src/eliminate_filter.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use crate::{OptimizerConfig, OptimizerRule};
3030
///
3131
/// This saves time in planning and executing the query.
3232
/// Note that this rule should be applied after simplify expressions optimizer rule.
33-
#[derive(Default)]
33+
#[derive(Default, Debug)]
3434
pub struct EliminateFilter;
3535

3636
impl EliminateFilter {

datafusion/optimizer/src/eliminate_group_by_constant.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use datafusion_expr::{Aggregate, Expr, LogicalPlan, LogicalPlanBuilder, Volatili
2626
/// Optimizer rule that removes constant expressions from `GROUP BY` clause
2727
/// and places additional projection on top of aggregation, to preserve
2828
/// original schema
29-
#[derive(Default)]
29+
#[derive(Default, Debug)]
3030
pub struct EliminateGroupByConstant {}
3131

3232
impl EliminateGroupByConstant {

datafusion/optimizer/src/eliminate_join.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use datafusion_expr::{
2828

2929
/// Eliminates joins when join condition is false.
3030
/// Replaces joins when inner join condition is true with a cross join.
31-
#[derive(Default)]
31+
#[derive(Default, Debug)]
3232
pub struct EliminateJoin;
3333

3434
impl EliminateJoin {

datafusion/optimizer/src/eliminate_limit.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use std::sync::Arc;
3030
/// plan with an empty relation.
3131
///
3232
/// This rule also removes OFFSET 0 from the [LogicalPlan]
33-
#[derive(Default)]
33+
#[derive(Default, Debug)]
3434
pub struct EliminateLimit;
3535

3636
impl EliminateLimit {

datafusion/optimizer/src/eliminate_nested_union.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use datafusion_expr::{Distinct, LogicalPlan, Union};
2525
use itertools::Itertools;
2626
use std::sync::Arc;
2727

28-
#[derive(Default)]
28+
#[derive(Default, Debug)]
2929
/// An optimization rule that replaces nested unions with a single union.
3030
pub struct EliminateNestedUnion;
3131

datafusion/optimizer/src/eliminate_one_union.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use std::sync::Arc;
2424

2525
use crate::optimizer::ApplyOrder;
2626

27-
#[derive(Default)]
27+
#[derive(Default, Debug)]
2828
/// An optimization rule that eliminates union with one element.
2929
pub struct EliminateOneUnion;
3030

datafusion/optimizer/src/eliminate_outer_join.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ use datafusion_common::tree_node::Transformed;
2626
use datafusion_expr::expr::{BinaryExpr, Cast, TryCast};
2727
use std::sync::Arc;
2828

29-
#[derive(Default)]
3029
///
3130
/// Attempt to replace outer joins with inner joins.
3231
///
@@ -49,6 +48,7 @@ use std::sync::Arc;
4948
/// filters from the WHERE clause return false while any inputs are
5049
/// null and columns of those quals are come from nullable side of
5150
/// outer join.
51+
#[derive(Default, Debug)]
5252
pub struct EliminateOuterJoin;
5353

5454
impl EliminateOuterJoin {

datafusion/optimizer/src/extract_equijoin_predicate.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ type EquijoinPredicate = (Expr, Expr);
3838
/// has one equijoin predicate (`A.x = B.y`) and one filter predicate (`B.z > 50`).
3939
/// See [find_valid_equijoin_key_pair] for more information on what predicates
4040
/// are considered equijoins.
41-
#[derive(Default)]
41+
#[derive(Default, Debug)]
4242
pub struct ExtractEquijoinPredicate;
4343

4444
impl ExtractEquijoinPredicate {

datafusion/optimizer/src/filter_null_join_keys.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ use std::sync::Arc;
2929
/// The FilterNullJoinKeys rule will identify joins with equi-join conditions
3030
/// where the join key is nullable and then insert an `IsNotNull` filter on the nullable side since null values
3131
/// can never match.
32-
#[derive(Default)]
32+
#[derive(Default, Debug)]
3333
pub struct FilterNullJoinKeys {}
3434

3535
impl OptimizerRule for FilterNullJoinKeys {

datafusion/optimizer/src/optimize_projections/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ use datafusion_common::tree_node::{
5757
/// The rule analyzes the input logical plan, determines the necessary column
5858
/// indices, and then removes any unnecessary columns. It also removes any
5959
/// unnecessary projections from the plan tree.
60-
#[derive(Default)]
60+
#[derive(Default, Debug)]
6161
pub struct OptimizeProjections {}
6262

6363
impl OptimizeProjections {

datafusion/optimizer/src/optimizer.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
//! [`Optimizer`] and [`OptimizerRule`]
1919
2020
use std::collections::HashSet;
21+
use std::fmt::Debug;
2122
use std::sync::Arc;
2223

2324
use chrono::{DateTime, Utc};
@@ -70,7 +71,7 @@ use crate::utils::log_plan;
7071
/// [`AnalyzerRule`]: crate::analyzer::AnalyzerRule
7172
/// [`SessionState::add_optimizer_rule`]: https://docs.rs/datafusion/latest/datafusion/execution/session_state/struct.SessionState.html#method.add_optimizer_rule
7273
73-
pub trait OptimizerRule {
74+
pub trait OptimizerRule: Debug {
7475
/// Try and rewrite `plan` to an optimized form, returning None if the plan
7576
/// cannot be optimized by this rule.
7677
///
@@ -214,7 +215,7 @@ impl OptimizerConfig for OptimizerContext {
214215
}
215216

216217
/// A rule-based optimizer.
217-
#[derive(Clone)]
218+
#[derive(Clone, Debug)]
218219
pub struct Optimizer {
219220
/// All optimizer rules to apply
220221
pub rules: Vec<Arc<dyn OptimizerRule + Send + Sync>>,
@@ -666,6 +667,7 @@ mod tests {
666667

667668
fn observe(_plan: &LogicalPlan, _rule: &dyn OptimizerRule) {}
668669

670+
#[derive(Default, Debug)]
669671
struct BadRule {}
670672

671673
impl OptimizerRule for BadRule {
@@ -687,6 +689,7 @@ mod tests {
687689
}
688690

689691
/// Replaces whatever plan with a single table scan
692+
#[derive(Default, Debug)]
690693
struct GetTableScanRule {}
691694

692695
impl OptimizerRule for GetTableScanRule {
@@ -713,6 +716,7 @@ mod tests {
713716
/// A goofy rule doing rotation of columns in all projections.
714717
///
715718
/// Useful to test cycle detection.
719+
#[derive(Default, Debug)]
716720
struct RotateProjectionRule {
717721
// reverse exprs instead of rotating on the first pass
718722
reverse_on_first_pass: Mutex<bool>,

datafusion/optimizer/src/propagate_empty_relation.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ use crate::optimizer::ApplyOrder;
2929
use crate::{OptimizerConfig, OptimizerRule};
3030

3131
/// Optimization rule that bottom-up to eliminate plan by propagating empty_relation.
32-
#[derive(Default)]
32+
#[derive(Default, Debug)]
3333
pub struct PropagateEmptyRelation;
3434

3535
impl PropagateEmptyRelation {

datafusion/optimizer/src/push_down_filter.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ use crate::{OptimizerConfig, OptimizerRule};
130130
/// reaches a plan node that does not commute with that filter, it adds the
131131
/// filter to that place. When it passes through a projection, it re-writes the
132132
/// filter's expression taking into account that projection.
133-
#[derive(Default)]
133+
#[derive(Default, Debug)]
134134
pub struct PushDownFilter {}
135135

136136
/// For a given JOIN type, determine whether each input of the join is preserved

datafusion/optimizer/src/push_down_limit.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ use datafusion_expr::logical_plan::{Join, JoinType, Limit, LogicalPlan};
3131
/// Optimization rule that tries to push down `LIMIT`.
3232
///
3333
//. It will push down through projection, limits (taking the smaller limit)
34-
#[derive(Default)]
34+
#[derive(Default, Debug)]
3535
pub struct PushDownLimit {}
3636

3737
impl PushDownLimit {

datafusion/optimizer/src/replace_distinct_aggregate.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ use datafusion_expr::{Aggregate, Distinct, DistinctOn, Expr, LogicalPlan};
5454
/// ```
5555
5656
/// Optimizer that replaces logical [[Distinct]] with a logical [[Aggregate]]
57-
#[derive(Default)]
57+
#[derive(Default, Debug)]
5858
pub struct ReplaceDistinctWithAggregate {}
5959

6060
impl ReplaceDistinctWithAggregate {

datafusion/optimizer/src/rewrite_disjunctive_predicate.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ use datafusion_expr::{Expr, LogicalPlan, Operator};
122122
/// )
123123
/// ```
124124
///
125-
#[derive(Default)]
125+
#[derive(Default, Debug)]
126126
pub struct RewriteDisjunctivePredicate;
127127

128128
impl RewriteDisjunctivePredicate {

datafusion/optimizer/src/scalar_subquery_to_join.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ use datafusion_expr::utils::conjunction;
3636
use datafusion_expr::{expr, EmptyRelation, Expr, LogicalPlan, LogicalPlanBuilder};
3737

3838
/// Optimizer rule for rewriting subquery filters to joins
39-
#[derive(Default)]
39+
#[derive(Default, Debug)]
4040
pub struct ScalarSubqueryToJoin {}
4141

4242
impl ScalarSubqueryToJoin {

datafusion/optimizer/src/simplify_expressions/simplify_exprs.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ use super::ExprSimplifier;
4545
/// `Filter: b > 2`
4646
///
4747
/// [`Expr`]: datafusion_expr::Expr
48-
#[derive(Default)]
48+
#[derive(Default, Debug)]
4949
pub struct SimplifyExpressions {}
5050

5151
impl OptimizerRule for SimplifyExpressions {

datafusion/optimizer/src/single_distinct_to_groupby.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ use hashbrown::HashSet;
4949
/// )
5050
/// GROUP BY a
5151
/// ```
52-
#[derive(Default)]
52+
#[derive(Default, Debug)]
5353
pub struct SingleDistinctToGroupBy {}
5454

5555
const SINGLE_DISTINCT_ALIAS: &str = "alias1";

datafusion/optimizer/src/unwrap_cast_in_comparison.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ use datafusion_expr::{lit, Expr, ExprSchemable, LogicalPlan};
7272
/// Filter: c1 > INT32(10)
7373
/// ```
7474
///
75-
#[derive(Default)]
75+
#[derive(Default, Debug)]
7676
pub struct UnwrapCastInComparison {}
7777

7878
impl UnwrapCastInComparison {

0 commit comments

Comments
 (0)