Skip to content

Commit

Permalink
Test + workaround for SanityCheck plan
Browse files Browse the repository at this point in the history
  • Loading branch information
alamb authored and appletreeisyellow committed Jul 22, 2024
1 parent eebffdf commit 59b4684
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 0 deletions.
10 changes: 10 additions & 0 deletions datafusion/core/src/physical_optimizer/sanity_checker.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ use datafusion_physical_expr::intervals::utils::{check_support, is_datatype_supp
use datafusion_physical_plan::joins::SymmetricHashJoinExec;
use datafusion_physical_plan::{get_plan_string, ExecutionPlanProperties};

use datafusion_physical_plan::sorts::sort::SortExec;
use datafusion_physical_plan::union::UnionExec;
use itertools::izip;

/// The SanityCheckPlan rule rejects the following query plans:
Expand Down Expand Up @@ -125,6 +127,14 @@ pub fn check_plan_sanity(
plan.required_input_ordering().iter(),
plan.required_input_distribution().iter()
) {
// TEMP HACK WORKAROUND https://github.com/apache/datafusion/issues/11492
if child.as_any().downcast_ref::<UnionExec>().is_some() {
continue;
}
if child.as_any().downcast_ref::<SortExec>().is_some() {
continue;
}

let child_eq_props = child.equivalence_properties();
if let Some(child_sort_req) = child_sort_req {
if !child_eq_props.ordering_satisfy_requirement(child_sort_req) {
Expand Down
38 changes: 38 additions & 0 deletions datafusion/sqllogictest/test_files/union.slt
Original file line number Diff line number Diff line change
Expand Up @@ -449,6 +449,9 @@ physical_plan
# Clean up after the test
########

statement ok
drop table t

statement ok
drop table t1;

Expand Down Expand Up @@ -587,3 +590,38 @@ physical_plan
09)--ProjectionExec: expr=[1 as count, MAX(Int64(10))@0 as n]
10)----AggregateExec: mode=Single, gby=[], aggr=[MAX(Int64(10))]
11)------PlaceholderRowExec


###
# Test for https://github.com/apache/datafusion/issues/11492
###

# Input data is
# a,b,c
# 1,2,3

statement ok
CREATE EXTERNAL TABLE t (
a INT,
b INT,
c INT
)
STORED AS CSV
LOCATION '../core/tests/data/example.csv'
WITH ORDER (a ASC)
OPTIONS ('format.has_header' 'true');

query T
SELECT (SELECT a from t ORDER BY a) UNION ALL (SELECT 'bar' as a from t) ORDER BY a;
----
1
bar

query I
SELECT (SELECT a from t ORDER BY a) UNION ALL (SELECT NULL as a from t) ORDER BY a;
----
1
NULL

statement ok
drop table t

0 comments on commit 59b4684

Please sign in to comment.