Skip to content

Commit

Permalink
Consolidate and expand ident normalization tests
Browse files Browse the repository at this point in the history
  • Loading branch information
alamb committed Jan 30, 2025
1 parent 0edc3d9 commit 36ecac2
Show file tree
Hide file tree
Showing 3 changed files with 134 additions and 62 deletions.
44 changes: 0 additions & 44 deletions datafusion/sqllogictest/test_files/ddl.slt
Original file line number Diff line number Diff line change
Expand Up @@ -633,50 +633,6 @@ select * from table_without_values;
----
10 20

# Enable information_schema, so we can execute show create table
statement ok
set datafusion.catalog.information_schema = true;

statement ok
CREATE OR REPLACE TABLE TABLE_WITH_NORMALIZATION(FIELD1 BIGINT, FIELD2 BIGINT);

# Check table name is in lowercase
query TTTT
show create table table_with_normalization
----
datafusion public table_with_normalization NULL

# Check column name is in uppercase
query TTT
describe table_with_normalization
----
field1 Int64 YES
field2 Int64 YES

# Disable ident normalization
statement ok
set datafusion.sql_parser.enable_ident_normalization = false;

statement ok
CREATE TABLE TABLE_WITHOUT_NORMALIZATION(FIELD1 BIGINT, FIELD2 BIGINT) AS VALUES (1,2);

# Check table name is in uppercase
query TTTT
show create table TABLE_WITHOUT_NORMALIZATION
----
datafusion public TABLE_WITHOUT_NORMALIZATION NULL

# Check column name is in uppercase
query TTT
describe TABLE_WITHOUT_NORMALIZATION
----
FIELD1 Int64 YES
FIELD2 Int64 YES

statement ok
set datafusion.sql_parser.enable_ident_normalization = true;


statement ok
create table foo(x int);

Expand Down
134 changes: 134 additions & 0 deletions datafusion/sqllogictest/test_files/ident_normalization.slt
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
# 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.

# Enable information_schema, so we can execute show create table
statement ok
set datafusion.catalog.information_schema = true;

# Check ident normalization is enabled by default

statement ok
CREATE OR REPLACE TABLE TABLE_WITH_NORMALIZATION(FIELD1 BIGINT, FIELD2 BIGINT);

# Check table name is in lowercase
query TTTT
show create table table_with_normalization
----
datafusion public table_with_normalization NULL

# Check column name is in uppercase
query TTT
describe table_with_normalization
----
field1 Int64 YES
field2 Int64 YES

# Disable ident normalization
statement ok
set datafusion.sql_parser.enable_ident_normalization = false;

statement ok
CREATE TABLE TABLE_WITHOUT_NORMALIZATION(FIELD1 BIGINT, FIELD2 BIGINT) AS VALUES (1,2);

# Check table name is in uppercase
query TTTT
show create table TABLE_WITHOUT_NORMALIZATION
----
datafusion public TABLE_WITHOUT_NORMALIZATION NULL

# Check column name is in uppercase
query TTT
describe TABLE_WITHOUT_NORMALIZATION
----
FIELD1 Int64 YES
FIELD2 Int64 YES

statement ok
DROP TABLE TABLE_WITHOUT_NORMALIZATION

############
## Column Name Normalization
############

# Table x (lowercase) with a column named "A" (uppercase)
statement ok
create table x as select 1 "A"

query TTT
describe x
----
A Int64 NO

# Expect error as 'a' is not a column -- "A" is and the identifiers
# are not normalized
query error DataFusion error: Schema error: No field named a\. Valid fields are x\."A"\.
select a from x;

# should work (note the uppercase 'A')
query I
select A from x;
----
1

statement ok
drop table x;

############
## Table Name Normalization
############

# Table Y (uppercase) with a column named a (lower case)
statement ok
create table Y as select 1 a;

query TTT
describe Y
----
a Int64 NO

# Expect error as y is not a a table -- "Y" is
query error DataFusion error: Error during planning: table 'datafusion\.public\.y' not found
select * from y;

# should work (note the uppercase 'Y')
query I
select * from Y;
----
1

statement ok
drop table Y;

############
## Function Name Normalization
############

## Check function names are still normalized even though column names are not
query I
SELECT length('str');
----
3

query I
SELECT LENGTH('str');
----
3

query T
SELECT CONCAT('Hello', 'World')
----
HelloWorld
18 changes: 0 additions & 18 deletions datafusion/sqllogictest/test_files/scalar.slt
Original file line number Diff line number Diff line change
Expand Up @@ -1802,24 +1802,6 @@ SELECT acos();
statement error
SELECT isnan();

# turn off enable_ident_normalization
statement ok
set datafusion.sql_parser.enable_ident_normalization = false;

query I
SELECT LENGTH('str');
----
3

query T
SELECT CONCAT('Hello', 'World')
----
HelloWorld

# turn on enable_ident_normalization
statement ok
set datafusion.sql_parser.enable_ident_normalization = true;

query I
SELECT LENGTH('str');
----
Expand Down

0 comments on commit 36ecac2

Please sign in to comment.