Thank's Julian This isn't drill UDF, this is hive UDF. Dril can use hive UDF while query hive tables. That's why most likely I can't use IIF as UDF name. Can I make changes in calcite parser in next manner: by default IF - reserved word but in case when IF appears after TABLE or VIEW - recognize IF as function name? Also I found that hive uses SQL2011 and IF is a non-reserved word there.
Kind regards Vitalii 2016-06-17 16:35 GMT+00:00 Julian Hyde <jh...@apache.org>: > Ah, you're right. It's reserved in 2011. However, I'm looking at a > draft of 2014 and it's gone. > > Calcite attempts to follow the latest version of the standard, but we > don't do so slavishly. People want something that complies with all > versions of the standard (at least in the features that they care > about). > > Given that 4 versions of the SQL standard treat "IF" as a reserved > word, I think it would be foolish to create a function called "IF". > Most databases that have such a function call it "IIF". Could you use > that instead? > > On Fri, Jun 17, 2016 at 5:25 AM, Vitalii Diravka > <vitalii.dira...@gmail.com> wrote: > > Adding "IF" to a non-reserved keywords list can resolve that issue. > > > > But I saw that in Parser.jj SQL:2003 is used. Also I found "IF" keyword > as > > a reserved word in ISO/IEC 9075-4 (Fourth edition 2011-12-15). > > > > So what standard actually calcite uses? Can we add anyway "IF" to the > > non-reserved keywords list? > > > > > > Kind regards > > Vitalii > > > > 2016-06-15 18:07 GMT+00:00 Julian Hyde <jh...@apache.org>: > > > >> There are two kinds of keywords: reserved and non-reserved. A > non-reserved > >> keyword can be used as a keyword in the right context, and as an > >> identifier elsewhere. > >> > >> IF was reserved in SQL:92, SQL:99, SQL:2003 but is no longer reserved in > >> SQL:2011 (see table in SqlParserTest). So you could add it to Calcite > as a > >> non-reserved keyword. > >> > >> > >> > On Jun 15, 2016, at 8:11 AM, Vitalii Diravka < > vitalii.dira...@gmail.com> > >> wrote: > >> > > >> > Hi all! > >> > > >> > I need to add a new keyword "IF" for sql parser. > >> > How can I use one keyword for two purposes: as a part of "IF EXISTS" > >> > statement and as a function name? > >> > > >> > Actually I added "IF" as a new keyword in FMPP configuration file > which > >> > allows to extend Calcite's SQL parser. > >> > After this "IF" isn't considered as an IDENTIFIER and function name. > >> > > >> > > >> > > >> > Kind regards > >> > Vitalii > >> > >> >