Skip to content

Commit a281b25

Browse files
authored
Always use 'indent' format for explain verbose (apache#17481)
* Always use 'indent' format for explain verbose * cargo fmt * Add sqllogictest
1 parent a1709b6 commit a281b25

2 files changed

Lines changed: 98 additions & 1 deletion

File tree

datafusion/sql/src/statement.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1714,7 +1714,12 @@ impl<S: ContextProvider> SqlToRel<'_, S> {
17141714
let options = self.context_provider.options();
17151715
let format = format.as_ref().unwrap_or(&options.explain.format);
17161716

1717-
let format: ExplainFormat = format.parse()?;
1717+
// verbose mode only supports indent format
1718+
let format: ExplainFormat = if verbose {
1719+
ExplainFormat::Indent
1720+
} else {
1721+
format.parse()?
1722+
};
17181723

17191724
Ok(LogicalPlan::Explain(Explain {
17201725
verbose,

datafusion/sqllogictest/test_files/explain.slt

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,98 @@ explain format 123 select * from values (1);
523523
query error DataFusion error: Error during planning: EXPLAIN VERBOSE with FORMAT is not supported
524524
explain verbose format tree select * from values (1);
525525

526+
# verbose uses indent mode even when a different mode (e.g tree) is set
527+
528+
statement ok
529+
set datafusion.explain.format = "tree";
530+
531+
query TT
532+
EXPLAIN VERBOSE SELECT a, b, c FROM simple_explain_test
533+
----
534+
initial_logical_plan
535+
01)Projection: simple_explain_test.a, simple_explain_test.b, simple_explain_test.c
536+
02)--TableScan: simple_explain_test
537+
logical_plan after resolve_grouping_function SAME TEXT AS ABOVE
538+
logical_plan after type_coercion SAME TEXT AS ABOVE
539+
analyzed_logical_plan SAME TEXT AS ABOVE
540+
logical_plan after eliminate_nested_union SAME TEXT AS ABOVE
541+
logical_plan after simplify_expressions SAME TEXT AS ABOVE
542+
logical_plan after replace_distinct_aggregate SAME TEXT AS ABOVE
543+
logical_plan after eliminate_join SAME TEXT AS ABOVE
544+
logical_plan after decorrelate_predicate_subquery SAME TEXT AS ABOVE
545+
logical_plan after scalar_subquery_to_join SAME TEXT AS ABOVE
546+
logical_plan after decorrelate_lateral_join SAME TEXT AS ABOVE
547+
logical_plan after extract_equijoin_predicate SAME TEXT AS ABOVE
548+
logical_plan after eliminate_duplicated_expr SAME TEXT AS ABOVE
549+
logical_plan after eliminate_filter SAME TEXT AS ABOVE
550+
logical_plan after eliminate_cross_join SAME TEXT AS ABOVE
551+
logical_plan after eliminate_limit SAME TEXT AS ABOVE
552+
logical_plan after propagate_empty_relation SAME TEXT AS ABOVE
553+
logical_plan after eliminate_one_union SAME TEXT AS ABOVE
554+
logical_plan after filter_null_join_keys SAME TEXT AS ABOVE
555+
logical_plan after eliminate_outer_join SAME TEXT AS ABOVE
556+
logical_plan after push_down_limit SAME TEXT AS ABOVE
557+
logical_plan after push_down_filter SAME TEXT AS ABOVE
558+
logical_plan after single_distinct_aggregation_to_group_by SAME TEXT AS ABOVE
559+
logical_plan after eliminate_group_by_constant SAME TEXT AS ABOVE
560+
logical_plan after common_sub_expression_eliminate SAME TEXT AS ABOVE
561+
logical_plan after optimize_projections TableScan: simple_explain_test projection=[a, b, c]
562+
logical_plan after eliminate_nested_union SAME TEXT AS ABOVE
563+
logical_plan after simplify_expressions SAME TEXT AS ABOVE
564+
logical_plan after replace_distinct_aggregate SAME TEXT AS ABOVE
565+
logical_plan after eliminate_join SAME TEXT AS ABOVE
566+
logical_plan after decorrelate_predicate_subquery SAME TEXT AS ABOVE
567+
logical_plan after scalar_subquery_to_join SAME TEXT AS ABOVE
568+
logical_plan after decorrelate_lateral_join SAME TEXT AS ABOVE
569+
logical_plan after extract_equijoin_predicate SAME TEXT AS ABOVE
570+
logical_plan after eliminate_duplicated_expr SAME TEXT AS ABOVE
571+
logical_plan after eliminate_filter SAME TEXT AS ABOVE
572+
logical_plan after eliminate_cross_join SAME TEXT AS ABOVE
573+
logical_plan after eliminate_limit SAME TEXT AS ABOVE
574+
logical_plan after propagate_empty_relation SAME TEXT AS ABOVE
575+
logical_plan after eliminate_one_union SAME TEXT AS ABOVE
576+
logical_plan after filter_null_join_keys SAME TEXT AS ABOVE
577+
logical_plan after eliminate_outer_join SAME TEXT AS ABOVE
578+
logical_plan after push_down_limit SAME TEXT AS ABOVE
579+
logical_plan after push_down_filter SAME TEXT AS ABOVE
580+
logical_plan after single_distinct_aggregation_to_group_by SAME TEXT AS ABOVE
581+
logical_plan after eliminate_group_by_constant SAME TEXT AS ABOVE
582+
logical_plan after common_sub_expression_eliminate SAME TEXT AS ABOVE
583+
logical_plan after optimize_projections SAME TEXT AS ABOVE
584+
logical_plan TableScan: simple_explain_test projection=[a, b, c]
585+
initial_physical_plan DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/core/tests/data/example.csv]]}, projection=[a, b, c], file_type=csv, has_header=true
586+
initial_physical_plan_with_stats DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/core/tests/data/example.csv]]}, projection=[a, b, c], file_type=csv, has_header=true, statistics=[Rows=Absent, Bytes=Absent, [(Col[0]:),(Col[1]:),(Col[2]:)]]
587+
initial_physical_plan_with_schema DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/core/tests/data/example.csv]]}, projection=[a, b, c], file_type=csv, has_header=true, schema=[a:Int32;N, b:Int32;N, c:Int32;N]
588+
physical_plan after OutputRequirements
589+
01)OutputRequirementExec: order_by=[], dist_by=Unspecified
590+
02)--DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/core/tests/data/example.csv]]}, projection=[a, b, c], file_type=csv, has_header=true
591+
physical_plan after aggregate_statistics SAME TEXT AS ABOVE
592+
physical_plan after join_selection SAME TEXT AS ABOVE
593+
physical_plan after LimitedDistinctAggregation SAME TEXT AS ABOVE
594+
physical_plan after FilterPushdown SAME TEXT AS ABOVE
595+
physical_plan after EnforceDistribution SAME TEXT AS ABOVE
596+
physical_plan after CombinePartialFinalAggregate SAME TEXT AS ABOVE
597+
physical_plan after EnforceSorting SAME TEXT AS ABOVE
598+
physical_plan after OptimizeAggregateOrder SAME TEXT AS ABOVE
599+
physical_plan after ProjectionPushdown SAME TEXT AS ABOVE
600+
physical_plan after coalesce_batches SAME TEXT AS ABOVE
601+
physical_plan after coalesce_async_exec_input SAME TEXT AS ABOVE
602+
physical_plan after OutputRequirements DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/core/tests/data/example.csv]]}, projection=[a, b, c], file_type=csv, has_header=true
603+
physical_plan after LimitAggregation SAME TEXT AS ABOVE
604+
physical_plan after LimitPushPastWindows SAME TEXT AS ABOVE
605+
physical_plan after LimitPushdown SAME TEXT AS ABOVE
606+
physical_plan after ProjectionPushdown SAME TEXT AS ABOVE
607+
physical_plan after EnsureCooperative SAME TEXT AS ABOVE
608+
physical_plan after FilterPushdown(Post) SAME TEXT AS ABOVE
609+
physical_plan after SanityCheckPlan SAME TEXT AS ABOVE
610+
physical_plan DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/core/tests/data/example.csv]]}, projection=[a, b, c], file_type=csv, has_header=true
611+
physical_plan_with_stats DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/core/tests/data/example.csv]]}, projection=[a, b, c], file_type=csv, has_header=true, statistics=[Rows=Absent, Bytes=Absent, [(Col[0]:),(Col[1]:),(Col[2]:)]]
612+
physical_plan_with_schema DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/core/tests/data/example.csv]]}, projection=[a, b, c], file_type=csv, has_header=true, schema=[a:Int32;N, b:Int32;N, c:Int32;N]
613+
614+
# Set back to original default value
615+
statement ok
616+
set datafusion.explain.format = "indent";
617+
526618
# no such thing as json mode
527619
query error DataFusion error: Error during planning: Invalid explain format\. Expected 'indent', 'tree', 'pgjson' or 'graphviz'\. Got 'json'
528620
explain format json select * from values (1);

0 commit comments

Comments
 (0)