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