diff --git a/datafusion/core/tests/sql/mod.rs b/datafusion/core/tests/sql/mod.rs index 579049692..7e66a2ee4 100644 --- a/datafusion/core/tests/sql/mod.rs +++ b/datafusion/core/tests/sql/mod.rs @@ -66,6 +66,8 @@ mod path_partition; pub mod select; mod sql_api; +pub mod uppercase_fields; + async fn register_aggregate_csv_by_sql(ctx: &SessionContext) { let testdata = test_util::arrow_test_data(); diff --git a/datafusion/core/tests/sql/uppercase_fields.rs b/datafusion/core/tests/sql/uppercase_fields.rs new file mode 100644 index 000000000..45ede8f96 --- /dev/null +++ b/datafusion/core/tests/sql/uppercase_fields.rs @@ -0,0 +1,32 @@ +use super::*; + +#[tokio::test] +async fn test_uppercase_columns() { + // Create a CSV with uppercase columns. + let schema = Arc::new(Schema::new(vec![Field::new("UPPER", DataType::UInt32, false)])); + let tmp_dir = TempDir::new().unwrap(); + let file_path = tmp_dir.path().join("my-test-data.csv"); + let mut file = File::create(file_path.clone()).unwrap(); + for i in 0..10 { + let data = format!("{}", i); + file.write_all(data.as_bytes()); + } + drop(file); + // Register it. + let ctx = SessionContext::new(); + ctx.register_csv("test", file_path.to_str().unwrap(), CsvReadOptions::new().schema(&schema)).await.unwrap(); + + let result_dataframe = ctx.sql( + r#" + SELECT test."UPPER" FROM "test" + INNER JOIN ( + SELECT test."UPPER" FROM "test" + ) AS selection USING ("UPPER") + ; + "#).await; + if let Err(e) = &result_dataframe { + eprintln!("Got an error: {e}"); + } + assert_eq!(result_dataframe.is_ok(), true); +} +