Skip to content

Commit

Permalink
Add test
Browse files Browse the repository at this point in the history
  • Loading branch information
jonahgao committed Jan 15, 2025
1 parent 0e00695 commit af5136b
Showing 1 changed file with 77 additions and 1 deletion.
78 changes: 77 additions & 1 deletion datafusion/core/tests/dataframe/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2683,8 +2683,12 @@ async fn test_alias() -> Result<()> {
"+-----------+---------------------------------+",
];
assert_batches_sorted_eq!(expected, &df.collect().await?);
Ok(())
}

// Use alias to perform a self-join
// Use alias to perform a self-join
#[tokio::test]
async fn test_alias_self_join() -> Result<()> {
let left = create_test_table("t1").await?;
let right = left.clone().alias("t2")?;
let joined = left.join(right, JoinType::Full, &["a"], &["a"], None)?;
Expand All @@ -2701,3 +2705,75 @@ async fn test_alias() -> Result<()> {
assert_batches_sorted_eq!(expected, &joined.collect().await?);
Ok(())
}

#[tokio::test]
async fn test_alias_empty() -> Result<()> {
let df = create_test_table("test").await?.alias("")?;
let expected = "SubqueryAlias: [a:Utf8, b:Int32]\
\n TableScan: test [a:Utf8, b:Int32]";
let plan = df
.clone()
.into_unoptimized_plan()
.display_indent_schema()
.to_string();
assert_eq!(plan, expected);
let expected = [
"+-----------+-----+",
"| a | b |",
"+-----------+-----+",
"| abcDEF | 1 |",
"| abc123 | 10 |",
"| CBAdef | 10 |",
"| 123AbcDef | 100 |",
"+-----------+-----+",
];
assert_batches_sorted_eq!(
expected,
&df.select(vec![col("a"), col("b")])?.collect().await?
);
Ok(())
}

#[tokio::test]
async fn test_alias_nested() -> Result<()> {
let df = create_test_table("test")
.await?
.select(vec![col("a"), col("test.b"), lit(1).alias("one")])?
.alias("alias1")?
.alias("alias2")?;
let expected = "SubqueryAlias: alias2 [a:Utf8, b:Int32, one:Int32]\
\n SubqueryAlias: alias1 [a:Utf8, b:Int32, one:Int32]\
\n Projection: test.a, test.b, Int32(1) AS one [a:Utf8, b:Int32, one:Int32]\
\n TableScan: test projection=[a, b] [a:Utf8, b:Int32]";
let plan = df
.clone()
.into_optimized_plan()?
.display_indent_schema()
.to_string();
assert_eq!(plan, expected);

// Select over the aliased DataFrame
let select1 = df
.clone()
.select(vec![col("alias2.a"), col("b") + col("alias2.one")])?;
let expected = [
"+-----------+-----------------------+",
"| a | alias2.b + alias2.one |",
"+-----------+-----------------------+",
"| 123AbcDef | 101 |",
"| CBAdef | 11 |",
"| abc123 | 11 |",
"| abcDEF | 2 |",
"+-----------+-----------------------+",
];
assert_batches_sorted_eq!(expected, &select1.collect().await?);

// Only the outermost alias is visible
let select2 = df.select(vec![col("alias1.a")]);
assert_eq!(
select2.unwrap_err().strip_backtrace(),
"Schema error: No field named alias1.a. \
Valid fields are alias2.a, alias2.b, alias2.one."
);
Ok(())
}

0 comments on commit af5136b

Please sign in to comment.