Hive made the mistake of deviating from standard SQL, and are now clawing their way back. (They used to celebrate their differences, calling their language “HiveQL”, and now they call it “Hive SQL”.) So, no, I don’t think it’s a good idea to put something in Calcite SQL just because it’s in Hive.
If you really want to support a function called “IF”, I think you can create an extension to Calcite’s SQL parser and override ExtendedBuiltinFunctionCall(). Julian > On Jun 27, 2016, at 11:05 AM, Vitalii Diravka <vitalii.dira...@gmail.com> > wrote: > > Hmm...in code I found "IF" in non-reserved list. But anyway "IF" is > function name in hive. That's why it works. > Isn't it the good option to add "IF" into function names list in calcite? > And what about suggestion to make changes in parser? > > Kind regards > Vitalii > > 2016-06-27 16:06 GMT+00:00 Julian Hyde <jhyde.apa...@gmail.com>: > >> IF is reserved in Hive: >> https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL >> >> Julian >> >>> On Jun 27, 2016, at 06:30, Vitalii Diravka <vitalii.dira...@gmail.com> >> wrote: >>> >>> 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 >>>> >>