Skip to content

SQL column identifiers should be converted to lowercase when unquoted #1746

@mkmik

Description

@mkmik

Is your feature request related to a problem or challenge? Please describe what you are trying to do.

DataFusion strives to implement a subset of the PostgreSQL SQL dialect where possible

In PostgreSQL all column name identifiers are turned into lowercase, unless they are quoted. Example:

tmp1=> create table blah (Foo int, "Foo" int, "Bar" int);
CREATE TABLE
tmp1=> \d blah
                Table "public.blah"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 foo    | integer |           |          |
 Foo    | integer |           |          |
 Bar    | integer |           |          |

tmp1=> insert into blah values (1,2,3);
INSERT 0 1
tmp1=> select foo, Foo, "Foo", "Bar" from blah;
 foo | foo | Foo | Bar
-----+-----+-----+-----
   1 |   1 |   2 |   3
(1 row)

tmp1=> select Bar from blah;
ERROR:  column "bar" does not exist
LINE 1: select Bar from blah;
               ^
HINT:  Perhaps you meant to reference the column "blah.Bar".

PostgreSQL converts to lowercase all column identifiers. The example above shows how Foo used in the DDL statement creates a column actually named foo and it shows how it can be accessed in a query with Foo (unquoted). An actual "Foo" column happily coexist with foo in the table, but must be referenced with a quoted "Foo"

In Datafusion currently Bar means the same as "Bar" (I'm not providing a screen dump of the current datafusion behaviour out of laziness, I may add it later if turns out to be useful for the discussion).

Describe the solution you'd like

select FoO from my_table;

should be equivalent to

select foo from my_table;

If users want to access a column that is not in lower case, they should explicitly quote the column:

select "FoO" from my_table;

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions