Thanks Gavin and Julian, If The DEFAULT can't be removed from core parser, I think the quote is a must. Sorry, I don't know why the hive choose DEFAULT as its default current database.
Julian Hyde <[email protected]> 于2022年4月13日周三 02:45写道: > 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 <[email protected]> > 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 <[email protected]> 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 < > [email protected]> > >> 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. > >>> > > > >
