This is an automated email from the ASF dual-hosted git repository.

alamb pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-datafusion.git


The following commit(s) were added to refs/heads/main by this push:
     new 885bdc1e07 Port tests in identifiers.rs to sqllogictest (#6245)
885bdc1e07 is described below

commit 885bdc1e07afad25cb5150e812199ecb99e57261
Author: parkma99 <[email protected]>
AuthorDate: Fri May 5 20:50:27 2023 +0800

    Port tests in identifiers.rs to sqllogictest (#6245)
    
    * Port tests in identifiers.rs to sqllogictest
    
    * remove identifiers.rs
    
    ---------
    
    Co-authored-by: Andrew Lamb <[email protected]>
---
 datafusion/core/tests/sql/idenfifers.rs            | 239 ---------------------
 datafusion/core/tests/sql/mod.rs                   |   1 -
 .../tests/sqllogictests/test_files/identifiers.slt | 106 +++++++++
 3 files changed, 106 insertions(+), 240 deletions(-)

diff --git a/datafusion/core/tests/sql/idenfifers.rs 
b/datafusion/core/tests/sql/idenfifers.rs
deleted file mode 100644
index 23fb26edde..0000000000
--- a/datafusion/core/tests/sql/idenfifers.rs
+++ /dev/null
@@ -1,239 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-use std::sync::Arc;
-
-use arrow::{array::StringArray, record_batch::RecordBatch};
-use datafusion::{assert_batches_sorted_eq, prelude::*};
-use datafusion_common::assert_contains;
-
-use crate::sql::plan_and_collect;
-
-#[tokio::test]
-async fn normalized_column_identifiers() {
-    // create local execution context
-    let ctx = SessionContext::new();
-
-    // register csv file with the execution context
-    ctx.register_csv(
-        "case_insensitive_test",
-        "tests/data/example.csv",
-        CsvReadOptions::new(),
-    )
-    .await
-    .unwrap();
-
-    let sql = "SELECT A, b FROM case_insensitive_test";
-    let result = plan_and_collect(&ctx, sql)
-        .await
-        .expect("ran plan correctly");
-    let expected = vec![
-        "+---+---+",
-        "| a | b |",
-        "+---+---+",
-        "| 1 | 2 |",
-        "+---+---+",
-    ];
-    assert_batches_sorted_eq!(expected, &result);
-
-    let sql = "SELECT t.A, b FROM case_insensitive_test AS t";
-    let result = plan_and_collect(&ctx, sql)
-        .await
-        .expect("ran plan correctly");
-    let expected = vec![
-        "+---+---+",
-        "| a | b |",
-        "+---+---+",
-        "| 1 | 2 |",
-        "+---+---+",
-    ];
-    assert_batches_sorted_eq!(expected, &result);
-
-    // Aliases
-
-    let sql = "SELECT t.A as x, b FROM case_insensitive_test AS t";
-    let result = plan_and_collect(&ctx, sql)
-        .await
-        .expect("ran plan correctly");
-    let expected = vec![
-        "+---+---+",
-        "| x | b |",
-        "+---+---+",
-        "| 1 | 2 |",
-        "+---+---+",
-    ];
-    assert_batches_sorted_eq!(expected, &result);
-
-    let sql = "SELECT t.A AS X, b FROM case_insensitive_test AS t";
-    let result = plan_and_collect(&ctx, sql)
-        .await
-        .expect("ran plan correctly");
-    let expected = vec![
-        "+---+---+",
-        "| x | b |",
-        "+---+---+",
-        "| 1 | 2 |",
-        "+---+---+",
-    ];
-    assert_batches_sorted_eq!(expected, &result);
-
-    let sql = r#"SELECT t.A AS "X", b FROM case_insensitive_test AS t"#;
-    let result = plan_and_collect(&ctx, sql)
-        .await
-        .expect("ran plan correctly");
-    let expected = vec![
-        "+---+---+",
-        "| X | b |",
-        "+---+---+",
-        "| 1 | 2 |",
-        "+---+---+",
-    ];
-    assert_batches_sorted_eq!(expected, &result);
-
-    // Order by
-
-    let sql = "SELECT t.A AS x, b FROM case_insensitive_test AS t ORDER BY x";
-    let result = plan_and_collect(&ctx, sql)
-        .await
-        .expect("ran plan correctly");
-    let expected = vec![
-        "+---+---+",
-        "| x | b |",
-        "+---+---+",
-        "| 1 | 2 |",
-        "+---+---+",
-    ];
-    assert_batches_sorted_eq!(expected, &result);
-
-    let sql = "SELECT t.A AS x, b FROM case_insensitive_test AS t ORDER BY X";
-    let result = plan_and_collect(&ctx, sql)
-        .await
-        .expect("ran plan correctly");
-    let expected = vec![
-        "+---+---+",
-        "| x | b |",
-        "+---+---+",
-        "| 1 | 2 |",
-        "+---+---+",
-    ];
-    assert_batches_sorted_eq!(expected, &result);
-
-    let sql = r#"SELECT t.A AS "X", b FROM case_insensitive_test AS t ORDER BY 
"X""#;
-    let result = plan_and_collect(&ctx, sql)
-        .await
-        .expect("ran plan correctly");
-    let expected = vec![
-        "+---+---+",
-        "| X | b |",
-        "+---+---+",
-        "| 1 | 2 |",
-        "+---+---+",
-    ];
-    assert_batches_sorted_eq!(expected, &result);
-
-    // Where
-
-    let sql = "SELECT a, b FROM case_insensitive_test where A IS NOT null";
-    let result = plan_and_collect(&ctx, sql)
-        .await
-        .expect("ran plan correctly");
-    let expected = vec![
-        "+---+---+",
-        "| a | b |",
-        "+---+---+",
-        "| 1 | 2 |",
-        "+---+---+",
-    ];
-    assert_batches_sorted_eq!(expected, &result);
-
-    // Group by
-
-    let sql = "SELECT a as x, count(*) as c FROM case_insensitive_test GROUP 
BY X";
-    let result = plan_and_collect(&ctx, sql)
-        .await
-        .expect("ran plan correctly");
-    let expected = vec![
-        "+---+---+",
-        "| x | c |",
-        "+---+---+",
-        "| 1 | 1 |",
-        "+---+---+",
-    ];
-    assert_batches_sorted_eq!(expected, &result);
-
-    let sql = r#"SELECT a as "X", count(*) as c FROM case_insensitive_test 
GROUP BY "X""#;
-    let result = plan_and_collect(&ctx, sql)
-        .await
-        .expect("ran plan correctly");
-    let expected = vec![
-        "+---+---+",
-        "| X | c |",
-        "+---+---+",
-        "| 1 | 1 |",
-        "+---+---+",
-    ];
-    assert_batches_sorted_eq!(expected, &result);
-}
-
-#[tokio::test]
-async fn case_insensitive_in_sql_errors() {
-    let record_batch = RecordBatch::try_from_iter(vec![
-        // The proper way to refer to this column is "Column1" -- it
-        // should not be possible to use `column1` or `COLUMN1` or
-        // other variants
-        (
-            "Column1",
-            Arc::new(StringArray::from(vec!["content1"])) as _,
-        ),
-    ])
-    .unwrap();
-
-    let ctx = SessionContext::new();
-    ctx.register_batch("test", record_batch).unwrap();
-
-    // None of these tests shoud pass
-    let actual = ctx
-        .sql("SELECT COLumn1 from test")
-        .await
-        .unwrap_err()
-        .to_string();
-    assert_contains!(actual, r#"No field named column1"#);
-
-    let actual = ctx
-        .sql("SELECT Column1 from test")
-        .await
-        .unwrap_err()
-        .to_string();
-    assert_contains!(actual, r#"No field named column1"#);
-
-    let actual = ctx
-        .sql("SELECT column1 from test")
-        .await
-        .unwrap_err()
-        .to_string();
-    assert_contains!(actual, r#"No field named column1"#);
-
-    let actual = ctx
-        .sql(r#"SELECT "column1" from test"#)
-        .await
-        .unwrap_err()
-        .to_string();
-    assert_contains!(actual, r#"No field named column1"#);
-
-    // This should pass (note the quotes)
-    ctx.sql(r#"SELECT "Column1" from test"#).await.unwrap();
-}
diff --git a/datafusion/core/tests/sql/mod.rs b/datafusion/core/tests/sql/mod.rs
index 69512a0544..6729e6215b 100644
--- a/datafusion/core/tests/sql/mod.rs
+++ b/datafusion/core/tests/sql/mod.rs
@@ -102,7 +102,6 @@ pub mod wildcard;
 pub mod window;
 
 pub mod explain;
-pub mod idenfifers;
 pub mod information_schema;
 pub mod parquet_schema;
 pub mod partitioned_csv;
diff --git a/datafusion/core/tests/sqllogictests/test_files/identifiers.slt 
b/datafusion/core/tests/sqllogictests/test_files/identifiers.slt
new file mode 100644
index 0000000000..c4605979d1
--- /dev/null
+++ b/datafusion/core/tests/sqllogictests/test_files/identifiers.slt
@@ -0,0 +1,106 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+
+#   http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+statement ok
+CREATE EXTERNAL TABLE case_insensitive_test (
+  a INT,
+  b INT,
+  c INT
+)
+STORED AS CSV
+WITH HEADER ROW
+LOCATION './tests/data/example.csv'
+
+# normalized column identifiers
+query II
+SELECT A, b FROM case_insensitive_test
+----
+1 2
+
+query II
+SELECT t.A, b FROM case_insensitive_test AS t
+----
+1 2
+
+query II
+SELECT t.A as x, b FROM case_insensitive_test AS t
+----
+1 2
+
+query II
+SELECT t.A AS X, b FROM case_insensitive_test AS t
+----
+1 2
+
+
+query II
+SELECT t.A AS "X", b FROM case_insensitive_test AS t
+----
+1 2
+
+query II
+SELECT t.A AS x, b FROM case_insensitive_test AS t ORDER BY x
+----
+1 2
+
+query II
+SELECT t.A AS x, b FROM case_insensitive_test AS t ORDER BY X
+----
+1 2
+
+query II
+SELECT t.A AS "X", b FROM case_insensitive_test AS t ORDER BY "X"
+----
+1 2
+
+query II
+SELECT a, b FROM case_insensitive_test where A IS NOT null
+----
+1 2
+
+query II
+SELECT a as x, count(*) as c FROM case_insensitive_test GROUP BY X
+----
+1 1
+
+query II
+SELECT a as "X", count(*) as c FROM case_insensitive_test GROUP BY "X"
+----
+1 1
+
+statement ok
+drop table  case_insensitive_test
+
+# case insensitive in sql errors
+
+statement ok
+CREATE TABLE test("Column1" string) AS VALUES ('content1');
+
+statement error DataFusion error: Schema error: No field named column1\. Valid 
fields are test\."Column1"\.
+SELECT COLumn1 from test
+
+statement error DataFusion error: Schema error: No field named column1\. Valid 
fields are test\."Column1"\.
+SELECT Column1 from test
+
+statement error DataFusion error: Schema error: No field named column1\. Valid 
fields are test\."Column1"\.
+SELECT column1 from test
+
+statement error DataFusion error: Schema error: No field named column1\. Valid 
fields are test\."Column1"\.
+SELECT "column1" from test
+
+statement ok
+SELECT "Column1" from test

Reply via email to