On reflection, I still think that DEFAULT should be a reserved keyword. But I 
don’t think that wouldn’t prevent us from supporting it as a prefix to a table 
name in the core parser.

Are the deliberations of Hive or Trino (Presto/PrestoDB) public? I’d like to 
know their rationale.

Julian
 

> On Apr 12, 2022, at 11:40 AM, Julian Hyde <jhyde.apa...@gmail.com> wrote:
> 
> DEFAULT is from the SQL standard. You can use it when invoking UDFs with 
> named parameters, e.g.
> 
>  SELECT myFun(p1 => 1, p2 => DEFAULT, p3 => 3)
>  FROM t
> 
> and in an INSERT statement:
> 
>  INSERT INTO t (x, y, z) VALUES (1, DEFAULT, 2)
> 
> as long as parameter p2 and column y have default values.
> 
> So yes, DEFAULT should be a reserved keyword. And Hive screwed up by not 
> reading the standard.
> 
> If there is a database or schema called DEFAULT then you can quote it, e.g.
> 
>  SELECT *
>  FROM “DEFAULT”.t
> 
> We could consider making DEFAULT non-reserved in the Babel parser.
> 
> Julian
> 
> 
> 
> 
>> On Apr 12, 2022, at 9:06 AM, Gavin Ray <ray.gavi...@gmail.com> wrote:
>> 
>> The hacky way would be to add a grammar clause like this I think:
>> 
>> | "DEFAULT"
>> 
>> To the "TableRef2" node in the parser grammar:
>> https://github.com/apache/calcite/blob/82dd78a14f6aef2eeec2f9c94978d04b4acc5359/core/src/main/codegen/templates/Parser.jj#L2087-L2276
>> 
>> Not sure all the implications this would have elsewhere though.
>> 
>> Also for personal opinion -- the notion of a "DEFAULT" database I'm not
>> sure is a universal thing.
>> I've never worked with analytical DB's, only Postgres/MySQL -- and in these
>> DB's the default database is implicit in your queries.
>> 
>> IE if I connect to a database called "mydb", all queries are automatically
>> prefixed implicitly with "mydb."
>> 
>> MySQL I don't think has a default database. A brand-new MySQL DB has 0
>> databases.
>> There is one called "mysql" but that's a system DB, like "pg_catalog" or
>> "information_schema".
>> 
>> Confusingly this is different in Postgres, where the "postgres" DB is one
>> that exists by default
>> and IS intended to be a user-facing DB.
>> 
>> 
>> On Mon, Apr 11, 2022 at 11:36 PM Yanjing Wang <zhuangzixiao...@gmail.com>
>> wrote:
>> 
>>> Hi community,
>>> 
>>> In hive, DEFAULT is a default database, so one can write sql
>>> SELECT * FROM DEFAULT.t
>>> 
>>> In trino, one can write
>>> SELECT * FROM HIVE.DEFAULT.t
>>> 
>>> But now Calcite treat DEFAULT as a keyword which will be resolved to
>>> DEFAULT() function.
>>> 
>>> What should I do to make the parser to support the DEFAULT in the table
>>> identifier?
>>> 
>>> I tried to add the DEFAULT to non-keywords but it would cause DEFAULT()
>>> function fails.
>>> 
>>> Now I must tell the user wrap the DEFAULT using quotes like this
>>> SELECT * FROM HIVE."DEFAULT".t
>>> 
>>> Thanks in advance.
>>> 
> 

Reply via email to