Skip to content

Commit aa5abb9

Browse files
committed
add test for conflicting column names
1 parent ed1a716 commit aa5abb9

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

datafusion/core/tests/sql/select.rs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,4 +491,41 @@ async fn test_select_system_column() {
491491
"+--------------+-----------+",
492492
];
493493
assert_batches_sorted_eq!(expected, &batchs);
494+
495+
let batch = record_batch!(
496+
("other_id", UInt8, [1, 2, 3]),
497+
("bank_account", UInt64, [9, 10, 11]),
498+
("_row_id", UInt32, [10, 11, 12])
499+
)
500+
.unwrap();
501+
let schema = Schema::new(vec![
502+
Field::new("other_id", DataType::UInt8, true),
503+
Field::new("bank_account", DataType::UInt64, true),
504+
Field::new("_row_id", DataType::UInt32, true), // not a system column!
505+
]);
506+
let batch = batch.with_schema(Arc::new(schema)).unwrap();
507+
let _ = ctx.register_batch("test2", batch);
508+
509+
// Normally _row_id would be a name conflict
510+
// But when it's a conflict between a metadata column and a non-metadata column, the non metadata column should be used
511+
let select7 =
512+
"SELECT id, other_id, _row_id FROM test INNER JOIN test2 ON id = other_id";
513+
let df = ctx.sql(select7).await.unwrap();
514+
let batchs = df.collect().await.unwrap();
515+
#[rustfmt::skip]
516+
let expected = [
517+
"+----+----------+---------+",
518+
"| id | other_id | _row_id |",
519+
"+----+----------+---------+",
520+
"| 1 | 1 | 10 |",
521+
"| 2 | 2 | 11 |",
522+
"| 3 | 3 | 12 |",
523+
"+----+----------+---------+",
524+
];
525+
assert_batches_sorted_eq!(expected, &batchs);
526+
527+
// Demonstrate that for other columns we get a conflict
528+
let select7 =
529+
"SELECT id, other_id, bank_account FROM test INNER JOIN test2 ON id = other_id";
530+
assert!(ctx.sql(select7).await.is_err());
494531
}

0 commit comments

Comments
 (0)