Agreed. Log a JIRA.

> On May 24, 2016, at 9:14 PM, Jinfeng Ni <[email protected]> wrote:
> 
> You are right that Oracle is case-sensitive.  Tried with column named
> as "USER".  The quoted identifier "user" would raise "invalid
> identifier" error, "USER" would match the column. This seems to show
> Oracle tries to match quoted identifier against columns in the table,
> not match for the system function.
> 
> Oracle:
> create table mytemp ("USER" int);
> 
> select "user" from mytemp;
> select "user" from mytemp
>       *
> ERROR at line 1:
> ORA-00904: "user": invalid identifier
> 
> select "USER" from mytemp;
> 
>      USER
> ----------
>       100
> 
> For Calcite, I used Calcite master branch and run the query in
> Calcite's sqlline.
> 
> select "user" from (values(100)) as T("USER");
> 
> +------------+
> |
> +-------------
> | sa
> +-----
> 
> I'm going to open a JIRA.
> 
> On Tue, May 24, 2016 at 8:54 PM, Julian Hyde <[email protected]> wrote:
>> Sounds reasonable.
>> 
>> However, can you run the Oracle tests again to make sure. Oracle is 
>> case-sensitive when identifiers are quoted, so it would not consider a 
>> “user” column to be a match for the “USER” function. Try instead with a 
>> column called “USER” and see if you get the same results.
>> 
>> By a similar argument, I deduce that you are trying Calcite-in-Drill (case 
>> insensitive) rather than raw Calcite (case sensitive).
>> 
>> Then yes, open a JIRA.
>> 
>> Julian
>> 
>> 
>>> On May 24, 2016, at 3:50 PM, Jinfeng Ni <[email protected]> wrote:
>>> 
>>> This question is raised in Drill's user list [1]. The code logic is
>>> actually in Calcite.
>>> 
>>> Basically, SQL standard allows couple of reserved identifiers used for
>>> system function call, such as USER, CURRENT_USER, CURRENT_TIME etc.
>>> If someone wants to use those reserved names as column names, he has
>>> to use quoted identifier.
>>> 
>>> However, looks like Calcite always interprets those simple quoted
>>> identifiers as a system function call, in stead of column name.  Such
>>> behavior is different from Postgres/Oracle, which will interpret a
>>> quoted identifier as column name, instead of system function call).
>>> 
>>> I would argue that Postgres/Oracle's behavior makes more sense. If
>>> someone quotes an reserved word, the expectation is he can use those
>>> reserved words just like a regular identifier.
>>> 
>>> If this sounds reasonable, I'll open a JIRA.
>>> 
>>> -------------------------------------------------------------
>>> 
>>> Oracle:
>>> 
>>> create table mytemp("user" int);
>>> insert into mytemp values(100);
>>> 
>>> SQL> select user from mytemp;
>>> 
>>> USER
>>> ------------------------------
>>> user_id
>>> 
>>> SQL> select "user" from mytemp;
>>> 
>>>     user
>>> ----------
>>>      100
>>> 
>>> SQL> select mytemp."user" from mytemp;
>>> 
>>>     user
>>> ----------
>>>      100
>>> 
>>> 
>>> Postgres:
>>> select user from (values(100)) as T("user");
>>> current_user
>>> --------------
>>> user_id
>>> (1 row)
>>> 
>>> mydb=# select "user" from (values(100)) as T("user");
>>> user
>>> ------
>>> 100
>>> (1 row)
>>> 
>>> mydb=# select T."user" from (values(100)) as T("user");
>>> user
>>> ------
>>> 100
>>> (1 row)
>>> 
>>> 
>>> Calcite:
>>> select user from (values(100)) as T("user");
>>> -----
>>> user_id
>>> 
>>> select "user" from (values(100)) as T("user");
>>> -----
>>> user_id
>>> 
>>> select T."user" from (values(100)) as T("user");
>>> +------------+
>>> |    user    |
>>> +------------+
>>> | 100        |
>>> +------------+
>>> 
>>> [1] 
>>> http://mail-archives.apache.org/mod_mbox/drill-user/201605.mbox/%3CCAKOFcwrR4m6_EZvKU0ijh5CeSBa-YvZxomBFH6dPmthj7g%2BmWg%40mail.gmail.com%3E
>> 

Reply via email to